@meshmakers/octo-ui 3.3.660 → 3.3.680

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 +1 @@
1
- {"version":3,"file":"meshmakers-octo-ui.mjs","sources":["../../../../projects/meshmakers/octo-ui/src/lib/attribute-sort-selector-dialog/attribute-sort-selector-dialog.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/attribute-sort-selector-dialog/attribute-sort-selector-dialog.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/ck-type-selector-dialog/ck-type-selector-dialog.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/ck-type-selector-dialog/ck-type-selector-dialog.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/property-grid/models/property-grid.models.ts","../../../../projects/meshmakers/octo-ui/src/lib/property-grid/services/property-converter.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/property-grid/components/property-value-display.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/property-grid/components/property-grid.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/property-grid/index.ts","../../../../projects/meshmakers/octo-ui/src/lib/ck-type-selector-input/ck-type-selector-input.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/attribute-selector-dialog/attribute-selector-dialog.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/attribute-selector-dialog/attribute-selector-dialog.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-entity-variable-dialog/runtime-entity-variable-dialog.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-entity-variable-dialog/runtime-entity-variable-dialog.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/data-sources/octo-graph-ql-data-source.ts","../../../../projects/meshmakers/octo-ui/src/lib/data-sources/octo-graph-ql-hierarchy-data-source.ts","../../../../projects/meshmakers/octo-ui/src/lib/entity-id-info/entity-id-info.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/field-filter-editor/field-filter-editor.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/octo-loader/octo-loader.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/getBinaryInfo.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/getRuntimeEntityAssociationsById.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/data-sources/entity-associations-data-source.directive.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/runtime-browser.model.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/components/entity-detail-view.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/getRuntimeEntityById.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/data-sources/entity-detail-data-source.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/models/rt-entity-id.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/entity-detail.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/icons/custom-svg-icons.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/getRuntimeEntitiesByType.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/data-sources/ck-type-entities-data-source.directive.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/services/runtime-browser-state.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/services/type-helper.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/createEntities.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/services/attribute-coordinator.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/getCkAttributesDetailed.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/getCkRecordDetailed.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/services/attribute-recognition.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/services/attribute-mapper-utils.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/services/attribute-mapper.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/services/attribute-data.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/components/attribute-field/attribute-field.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/components/attributes-group/attributes-group.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/components/shared-editor/shared-editor.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/components/create-editor/create-editor-component.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/updateRuntimeEntities.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/components/update-editor/update-editor-component.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/components/runtime-browser-details.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/deleteEntities.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/getCkModels.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/getTreeNodes.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/getTrees.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/updateTreeNodes.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/data-sources/runtime-browser-data-source.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/runtime-browser.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/runtime-browser-outlet.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/runtime-browser.tokens.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/runtime-browser-page.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/runtime-browser.routes.ts","../../../../projects/meshmakers/octo-ui/src/lib/tenant-switcher/tenant-switcher.component.ts","../../../../projects/meshmakers/octo-ui/src/public-api.ts","../../../../projects/meshmakers/octo-ui/src/meshmakers-octo-ui.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, OnInit, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n AttributeItem,\n AttributeSelectorService,\n AttributeValueTypeDto,\n} from '@meshmakers/octo-services';\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { WindowModule, WindowRef } from '@progress/kendo-angular-dialog';\nimport { DropDownListModule } from '@progress/kendo-angular-dropdowns';\nimport {\n CellClickEvent,\n GridDataResult,\n GridModule,\n} from '@progress/kendo-angular-grid';\nimport { IconsModule } from '@progress/kendo-angular-icons';\nimport { InputsModule } from '@progress/kendo-angular-inputs';\nimport {\n searchIcon,\n sortAscSmallIcon,\n sortDescSmallIcon,\n} from '@progress/kendo-svg-icons';\nimport { Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\n\nexport interface AttributeSortItem {\n attributePath: string;\n attributeValueType: string;\n sortOrder: 'standard' | 'ascending' | 'descending';\n}\n\nexport interface AttributeSortSelectorDialogData {\n ckTypeId: string;\n selectedAttributes?: AttributeSortItem[];\n dialogTitle?: string;\n /** When set, controls whether navigation properties are included in the attribute list */\n includeNavigationProperties?: boolean;\n /** When true, hides the navigation property controls (if they were to be added) */\n hideNavigationControls?: boolean;\n /** When set, restricts the available attributes to only these attribute paths (filtered client-side after fetching) */\n attributePaths?: string[];\n}\n\nexport interface AttributeSortSelectorDialogResult {\n selectedAttributes: AttributeSortItem[];\n}\n\nexport interface SortOption {\n text: string;\n value: 'standard' | 'ascending' | 'descending';\n}\n\ninterface ValueTypeFilterOption {\n text: string;\n value: AttributeValueTypeDto | null;\n}\n\n@Component({\n selector: 'mm-attribute-sort-selector-dialog',\n standalone: true,\n host: { 'data-component': 'attribute-sort-selector' },\n imports: [\n CommonModule,\n FormsModule,\n GridModule,\n ButtonsModule,\n InputsModule,\n DropDownListModule,\n IconsModule,\n WindowModule,\n ],\n template: `\n <div class=\"attribute-sort-selector-container\">\n <!-- Filter Section -->\n <div class=\"filter-container\">\n <kendo-textbox\n [(ngModel)]=\"searchText\"\n (ngModelChange)=\"onSearchChange($event)\"\n placeholder=\"Search path & description...\"\n class=\"search-input\"\n >\n <ng-template kendoTextBoxSuffixTemplate>\n <button\n kendoButton\n [svgIcon]=\"searchIcon\"\n fillMode=\"clear\"\n ></button>\n </ng-template>\n </kendo-textbox>\n <kendo-dropdownlist\n [data]=\"valueTypeOptions\"\n [(ngModel)]=\"selectedValueTypeFilter\"\n (valueChange)=\"onValueTypeFilterChange($event)\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n class=\"type-filter-dropdown\"\n >\n </kendo-dropdownlist>\n </div>\n\n <!-- Main Content Area - All side by side -->\n <div class=\"lists-container\">\n <!-- Available Attributes -->\n <div class=\"list-section\">\n <h4>Available Attributes</h4>\n <kendo-grid\n [data]=\"availableGridData\"\n [scrollable]=\"'scrollable'\"\n [selectable]=\"{ mode: 'single', enabled: true }\"\n [kendoGridSelectBy]=\"'attributePath'\"\n [(selectedKeys)]=\"selectedAvailableKeys\"\n (cellClick)=\"onAvailableCellClick($event)\"\n [resizable]=\"true\"\n class=\"attribute-grid\"\n >\n <kendo-grid-column\n field=\"attributePath\"\n title=\"Attribute Path\"\n [width]=\"250\"\n ></kendo-grid-column>\n <kendo-grid-column\n field=\"attributeValueType\"\n title=\"Type\"\n [width]=\"100\"\n ></kendo-grid-column>\n <kendo-grid-column\n field=\"description\"\n title=\"Description\"\n ></kendo-grid-column>\n </kendo-grid>\n </div>\n\n <!-- Sort Options in center -->\n <div class=\"sort-options-section\">\n <h4>Sort Order</h4>\n <div class=\"sort-buttons\">\n <button\n kendoButton\n [fillMode]=\"currentSortOrder === 'standard' ? 'solid' : 'outline'\"\n [themeColor]=\"\n currentSortOrder === 'standard' ? 'primary' : 'base'\n \"\n (click)=\"setSortOrder('standard')\"\n class=\"sort-button\"\n title=\"Standard (no sort)\"\n >\n —\n </button>\n <button\n kendoButton\n [svgIcon]=\"sortAscIcon\"\n [fillMode]=\"\n currentSortOrder === 'ascending' ? 'solid' : 'outline'\n \"\n [themeColor]=\"\n currentSortOrder === 'ascending' ? 'primary' : 'base'\n \"\n (click)=\"setSortOrder('ascending')\"\n class=\"sort-button\"\n title=\"Ascending\"\n ></button>\n <button\n kendoButton\n [svgIcon]=\"sortDescIcon\"\n [fillMode]=\"\n currentSortOrder === 'descending' ? 'solid' : 'outline'\n \"\n [themeColor]=\"\n currentSortOrder === 'descending' ? 'primary' : 'base'\n \"\n (click)=\"setSortOrder('descending')\"\n class=\"sort-button\"\n title=\"Descending\"\n ></button>\n </div>\n\n <button\n kendoButton\n themeColor=\"primary\"\n [disabled]=\"selectedAvailableKeys.length === 0\"\n (click)=\"addAttributeWithSort()\"\n class=\"add-button\"\n >\n Add →\n </button>\n </div>\n\n <!-- Selected Attributes -->\n <div class=\"list-section\">\n <h4>Selected ({{ selectedAttributes.length }})</h4>\n <kendo-grid\n [data]=\"selectedGridData\"\n [scrollable]=\"'scrollable'\"\n [selectable]=\"{ mode: 'single', enabled: true }\"\n [kendoGridSelectBy]=\"'attributePath'\"\n [(selectedKeys)]=\"selectedChosenKeys\"\n (cellClick)=\"onSelectedCellClick($event)\"\n [resizable]=\"true\"\n class=\"attribute-grid\"\n >\n <kendo-grid-column\n field=\"attributePath\"\n title=\"Attribute Path\"\n [width]=\"180\"\n ></kendo-grid-column>\n <kendo-grid-column field=\"sortOrder\" title=\"Sort\" [width]=\"100\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <div class=\"sort-display\">\n <span class=\"sort-indicator\">{{\n getSortIndicator(dataItem.sortOrder)\n }}</span>\n <span>{{ getSortText(dataItem.sortOrder) }}</span>\n </div>\n </ng-template>\n </kendo-grid-column>\n <kendo-grid-column title=\"\" [width]=\"50\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <button\n kendoButton\n size=\"small\"\n fillMode=\"flat\"\n (click)=\"removeAttribute(dataItem)\"\n title=\"Remove\"\n >\n ✕\n </button>\n </ng-template>\n </kendo-grid-column>\n </kendo-grid>\n </div>\n </div>\n\n <!-- Action Bar -->\n <div class=\"action-bar\">\n <button kendoButton (click)=\"onCancel()\">Cancel</button>\n <button kendoButton themeColor=\"primary\" (click)=\"onOk()\">Apply</button>\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n height: 100%;\n }\n\n .attribute-sort-selector-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 16px 20px;\n box-sizing: border-box;\n gap: 16px;\n }\n\n .filter-container {\n display: flex;\n gap: 12px;\n flex-shrink: 0;\n }\n\n .search-input {\n flex: 1;\n }\n\n .type-filter-dropdown {\n width: 160px;\n flex-shrink: 0;\n }\n\n .lists-container {\n display: flex;\n gap: 16px;\n flex: 1;\n min-height: 0;\n }\n\n .list-section {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n }\n\n .list-section h4,\n .sort-options-section h4 {\n margin: 0 0 10px 0;\n font-size: 0.85rem;\n font-weight: 600;\n flex-shrink: 0;\n }\n\n .attribute-grid {\n border-radius: 4px;\n flex: 1;\n min-height: 200px;\n }\n\n .attribute-grid ::ng-deep .k-grid-table tbody tr {\n cursor: pointer;\n }\n\n .sort-options-section {\n width: 120px;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n padding-top: 32px;\n }\n\n .sort-buttons {\n display: flex;\n flex-direction: row;\n gap: 4px;\n }\n\n .sort-button {\n flex: 1;\n min-width: 36px;\n height: 36px;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .add-button {\n width: 100%;\n margin-top: 16px;\n }\n\n .sort-display {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .sort-indicator {\n font-size: 14px;\n font-weight: bold;\n color: var(--kendo-color-primary, #ff6358);\n }\n\n .action-bar {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n flex-shrink: 0;\n padding-top: 8px;\n border-top: 1px solid var(--kendo-color-border, #dee2e6);\n }\n `,\n ],\n})\nexport class AttributeSortSelectorDialogComponent implements OnInit {\n private readonly windowRef = inject(WindowRef);\n private readonly attributeService = inject(AttributeSelectorService);\n private searchSubject = new Subject<string>();\n\n // Dialog data\n public data!: AttributeSortSelectorDialogData;\n public ckTypeId!: string;\n public includeNavigationProperties: boolean | undefined = undefined;\n private attributePathsSet: Set<string> | null = null;\n public searchText = '';\n public currentSortOrder: 'standard' | 'ascending' | 'descending' = 'standard';\n public selectedValueTypeFilter: AttributeValueTypeDto | null = null;\n\n // Grid data\n public availableAttributes: AttributeItem[] = [];\n public selectedAttributes: AttributeSortItem[] = [];\n public availableGridData: GridDataResult = { data: [], total: 0 };\n public selectedGridData: GridDataResult = { data: [], total: 0 };\n\n // Selection tracking\n public selectedAvailableKeys: string[] = [];\n public selectedChosenKeys: string[] = [];\n\n // Double-click tracking\n private lastClickTime = 0;\n private lastClickedItem: string | null = null;\n private readonly doubleClickDelay = 300;\n\n // UI configuration\n public dialogTitle = 'Select Attributes with Sort Order';\n\n public sortOptions: SortOption[] = [\n { text: 'Standard', value: 'standard' },\n { text: 'Ascending', value: 'ascending' },\n { text: 'Descending', value: 'descending' },\n ];\n\n public valueTypeOptions: ValueTypeFilterOption[] = [\n { text: 'All Types', value: null },\n { text: 'String', value: AttributeValueTypeDto.StringDto },\n { text: 'Integer', value: AttributeValueTypeDto.IntegerDto },\n { text: 'Double', value: AttributeValueTypeDto.DoubleDto },\n { text: 'Boolean', value: AttributeValueTypeDto.BooleanDto },\n { text: 'DateTime', value: AttributeValueTypeDto.DateTimeDto },\n { text: 'DateTimeOffset', value: AttributeValueTypeDto.DateTimeOffsetDto },\n { text: 'Enum', value: AttributeValueTypeDto.EnumDto },\n { text: 'TimeSpan', value: AttributeValueTypeDto.TimeSpanDto },\n ];\n\n // Icons\n protected readonly searchIcon = searchIcon;\n protected readonly sortAscIcon = sortAscSmallIcon;\n protected readonly sortDescIcon = sortDescSmallIcon;\n\n ngOnInit(): void {\n // Get dialog data\n if (this.data) {\n this.ckTypeId = this.data.ckTypeId;\n this.dialogTitle =\n this.data.dialogTitle || 'Select Attributes with Sort Order';\n this.includeNavigationProperties = this.data.includeNavigationProperties;\n this.attributePathsSet = this.data.attributePaths ? new Set(this.data.attributePaths) : null;\n\n if (\n this.data.selectedAttributes &&\n this.data.selectedAttributes.length > 0\n ) {\n this.selectedAttributes = [...this.data.selectedAttributes];\n this.updateSelectedGrid();\n }\n }\n\n // Set up search debouncing\n this.searchSubject\n .pipe(debounceTime(300), distinctUntilChanged())\n .subscribe((searchText) => {\n this.loadAvailableAttributes(searchText);\n });\n\n // Load initial data\n this.loadAvailableAttributes();\n }\n\n private loadAvailableAttributes(searchTerm?: string): void {\n this.attributeService.getAvailableAttributes(\n this.ckTypeId, undefined, undefined, undefined,\n this.selectedValueTypeFilter || undefined,\n searchTerm || undefined,\n this.includeNavigationProperties,\n undefined\n ).subscribe(result => {\n // Filter out already selected attributes\n const selectedPaths = new Set(this.selectedAttributes.map(a => a.attributePath));\n\n // Apply client-side attribute path restriction if set\n const filteredItems = this.attributePathsSet\n ? result.items.filter(item => this.attributePathsSet!.has(item.attributePath))\n : result.items;\n\n this.availableAttributes = filteredItems.filter(item => !selectedPaths.has(item.attributePath));\n this.updateAvailableGrid();\n });\n }\n\n public onSearchChange(value: string): void {\n this.searchSubject.next(value);\n }\n\n public onValueTypeFilterChange(_value: AttributeValueTypeDto | null): void {\n this.loadAvailableAttributes(this.searchText || undefined);\n }\n\n public setSortOrder(order: 'standard' | 'ascending' | 'descending'): void {\n this.currentSortOrder = order;\n }\n\n public addAttributeWithSort(): void {\n if (this.selectedAvailableKeys.length === 0) return;\n\n const attributePath = this.selectedAvailableKeys[0];\n const attribute = this.availableAttributes.find(\n (a) => a.attributePath === attributePath,\n );\n\n if (attribute) {\n this.addAttributeToSelected(attribute);\n }\n }\n\n public onAvailableCellClick(event: CellClickEvent): void {\n const dataItem = event.dataItem as AttributeItem;\n if (!dataItem) return;\n\n const currentTime = Date.now();\n const attributePath = dataItem.attributePath;\n\n if (\n this.lastClickedItem === attributePath &&\n currentTime - this.lastClickTime <= this.doubleClickDelay\n ) {\n // Double-click detected - add attribute with current sort\n this.addAttributeToSelected(dataItem);\n this.lastClickTime = 0;\n this.lastClickedItem = null;\n } else {\n this.lastClickTime = currentTime;\n this.lastClickedItem = attributePath;\n }\n }\n\n public onSelectedCellClick(event: CellClickEvent): void {\n const dataItem = event.dataItem as AttributeSortItem;\n if (!dataItem) return;\n\n const currentTime = Date.now();\n const attributePath = dataItem.attributePath;\n\n if (\n this.lastClickedItem === attributePath &&\n currentTime - this.lastClickTime <= this.doubleClickDelay\n ) {\n // Double-click detected - remove attribute\n this.removeAttribute(dataItem);\n this.lastClickTime = 0;\n this.lastClickedItem = null;\n } else {\n this.lastClickTime = currentTime;\n this.lastClickedItem = attributePath;\n }\n }\n\n private addAttributeToSelected(attribute: AttributeItem): void {\n const sortItem: AttributeSortItem = {\n attributePath: attribute.attributePath,\n attributeValueType: attribute.attributeValueType,\n sortOrder: this.currentSortOrder,\n };\n\n this.selectedAttributes.push(sortItem);\n\n // Remove from available\n this.availableAttributes = this.availableAttributes.filter(\n (item) => item.attributePath !== attribute.attributePath,\n );\n\n // Clear selections\n this.selectedAvailableKeys = [];\n\n this.updateGrids();\n }\n\n public removeAttribute(attribute: AttributeSortItem): void {\n // Remove from selected\n this.selectedAttributes = this.selectedAttributes.filter(\n (item) => item.attributePath !== attribute.attributePath,\n );\n\n // Add back to available (convert back to AttributeItem)\n const availableItem: AttributeItem = {\n attributePath: attribute.attributePath,\n attributeValueType: attribute.attributeValueType,\n };\n\n this.availableAttributes.push(availableItem);\n this.availableAttributes.sort((a, b) =>\n a.attributePath.localeCompare(b.attributePath),\n );\n\n // Clear selections\n this.selectedChosenKeys = this.selectedChosenKeys.filter(\n (key) => key !== attribute.attributePath,\n );\n\n this.updateGrids();\n }\n\n public getSortIndicator(sortOrder: string): string {\n switch (sortOrder) {\n case 'ascending':\n return '↑';\n case 'descending':\n return '↓';\n default:\n return '';\n }\n }\n\n public getSortText(sortOrder: string): string {\n const option = this.sortOptions.find((opt) => opt.value === sortOrder);\n return option?.text || sortOrder;\n }\n\n private updateGrids(): void {\n this.updateAvailableGrid();\n this.updateSelectedGrid();\n }\n\n private updateAvailableGrid(): void {\n this.availableGridData = {\n data: this.availableAttributes,\n total: this.availableAttributes.length,\n };\n }\n\n private updateSelectedGrid(): void {\n this.selectedGridData = {\n data: this.selectedAttributes,\n total: this.selectedAttributes.length,\n };\n }\n\n public onOk(): void {\n const result: AttributeSortSelectorDialogResult = {\n selectedAttributes: this.selectedAttributes,\n };\n this.windowRef.close(result);\n }\n\n public onCancel(): void {\n this.windowRef.close();\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { WindowService, WindowRef, WindowCloseResult } from '@progress/kendo-angular-dialog';\nimport { firstValueFrom } from 'rxjs';\nimport { WindowStateService } from '@meshmakers/shared-ui';\nimport {\n AttributeSortSelectorDialogComponent,\n AttributeSortSelectorDialogData,\n AttributeSortSelectorDialogResult,\n AttributeSortItem\n} from './attribute-sort-selector-dialog.component';\n\nexport interface AttributeSortSelectorResult {\n confirmed: boolean;\n selectedAttributes: AttributeSortItem[];\n}\n\n@Injectable()\nexport class AttributeSortSelectorDialogService {\n private readonly windowService = inject(WindowService);\n private readonly windowStateService = inject(WindowStateService);\n\n /**\n * Opens the attribute sort selector dialog\n * @param ckTypeId The CkType ID to fetch attributes for\n * @param selectedAttributes Optional array of pre-selected attributes with sort orders\n * @param dialogTitle Optional custom dialog title\n * @param includeNavigationProperties Optional flag to control navigation property inclusion\n * @param hideNavigationControls Optional flag to hide the navigation property controls\n * @returns Promise that resolves with the result containing selected attributes with sort orders and confirmation status\n */\n public async openAttributeSortSelector(\n ckTypeId: string,\n selectedAttributes?: AttributeSortItem[],\n dialogTitle?: string,\n includeNavigationProperties?: boolean,\n hideNavigationControls?: boolean,\n attributePaths?: string[]\n ): Promise<AttributeSortSelectorResult> {\n const data: AttributeSortSelectorDialogData = {\n ckTypeId,\n selectedAttributes,\n dialogTitle,\n includeNavigationProperties,\n hideNavigationControls,\n attributePaths\n };\n\n const size = this.windowStateService.resolveWindowSize('attribute-sort-selector', { width: 1200, height: 750 });\n\n const windowRef: WindowRef = this.windowService.open({\n content: AttributeSortSelectorDialogComponent,\n width: size.width,\n height: size.height,\n minWidth: 1050,\n minHeight: 700,\n resizable: true,\n title: dialogTitle || 'Select Attributes with Sort Order'\n });\n\n this.windowStateService.applyModalBehavior('attribute-sort-selector', windowRef);\n\n // Pass data to the component\n const contentRef = windowRef.content as { instance?: AttributeSortSelectorDialogComponent } | undefined;\n if (contentRef?.instance) {\n contentRef.instance.data = data;\n }\n\n try {\n const result = await firstValueFrom(windowRef.result);\n\n if (result instanceof WindowCloseResult) {\n return {\n confirmed: false,\n selectedAttributes: []\n };\n }\n\n if (result && typeof result === 'object' && 'selectedAttributes' in result) {\n const dialogResult = result as AttributeSortSelectorDialogResult;\n return {\n confirmed: true,\n selectedAttributes: dialogResult.selectedAttributes || []\n };\n } else {\n return {\n confirmed: false,\n selectedAttributes: []\n };\n }\n } catch {\n return {\n confirmed: false,\n selectedAttributes: []\n };\n }\n }\n}\n","import { Component, OnInit, OnDestroy, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { WindowRef, WindowModule } from '@progress/kendo-angular-dialog';\nimport { GridModule, GridDataResult, SelectionEvent, PageChangeEvent, RowArgs, CellClickEvent } from '@progress/kendo-angular-grid';\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { InputsModule } from '@progress/kendo-angular-inputs';\nimport { DropDownsModule } from '@progress/kendo-angular-dropdowns';\nimport { IconsModule } from '@progress/kendo-angular-icons';\nimport { LoaderModule } from '@progress/kendo-angular-indicators';\nimport { searchIcon, filterClearIcon } from '@progress/kendo-svg-icons';\nimport {\n CkTypeSelectorService,\n CkTypeSelectorItem,\n CkTypeSelectorResult\n} from '@meshmakers/octo-services';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, map } from 'rxjs/operators';\n\nexport interface CkTypeSelectorDialogData {\n selectedCkTypeId?: string;\n ckModelIds?: string[];\n dialogTitle?: string;\n allowAbstract?: boolean;\n derivedFromRtCkTypeId?: string;\n}\n\nexport interface CkTypeSelectorDialogResult {\n selectedCkType: CkTypeSelectorItem;\n}\n\n@Component({\n selector: 'mm-ck-type-selector-dialog',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n GridModule,\n ButtonsModule,\n InputsModule,\n DropDownsModule,\n IconsModule,\n LoaderModule,\n WindowModule\n ],\n template: `\n <div class=\"ck-type-selector-container\">\n <div class=\"filter-container\">\n <div class=\"filter-row\">\n <div class=\"filter-item\" *ngIf=\"!derivedFromRtCkTypeId\">\n <label>Model Filter</label>\n <kendo-combobox\n [data]=\"availableModels\"\n [(ngModel)]=\"selectedModel\"\n (valueChange)=\"onModelFilterChange($event)\"\n [allowCustom]=\"false\"\n [clearButton]=\"true\"\n placeholder=\"All Models\"\n class=\"filter-input\">\n </kendo-combobox>\n </div>\n <div class=\"filter-item flex-grow\">\n <label>Type Search</label>\n <kendo-textbox\n [(ngModel)]=\"searchText\"\n (ngModelChange)=\"onSearchChange($event)\"\n placeholder=\"Search types...\"\n class=\"filter-input\">\n <ng-template kendoTextBoxSuffixTemplate>\n <button kendoButton [svgIcon]=\"searchIcon\" fillMode=\"clear\" size=\"small\"></button>\n </ng-template>\n </kendo-textbox>\n </div>\n <div class=\"filter-item filter-actions\">\n <label>&nbsp;</label>\n <button kendoButton [svgIcon]=\"filterClearIcon\" (click)=\"clearFilters()\" title=\"Clear filters\"></button>\n </div>\n </div>\n </div>\n\n <div class=\"grid-container\">\n <kendo-grid\n [data]=\"gridData\"\n [loading]=\"isLoading\"\n [selectable]=\"{ mode: 'single' }\"\n [pageable]=\"{ pageSizes: [25, 50, 100] }\"\n [pageSize]=\"pageSize\"\n [skip]=\"skip\"\n (pageChange)=\"onPageChange($event)\"\n (selectionChange)=\"onSelectionChange($event)\"\n (cellClick)=\"onCellClick($event)\"\n [kendoGridSelectBy]=\"selectItemBy\"\n [(selectedKeys)]=\"selectedKeys\"\n class=\"type-grid\">\n <kendo-grid-column field=\"rtCkTypeId\" title=\"Type\" [width]=\"300\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <span [class.abstract-type]=\"dataItem.isAbstract\" [class.final-type]=\"dataItem.isFinal\">\n {{ dataItem.rtCkTypeId }}\n </span>\n <span *ngIf=\"dataItem.isAbstract\" class=\"type-badge abstract\">abstract</span>\n <span *ngIf=\"dataItem.isFinal\" class=\"type-badge final\">final</span>\n </ng-template>\n </kendo-grid-column>\n <kendo-grid-column field=\"baseTypeRtCkTypeId\" title=\"Base Type\" [width]=\"200\">\n <ng-template kendoGridCellTemplate let-dataItem>\n {{ dataItem.baseTypeRtCkTypeId || '-' }}\n </ng-template>\n </kendo-grid-column>\n <kendo-grid-column field=\"description\" title=\"Description\">\n <ng-template kendoGridCellTemplate let-dataItem>\n {{ dataItem.description || '-' }}\n </ng-template>\n </kendo-grid-column>\n </kendo-grid>\n </div>\n\n <div class=\"selection-info\" *ngIf=\"selectedType\">\n <strong>Selected:</strong> {{ selectedType.rtCkTypeId }}\n </div>\n\n <div class=\"dialog-actions\">\n <button kendoButton (click)=\"onCancel()\">Cancel</button>\n <button kendoButton themeColor=\"primary\" [disabled]=\"!selectedType || (selectedType.isAbstract && !allowAbstract)\" (click)=\"onConfirm()\">OK</button>\n </div>\n </div>\n `,\n styles: [`\n :host {\n display: flex;\n flex-direction: column;\n height: 100%;\n }\n\n .ck-type-selector-container {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n padding: 20px;\n box-sizing: border-box;\n gap: 12px;\n }\n\n .filter-container {\n margin-bottom: 16px;\n flex-shrink: 0;\n }\n\n .filter-row {\n display: flex;\n gap: 16px;\n align-items: flex-end;\n }\n\n .filter-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .filter-item label {\n font-size: 12px;\n font-weight: 500;\n }\n\n .filter-item.flex-grow {\n flex: 1;\n }\n\n .filter-item.filter-actions {\n flex-shrink: 0;\n }\n\n .filter-input {\n min-width: 180px;\n }\n\n .grid-container {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n\n .grid-container kendo-grid,\n .grid-container .type-grid {\n flex: 1;\n min-height: 200px;\n }\n\n .type-grid {\n border-radius: 4px;\n }\n\n .type-grid ::ng-deep .k-grid-table tbody tr {\n cursor: pointer;\n }\n\n .abstract-type {\n font-style: italic;\n opacity: 0.7;\n }\n\n .final-type {\n font-weight: 600;\n }\n\n .type-badge {\n display: inline-block;\n font-size: 10px;\n padding: 1px 6px;\n border-radius: 10px;\n margin-left: 8px;\n text-transform: uppercase;\n }\n\n .type-badge.abstract {\n background-color: var(--kendo-color-warning, #ffc107);\n color: var(--kendo-color-on-warning, #000);\n opacity: 0.8;\n }\n\n .type-badge.final {\n background-color: var(--kendo-color-success, #28a745);\n color: var(--kendo-color-on-success, #fff);\n opacity: 0.8;\n }\n\n .selection-info {\n margin-top: 12px;\n padding: 8px 12px;\n background: var(--kendo-color-success-subtle, #d4edda);\n border: 1px solid var(--kendo-color-success, #28a745);\n border-radius: 4px;\n font-size: 14px;\n flex-shrink: 0;\n }\n\n .dialog-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding: 8px 20px 0 20px;\n flex-shrink: 0;\n }\n `]\n})\nexport class CkTypeSelectorDialogComponent implements OnInit, OnDestroy {\n private readonly windowRef = inject(WindowRef);\n private readonly ckTypeSelectorService = inject(CkTypeSelectorService);\n private searchSubject = new Subject<string>();\n private subscriptions = new Subscription();\n\n protected readonly searchIcon = searchIcon;\n protected readonly filterClearIcon = filterClearIcon;\n\n public dialogTitle = 'Select Construction Kit Type';\n public allowAbstract = true;\n\n public searchText = '';\n public selectedModel: string | null = null;\n public availableModels: string[] = [];\n\n public gridData: GridDataResult = { data: [], total: 0 };\n public isLoading = false;\n public pageSize = 50;\n public skip = 0;\n\n public selectedKeys: string[] = [];\n public selectedType: CkTypeSelectorItem | null = null;\n\n // Selection key function - returns fullName as unique identifier\n public selectItemBy = (context: RowArgs): string => (context.dataItem as CkTypeSelectorItem).fullName;\n\n private initialCkModelIds?: string[];\n public derivedFromRtCkTypeId?: string;\n private lastClickTime = 0;\n private lastClickRtCkTypeId: string | null = null;\n\n /** Data passed from the service */\n public data?: CkTypeSelectorDialogData;\n\n ngOnInit(): void {\n if (this.data) {\n this.dialogTitle = this.data.dialogTitle || 'Select Construction Kit Type';\n this.allowAbstract = this.data.allowAbstract ?? true;\n this.initialCkModelIds = this.data.ckModelIds;\n this.derivedFromRtCkTypeId = this.data.derivedFromRtCkTypeId;\n\n if (this.data.selectedCkTypeId) {\n this.selectedKeys = [this.data.selectedCkTypeId];\n }\n }\n\n // Set up search debouncing\n this.subscriptions.add(\n this.searchSubject.pipe(\n debounceTime(300),\n distinctUntilChanged()\n ).subscribe(() => {\n this.skip = 0;\n this.loadTypes();\n })\n );\n\n // Load initial types and extract available models\n this.loadTypes();\n if (!this.derivedFromRtCkTypeId) {\n this.loadAvailableModels();\n }\n }\n\n ngOnDestroy(): void {\n this.subscriptions.unsubscribe();\n }\n\n private loadTypes(): void {\n this.isLoading = true;\n\n const source$ = this.derivedFromRtCkTypeId\n ? this.getDerivedTypes(this.searchText || undefined)\n : this.ckTypeSelectorService.getCkTypes({\n ckModelIds: this.selectedModel ? [this.selectedModel] : this.initialCkModelIds,\n searchText: this.searchText || undefined,\n first: this.pageSize,\n skip: this.skip\n });\n\n this.subscriptions.add(\n source$.subscribe({\n next: (result: CkTypeSelectorResult) => {\n this.gridData = {\n data: result.items,\n total: result.totalCount\n };\n\n // Restore selection if exists\n if (this.selectedKeys.length > 0) {\n const selectedItem = result.items.find(\n (item: CkTypeSelectorItem) =>\n item.fullName === this.selectedKeys[0]\n );\n if (selectedItem) {\n this.selectedType = selectedItem;\n }\n }\n\n this.isLoading = false;\n },\n error: () => {\n this.isLoading = false;\n this.gridData = { data: [], total: 0 };\n }\n })\n );\n }\n\n private getDerivedTypes(searchText?: string) {\n const derivedService = this.ckTypeSelectorService as {\n getDerivedCkTypes?: (\n rtCkTypeId: string,\n options?: {\n searchText?: string;\n ignoreAbstractTypes?: boolean;\n includeSelf?: boolean;\n }\n ) => import('rxjs').Observable<CkTypeSelectorResult>;\n };\n\n if (derivedService.getDerivedCkTypes) {\n return derivedService.getDerivedCkTypes(this.derivedFromRtCkTypeId!, {\n searchText\n });\n }\n\n return this.ckTypeSelectorService\n .getCkTypes({\n searchText,\n first: 1000,\n skip: 0\n })\n .pipe(\n map(result => this.filterDerivedTypesFallback(result, this.derivedFromRtCkTypeId!))\n );\n }\n\n private filterDerivedTypesFallback(\n result: CkTypeSelectorResult,\n baseRtCkTypeId: string\n ): CkTypeSelectorResult {\n const allowed = new Set<string>([baseRtCkTypeId]);\n let changed = true;\n\n while (changed) {\n changed = false;\n for (const item of result.items) {\n if (\n item.baseTypeRtCkTypeId &&\n allowed.has(item.baseTypeRtCkTypeId) &&\n !allowed.has(item.rtCkTypeId)\n ) {\n allowed.add(item.rtCkTypeId);\n changed = true;\n }\n }\n }\n\n const items = result.items.filter(item =>\n allowed.has(item.rtCkTypeId) && (this.allowAbstract || !item.isAbstract)\n );\n\n return { items, totalCount: items.length };\n }\n\n private loadAvailableModels(): void {\n // Load all types to extract unique models\n this.subscriptions.add(\n this.ckTypeSelectorService.getCkTypes({\n first: 1000\n }).subscribe(result => {\n const modelSet = new Set<string>();\n result.items.forEach(item => {\n // Extract model from fullName (format: \"ModelName-Version/TypeName-Version\")\n const modelMatch = item.fullName.match(/^([^/]+)\\//);\n if (modelMatch) {\n modelSet.add(modelMatch[1]);\n }\n });\n this.availableModels = Array.from(modelSet).sort();\n })\n );\n }\n\n public onSearchChange(value: string): void {\n this.searchSubject.next(value);\n }\n\n public onModelFilterChange(_value: string | null): void {\n this.skip = 0;\n this.loadTypes();\n }\n\n public clearFilters(): void {\n this.searchText = '';\n this.selectedModel = null;\n this.skip = 0;\n this.loadTypes();\n }\n\n public onPageChange(event: PageChangeEvent): void {\n this.skip = event.skip;\n this.pageSize = event.take;\n this.loadTypes();\n }\n\n public onSelectionChange(event: SelectionEvent): void {\n const selectedItems = event.selectedRows;\n if (selectedItems && selectedItems.length > 0) {\n this.selectedType = selectedItems[0].dataItem as CkTypeSelectorItem;\n } else {\n this.selectedType = null;\n }\n }\n\n public onCellClick(event: CellClickEvent): void {\n const item = event.dataItem as CkTypeSelectorItem;\n const now = Date.now();\n if (item && item.rtCkTypeId === this.lastClickRtCkTypeId && (now - this.lastClickTime) < 400) {\n // Double-click detected\n if (!item.isAbstract || this.allowAbstract) {\n this.selectedType = item;\n this.onConfirm();\n }\n }\n this.lastClickTime = now;\n this.lastClickRtCkTypeId = item?.rtCkTypeId ?? null;\n }\n\n public onCancel(): void {\n this.windowRef.close();\n }\n\n public onConfirm(): void {\n if (this.selectedType) {\n const result: CkTypeSelectorDialogResult = {\n selectedCkType: this.selectedType\n };\n this.windowRef.close(result);\n }\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { WindowService, WindowCloseResult } from '@progress/kendo-angular-dialog';\nimport { firstValueFrom } from 'rxjs';\nimport { CkTypeSelectorItem } from '@meshmakers/octo-services';\nimport { WindowStateService } from '@meshmakers/shared-ui';\nimport {\n CkTypeSelectorDialogComponent,\n CkTypeSelectorDialogData,\n CkTypeSelectorDialogResult\n} from './ck-type-selector-dialog.component';\n\nexport interface CkTypeSelectorResult {\n confirmed: boolean;\n selectedCkType: CkTypeSelectorItem | null;\n}\n\n@Injectable()\nexport class CkTypeSelectorDialogService {\n private readonly windowService = inject(WindowService);\n private readonly windowStateService = inject(WindowStateService);\n\n /**\n * Opens the CkType selector dialog\n * @param options Dialog options\n * @returns Promise that resolves with the result containing selected CkType and confirmation status\n */\n public async openCkTypeSelector(options: {\n selectedCkTypeId?: string;\n ckModelIds?: string[];\n dialogTitle?: string;\n allowAbstract?: boolean;\n derivedFromRtCkTypeId?: string;\n } = {}): Promise<CkTypeSelectorResult> {\n const data: CkTypeSelectorDialogData = {\n selectedCkTypeId: options.selectedCkTypeId,\n ckModelIds: options.ckModelIds,\n dialogTitle: options.dialogTitle,\n allowAbstract: options.allowAbstract,\n derivedFromRtCkTypeId: options.derivedFromRtCkTypeId\n };\n\n const size = this.windowStateService.resolveWindowSize('ck-type-selector', { width: 900, height: 650 });\n\n const windowRef = this.windowService.open({\n content: CkTypeSelectorDialogComponent,\n width: size.width,\n height: size.height,\n minWidth: 750,\n minHeight: 550,\n resizable: true,\n title: options.dialogTitle || 'Select Construction Kit Type'\n });\n\n this.windowStateService.applyModalBehavior('ck-type-selector', windowRef);\n\n // Pass data to the component\n const contentRef = windowRef.content as { instance?: CkTypeSelectorDialogComponent } | undefined;\n if (contentRef?.instance) {\n contentRef.instance.data = data;\n }\n\n try {\n const result = await firstValueFrom(windowRef.result);\n\n if (result instanceof WindowCloseResult) {\n return {\n confirmed: false,\n selectedCkType: null\n };\n }\n\n if (result && typeof result === 'object' && 'selectedCkType' in result) {\n const dialogResult = result as CkTypeSelectorDialogResult;\n return {\n confirmed: true,\n selectedCkType: dialogResult.selectedCkType\n };\n } else {\n return {\n confirmed: false,\n selectedCkType: null\n };\n }\n } catch {\n return {\n confirmed: false,\n selectedCkType: null\n };\n }\n }\n}\n","// Note: This should eventually be imported from a shared location\n// For now, we define our own enum that matches the GraphQL generated types\nexport enum AttributeValueTypeDto {\n BinaryDto = 'BINARY',\n BinaryLinkedDto = 'BINARY_LINKED',\n BooleanDto = 'BOOLEAN',\n DateTimeDto = 'DATE_TIME',\n DateTimeOffsetDto = 'DATE_TIME_OFFSET',\n DoubleDto = 'DOUBLE',\n EnumDto = 'ENUM',\n GeospatialPointDto = 'GEOSPATIAL_POINT',\n IntDto = 'INT',\n IntegerDto = 'INTEGER',\n Integer_64Dto = 'INTEGER_64',\n IntegerArrayDto = 'INTEGER_ARRAY',\n Int_64Dto = 'INT_64',\n IntArrayDto = 'INT_ARRAY',\n RecordDto = 'RECORD',\n RecordArrayDto = 'RECORD_ARRAY',\n StringDto = 'STRING',\n StringArrayDto = 'STRING_ARRAY',\n TimeSpanDto = 'TIME_SPAN'\n}\n\n/**\n * Represents a property item in the property grid\n */\nexport interface PropertyGridItem {\n /** Unique identifier for the property */\n id: string;\n /** Property name/key */\n name: string;\n /** Display name for the property (optional, falls back to name) */\n displayName?: string;\n /** Current value of the property */\n value: unknown;\n /** Data type of the property */\n type: AttributeValueTypeDto;\n /** Description/tooltip for the property */\n description?: string;\n /** Whether the property is read-only */\n readOnly?: boolean;\n /** Category for grouping properties */\n category?: string;\n /** Whether the property is required */\n required?: boolean;\n /** Custom validation rules */\n validators?: Record<string, unknown>[];\n /** Custom editor configuration */\n editorConfig?: Record<string, unknown>;\n}\n\n/**\n * Configuration options for the property grid\n */\nexport interface PropertyGridConfig {\n /** Whether the grid is in read-only mode */\n readOnlyMode?: boolean;\n /** Custom editors for specific types */\n customEditors?: Record<string, unknown>;\n /** Whether to show type icons */\n showTypeIcons?: boolean;\n /** Height of the grid */\n height?: string;\n /** Whether to show the search box */\n showSearch?: boolean;\n}\n\n/**\n * Event data for property changes\n */\nexport interface PropertyChangeEvent {\n /** The property that changed */\n property: PropertyGridItem;\n /** The old value */\n oldValue: unknown;\n /** The new value */\n newValue: unknown;\n}\n\n/**\n * Supported display modes for complex values\n */\nexport enum PropertyDisplayMode {\n /** Simple text representation */\n Text = 'text',\n /** JSON formatted display */\n Json = 'json',\n /** Custom template display */\n Custom = 'custom'\n}\n\n/**\n * Categories for default property grouping\n */\nexport enum DefaultPropertyCategory {\n General = 'General',\n System = 'System',\n Attributes = 'Attributes',\n Associations = 'Associations',\n Metadata = 'Metadata'\n}\n\n/**\n * Event data for binary download requests\n */\nexport interface BinaryDownloadEvent {\n /** The binary ID to download */\n binaryId: string;\n /** Optional filename for the download */\n filename?: string;\n /** Optional content type */\n contentType?: string;\n /** Optional download URI if already available */\n downloadUri?: string;\n}","import { Injectable, inject } from '@angular/core';\nimport { Observable, of, forkJoin } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { PropertyGridItem, DefaultPropertyCategory, AttributeValueTypeDto } from '../models/property-grid.models';\nimport { CkTypeAttributeService, CkTypeAttributeInfo } from '@meshmakers/octo-services';\n\n/** Represents an attribute from an RtEntity */\ninterface RtAttribute {\n attributeName?: string | null;\n value?: unknown;\n}\n\n/** Represents an RtRecord with a ckRecordId and attributes */\ninterface RtRecord {\n ckRecordId?: string;\n attributes?: RtAttribute[];\n}\n\n/** Represents an RtEntity with system properties and attributes */\ninterface RtEntity {\n rtId?: string;\n ckTypeId?: string;\n rtCreationDateTime?: string;\n rtChangedDateTime?: string;\n rtWellKnownName?: string;\n attributes?: { items?: RtAttribute[] };\n}\n\n/**\n * Service for converting various data structures to PropertyGridItem format.\n * Uses Construction Kit (CK) type definitions for accurate attribute type resolution.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class PropertyConverterService {\n private readonly ckTypeAttributeService = inject(CkTypeAttributeService);\n\n /**\n * Convert OctoMesh RtEntity attributes to property grid items using CK type definitions.\n * @param attributes The attributes array from RtEntity\n * @param ckTypeId The fullName of the CK type to look up attribute types\n * @returns Observable of PropertyGridItem array\n */\n convertRtEntityAttributes(attributes: RtAttribute[] | null | undefined, ckTypeId: string): Observable<PropertyGridItem[]> {\n if (!attributes || attributes.length === 0) {\n return of([]);\n }\n\n return this.ckTypeAttributeService.getCkTypeAttributes(ckTypeId).pipe(\n switchMap(ckAttributes => {\n const ckAttributeMap = this.buildAttributeTypeMap(ckAttributes);\n return this.convertAttributesWithCkTypes(attributes, ckAttributeMap);\n })\n );\n }\n\n /**\n * Convert any JavaScript object to property grid items using reflection.\n * This method remains synchronous as there is no CK type for generic JS objects.\n */\n convertObjectToProperties(obj: Record<string, unknown> | null | undefined, category?: string): PropertyGridItem[] {\n if (!obj || typeof obj !== 'object') {\n return [];\n }\n\n return Object.keys(obj).map(key => ({\n id: `obj_${key}`,\n name: key,\n displayName: key,\n value: obj[key],\n type: this.inferAttributeType(obj[key]),\n category: category || DefaultPropertyCategory.General,\n readOnly: false,\n description: `Property: ${key}`\n }));\n }\n\n /**\n * Convert RtRecord to property grid items using CK type definitions.\n * @param record The record object containing ckRecordId and attributes\n * @returns Observable of PropertyGridItem array\n */\n convertRtRecordToProperties(record: RtRecord | null | undefined): Observable<PropertyGridItem[]> {\n if (!record || typeof record !== 'object' || !record.attributes) {\n return of([]);\n }\n\n const ckRecordId = record.ckRecordId;\n if (!ckRecordId) {\n return of([]);\n }\n\n return this.ckTypeAttributeService.getCkRecordAttributes(ckRecordId).pipe(\n switchMap(ckAttributes => {\n const ckAttributeMap = this.buildAttributeTypeMap(ckAttributes);\n const properties: PropertyGridItem[] = [];\n\n // Add ckRecordId as system property\n properties.push({\n id: 'ckRecordId',\n name: 'ckRecordId',\n displayName: 'Record ID',\n value: ckRecordId,\n type: AttributeValueTypeDto.StringDto,\n category: DefaultPropertyCategory.System,\n readOnly: true,\n description: 'Construction kit record identifier'\n });\n\n // Convert attributes with CK types (record.attributes is guaranteed non-null by the guard above)\n return this.convertAttributesWithCkTypes(record.attributes!, ckAttributeMap).pipe(\n map(attributeProperties => {\n properties.push(...attributeProperties);\n return properties;\n })\n );\n })\n );\n }\n\n /**\n * Convert OctoMesh RtEntity to comprehensive property list using CK type definitions.\n * @param entity The RtEntity object\n * @returns Observable of PropertyGridItem array\n */\n convertRtEntityToProperties(entity: RtEntity): Observable<PropertyGridItem[]> {\n const properties: PropertyGridItem[] = [];\n\n // System properties\n if (entity.rtId) {\n properties.push({\n id: 'rtId',\n name: 'rtId',\n displayName: 'Runtime ID',\n value: entity.rtId,\n type: AttributeValueTypeDto.StringDto,\n category: DefaultPropertyCategory.System,\n readOnly: true,\n description: 'Unique runtime identifier'\n });\n }\n\n if (entity.ckTypeId) {\n properties.push({\n id: 'ckTypeId',\n name: 'ckTypeId',\n displayName: 'Type ID',\n value: entity.ckTypeId,\n type: AttributeValueTypeDto.StringDto,\n category: DefaultPropertyCategory.System,\n readOnly: true,\n description: 'Construction kit type identifier'\n });\n }\n\n if (entity.rtCreationDateTime) {\n properties.push({\n id: 'rtCreationDateTime',\n name: 'rtCreationDateTime',\n displayName: 'Created',\n value: entity.rtCreationDateTime,\n type: AttributeValueTypeDto.DateTimeDto,\n category: DefaultPropertyCategory.System,\n readOnly: true,\n description: 'Creation date and time'\n });\n }\n\n if (entity.rtChangedDateTime) {\n properties.push({\n id: 'rtChangedDateTime',\n name: 'rtChangedDateTime',\n displayName: 'Modified',\n value: entity.rtChangedDateTime,\n type: AttributeValueTypeDto.DateTimeDto,\n category: DefaultPropertyCategory.System,\n readOnly: true,\n description: 'Last modification date and time'\n });\n }\n\n if (entity.rtWellKnownName) {\n properties.push({\n id: 'rtWellKnownName',\n name: 'rtWellKnownName',\n displayName: 'Well Known Name',\n value: entity.rtWellKnownName,\n type: AttributeValueTypeDto.StringDto,\n category: DefaultPropertyCategory.General,\n readOnly: false,\n description: 'Well-known name for the entity'\n });\n }\n\n // If no ckTypeId or no attributes, return system properties only\n if (!entity.ckTypeId || !entity.attributes?.items) {\n return of(properties);\n }\n\n // Load CK type attributes and convert entity attributes\n return this.convertRtEntityAttributes(entity.attributes.items, entity.ckTypeId).pipe(\n map(attributeProperties => {\n properties.push(...attributeProperties);\n return properties;\n })\n );\n }\n\n /**\n * Build a map from attribute name to attribute value type from CK definitions\n */\n private buildAttributeTypeMap(ckAttributes: CkTypeAttributeInfo[]): Map<string, string> {\n const map = new Map<string, string>();\n for (const attr of ckAttributes) {\n map.set(attr.attributeName, attr.attributeValueType);\n }\n return map;\n }\n\n /**\n * Convert attributes using CK type map for type resolution\n */\n private convertAttributesWithCkTypes(\n attributes: RtAttribute[],\n ckAttributeMap: Map<string, string>\n ): Observable<PropertyGridItem[]> {\n if (!attributes || attributes.length === 0) {\n return of([]);\n }\n\n // Check if any attributes have nested records that need async conversion\n const hasNestedRecords = attributes.some(attr =>\n attr?.value && typeof attr.value === 'object' && attr.value !== null && 'attributes' in attr.value\n );\n\n if (!hasNestedRecords) {\n // No nested records - convert synchronously\n const items = attributes.map((attr, index) => this.convertSingleAttribute(attr, index, ckAttributeMap));\n return of(items);\n }\n\n // Has nested records - need to handle async conversion\n const conversionObservables = attributes.map((attr, index) => {\n if (attr?.value && typeof attr.value === 'object' && attr.value !== null && 'attributes' in attr.value) {\n // Nested record - convert async\n return this.convertRtRecordToProperties(attr.value as RtRecord).pipe(\n map(nestedProperties => ({\n id: `attr_${index}_${attr?.attributeName || 'unknown'}`,\n name: attr?.attributeName || `attribute_${index}`,\n displayName: attr?.attributeName || `attribute_${index}`,\n value: nestedProperties,\n type: this.getAttributeType(attr?.attributeName, ckAttributeMap),\n category: DefaultPropertyCategory.Attributes,\n readOnly: false,\n description: `Attribute: ${attr?.attributeName}`\n }))\n );\n } else {\n // Regular attribute - return as observable\n return of(this.convertSingleAttribute(attr, index, ckAttributeMap));\n }\n });\n\n return forkJoin(conversionObservables);\n }\n\n /**\n * Convert a single attribute to PropertyGridItem\n */\n private convertSingleAttribute(\n attr: RtAttribute,\n index: number,\n ckAttributeMap: Map<string, string>\n ): PropertyGridItem {\n const value = this.convertRtEntityAttributeValueSync(attr?.value);\n\n return {\n id: `attr_${index}_${attr?.attributeName || 'unknown'}`,\n name: attr?.attributeName || `attribute_${index}`,\n displayName: attr?.attributeName || `attribute_${index}`,\n value: value,\n type: this.getAttributeType(attr?.attributeName, ckAttributeMap),\n category: DefaultPropertyCategory.Attributes,\n readOnly: false,\n description: `Attribute: ${attr?.attributeName}`\n };\n }\n\n /**\n * Get attribute type from CK map\n */\n private getAttributeType(attributeName: string | null | undefined, ckAttributeMap: Map<string, string>): AttributeValueTypeDto {\n if (!attributeName) {\n return AttributeValueTypeDto.StringDto;\n }\n\n const ckType = ckAttributeMap.get(attributeName);\n if (ckType) {\n return this.mapCkTypeToAttributeValueType(ckType);\n }\n\n // Fallback for attributes not found in CK (should not happen in normal cases)\n return AttributeValueTypeDto.StringDto;\n }\n\n /**\n * Map CK type string to AttributeValueTypeDto enum\n */\n private mapCkTypeToAttributeValueType(ckType: string): AttributeValueTypeDto {\n // The ckType from GraphQL should match the enum values\n const typeMap: Record<string, AttributeValueTypeDto> = {\n 'BINARY': AttributeValueTypeDto.BinaryDto,\n 'BINARY_LINKED': AttributeValueTypeDto.BinaryLinkedDto,\n 'BOOLEAN': AttributeValueTypeDto.BooleanDto,\n 'DATE_TIME': AttributeValueTypeDto.DateTimeDto,\n 'DATE_TIME_OFFSET': AttributeValueTypeDto.DateTimeOffsetDto,\n 'DOUBLE': AttributeValueTypeDto.DoubleDto,\n 'ENUM': AttributeValueTypeDto.EnumDto,\n 'GEOSPATIAL_POINT': AttributeValueTypeDto.GeospatialPointDto,\n 'INT': AttributeValueTypeDto.IntDto,\n 'INTEGER': AttributeValueTypeDto.IntegerDto,\n 'INTEGER_64': AttributeValueTypeDto.Integer_64Dto,\n 'INTEGER_ARRAY': AttributeValueTypeDto.IntegerArrayDto,\n 'INT_64': AttributeValueTypeDto.Int_64Dto,\n 'INT_ARRAY': AttributeValueTypeDto.IntArrayDto,\n 'RECORD': AttributeValueTypeDto.RecordDto,\n 'RECORD_ARRAY': AttributeValueTypeDto.RecordArrayDto,\n 'STRING': AttributeValueTypeDto.StringDto,\n 'STRING_ARRAY': AttributeValueTypeDto.StringArrayDto,\n 'TIME_SPAN': AttributeValueTypeDto.TimeSpanDto\n };\n\n return typeMap[ckType] || AttributeValueTypeDto.StringDto;\n }\n\n /**\n * Convert attribute value synchronously (for non-record values)\n */\n private convertRtEntityAttributeValueSync(value: unknown): unknown {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (Array.isArray(value)) {\n return value.map(v => this.convertRtEntityAttributeValueSync(v));\n }\n\n // For nested records, return as-is (will be handled by async conversion if needed)\n if (typeof value === 'object' && 'attributes' in value) {\n return value;\n }\n\n return value;\n }\n\n /**\n * Infer attribute type from JavaScript value.\n * Used only for convertObjectToProperties where no CK type is available.\n */\n private inferAttributeType(value: unknown): AttributeValueTypeDto {\n if (value === null || value === undefined) {\n return AttributeValueTypeDto.StringDto;\n }\n\n if (typeof value === 'boolean') {\n return AttributeValueTypeDto.BooleanDto;\n }\n\n if (typeof value === 'number') {\n return Number.isInteger(value) ? AttributeValueTypeDto.IntDto : AttributeValueTypeDto.DoubleDto;\n }\n\n if (typeof value === 'string') {\n if (this.isIsoDateString(value)) {\n return AttributeValueTypeDto.DateTimeDto;\n }\n return AttributeValueTypeDto.StringDto;\n }\n\n if (value instanceof Date) {\n return AttributeValueTypeDto.DateTimeDto;\n }\n\n if (Array.isArray(value)) {\n if (value.length > 0) {\n const firstType = this.inferAttributeType(value[0]);\n switch (firstType) {\n case AttributeValueTypeDto.StringDto:\n return AttributeValueTypeDto.StringArrayDto;\n case AttributeValueTypeDto.IntDto:\n case AttributeValueTypeDto.DoubleDto:\n return AttributeValueTypeDto.IntegerArrayDto;\n case AttributeValueTypeDto.RecordDto:\n return AttributeValueTypeDto.RecordArrayDto;\n default:\n return AttributeValueTypeDto.StringArrayDto;\n }\n }\n return AttributeValueTypeDto.StringArrayDto;\n }\n\n if (typeof value === 'object') {\n return AttributeValueTypeDto.RecordDto;\n }\n\n return AttributeValueTypeDto.StringDto;\n }\n\n /**\n * Check if string is ISO date format\n */\n private isIsoDateString(value: string): boolean {\n const isoDateRegex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z?$/;\n return isoDateRegex.test(value) && !isNaN(Date.parse(value));\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SVGIconModule } from '@progress/kendo-angular-icons';\nimport { ButtonModule } from '@progress/kendo-angular-buttons';\nimport { chevronRightIcon, chevronDownIcon, downloadIcon } from '@progress/kendo-svg-icons';\nimport { AttributeValueTypeDto, PropertyDisplayMode, BinaryDownloadEvent } from '../models/property-grid.models';\n\n/** Shape of binary linked value from OctoMesh */\ninterface BinaryLinkedValue {\n binaryId?: string;\n downloadUri?: string;\n filename?: string;\n size?: number;\n contentType?: string;\n}\n\n/**\n * Component for displaying property values with appropriate formatting\n */\n@Component({\n selector: 'mm-property-value-display',\n standalone: true,\n imports: [CommonModule, SVGIconModule, ButtonModule],\n template: `\n <div class=\"property-value-display\" [ngClass]=\"'type-' + type.toLowerCase()\">\n\n @if (isExpandableRecord()) {\n <div class=\"expandable-record\">\n <!-- Expand/Collapse Button and Summary -->\n <div class=\"record-header\" (click)=\"toggleExpansion()\">\n <kendo-svgicon\n [icon]=\"isExpanded ? chevronDownIcon : chevronRightIcon\"\n class=\"expand-icon\">\n </kendo-svgicon>\n <span class=\"record-summary\">{{ getRecordSummary() }}</span>\n <span class=\"type-indicator\" [title]=\"getTypeDescription()\">\n {{ getTypeIndicator() }}\n </span>\n </div>\n\n <!-- Expanded Content -->\n @if (isExpanded) {\n <div class=\"record-content\">\n @if (type === AttributeValueTypeDto.RecordArrayDto && Array.isArray(value)) {\n @for (item of value; track $index) {\n <div class=\"array-item\">\n <span class=\"array-index\">[{{ $index }}]</span>\n <div class=\"nested-properties\">\n @for (prop of getObjectProperties(item); track prop.key) {\n <div class=\"nested-property\">\n <span class=\"property-key\">{{ prop.key }}:</span>\n <mm-property-value-display\n [value]=\"prop.value\"\n [type]=\"getPropertyType(prop.value)\">\n </mm-property-value-display>\n </div>\n }\n </div>\n </div>\n }\n } @else {\n <div class=\"nested-properties\">\n @for (prop of getObjectProperties(value); track prop.key) {\n <div class=\"nested-property\">\n <span class=\"property-key\">{{ prop.key }}:</span>\n <mm-property-value-display\n [value]=\"prop.value\"\n [type]=\"getPropertyType(prop.value)\">\n </mm-property-value-display>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n } @else if (isBinaryLinkedWithDownload()) {\n <!-- Binary Linked with download capability -->\n <div class=\"binary-linked-display\">\n <div class=\"binary-info\">\n @if (getBinaryFilename()) {\n <span class=\"filename\">{{ getBinaryFilename() }}</span>\n }\n @if (getBinarySize()) {\n <span class=\"file-size\">({{ formatFileSize(getBinarySize()) }})</span>\n }\n @if (getBinaryContentType()) {\n <span class=\"content-type\">{{ getBinaryContentType() }}</span>\n }\n </div>\n <button\n kendoButton\n size=\"small\"\n fillMode=\"flat\"\n [svgIcon]=\"downloadIcon\"\n title=\"Download file\"\n (click)=\"onDownload()\">\n Download\n </button>\n </div>\n } @else {\n <!-- Non-expandable value display -->\n @switch (displayMode) {\n @case (PropertyDisplayMode.Json) {\n <pre class=\"json-display\">{{ getFormattedValue() }}</pre>\n }\n @case (PropertyDisplayMode.Text) {\n <span class=\"text-display\" [innerHTML]=\"getFormattedValue()\"></span>\n }\n @default {\n <span class=\"default-display\">{{ getFormattedValue() }}</span>\n }\n }\n\n @if (isComplexType() && !isExpandableRecord()) {\n <span class=\"type-indicator\" [title]=\"getTypeDescription()\">\n {{ getTypeIndicator() }}\n </span>\n }\n }\n </div>\n `,\n styles: [`\n .property-value-display {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n min-height: 20px;\n font-family: inherit;\n width: 100%;\n }\n\n .expandable-record {\n width: 100%;\n }\n\n .record-header {\n display: flex;\n align-items: center;\n gap: 6px;\n cursor: pointer;\n padding: 4px;\n border-radius: 4px;\n transition: background-color 0.2s;\n }\n\n .record-header:hover {\n background: var(--kendo-color-base-subtle);\n }\n\n .expand-icon {\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n transition: transform 0.2s;\n }\n\n .record-summary {\n flex: 1;\n font-size: 0.9em;\n }\n\n .record-content {\n margin-left: 22px;\n margin-top: 8px;\n border-left: 2px solid var(--kendo-color-border);\n padding-left: 12px;\n background: var(--kendo-color-base-subtle);\n border-radius: 0 4px 4px 0;\n }\n\n .nested-properties {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 8px;\n }\n\n .nested-property {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n min-height: 24px;\n }\n\n .property-key {\n font-weight: 500;\n color: var(--kendo-color-primary);\n min-width: 100px;\n flex-shrink: 0;\n font-size: 0.9em;\n }\n\n .array-item {\n border: 1px solid var(--kendo-color-border);\n border-radius: 4px;\n margin-bottom: 8px;\n background: transparent;\n }\n\n .array-index {\n display: inline-block;\n background: var(--kendo-color-primary);\n color: white;\n padding: 2px 8px;\n font-size: 0.8em;\n font-weight: bold;\n border-radius: 4px 0 4px 0;\n margin-bottom: 4px;\n }\n\n .json-display {\n font-family: 'Courier New', monospace;\n font-size: 12px;\n margin: 0;\n padding: 4px 8px;\n background: var(--kendo-color-base-subtle);\n border-radius: 4px;\n max-width: 300px;\n overflow: auto;\n }\n\n .text-display,\n .default-display {\n flex: 1;\n word-break: break-word;\n overflow-wrap: anywhere;\n }\n\n .type-boolean {\n .default-display {\n font-weight: 500;\n &.value-true { color: #28a745; }\n &.value-false { color: #dc3545; }\n }\n }\n\n .type-datetime,\n .type-datetimeoffset {\n .default-display {\n font-family: monospace;\n font-size: 0.9em;\n }\n }\n\n .type-int,\n .type-integer,\n .type-double {\n .default-display {\n font-family: monospace;\n text-align: right;\n }\n }\n\n .type-indicator {\n font-size: 0.75em;\n padding: 2px 6px;\n background: var(--kendo-color-primary);\n color: white;\n border-radius: 3px;\n text-transform: uppercase;\n font-weight: 500;\n flex-shrink: 0;\n }\n\n .empty-value {\n color: var(--kendo-color-subtle);\n font-style: italic;\n }\n\n .null-value {\n color: var(--kendo-color-error);\n font-style: italic;\n }\n\n .binary-linked-display {\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n }\n\n .binary-info {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n }\n\n .filename {\n font-weight: 500;\n color: var(--kendo-color-on-app-surface);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .file-size {\n font-size: 0.85em;\n color: var(--kendo-color-subtle);\n flex-shrink: 0;\n }\n\n .content-type {\n font-size: 0.75em;\n padding: 2px 6px;\n background: var(--kendo-color-base-subtle);\n border-radius: 3px;\n color: var(--kendo-color-subtle);\n flex-shrink: 0;\n }\n `]\n})\nexport class PropertyValueDisplayComponent implements OnInit {\n @Input() value: unknown;\n @Input() type: AttributeValueTypeDto = AttributeValueTypeDto.StringDto;\n @Input() displayMode: PropertyDisplayMode = PropertyDisplayMode.Text;\n\n /** Emitted when a binary download is requested */\n @Output() binaryDownload = new EventEmitter<BinaryDownloadEvent>();\n\n // Expansion state\n isExpanded = false;\n\n readonly PropertyDisplayMode = PropertyDisplayMode;\n readonly AttributeValueTypeDto = AttributeValueTypeDto;\n readonly Array = Array;\n readonly chevronRightIcon = chevronRightIcon;\n readonly chevronDownIcon = chevronDownIcon;\n readonly downloadIcon = downloadIcon;\n\n ngOnInit() {\n // Debug every property value display component creation\n console.log('PropertyValueDisplayComponent ngOnInit:', {\n type: this.type,\n value: this.value,\n valueType: typeof this.value,\n valueStringified: JSON.stringify(this.value),\n isExpandableRecord: this.isExpandableRecord()\n });\n }\n\n /**\n * Get formatted display value\n */\n getFormattedValue(): string {\n if (this.value === null) {\n return '<null>';\n }\n\n if (this.value === undefined) {\n return '<undefined>';\n }\n\n if (this.value === '') {\n return '<empty>';\n }\n\n switch (this.type) {\n case AttributeValueTypeDto.BooleanDto:\n return this.value ? '✓ True' : '✗ False';\n\n case AttributeValueTypeDto.DateTimeDto:\n case AttributeValueTypeDto.DateTimeOffsetDto:\n return this.formatDateTime(this.value);\n\n case AttributeValueTypeDto.StringArrayDto:\n case AttributeValueTypeDto.IntegerArrayDto:\n case AttributeValueTypeDto.IntArrayDto:\n return this.formatArray(this.value);\n\n case AttributeValueTypeDto.RecordDto:\n case AttributeValueTypeDto.RecordArrayDto:\n return this.displayMode === PropertyDisplayMode.Json\n ? JSON.stringify(this.value, null, 2)\n : this.formatObject(this.value);\n\n case AttributeValueTypeDto.BinaryDto:\n case AttributeValueTypeDto.BinaryLinkedDto:\n return this.formatBinary(this.value);\n\n case AttributeValueTypeDto.IntDto:\n case AttributeValueTypeDto.IntegerDto:\n case AttributeValueTypeDto.Integer_64Dto:\n case AttributeValueTypeDto.Int_64Dto:\n return this.formatNumber(this.value, 0);\n\n case AttributeValueTypeDto.DoubleDto:\n return this.formatNumber(this.value, 2);\n\n default:\n return String(this.value);\n }\n }\n\n /**\n * Check if this is an expandable record type\n */\n isExpandableRecord(): boolean {\n // Comprehensive debug logging\n console.log('PropertyValueDisplay: isExpandableRecord check:', {\n type: this.type,\n typeString: String(this.type),\n typeOf: typeof this.type,\n AttributeValueTypeDtoRecordDto: AttributeValueTypeDto.RecordDto,\n AttributeValueTypeDtoRecordArrayDto: AttributeValueTypeDto.RecordArrayDto,\n typeIsRecordDto: this.type === AttributeValueTypeDto.RecordDto,\n typeIsRecordDtoString: this.type === 'RECORD',\n typeIsRecordArrayDto: this.type === AttributeValueTypeDto.RecordArrayDto,\n value: this.value,\n valueType: typeof this.value,\n valueIsNull: this.value == null,\n valueKeys: this.value && typeof this.value === 'object' ? Object.keys(this.value) : 'not object'\n });\n\n // Check for record types\n const isRecordDto = this.type === AttributeValueTypeDto.RecordDto;\n const isRecordArrayDto = this.type === AttributeValueTypeDto.RecordArrayDto;\n const isRecordType = isRecordDto || isRecordArrayDto;\n\n // Simple check: does it have a value?\n const hasValue = this.value != null;\n\n // Simple check: is it an object or array?\n const isObjectLike = typeof this.value === 'object' && this.value != null;\n\n const result = isRecordType && hasValue && isObjectLike;\n\n console.log('PropertyValueDisplay: Expandable result:', {\n isRecordDto,\n isRecordArrayDto,\n isRecordType,\n hasValue,\n isObjectLike,\n finalResult: result\n });\n\n return result;\n }\n\n /**\n * Check if the type is complex (object/array)\n */\n isComplexType(): boolean {\n return [\n AttributeValueTypeDto.RecordDto,\n AttributeValueTypeDto.RecordArrayDto,\n AttributeValueTypeDto.StringArrayDto,\n AttributeValueTypeDto.IntegerArrayDto,\n AttributeValueTypeDto.IntArrayDto,\n AttributeValueTypeDto.BinaryDto,\n AttributeValueTypeDto.BinaryLinkedDto\n ].includes(this.type);\n }\n\n /**\n * Get type indicator text\n */\n getTypeIndicator(): string {\n switch (this.type) {\n case AttributeValueTypeDto.RecordDto:\n return 'RECORD';\n case AttributeValueTypeDto.RecordArrayDto:\n return 'ARR[RECORD]';\n case AttributeValueTypeDto.StringArrayDto:\n return 'ARR[STR]';\n case AttributeValueTypeDto.IntegerArrayDto:\n case AttributeValueTypeDto.IntArrayDto:\n return 'ARR[INT]';\n case AttributeValueTypeDto.BinaryDto:\n case AttributeValueTypeDto.BinaryLinkedDto:\n return 'BIN';\n default:\n return this.type.replace('_DTO', '').replace('DTO', '');\n }\n }\n\n /**\n * Get type description for tooltip\n */\n getTypeDescription(): string {\n switch (this.type) {\n case AttributeValueTypeDto.RecordDto:\n return 'Complex object';\n case AttributeValueTypeDto.RecordArrayDto:\n return 'Array of complex objects';\n case AttributeValueTypeDto.StringArrayDto:\n return 'Array of strings';\n case AttributeValueTypeDto.IntegerArrayDto:\n case AttributeValueTypeDto.IntArrayDto:\n return 'Array of numbers';\n case AttributeValueTypeDto.BinaryDto:\n case AttributeValueTypeDto.BinaryLinkedDto:\n return 'Binary data';\n default:\n return `Type: ${this.type}`;\n }\n }\n\n /**\n * Format date/time values\n */\n private formatDateTime(value: unknown): string {\n try {\n const date = value instanceof Date ? value : new Date(String(value));\n if (isNaN(date.getTime())) {\n return String(value);\n }\n return date.toLocaleString();\n } catch {\n return String(value);\n }\n }\n\n /**\n * Format array values\n */\n private formatArray(value: unknown): string {\n if (!Array.isArray(value)) {\n return String(value);\n }\n\n if (value.length === 0) {\n return '[]';\n }\n\n if (value.length <= 3) {\n return `[${value.join(', ')}]`;\n }\n\n return `[${value.slice(0, 3).join(', ')}, ... +${value.length - 3} more]`;\n }\n\n /**\n * Format object values\n */\n private formatObject(value: unknown): string {\n if (typeof value !== 'object' || value === null) {\n return String(value);\n }\n\n const obj = value as Record<string, unknown>;\n const keys = Object.keys(obj);\n if (keys.length === 0) {\n return '{}';\n }\n\n if (keys.length <= 2) {\n const preview = keys.map(key => `${key}: ${this.truncateValue(obj[key])}`).join(', ');\n return `{${preview}}`;\n }\n\n return `{${keys.slice(0, 2).map(key => `${key}: ${this.truncateValue(obj[key])}`).join(', ')}, ... +${keys.length - 2} more}`;\n }\n\n /**\n * Format binary data\n */\n private formatBinary(value: unknown): string {\n if (value instanceof ArrayBuffer) {\n return `<Binary: ${value.byteLength} bytes>`;\n }\n if (typeof value === 'string' && value.startsWith('data:')) {\n return '<Base64 Data>';\n }\n return '<Binary Data>';\n }\n\n /**\n * Format numeric values\n */\n private formatNumber(value: unknown, decimals: number): string {\n const num = Number(value);\n if (isNaN(num)) {\n return String(value);\n }\n return decimals > 0 ? num.toFixed(decimals) : num.toString();\n }\n\n /**\n * Truncate long values for preview\n */\n private truncateValue(value: unknown): string {\n const str = String(value);\n return str.length > 20 ? str.substring(0, 20) + '...' : str;\n }\n\n /**\n * Toggle expansion state\n */\n toggleExpansion(): void {\n this.isExpanded = !this.isExpanded;\n }\n\n /**\n * Get summary text for record header\n */\n getRecordSummary(): string {\n if (this.type === AttributeValueTypeDto.RecordArrayDto && Array.isArray(this.value)) {\n return `Array with ${this.value.length} item${this.value.length !== 1 ? 's' : ''}`;\n }\n\n if (typeof this.value === 'object' && this.value !== null) {\n\n // Handle regular objects\n const keys = Object.keys(this.value);\n return `Object with ${keys.length} propert${keys.length !== 1 ? 'ies' : 'y'}`;\n }\n\n return 'Complex object';\n }\n\n /**\n * Get properties of an object for display\n */\n getObjectProperties(obj: unknown): {key: string, value: unknown}[] {\n if (typeof obj !== 'object' || obj === null) {\n return [];\n }\n\n if (Array.isArray(obj) && obj.length > 0 && typeof obj[0] === 'object' && obj[0] !== null && 'id' in obj[0] && obj[0].id === 'ckRecordId') {\n // Handle array of records\n return obj.map((item: Record<string, unknown>) => ({\n key: String(item['name']),\n value: item['value']\n }));\n }\n\n // Handle regular objects\n const record = obj as Record<string, unknown>;\n return Object.keys(record).map(key => ({\n key,\n value: record[key]\n }));\n }\n\n /**\n * Determine the appropriate type for a nested property value\n */\n getPropertyType(value: unknown): AttributeValueTypeDto {\n if (value === null || value === undefined) {\n return AttributeValueTypeDto.StringDto;\n }\n\n if (typeof value === 'boolean') {\n return AttributeValueTypeDto.BooleanDto;\n }\n\n if (typeof value === 'number') {\n return Number.isInteger(value) ? AttributeValueTypeDto.IntegerDto : AttributeValueTypeDto.DoubleDto;\n }\n\n if (typeof value === 'string') {\n // Check if it looks like a date\n if (value.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/)) {\n return AttributeValueTypeDto.DateTimeDto;\n }\n return AttributeValueTypeDto.StringDto;\n }\n\n if (Array.isArray(value)) {\n if (value.length > 0 && typeof value[0] === 'object' && value[0] !== null && 'id' in value[0] && value[0].id === 'ckRecordId') {\n return AttributeValueTypeDto.RecordDto;\n }\n if (value.length > 0 && typeof value[0] === 'object') {\n return AttributeValueTypeDto.RecordArrayDto;\n }\n if (value.length > 0 && typeof value[0] === 'string') {\n return AttributeValueTypeDto.StringArrayDto;\n }\n if (value.length > 0 && typeof value[0] === 'number') {\n return AttributeValueTypeDto.IntegerArrayDto;\n }\n return AttributeValueTypeDto.StringArrayDto; // fallback\n }\n\n\n return AttributeValueTypeDto.StringDto;\n }\n\n // ========== Binary Linked Methods ==========\n\n /**\n * Check if this is a BINARY_LINKED type with download capability\n */\n isBinaryLinkedWithDownload(): boolean {\n if (this.type !== AttributeValueTypeDto.BinaryLinkedDto) {\n return false;\n }\n\n // Check if value has binaryId or downloadUri (LargeBinaryInfo structure)\n return !!this.value && typeof this.value === 'object' && ('binaryId' in this.value || 'downloadUri' in this.value);\n }\n\n /**\n * Get the filename from binary info\n */\n getBinaryFilename(): string | null {\n if (!this.value || typeof this.value !== 'object') {\n return null;\n }\n return (this.value as BinaryLinkedValue).filename || null;\n }\n\n /**\n * Get the file size from binary info\n */\n getBinarySize(): number | null {\n if (!this.value || typeof this.value !== 'object') {\n return null;\n }\n return (this.value as BinaryLinkedValue).size || null;\n }\n\n /**\n * Get the content type from binary info\n */\n getBinaryContentType(): string | null {\n if (!this.value || typeof this.value !== 'object') {\n return null;\n }\n return (this.value as BinaryLinkedValue).contentType || null;\n }\n\n /**\n * Format file size to human readable format\n */\n formatFileSize(bytes: number | null): string {\n if (bytes === null || bytes === undefined) {\n return '';\n }\n\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n let unitIndex = 0;\n let size = bytes;\n\n while (size >= 1024 && unitIndex < units.length - 1) {\n size /= 1024;\n unitIndex++;\n }\n\n return `${size.toFixed(unitIndex > 0 ? 1 : 0)} ${units[unitIndex]}`;\n }\n\n /**\n * Handle download button click\n */\n onDownload(): void {\n if (!this.value || typeof this.value !== 'object') {\n console.warn('No binary value available');\n return;\n }\n\n const binaryValue = this.value as BinaryLinkedValue;\n\n // If downloadUri is available, open directly\n if (binaryValue.downloadUri) {\n window.open(binaryValue.downloadUri, '_blank', 'noopener,noreferrer');\n return;\n }\n\n // Otherwise, emit event for parent to handle (needs to load downloadUri)\n if (binaryValue.binaryId) {\n const event: BinaryDownloadEvent = {\n binaryId: binaryValue.binaryId,\n filename: binaryValue.filename,\n contentType: binaryValue.contentType\n };\n this.binaryDownload.emit(event);\n } else {\n console.warn('No binaryId or downloadUri available');\n }\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { GridModule } from '@progress/kendo-angular-grid';\nimport { InputsModule } from '@progress/kendo-angular-inputs';\nimport { DropDownsModule } from '@progress/kendo-angular-dropdowns';\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { SVGIconModule } from '@progress/kendo-angular-icons';\nimport {\n SVGIcon,\n fileIcon,\n folderIcon,\n calendarIcon,\n checkboxCheckedIcon,\n listUnorderedIcon\n} from '@progress/kendo-svg-icons';\n\nimport { PropertyGridItem, PropertyGridConfig, PropertyChangeEvent, AttributeValueTypeDto, BinaryDownloadEvent } from '../models/property-grid.models';\nimport { PropertyValueDisplayComponent } from './property-value-display.component';\n\n/**\n * Generic property grid component for OctoMesh\n */\n@Component({\n selector: 'mm-property-grid',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n GridModule,\n InputsModule,\n DropDownsModule,\n ButtonsModule,\n SVGIconModule,\n PropertyValueDisplayComponent\n ],\n template: `\n <div class=\"mm-property-grid\" [style.height]=\"config.height || '400px'\">\n\n @if (config.showSearch) {\n <div class=\"search-toolbar\">\n <kendo-textbox\n [(ngModel)]=\"searchTerm\"\n placeholder=\"Search attributes...\"\n (input)=\"onSearch()\"\n [clearButton]=\"true\">\n </kendo-textbox>\n </div>\n }\n\n <kendo-grid\n [data]=\"filteredData\"\n [sortable]=\"true\"\n [resizable]=\"true\"\n [style.height]=\"gridHeight\"\n [selectable]=\"{mode: 'single'}\"\n class=\"property-grid\">\n\n <!-- Property Name Column -->\n <kendo-grid-column\n field=\"displayName\"\n title=\"Property\"\n [width]=\"200\"\n [sortable]=\"true\">\n <ng-template kendoGridCellTemplate let-dataItem=\"dataItem\">\n <div class=\"property-name-cell\">\n @if (config.showTypeIcons !== false) {\n <kendo-svgicon\n [icon]=\"getTypeIcon(dataItem.type)\"\n class=\"type-icon\">\n </kendo-svgicon>\n }\n <div class=\"property-info\">\n <span class=\"property-name\" [title]=\"dataItem.description\">\n {{ dataItem.displayName || dataItem.name }}\n </span>\n @if (dataItem.required) {\n <span class=\"required-indicator\">*</span>\n }\n @if (dataItem.readOnly) {\n <span class=\"readonly-indicator\" title=\"Read-only\">🔒</span>\n }\n </div>\n </div>\n </ng-template>\n </kendo-grid-column>\n\n <!-- Property Value Column -->\n <kendo-grid-column\n field=\"value\"\n title=\"Value\"\n [sortable]=\"false\">\n <ng-template kendoGridCellTemplate let-dataItem=\"dataItem\">\n <mm-property-value-display\n [value]=\"dataItem.value\"\n [type]=\"dataItem.type\"\n (binaryDownload)=\"onBinaryDownload($event)\">\n </mm-property-value-display>\n </ng-template>\n </kendo-grid-column>\n\n <!-- Type Column (optional) -->\n @if (showTypeColumn) {\n <kendo-grid-column\n field=\"type\"\n title=\"Type\"\n [width]=\"120\"\n [sortable]=\"true\">\n <ng-template kendoGridCellTemplate let-dataItem=\"dataItem\">\n <span class=\"type-badge\" [ngClass]=\"'type-' + dataItem.type.toLowerCase()\">\n {{ formatTypeName(dataItem.type) }}\n </span>\n </ng-template>\n </kendo-grid-column>\n }\n\n </kendo-grid>\n </div>\n `,\n styles: [`\n .mm-property-grid {\n display: flex;\n flex-direction: column;\n border: 1px solid var(--kendo-color-border);\n border-radius: 4px;\n overflow: hidden;\n }\n\n .search-toolbar {\n padding: 8px;\n border-bottom: 1px solid var(--kendo-color-border);\n background: var(--kendo-color-base-subtle);\n }\n\n .property-grid {\n flex: 1;\n border: none;\n }\n\n .property-name-cell {\n display: flex;\n align-items: center;\n gap: 8px;\n min-height: 24px;\n }\n\n .type-icon {\n width: 16px;\n height: 16px;\n opacity: 0.7;\n }\n\n .property-info {\n display: flex;\n align-items: center;\n gap: 4px;\n flex: 1;\n }\n\n .property-name {\n font-weight: 500;\n }\n\n .required-indicator {\n color: var(--kendo-color-error);\n font-weight: bold;\n }\n\n .readonly-indicator {\n font-size: 12px;\n opacity: 0.7;\n }\n\n .property-editor {\n width: 100%;\n min-width: 200px;\n }\n\n .validation-error {\n color: var(--kendo-color-error);\n font-size: 0.8em;\n margin-top: 4px;\n }\n\n .type-badge {\n font-size: 0.75em;\n padding: 2px 6px;\n border-radius: 3px;\n text-transform: uppercase;\n font-weight: 500;\n background: var(--kendo-color-base-subtle);\n color: var(--kendo-color-on-base);\n }\n\n .grid-toolbar {\n padding: 8px;\n border-top: 1px solid var(--kendo-color-border);\n background: var(--kendo-color-base-subtle);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .changes-indicator {\n margin-left: auto;\n font-size: 0.9em;\n color: var(--kendo-color-primary);\n font-style: italic;\n }\n\n `]\n})\nexport class PropertyGridComponent implements OnInit, OnChanges {\n @Input() data: PropertyGridItem[] = [];\n @Input() config: PropertyGridConfig = {};\n @Input() showTypeColumn = false;\n\n @Output() propertyChange = new EventEmitter<PropertyChangeEvent>();\n @Output() saveRequested = new EventEmitter<PropertyGridItem[]>();\n @Output() binaryDownload = new EventEmitter<BinaryDownloadEvent>();\n\n // Component state\n filteredData: PropertyGridItem[] = [];\n searchTerm = '';\n hasChanges = false;\n pendingChanges: PropertyChangeEvent[] = [];\n\n // Icons\n readonly fileIcon = fileIcon;\n readonly folderIcon = folderIcon;\n readonly calendarIcon = calendarIcon;\n readonly checkboxCheckedIcon = checkboxCheckedIcon;\n readonly listUnorderedIcon = listUnorderedIcon;\n\n // Enum reference\n readonly AttributeValueTypeDto = AttributeValueTypeDto;\n\n ngOnInit() {\n this.updateFilteredData();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['data']) {\n this.updateFilteredData();\n this.hasChanges = false;\n this.pendingChanges = [];\n }\n }\n\n get gridHeight(): string {\n const baseHeight = this.config.height || '400px';\n const searchHeight = this.config.showSearch ? 40 : 0;\n const toolbarHeight = !this.config.readOnlyMode ? 50 : 0;\n const totalOffset = searchHeight + toolbarHeight;\n\n if (baseHeight.includes('px')) {\n const px = parseInt(baseHeight) - totalOffset;\n return `${Math.max(px, 200)}px`;\n }\n return baseHeight;\n }\n\n /**\n * Update filtered data based on search term\n */\n updateFilteredData() {\n if (!this.searchTerm.trim()) {\n this.filteredData = [...this.data];\n return;\n }\n\n const term = this.searchTerm.toLowerCase();\n this.filteredData = this.data.filter(item =>\n item.name.toLowerCase().includes(term) ||\n (item.displayName?.toLowerCase().includes(term)) ||\n (item.description?.toLowerCase().includes(term)) ||\n String(item.value).toLowerCase().includes(term)\n );\n }\n\n /**\n * Handle search input\n */\n onSearch() {\n this.updateFilteredData();\n }\n\n /**\n * Get appropriate icon for property type\n */\n getTypeIcon(type: AttributeValueTypeDto): SVGIcon {\n switch (type) {\n case AttributeValueTypeDto.BooleanDto:\n return checkboxCheckedIcon;\n case AttributeValueTypeDto.IntDto:\n case AttributeValueTypeDto.IntegerDto:\n case AttributeValueTypeDto.DoubleDto:\n return fileIcon;\n case AttributeValueTypeDto.DateTimeDto:\n case AttributeValueTypeDto.DateTimeOffsetDto:\n return calendarIcon;\n case AttributeValueTypeDto.StringArrayDto:\n case AttributeValueTypeDto.IntegerArrayDto:\n return listUnorderedIcon;\n case AttributeValueTypeDto.RecordDto:\n case AttributeValueTypeDto.RecordArrayDto:\n return folderIcon;\n default:\n return fileIcon;\n }\n }\n\n /**\n * Format type name for display\n */\n formatTypeName(type: AttributeValueTypeDto): string {\n return type.replace('_DTO', '').replace('DTO', '').replace('_', ' ');\n }\n\n /**\n * Save pending changes\n */\n saveChanges() {\n if (this.pendingChanges.length > 0) {\n const updatedData = this.data.map(item => {\n const change = this.pendingChanges.find(c => c.property.id === item.id);\n return change ? { ...item, value: change.newValue } : item;\n });\n\n this.saveRequested.emit(updatedData);\n this.hasChanges = false;\n this.pendingChanges = [];\n }\n }\n\n /**\n * Discard pending changes\n */\n discardChanges() {\n this.hasChanges = false;\n this.pendingChanges = [];\n this.updateFilteredData();\n }\n\n /**\n * Handle property value change\n */\n onPropertyChange(property: PropertyGridItem, oldValue: unknown, newValue: unknown) {\n const changeEvent: PropertyChangeEvent = {\n property,\n oldValue,\n newValue\n };\n\n // Update or add to pending changes\n const existingIndex = this.pendingChanges.findIndex(c => c.property.id === property.id);\n if (existingIndex >= 0) {\n this.pendingChanges[existingIndex] = changeEvent;\n } else {\n this.pendingChanges.push(changeEvent);\n }\n\n this.hasChanges = this.pendingChanges.length > 0;\n this.propertyChange.emit(changeEvent);\n }\n\n /**\n * Handle binary download request from property value display\n */\n onBinaryDownload(event: BinaryDownloadEvent): void {\n this.binaryDownload.emit(event);\n }\n}\n","// Models\nexport * from './models/property-grid.models';\n\n// Services\nexport * from './services/property-converter.service';\n\n// Components\nexport * from './components/property-grid.component';\nexport * from './components/property-value-display.component';","import {\n Component,\n OnInit,\n OnDestroy,\n Input,\n Output,\n EventEmitter,\n forwardRef,\n ViewChild,\n inject,\n ElementRef\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n FormControl,\n ReactiveFormsModule,\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n Validator,\n AbstractControl,\n ValidationErrors,\n NG_VALIDATORS\n} from '@angular/forms';\nimport { AutoCompleteModule, AutoCompleteComponent, PopupSettings } from '@progress/kendo-angular-dropdowns';\nimport { LoaderModule } from '@progress/kendo-angular-indicators';\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { IconsModule, SVGIconModule } from '@progress/kendo-angular-icons';\nimport { searchIcon } from '@progress/kendo-svg-icons';\nimport {\n CkTypeSelectorService,\n CkTypeSelectorItem,\n CkTypeSelectorResult\n} from '@meshmakers/octo-services';\nimport { Subject, Subscription } from 'rxjs';\nimport {\n debounceTime,\n distinctUntilChanged,\n switchMap,\n tap,\n catchError,\n map\n} from 'rxjs/operators';\nimport { of } from 'rxjs';\nimport { CkTypeSelectorDialogService } from '../ck-type-selector-dialog/ck-type-selector-dialog.service';\n\n@Component({\n selector: 'mm-ck-type-selector-input',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n AutoCompleteModule,\n LoaderModule,\n ButtonsModule,\n IconsModule,\n SVGIconModule\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CkTypeSelectorInputComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => CkTypeSelectorInputComponent),\n multi: true\n }\n ],\n template: `\n <div class=\"ck-type-select-wrapper\" [class.disabled]=\"disabled\">\n <kendo-autocomplete\n #autocomplete\n [formControl]=\"searchFormControl\"\n [data]=\"filteredTypes\"\n [loading]=\"isLoading\"\n [placeholder]=\"placeholder\"\n [suggest]=\"true\"\n [clearButton]=\"true\"\n [filterable]=\"true\"\n [popupSettings]=\"popupSettings\"\n (filterChange)=\"onFilterChange($event)\"\n (valueChange)=\"onSelectionChange($event)\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus()\"\n class=\"ck-type-autocomplete\">\n\n <ng-template kendoAutoCompleteItemTemplate let-dataItem>\n <div class=\"ck-type-item\">\n {{ dataItem }}\n </div>\n </ng-template>\n\n <ng-template kendoAutoCompleteNoDataTemplate>\n <div class=\"no-data-message\">\n <span *ngIf=\"!isLoading && searchFormControl.value && searchFormControl.value.length >= minSearchLength\">\n No types found for \"{{ searchFormControl.value }}\"\n </span>\n <span *ngIf=\"!isLoading && (!searchFormControl.value || searchFormControl.value.length < minSearchLength)\">\n Type at least {{ minSearchLength }} characters to search...\n </span>\n </div>\n </ng-template>\n\n <ng-template kendoAutoCompleteFooterTemplate>\n <div class=\"advanced-search-footer\" (click)=\"openDialog($event)\">\n <kendo-svg-icon [icon]=\"searchIcon\" size=\"small\"></kendo-svg-icon>\n <span>{{ advancedSearchLabel }}</span>\n </div>\n </ng-template>\n\n </kendo-autocomplete>\n\n <button\n kendoButton\n type=\"button\"\n [svgIcon]=\"searchIcon\"\n [disabled]=\"disabled\"\n [title]=\"advancedSearchLabel\"\n class=\"dialog-button\"\n (click)=\"openDialog()\">\n </button>\n </div>\n `,\n styles: [`\n :host {\n display: block;\n width: 100%;\n }\n\n .ck-type-select-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n gap: 4px;\n }\n\n .ck-type-select-wrapper.disabled {\n opacity: 0.6;\n pointer-events: none;\n }\n\n .ck-type-autocomplete {\n flex: 1;\n min-width: 0;\n }\n\n .dialog-button {\n flex-shrink: 0;\n height: 30px;\n width: 30px;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .ck-type-item {\n padding: 4px 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .no-data-message {\n padding: 8px 12px;\n color: var(--kendo-color-subtle);\n font-style: italic;\n text-align: center;\n }\n\n .advanced-search-footer {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n cursor: pointer;\n color: var(--kendo-color-primary);\n border-top: 1px solid var(--kendo-color-border);\n background: var(--kendo-color-surface-alt);\n transition: background-color 0.2s;\n }\n\n .advanced-search-footer:hover {\n background: var(--kendo-color-base-hover);\n }\n `]\n})\nexport class CkTypeSelectorInputComponent implements OnInit, OnDestroy, ControlValueAccessor, Validator {\n @ViewChild('autocomplete', { static: true }) autocomplete!: AutoCompleteComponent;\n\n @Input() placeholder = 'Select a CK type...';\n @Input() minSearchLength = 2;\n @Input() maxResults = 50;\n @Input() debounceMs = 300;\n @Input() ckModelIds?: string[];\n @Input() allowAbstract = true;\n @Input() dialogTitle = 'Select Construction Kit Type';\n @Input() advancedSearchLabel = 'Advanced Search...';\n @Input() derivedFromRtCkTypeId?: string;\n\n private _disabled = false;\n @Input()\n get disabled(): boolean {\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = !!value;\n if (this._disabled) {\n this.searchFormControl.disable();\n } else {\n this.searchFormControl.enable();\n }\n }\n\n private _required = false;\n @Input()\n get required(): boolean {\n return this._required;\n }\n set required(value: boolean) {\n this._required = !!value;\n }\n\n @Output() ckTypeSelected = new EventEmitter<CkTypeSelectorItem>();\n @Output() ckTypeCleared = new EventEmitter<void>();\n\n public searchFormControl = new FormControl();\n public filteredTypes: string[] = [];\n public selectedCkType: CkTypeSelectorItem | null = null;\n public isLoading = false;\n private typeMap = new Map<string, CkTypeSelectorItem>();\n\n private searchSubject = new Subject<string>();\n private subscriptions = new Subscription();\n private onChange: (value: CkTypeSelectorItem | null) => void = () => { /* noop */ };\n private onTouched: () => void = () => { /* noop */ };\n\n protected readonly searchIcon = searchIcon;\n protected popupSettings: PopupSettings = { appendTo: 'root', popupClass: 'mm-ck-type-popup' };\n\n private static popupStyleInjected = false;\n private readonly ckTypeSelectorService = inject(CkTypeSelectorService);\n private readonly dialogService = inject(CkTypeSelectorDialogService, { optional: true });\n private readonly elementRef = inject(ElementRef);\n\n ngOnInit(): void {\n this.setupSearch();\n this.injectPopupStyles();\n }\n\n ngOnDestroy(): void {\n this.subscriptions.unsubscribe();\n this.searchSubject.complete();\n }\n\n // ControlValueAccessor implementation\n writeValue(value: CkTypeSelectorItem | null): void {\n if (value !== this.selectedCkType) {\n this.selectedCkType = value;\n if (value) {\n // Ensure the value is in the data list so the autocomplete can display it\n if (!this.typeMap.has(value.rtCkTypeId)) {\n this.typeMap.set(value.rtCkTypeId, value);\n this.filteredTypes = [value.rtCkTypeId];\n }\n this.searchFormControl.setValue(value.rtCkTypeId, { emitEvent: false });\n } else {\n this.searchFormControl.setValue('', { emitEvent: false });\n }\n }\n }\n\n registerOnChange(fn: (value: CkTypeSelectorItem | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n // Validator implementation\n validate(control: AbstractControl): ValidationErrors | null {\n if (this.required && !this.selectedCkType) {\n return { required: true };\n }\n\n const value = control.value;\n if (value && typeof value === 'string') {\n return { invalidCkType: true };\n }\n\n return null;\n }\n\n // Event handlers\n onFilterChange(filter: string): void {\n if (!filter || filter.length < this.minSearchLength) {\n this.filteredTypes = [];\n return;\n }\n\n this.searchSubject.next(filter);\n }\n\n onSelectionChange(value: string): void {\n if (value && typeof value === 'string') {\n const ckType = this.typeMap.get(value);\n if (ckType) {\n this.selectCkType(ckType);\n }\n }\n }\n\n onFocus(): void {\n const currentValue = this.searchFormControl.value;\n if (currentValue && currentValue.length >= this.minSearchLength && this.filteredTypes.length === 0) {\n this.searchSubject.next(currentValue);\n }\n }\n\n onBlur(): void {\n this.onTouched();\n\n if (this.filteredTypes.length === 1 && !this.selectedCkType) {\n const displayText = this.filteredTypes[0];\n const ckType = this.typeMap.get(displayText);\n if (ckType) {\n this.selectCkType(ckType);\n }\n }\n }\n\n // Public methods\n public clear(): void {\n this.selectedCkType = null;\n this.filteredTypes = [];\n this.typeMap.clear();\n this.searchFormControl.setValue('', { emitEvent: false });\n this.onChange(null);\n this.ckTypeCleared.emit();\n this.autocomplete.focus();\n }\n\n public focus(): void {\n if (this.autocomplete) {\n this.autocomplete.focus();\n }\n }\n\n public reset(): void {\n this.clear();\n }\n\n // Private methods\n private setupSearch(): void {\n this.subscriptions.add(\n this.searchSubject.pipe(\n debounceTime(this.debounceMs),\n distinctUntilChanged(),\n tap(() => {\n this.isLoading = true;\n this.filteredTypes = [];\n }),\n switchMap(filter => {\n const source$ = this.derivedFromRtCkTypeId\n ? this.getDerivedTypes(filter)\n : this.ckTypeSelectorService.getCkTypes({\n ckModelIds: this.ckModelIds,\n searchText: filter,\n first: this.maxResults\n });\n return source$.pipe(\n catchError(error => {\n console.error('CK type search error:', error);\n return of({ items: [], totalCount: 0 });\n })\n );\n })\n ).subscribe((result: CkTypeSelectorResult) => {\n this.isLoading = false;\n\n // Filter out abstract types if not allowed\n let items = result.items;\n if (!this.allowAbstract) {\n items = items.filter((item: CkTypeSelectorItem) => !item.isAbstract);\n }\n\n this.filteredTypes = items.map((item: CkTypeSelectorItem) => item.rtCkTypeId);\n this.typeMap = new Map(\n items.map((item: CkTypeSelectorItem) => [item.rtCkTypeId, item])\n );\n })\n );\n }\n\n private getDerivedTypes(filter: string) {\n const derivedService = this.ckTypeSelectorService as {\n getDerivedCkTypes?: (\n rtCkTypeId: string,\n options?: {\n searchText?: string;\n ignoreAbstractTypes?: boolean;\n includeSelf?: boolean;\n }\n ) => import('rxjs').Observable<CkTypeSelectorResult>;\n };\n\n if (derivedService.getDerivedCkTypes) {\n return derivedService.getDerivedCkTypes(this.derivedFromRtCkTypeId!, {\n searchText: filter\n });\n }\n\n return this.ckTypeSelectorService\n .getCkTypes({\n searchText: filter,\n first: this.maxResults,\n skip: 0\n })\n .pipe(\n map(result =>\n this.filterDerivedTypesFallback(result, this.derivedFromRtCkTypeId!)\n )\n );\n }\n\n private filterDerivedTypesFallback(\n result: CkTypeSelectorResult,\n baseRtCkTypeId: string\n ): CkTypeSelectorResult {\n const allowed = new Set<string>([baseRtCkTypeId]);\n let changed = true;\n\n while (changed) {\n changed = false;\n for (const item of result.items) {\n if (\n item.baseTypeRtCkTypeId &&\n allowed.has(item.baseTypeRtCkTypeId) &&\n !allowed.has(item.rtCkTypeId)\n ) {\n allowed.add(item.rtCkTypeId);\n changed = true;\n }\n }\n }\n\n const items = result.items.filter(item =>\n allowed.has(item.rtCkTypeId) && (this.allowAbstract || !item.isAbstract)\n );\n\n return { items, totalCount: items.length };\n }\n\n private injectPopupStyles(): void {\n if (CkTypeSelectorInputComponent.popupStyleInjected) return;\n const style = document.createElement('style');\n style.setAttribute('data-mm-ck-type-popup', '');\n style.textContent = `\n .mm-ck-type-popup {\n max-width: 500px !important;\n min-width: 0 !important;\n }\n .mm-ck-type-popup .k-child-animation-container {\n max-width: 500px !important;\n }\n .mm-ck-type-popup .k-list-item {\n padding: 4px 12px !important;\n min-height: 0 !important;\n font-size: 13px !important;\n line-height: 20px !important;\n }\n `;\n document.head.appendChild(style);\n CkTypeSelectorInputComponent.popupStyleInjected = true;\n }\n\n private selectCkType(ckType: CkTypeSelectorItem): void {\n this.selectedCkType = ckType;\n this.searchFormControl.setValue(ckType.rtCkTypeId, { emitEvent: false });\n this.filteredTypes = [];\n this.onChange(ckType);\n this.ckTypeSelected.emit(ckType);\n this.autocomplete.toggle(false);\n }\n\n // Dialog\n public async openDialog(event?: Event): Promise<void> {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (!this.dialogService) {\n console.warn('CkTypeSelectorDialogService not available');\n return;\n }\n\n this.autocomplete.toggle(false);\n\n const result = await this.dialogService.openCkTypeSelector({\n selectedCkTypeId: this.selectedCkType?.fullName,\n ckModelIds: this.ckModelIds,\n dialogTitle: this.dialogTitle,\n allowAbstract: this.allowAbstract,\n derivedFromRtCkTypeId: this.derivedFromRtCkTypeId\n });\n\n if (result.confirmed && result.selectedCkType) {\n this.selectCkType(result.selectedCkType);\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, OnInit, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n AttributeItem,\n AttributeSelectorService,\n AttributeValueTypeDto,\n} from '@meshmakers/octo-services';\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { WindowModule, WindowRef } from '@progress/kendo-angular-dialog';\nimport { DropDownListModule } from '@progress/kendo-angular-dropdowns';\nimport {\n CellClickEvent,\n GridDataResult,\n GridModule,\n} from '@progress/kendo-angular-grid';\nimport { IconsModule } from '@progress/kendo-angular-icons';\nimport { InputsModule } from '@progress/kendo-angular-inputs';\nimport {\n arrowDownIcon,\n arrowLeftIcon,\n arrowRightIcon,\n arrowUpIcon,\n chevronDoubleLeftIcon,\n chevronDoubleRightIcon,\n searchIcon,\n} from '@progress/kendo-svg-icons';\nimport { Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\n\nexport interface AttributeSelectorDialogData {\n rtCkTypeId: string;\n selectedAttributes?: string[];\n dialogTitle?: string;\n singleSelect?: boolean;\n includeNavigationProperties?: boolean;\n maxDepth?: number;\n /** Additional virtual attributes to include in the available list (e.g., Timestamp for stream data queries) */\n additionalAttributes?: AttributeItem[];\n /** When true, hides the navigation properties checkbox and max depth controls */\n hideNavigationControls?: boolean;\n /** When set, restricts the available attributes to only these attribute paths (filtered client-side after fetching) */\n attributePaths?: string[];\n}\n\nexport interface AttributeSelectorDialogResult {\n selectedAttributes: AttributeItem[];\n}\n\ninterface ValueTypeFilterOption {\n text: string;\n value: AttributeValueTypeDto | null;\n}\n\n@Component({\n selector: 'mm-attribute-selector-dialog',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n GridModule,\n ButtonsModule,\n InputsModule,\n DropDownListModule,\n IconsModule,\n WindowModule,\n ],\n template: `\n <div class=\"attribute-selector-container\">\n <div class=\"filter-container\">\n <kendo-textbox\n [(ngModel)]=\"searchText\"\n (ngModelChange)=\"onSearchChange($event)\"\n placeholder=\"Search path & description...\"\n class=\"search-input\"\n >\n <ng-template kendoTextBoxSuffixTemplate>\n <button\n kendoButton\n [svgIcon]=\"searchIcon\"\n fillMode=\"clear\"\n ></button>\n </ng-template>\n </kendo-textbox>\n <kendo-dropdownlist\n [data]=\"valueTypeOptions\"\n [(ngModel)]=\"selectedValueTypeFilter\"\n (valueChange)=\"onValueTypeFilterChange($event)\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n class=\"type-filter-dropdown\"\n >\n </kendo-dropdownlist>\n </div>\n\n @if (!hideNavigationControls) {\n <div class=\"options-container\">\n <input\n type=\"checkbox\"\n kendoCheckBox\n [(ngModel)]=\"includeNavigationProperties\"\n (ngModelChange)=\"onNavigationPropertiesChange()\"\n />\n <label class=\"option-label\">Include Navigation Properties</label>\n\n <kendo-numerictextbox\n [(ngModel)]=\"maxDepth\"\n [min]=\"1\"\n [max]=\"5\"\n [step]=\"1\"\n [format]=\"'n0'\"\n [placeholder]=\"'Depth'\"\n [spinners]=\"true\"\n [disabled]=\"!includeNavigationProperties\"\n (valueChange)=\"onMaxDepthChange($event)\"\n class=\"depth-input\"\n >\n </kendo-numerictextbox>\n <label class=\"option-label\">Max Depth</label>\n </div>\n }\n\n <div class=\"lists-container\" *ngIf=\"!singleSelect\">\n <div class=\"list-section\">\n <h4>Available Attributes</h4>\n <kendo-grid\n [data]=\"availableGridData\"\n [scrollable]=\"'scrollable'\"\n [selectable]=\"{ mode: 'multiple', enabled: true }\"\n [kendoGridSelectBy]=\"'attributePath'\"\n [(selectedKeys)]=\"selectedAvailableKeys\"\n (cellClick)=\"onAvailableCellClick($event)\"\n [resizable]=\"true\"\n class=\"attribute-grid\"\n >\n <kendo-grid-column\n field=\"attributePath\"\n title=\"Attribute Path\"\n [width]=\"250\"\n ></kendo-grid-column>\n <kendo-grid-column\n field=\"attributeValueType\"\n title=\"Type\"\n [width]=\"100\"\n ></kendo-grid-column>\n <kendo-grid-column\n field=\"description\"\n title=\"Description\"\n ></kendo-grid-column>\n </kendo-grid>\n </div>\n\n <div class=\"action-buttons\">\n <button\n kendoButton\n [svgIcon]=\"arrowRightIcon\"\n [disabled]=\"selectedAvailableKeys.length === 0\"\n (click)=\"addSelected()\"\n title=\"Add selected\"\n ></button>\n <button\n kendoButton\n [svgIcon]=\"arrowLeftIcon\"\n [disabled]=\"selectedChosenKeys.length === 0\"\n (click)=\"removeSelected()\"\n title=\"Remove selected\"\n ></button>\n <div class=\"separator\"></div>\n <button\n kendoButton\n [svgIcon]=\"chevronDoubleRightIcon\"\n [disabled]=\"availableAttributes.length === 0\"\n (click)=\"addAll()\"\n title=\"Add all\"\n ></button>\n <button\n kendoButton\n [svgIcon]=\"chevronDoubleLeftIcon\"\n [disabled]=\"selectedAttributes.length === 0\"\n (click)=\"removeAll()\"\n title=\"Remove all\"\n ></button>\n </div>\n\n <div class=\"list-section\">\n <h4>Selected Attributes ({{ selectedAttributes.length }})</h4>\n <kendo-grid\n [data]=\"selectedGridData\"\n [scrollable]=\"'scrollable'\"\n [selectable]=\"{ mode: 'single', enabled: true }\"\n [kendoGridSelectBy]=\"'attributePath'\"\n [(selectedKeys)]=\"selectedChosenKeys\"\n (cellClick)=\"onSelectedCellClick($event)\"\n [resizable]=\"true\"\n class=\"attribute-grid\"\n >\n <kendo-grid-column\n field=\"attributePath\"\n title=\"Attribute Path\"\n [width]=\"200\"\n >\n <ng-template\n kendoGridCellTemplate\n let-dataItem\n let-rowIndex=\"rowIndex\"\n >\n <span class=\"order-number\">{{ rowIndex + 1 }}.</span>\n {{ dataItem.attributePath }}\n </ng-template>\n </kendo-grid-column>\n <kendo-grid-column\n field=\"attributeValueType\"\n title=\"Type\"\n [width]=\"100\"\n ></kendo-grid-column>\n </kendo-grid>\n </div>\n\n <div class=\"order-buttons\">\n <button\n kendoButton\n [svgIcon]=\"arrowUpIcon\"\n [disabled]=\"!canMoveUp()\"\n (click)=\"moveUp()\"\n title=\"Move up\"\n ></button>\n <button\n kendoButton\n [svgIcon]=\"arrowDownIcon\"\n [disabled]=\"!canMoveDown()\"\n (click)=\"moveDown()\"\n title=\"Move down\"\n ></button>\n </div>\n </div>\n\n <div class=\"single-select-container\" *ngIf=\"singleSelect\">\n <kendo-grid\n [data]=\"availableGridData\"\n [scrollable]=\"'scrollable'\"\n [selectable]=\"{ mode: 'single', enabled: true }\"\n [kendoGridSelectBy]=\"'attributePath'\"\n [(selectedKeys)]=\"selectedSingleKey\"\n (cellClick)=\"onSingleSelectCellClick($event)\"\n [resizable]=\"true\"\n class=\"attribute-grid\"\n >\n <kendo-grid-column\n field=\"attributePath\"\n title=\"Attribute Path\"\n [width]=\"250\"\n ></kendo-grid-column>\n <kendo-grid-column\n field=\"attributeValueType\"\n title=\"Type\"\n [width]=\"100\"\n ></kendo-grid-column>\n <kendo-grid-column\n field=\"description\"\n title=\"Description\"\n ></kendo-grid-column>\n </kendo-grid>\n </div>\n\n <div class=\"action-bar\">\n <button kendoButton (click)=\"onCancel()\">Cancel</button>\n <button\n kendoButton\n themeColor=\"primary\"\n [disabled]=\"singleSelect && selectedSingleKey.length === 0\"\n (click)=\"onConfirm()\"\n >\n OK\n </button>\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n height: 100%;\n }\n\n .attribute-selector-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 16px 20px;\n box-sizing: border-box;\n gap: 16px;\n }\n\n .filter-container {\n display: flex;\n gap: 12px;\n flex-shrink: 0;\n }\n\n .search-input {\n flex: 1;\n }\n\n .type-filter-dropdown {\n width: 160px;\n flex-shrink: 0;\n }\n\n .options-container {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.85rem;\n flex-shrink: 0;\n }\n\n .option-label {\n cursor: pointer;\n }\n\n .depth-input {\n width: 90px;\n }\n\n .lists-container {\n display: flex;\n gap: 16px;\n flex: 1;\n min-height: 0;\n }\n\n .list-section {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n }\n\n .list-section h4 {\n margin: 0 0 10px 0;\n font-size: 0.85rem;\n font-weight: 600;\n flex-shrink: 0;\n }\n\n .attribute-grid {\n border-radius: 4px;\n flex: 1;\n min-height: 200px;\n }\n\n .attribute-grid ::ng-deep .k-grid-table tbody tr {\n cursor: pointer;\n }\n\n .action-buttons {\n display: flex;\n flex-direction: column;\n gap: 8px;\n justify-content: center;\n padding: 0 8px;\n padding-top: 32px;\n }\n\n .separator {\n height: 1px;\n background-color: var(--kendo-color-border, #dee2e6);\n margin: 8px 0;\n }\n\n .order-buttons {\n display: flex;\n flex-direction: column;\n gap: 8px;\n justify-content: center;\n padding: 0 8px;\n padding-top: 32px;\n }\n\n .order-number {\n color: var(--kendo-color-primary, #ff6358);\n font-weight: 600;\n margin-right: 8px;\n min-width: 24px;\n display: inline-block;\n }\n\n .single-select-container {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n\n .single-select-container .attribute-grid {\n flex: 1;\n }\n\n .action-bar {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n flex-shrink: 0;\n padding-top: 8px;\n border-top: 1px solid var(--kendo-color-border, #dee2e6);\n }\n `,\n ],\n})\nexport class AttributeSelectorDialogComponent implements OnInit {\n private readonly windowRef = inject(WindowRef);\n private readonly attributeService = inject(AttributeSelectorService);\n private searchSubject = new Subject<string>();\n\n protected readonly arrowRightIcon = arrowRightIcon;\n protected readonly arrowLeftIcon = arrowLeftIcon;\n protected readonly chevronDoubleRightIcon = chevronDoubleRightIcon;\n protected readonly chevronDoubleLeftIcon = chevronDoubleLeftIcon;\n protected readonly searchIcon = searchIcon;\n protected readonly arrowUpIcon = arrowUpIcon;\n protected readonly arrowDownIcon = arrowDownIcon;\n\n private _data!: AttributeSelectorDialogData;\n public get data(): AttributeSelectorDialogData {\n return this._data;\n }\n public set data(value: AttributeSelectorDialogData) {\n this._data = value;\n if (value) {\n this.initializeFromData(value);\n }\n }\n\n public dialogTitle = 'Select Attributes';\n public rtCkTypeId!: string;\n public singleSelect = false;\n private additionalAttributes: AttributeItem[] = [];\n public searchText = '';\n public selectedSingleKey: string[] = [];\n public selectedValueTypeFilter: AttributeValueTypeDto | null = null;\n public includeNavigationProperties = true;\n public maxDepth: number | null = null;\n public hideNavigationControls = false;\n private attributePathsSet: Set<string> | null = null;\n\n public availableAttributes: AttributeItem[] = [];\n public selectedAttributes: AttributeItem[] = [];\n\n public availableGridData: GridDataResult = { data: [], total: 0 };\n public selectedGridData: GridDataResult = { data: [], total: 0 };\n\n public selectedAvailableKeys: string[] = [];\n public selectedChosenKeys: string[] = [];\n\n public valueTypeOptions: ValueTypeFilterOption[] = [\n { text: 'All Types', value: null },\n { text: 'String', value: AttributeValueTypeDto.StringDto },\n { text: 'Integer', value: AttributeValueTypeDto.IntegerDto },\n { text: 'Double', value: AttributeValueTypeDto.DoubleDto },\n { text: 'Boolean', value: AttributeValueTypeDto.BooleanDto },\n { text: 'DateTime', value: AttributeValueTypeDto.DateTimeDto },\n { text: 'DateTimeOffset', value: AttributeValueTypeDto.DateTimeOffsetDto },\n { text: 'Enum', value: AttributeValueTypeDto.EnumDto },\n { text: 'TimeSpan', value: AttributeValueTypeDto.TimeSpanDto },\n ];\n\n // Double-click tracking\n private lastClickTime = 0;\n private lastClickedItem: string | null = null;\n private readonly doubleClickDelay = 300; // milliseconds\n\n ngOnInit(): void {\n // Set up search debouncing (always, regardless of data timing)\n this.searchSubject\n .pipe(debounceTime(300), distinctUntilChanged())\n .subscribe((searchText) => {\n this.loadAvailableAttributes(searchText);\n });\n }\n\n private initializeFromData(data: AttributeSelectorDialogData): void {\n this.rtCkTypeId = data.rtCkTypeId;\n this.dialogTitle = data.dialogTitle || 'Select Attributes';\n this.singleSelect = data.singleSelect ?? false;\n this.includeNavigationProperties = data.includeNavigationProperties ?? true;\n this.maxDepth = data.maxDepth ?? null;\n this.additionalAttributes = data.additionalAttributes ?? [];\n this.hideNavigationControls = data.hideNavigationControls ?? false;\n this.attributePathsSet = data.attributePaths\n ? new Set(data.attributePaths)\n : null;\n\n if (data.selectedAttributes && data.selectedAttributes.length > 0) {\n if (this.singleSelect) {\n this.selectedSingleKey = [data.selectedAttributes[0]];\n } else {\n this.loadInitialSelectedAttributes(data.selectedAttributes);\n }\n }\n\n // Load initial attributes\n this.loadAvailableAttributes();\n }\n\n private loadAvailableAttributes(searchTerm?: string): void {\n this.attributeService\n .getAvailableAttributes(\n this.rtCkTypeId,\n undefined,\n undefined,\n undefined,\n this.selectedValueTypeFilter || undefined,\n searchTerm || undefined,\n this.includeNavigationProperties,\n this.maxDepth ?? undefined,\n )\n .subscribe((result) => {\n // Filter out already selected attributes\n const selectedPaths = new Set(\n this.selectedAttributes.map((a) => a.attributePath),\n );\n\n // Apply client-side attribute path restriction if set (additionalAttributes bypass this filter intentionally)\n const filteredItems = this.attributePathsSet\n ? result.items.filter((item) =>\n this.attributePathsSet!.has(item.attributePath),\n )\n : result.items;\n\n // Include additional virtual attributes (e.g., Timestamp for stream data), filtered by search/type\n const filteredAdditional = this.additionalAttributes.filter((attr) => {\n if (selectedPaths.has(attr.attributePath)) return false;\n if (\n searchTerm &&\n !attr.attributePath.toLowerCase().includes(searchTerm.toLowerCase())\n )\n return false;\n if (\n this.selectedValueTypeFilter &&\n attr.attributeValueType !== this.selectedValueTypeFilter\n )\n return false;\n return true;\n });\n\n this.availableAttributes = [\n ...filteredAdditional,\n ...filteredItems.filter(\n (item) => !selectedPaths.has(item.attributePath),\n ),\n ];\n this.updateAvailableGrid();\n });\n }\n\n private loadInitialSelectedAttributes(attributePaths: string[]): void {\n // Load all attributes to get the details for selected ones\n this.attributeService\n .getAvailableAttributes(\n this.rtCkTypeId,\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n this.includeNavigationProperties,\n this.maxDepth ?? undefined,\n )\n .subscribe((result) => {\n // Create a map for quick lookup, including additional virtual attributes\n const attributeMap = new Map(\n result.items.map((item) => [item.attributePath, item]),\n );\n for (const attr of this.additionalAttributes) {\n attributeMap.set(attr.attributePath, attr);\n }\n\n // Preserve the order from attributePaths\n this.selectedAttributes = attributePaths\n .map((path) => attributeMap.get(path))\n .filter((item): item is AttributeItem => item !== undefined);\n\n this.updateSelectedGrid();\n\n // Filter out selected from available, and apply attributePathsSet restriction\n const selectedPaths = new Set(\n this.selectedAttributes.map((a) => a.attributePath),\n );\n const filteredItems = this.attributePathsSet\n ? result.items.filter((item) =>\n this.attributePathsSet!.has(item.attributePath),\n )\n : result.items;\n this.availableAttributes = [\n ...this.additionalAttributes.filter(\n (attr) => !selectedPaths.has(attr.attributePath),\n ),\n ...filteredItems.filter(\n (item) => !selectedPaths.has(item.attributePath),\n ),\n ];\n this.updateAvailableGrid();\n });\n }\n\n public onSearchChange(value: string): void {\n this.searchSubject.next(value);\n }\n\n public onValueTypeFilterChange(_value: AttributeValueTypeDto | null): void {\n this.loadAvailableAttributes(this.searchText || undefined);\n }\n\n public onNavigationPropertiesChange(): void {\n if (!this.includeNavigationProperties) {\n this.maxDepth = null;\n }\n this.loadAvailableAttributes(this.searchText || undefined);\n }\n\n public onMaxDepthChange(value: number | null): void {\n this.maxDepth = value;\n this.loadAvailableAttributes(this.searchText || undefined);\n }\n\n public addSelected(): void {\n const itemsToAdd = this.availableAttributes.filter((item) =>\n this.selectedAvailableKeys.includes(item.attributePath),\n );\n\n this.selectedAttributes.push(...itemsToAdd);\n this.availableAttributes = this.availableAttributes.filter(\n (item) => !this.selectedAvailableKeys.includes(item.attributePath),\n );\n\n this.selectedAvailableKeys = [];\n this.updateGrids();\n }\n\n public removeSelected(): void {\n const itemsToRemove = this.selectedAttributes.filter((item) =>\n this.selectedChosenKeys.includes(item.attributePath),\n );\n\n this.availableAttributes.push(...itemsToRemove);\n this.selectedAttributes = this.selectedAttributes.filter(\n (item) => !this.selectedChosenKeys.includes(item.attributePath),\n );\n\n this.selectedChosenKeys = [];\n this.sortAvailableAttributes();\n this.updateGrids();\n }\n\n public addAll(): void {\n this.selectedAttributes.push(...this.availableAttributes);\n this.availableAttributes = [];\n this.selectedAvailableKeys = [];\n this.updateGrids();\n }\n\n public removeAll(): void {\n this.availableAttributes.push(...this.selectedAttributes);\n this.selectedAttributes = [];\n this.selectedChosenKeys = [];\n this.sortAvailableAttributes();\n this.updateGrids();\n }\n\n private sortAvailableAttributes(): void {\n this.availableAttributes.sort((a, b) =>\n a.attributePath.localeCompare(b.attributePath),\n );\n }\n\n public canMoveUp(): boolean {\n if (this.selectedChosenKeys.length !== 1) return false;\n const index = this.selectedAttributes.findIndex(\n (a) => a.attributePath === this.selectedChosenKeys[0],\n );\n return index > 0;\n }\n\n public canMoveDown(): boolean {\n if (this.selectedChosenKeys.length !== 1) return false;\n const index = this.selectedAttributes.findIndex(\n (a) => a.attributePath === this.selectedChosenKeys[0],\n );\n return index >= 0 && index < this.selectedAttributes.length - 1;\n }\n\n public moveUp(): void {\n if (!this.canMoveUp()) return;\n const index = this.selectedAttributes.findIndex(\n (a) => a.attributePath === this.selectedChosenKeys[0],\n );\n [this.selectedAttributes[index - 1], this.selectedAttributes[index]] = [\n this.selectedAttributes[index],\n this.selectedAttributes[index - 1],\n ];\n this.updateSelectedGrid();\n }\n\n public moveDown(): void {\n if (!this.canMoveDown()) return;\n const index = this.selectedAttributes.findIndex(\n (a) => a.attributePath === this.selectedChosenKeys[0],\n );\n [this.selectedAttributes[index], this.selectedAttributes[index + 1]] = [\n this.selectedAttributes[index + 1],\n this.selectedAttributes[index],\n ];\n this.updateSelectedGrid();\n }\n\n private updateGrids(): void {\n this.updateAvailableGrid();\n this.updateSelectedGrid();\n }\n\n private updateAvailableGrid(): void {\n this.availableGridData = {\n data: this.availableAttributes,\n total: this.availableAttributes.length,\n };\n }\n\n private updateSelectedGrid(): void {\n this.selectedGridData = {\n data: this.selectedAttributes,\n total: this.selectedAttributes.length,\n };\n }\n\n public onCancel(): void {\n this.windowRef.close();\n }\n\n public onConfirm(): void {\n if (this.singleSelect) {\n const selected = this.availableAttributes.find(\n (a) => a.attributePath === this.selectedSingleKey[0],\n );\n const result: AttributeSelectorDialogResult = {\n selectedAttributes: selected ? [selected] : [],\n };\n this.windowRef.close(result);\n } else {\n const result: AttributeSelectorDialogResult = {\n selectedAttributes: this.selectedAttributes,\n };\n this.windowRef.close(result);\n }\n }\n\n /**\n * Handle cell click on available attributes grid to detect double-click\n */\n public onAvailableCellClick(event: CellClickEvent): void {\n const dataItem = event.dataItem as AttributeItem;\n if (!dataItem) return;\n\n const currentTime = Date.now();\n const attributePath = dataItem.attributePath;\n\n if (\n this.lastClickedItem === attributePath &&\n currentTime - this.lastClickTime <= this.doubleClickDelay\n ) {\n // Double-click detected - move attribute to selected\n this.moveAttributeToSelected(dataItem);\n // Reset to prevent triple-click\n this.lastClickTime = 0;\n this.lastClickedItem = null;\n } else {\n // Single click - just update tracking\n this.lastClickTime = currentTime;\n this.lastClickedItem = attributePath;\n }\n }\n\n /**\n * Handle cell click on selected attributes grid to detect double-click\n */\n public onSelectedCellClick(event: CellClickEvent): void {\n const dataItem = event.dataItem as AttributeItem;\n if (!dataItem) return;\n\n const currentTime = Date.now();\n const attributePath = dataItem.attributePath;\n\n if (\n this.lastClickedItem === attributePath &&\n currentTime - this.lastClickTime <= this.doubleClickDelay\n ) {\n // Double-click detected - move attribute to available\n this.moveAttributeToAvailable(dataItem);\n // Reset to prevent triple-click\n this.lastClickTime = 0;\n this.lastClickedItem = null;\n } else {\n // Single click - just update tracking\n this.lastClickTime = currentTime;\n this.lastClickedItem = attributePath;\n }\n }\n\n /**\n * Handle cell click on single-select grid to detect double-click (confirm immediately)\n */\n public onSingleSelectCellClick(event: CellClickEvent): void {\n const dataItem = event.dataItem as AttributeItem;\n if (!dataItem) return;\n\n const currentTime = Date.now();\n const attributePath = dataItem.attributePath;\n\n if (\n this.lastClickedItem === attributePath &&\n currentTime - this.lastClickTime <= this.doubleClickDelay\n ) {\n // Double-click detected - confirm immediately\n this.selectedSingleKey = [attributePath];\n this.onConfirm();\n this.lastClickTime = 0;\n this.lastClickedItem = null;\n } else {\n this.lastClickTime = currentTime;\n this.lastClickedItem = attributePath;\n }\n }\n\n /**\n * Move a single attribute from available to selected\n */\n private moveAttributeToSelected(attribute: AttributeItem): void {\n // Remove from available\n this.availableAttributes = this.availableAttributes.filter(\n (item) => item.attributePath !== attribute.attributePath,\n );\n\n // Add to selected\n this.selectedAttributes.push(attribute);\n\n // Clear selections\n this.selectedAvailableKeys = this.selectedAvailableKeys.filter(\n (key) => key !== attribute.attributePath,\n );\n\n this.updateGrids();\n }\n\n /**\n * Move a single attribute from selected to available\n */\n private moveAttributeToAvailable(attribute: AttributeItem): void {\n // Remove from selected\n this.selectedAttributes = this.selectedAttributes.filter(\n (item) => item.attributePath !== attribute.attributePath,\n );\n\n // Add to available\n this.availableAttributes.push(attribute);\n\n // Clear selections\n this.selectedChosenKeys = this.selectedChosenKeys.filter(\n (key) => key !== attribute.attributePath,\n );\n\n // Sort available attributes\n this.sortAvailableAttributes();\n this.updateGrids();\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { WindowService, WindowRef, WindowCloseResult } from '@progress/kendo-angular-dialog';\nimport { firstValueFrom } from 'rxjs';\nimport { WindowStateService } from '@meshmakers/shared-ui';\nimport {\n AttributeSelectorDialogComponent,\n AttributeSelectorDialogData,\n AttributeSelectorDialogResult\n} from './attribute-selector-dialog.component';\nimport { AttributeItem } from '@meshmakers/octo-services';\n\nexport interface AttributeSelectorResult {\n confirmed: boolean;\n selectedAttributes: AttributeItem[];\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AttributeSelectorDialogService {\n private readonly windowService = inject(WindowService);\n private readonly windowStateService = inject(WindowStateService);\n\n /**\n * Opens the attribute selector dialog\n * @param rtCkTypeId The RtCkType ID to fetch attributes for\n * @param selectedAttributes Optional array of pre-selected attribute paths\n * @param dialogTitle Optional custom dialog title\n * @param singleSelect Optional flag for single-select mode\n * @param additionalAttributes Optional virtual attributes to include (e.g., Timestamp for stream data)\n * @param includeNavigationProperties Optional flag to control navigation property inclusion\n * @param maxDepth Optional max depth for navigation properties\n * @param hideNavigationControls Optional flag to hide the navigation property controls in the dialog\n * @returns Promise that resolves with the result containing selected attributes and confirmation status\n */\n public async openAttributeSelector(\n rtCkTypeId: string,\n selectedAttributes?: string[],\n dialogTitle?: string,\n singleSelect?: boolean,\n additionalAttributes?: AttributeItem[],\n includeNavigationProperties?: boolean,\n maxDepth?: number,\n hideNavigationControls?: boolean,\n attributePaths?: string[]\n ): Promise<AttributeSelectorResult> {\n const data: AttributeSelectorDialogData = {\n rtCkTypeId,\n selectedAttributes,\n dialogTitle,\n singleSelect,\n additionalAttributes,\n includeNavigationProperties,\n maxDepth,\n hideNavigationControls,\n attributePaths\n };\n\n const dialogKey = singleSelect ? 'attribute-selector-single' : 'attribute-selector';\n const defaultWidth = singleSelect ? 550 : 1000;\n const defaultHeight = singleSelect ? 650 : 700;\n const size = this.windowStateService.resolveWindowSize(dialogKey, { width: defaultWidth, height: defaultHeight });\n\n const windowRef: WindowRef = this.windowService.open({\n content: AttributeSelectorDialogComponent,\n width: size.width,\n height: size.height,\n minWidth: singleSelect ? 450 : 850,\n minHeight: singleSelect ? 550 : 650,\n resizable: true,\n title: dialogTitle || 'Select Attributes'\n });\n\n this.windowStateService.applyModalBehavior(dialogKey, windowRef);\n\n // Pass data to the component\n const contentRef = windowRef.content as { instance?: AttributeSelectorDialogComponent } | undefined;\n if (contentRef?.instance) {\n contentRef.instance.data = data;\n }\n\n try {\n const result = await firstValueFrom(windowRef.result);\n\n if (result instanceof WindowCloseResult) {\n return {\n confirmed: false,\n selectedAttributes: []\n };\n }\n\n if (result && typeof result === 'object' && 'selectedAttributes' in result) {\n const dialogResult = result as AttributeSelectorDialogResult;\n return {\n confirmed: true,\n selectedAttributes: dialogResult.selectedAttributes\n };\n } else {\n return {\n confirmed: false,\n selectedAttributes: []\n };\n }\n } catch {\n return {\n confirmed: false,\n selectedAttributes: []\n };\n }\n }\n}\n","import { Component, inject, signal, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { WindowRef } from '@progress/kendo-angular-dialog';\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { InputsModule } from '@progress/kendo-angular-inputs';\nimport { GridModule } from '@progress/kendo-angular-grid';\nimport { IconsModule } from '@progress/kendo-angular-icons';\nimport { pencilIcon, trashIcon } from '@progress/kendo-svg-icons';\nimport {\n GetEntitiesByCkTypeDtoGQL,\n RuntimeEntitySelectDataSource,\n RuntimeEntityDialogDataSource,\n RuntimeEntityItem,\n AttributeItem\n} from '@meshmakers/octo-services';\nimport { EntitySelectInputComponent } from '@meshmakers/shared-ui';\nimport { CkTypeSelectorInputComponent } from '../ck-type-selector-input';\nimport { AttributeSelectorDialogService } from '../attribute-selector-dialog';\nimport {\n RuntimeEntityVariableDialogData,\n RuntimeEntityVariableDialogResult,\n RuntimeEntityVariableMapping\n} from './runtime-entity-variable-dialog.models';\n\ninterface CkTypeSelectorItem {\n fullName: string;\n rtCkTypeId: string;\n baseTypeFullName?: string;\n baseTypeRtCkTypeId?: string;\n isAbstract: boolean;\n isFinal: boolean;\n description?: string;\n}\n\n@Component({\n selector: 'mm-runtime-entity-variable-dialog',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n ButtonsModule,\n InputsModule,\n GridModule,\n IconsModule,\n CkTypeSelectorInputComponent,\n EntitySelectInputComponent\n ],\n template: `\n <div class=\"dialog-content\">\n <div class=\"form-row\">\n <label class=\"form-label\">CK Type</label>\n <mm-ck-type-selector-input\n [placeholder]=\"'Select CK Type...'\"\n [minSearchLength]=\"2\"\n (ckTypeSelected)=\"onCkTypeSelected($event)\"\n (ckTypeCleared)=\"onCkTypeCleared()\">\n </mm-ck-type-selector-input>\n </div>\n\n <div class=\"form-row\">\n <label class=\"form-label\">Entity</label>\n <mm-entity-select-input\n [dataSource]=\"entityDataSource()!\"\n [dialogDataSource]=\"entityDialogDataSource()!\"\n [placeholder]=\"'Select Entity...'\"\n [disabled]=\"!selectedCkType()\"\n [minSearchLength]=\"1\"\n dialogTitle=\"Select Entity\"\n (entitySelected)=\"onEntitySelected($event)\"\n (entityCleared)=\"onEntityCleared()\">\n </mm-entity-select-input>\n </div>\n\n <div class=\"form-row\">\n <label class=\"form-label\">Attributes</label>\n <button\n kendoButton\n (click)=\"openAttributeSelector()\"\n [disabled]=\"!selectedCkType()\"\n themeColor=\"primary\"\n fillMode=\"outline\">\n Select Attributes...\n </button>\n </div>\n\n @if (variableMappings().length > 0) {\n <div class=\"mappings-grid\">\n <div class=\"grid-header\">\n <span class=\"col-name\">Variable Name</span>\n <span class=\"col-path\">Attribute Path</span>\n <span class=\"col-type\">Type</span>\n <span class=\"col-actions\"></span>\n </div>\n @for (mapping of variableMappings(); track mapping.attributePath; let i = $index) {\n <div class=\"grid-row\">\n <div class=\"col-name\">\n <kendo-textbox\n [value]=\"mapping.name\"\n (valueChange)=\"onNameChange(i, $event)\"\n [style.width.%]=\"100\">\n </kendo-textbox>\n @if (getNameError(mapping.name, i); as error) {\n <span class=\"error-text\">{{ error }}</span>\n }\n </div>\n <div class=\"col-path\">{{ mapping.attributePath }}</div>\n <div class=\"col-type\">{{ mapping.attributeValueType }}</div>\n <div class=\"col-actions\">\n <button\n kendoButton\n (click)=\"removeMapping(i)\"\n [svgIcon]=\"trashIcon\"\n fillMode=\"flat\"\n themeColor=\"error\"\n title=\"Remove\">\n </button>\n </div>\n </div>\n }\n </div>\n }\n\n <div class=\"dialog-actions\">\n <button kendoButton (click)=\"onCancel()\" fillMode=\"outline\">Cancel</button>\n <button kendoButton (click)=\"onOk()\" themeColor=\"primary\" [disabled]=\"!isValid()\">OK</button>\n </div>\n </div>\n `,\n styles: [`\n .dialog-content {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px 20px;\n }\n\n .form-row {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .form-label {\n font-size: 12px;\n font-weight: 600;\n color: var(--kendo-color-subtle, #666);\n }\n\n .mappings-grid {\n border: 1px solid var(--kendo-color-border, #e0e0e0);\n border-radius: 4px;\n background: var(--kendo-color-surface-alt, #fafafa);\n }\n\n .grid-header {\n display: grid;\n grid-template-columns: 1fr 1fr 100px 40px;\n gap: 0.5rem;\n padding: 0.5rem 0.75rem;\n background: var(--kendo-color-surface, #f5f5f5);\n border-bottom: 1px solid var(--kendo-color-border, #e0e0e0);\n font-size: 12px;\n font-weight: 600;\n color: var(--kendo-color-subtle, #666);\n }\n\n .grid-row {\n display: grid;\n grid-template-columns: 1fr 1fr 100px 40px;\n gap: 0.5rem;\n padding: 0.5rem 0.75rem;\n align-items: start;\n border-bottom: 1px solid var(--kendo-color-border, #e0e0e0);\n\n &:last-child {\n border-bottom: none;\n }\n }\n\n .col-name {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .col-path, .col-type {\n font-size: 13px;\n padding-top: 6px;\n color: var(--kendo-color-on-app-surface, #424242);\n }\n\n .col-actions {\n display: flex;\n justify-content: center;\n padding-top: 2px;\n }\n\n .error-text {\n font-size: 11px;\n color: var(--kendo-color-error, #f44336);\n }\n\n .dialog-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--kendo-color-border, #e0e0e0);\n }\n `]\n})\nexport class RuntimeEntityVariableDialogComponent {\n private readonly windowRef = inject(WindowRef);\n private readonly getEntitiesByCkTypeGQL = inject(GetEntitiesByCkTypeDtoGQL);\n private readonly attributeSelectorDialogService = inject(AttributeSelectorDialogService);\n\n protected readonly pencilIcon = pencilIcon;\n protected readonly trashIcon = trashIcon;\n\n /** Data passed to the dialog (set by service) */\n data: RuntimeEntityVariableDialogData = {};\n\n // Signals\n readonly selectedCkType = signal<CkTypeSelectorItem | null>(null);\n readonly selectedEntity = signal<RuntimeEntityItem | null>(null);\n readonly variableMappings = signal<RuntimeEntityVariableMapping[]>([]);\n\n readonly entityDataSource = computed(() => {\n const ckType = this.selectedCkType();\n if (!ckType) return null;\n return new RuntimeEntitySelectDataSource(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);\n });\n\n readonly entityDialogDataSource = computed(() => {\n const ckType = this.selectedCkType();\n if (!ckType) return null;\n return new RuntimeEntityDialogDataSource(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);\n });\n\n private readonly VALID_NAME_REGEX = /^[a-zA-Z_][a-zA-Z0-9_]*$/;\n\n onCkTypeSelected(ckType: CkTypeSelectorItem): void {\n this.selectedCkType.set(ckType);\n this.selectedEntity.set(null);\n // Don't clear mappings — keep them if user is just switching type\n }\n\n onCkTypeCleared(): void {\n this.selectedCkType.set(null);\n this.selectedEntity.set(null);\n }\n\n onEntitySelected(entity: RuntimeEntityItem): void {\n this.selectedEntity.set(entity);\n }\n\n onEntityCleared(): void {\n this.selectedEntity.set(null);\n }\n\n async openAttributeSelector(): Promise<void> {\n const ckType = this.selectedCkType();\n if (!ckType) return;\n\n const existingPaths = this.variableMappings().map(m => m.attributePath);\n\n const result = await this.attributeSelectorDialogService.openAttributeSelector(\n ckType.rtCkTypeId,\n existingPaths,\n 'Select Attributes'\n );\n\n if (result.confirmed && result.selectedAttributes.length > 0) {\n this.addAttributeMappings(result.selectedAttributes);\n }\n }\n\n onNameChange(index: number, name: string): void {\n const sanitized = name.replace(/[^a-zA-Z0-9_]/g, '');\n const mappings = [...this.variableMappings()];\n mappings[index] = { ...mappings[index], name: sanitized };\n this.variableMappings.set(mappings);\n }\n\n removeMapping(index: number): void {\n const mappings = this.variableMappings().filter((_, i) => i !== index);\n this.variableMappings.set(mappings);\n }\n\n getNameError(name: string, index: number): string | null {\n if (!name) return 'Name required';\n if (!this.VALID_NAME_REGEX.test(name)) return 'Invalid name';\n if (this.isDuplicateName(name, index)) return 'Duplicate';\n return null;\n }\n\n isValid(): boolean {\n const entity = this.selectedEntity();\n const mappings = this.variableMappings();\n if (!entity || mappings.length === 0) return false;\n\n return mappings.every((m, i) =>\n m.name &&\n this.VALID_NAME_REGEX.test(m.name) &&\n !this.isDuplicateName(m.name, i)\n );\n }\n\n onOk(): void {\n const ckType = this.selectedCkType();\n const entity = this.selectedEntity();\n if (!ckType || !entity) return;\n\n const result: RuntimeEntityVariableDialogResult = {\n entityCkTypeId: ckType.rtCkTypeId,\n entityRtId: entity.rtId,\n entityDisplayName: entity.displayName,\n variables: this.variableMappings()\n };\n\n this.windowRef.close(result);\n }\n\n onCancel(): void {\n this.windowRef.close();\n }\n\n private addAttributeMappings(attributes: AttributeItem[]): void {\n const existingMappings = this.variableMappings();\n const existingPaths = new Set(existingMappings.map(m => m.attributePath));\n const allNames = new Set([\n ...existingMappings.map(m => m.name),\n ...(this.data.existingVariableNames ?? [])\n ]);\n\n const newMappings: RuntimeEntityVariableMapping[] = [];\n for (const attr of attributes) {\n if (existingPaths.has(attr.attributePath)) continue;\n\n let name = this.attributePathToVariableName(attr.attributePath);\n let counter = 1;\n while (allNames.has(name)) {\n name = `${this.attributePathToVariableName(attr.attributePath)}${counter}`;\n counter++;\n }\n allNames.add(name);\n\n newMappings.push({\n name,\n attributePath: attr.attributePath,\n attributeValueType: attr.attributeValueType\n });\n }\n\n this.variableMappings.set([...existingMappings, ...newMappings]);\n }\n\n private attributePathToVariableName(attributePath: string): string {\n const parts = attributePath.split('.');\n return parts\n .map((part, index) =>\n index === 0 ? part : part.charAt(0).toUpperCase() + part.slice(1)\n )\n .join('');\n }\n\n private isDuplicateName(name: string, currentIndex: number): boolean {\n const mappings = this.variableMappings();\n const existingNames = this.data.existingVariableNames ?? [];\n\n // Check within dialog mappings\n if (mappings.some((m, i) => i !== currentIndex && m.name === name)) return true;\n // Check against existing external variable names\n if (existingNames.includes(name)) return true;\n\n return false;\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { WindowService, WindowCloseResult } from '@progress/kendo-angular-dialog';\nimport { firstValueFrom } from 'rxjs';\nimport { WindowStateService } from '@meshmakers/shared-ui';\nimport { RuntimeEntityVariableDialogComponent } from './runtime-entity-variable-dialog.component';\nimport {\n RuntimeEntityVariableDialogData,\n RuntimeEntityVariableDialogResult\n} from './runtime-entity-variable-dialog.models';\n\nexport interface RuntimeEntityVariableResult {\n confirmed: boolean;\n result?: RuntimeEntityVariableDialogResult;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RuntimeEntityVariableDialogService {\n private readonly windowService = inject(WindowService);\n private readonly windowStateService = inject(WindowStateService);\n\n /**\n * Opens the runtime entity variable dialog.\n * @param data Optional pre-populated data for editing\n * @returns Promise with confirmation status and dialog result\n */\n public async openRuntimeEntityVariableDialog(\n data?: RuntimeEntityVariableDialogData\n ): Promise<RuntimeEntityVariableResult> {\n const size = this.windowStateService.resolveWindowSize('runtime-entity-variable', { width: 800, height: 600 });\n\n const windowRef = this.windowService.open({\n content: RuntimeEntityVariableDialogComponent,\n width: size.width,\n height: size.height,\n minWidth: 650,\n minHeight: 500,\n resizable: true,\n title: 'Runtime Entity Variables'\n });\n\n this.windowStateService.applyModalBehavior('runtime-entity-variable', windowRef);\n\n const contentRef = windowRef.content as { instance?: RuntimeEntityVariableDialogComponent } | undefined;\n if (contentRef?.instance && data) {\n contentRef.instance.data = data;\n }\n\n try {\n const result = await firstValueFrom(windowRef.result);\n\n if (result instanceof WindowCloseResult) {\n return { confirmed: false };\n }\n\n if (result && typeof result === 'object' && 'variables' in result) {\n return {\n confirmed: true,\n result: result as RuntimeEntityVariableDialogResult\n };\n }\n\n return { confirmed: false };\n } catch {\n return { confirmed: false };\n }\n }\n}\n","import {\n FieldFilterDto,\n FieldFilterOperatorsDto,\n SearchFilterDto,\n SearchFilterTypesDto, SortDto, SortOrdersDto\n} from '@meshmakers/octo-services';\nimport {DataSourceTyped, ListViewComponent} from '@meshmakers/shared-ui';\nimport {FilterOperator, isCompositeFilterDescriptor} from '@progress/kendo-data-query';\nimport {State} from '@progress/kendo-data-query/dist/npm/state';\n\n// noinspection JSUnusedGlobalSymbols\nexport abstract class OctoGraphQlDataSource<TDto> extends DataSourceTyped<TDto | null> {\n\n private _searchFilterAttributePaths: string[] = [];\n\n // noinspection JSUnusedGlobalSymbols\n protected constructor(listViewComponent: ListViewComponent) {\n super(listViewComponent);\n }\n\n protected get searchFilterAttributePaths(): string[] {\n return this._searchFilterAttributePaths;\n }\n protected set searchFilterAttributePaths(value: string[]) {\n this._searchFilterAttributePaths = value;\n }\n\n // noinspection JSUnusedGlobalSymbols\n protected getFieldFilterDefinitions(state: State) {\n let fieldFilters: FieldFilterDto[] | null = null;\n if (state.filter?.filters) {\n fieldFilters = state.filter.filters.map((f) => {\n\n if (isCompositeFilterDescriptor(f)) {\n throw new Error('Composite filter descriptor not supported');\n }\n\n const {operator, value} = OctoGraphQlDataSource.getOperatorAndValue(f.operator as FilterOperator, f.value);\n\n return {\n attributePath: f.field,\n operator: operator,\n comparisonValue: value\n } as FieldFilterDto;\n });\n }\n return fieldFilters;\n }\n\n // noinspection JSUnusedGlobalSymbols\n protected getSearchFilterDefinitions(textSearchValue: string | null): SearchFilterDto | null {\n let searchFilterDto: SearchFilterDto | null = null;\n if (textSearchValue) {\n searchFilterDto = {\n type: SearchFilterTypesDto.AttributeFilterDto,\n attributePaths: this.searchFilterAttributePaths,\n searchTerm: textSearchValue,\n };\n }\n return searchFilterDto;\n }\n\n // noinspection JSUnusedGlobalSymbols\n protected getSortDefinitions(state: State): SortDto[] | null {\n let sort: SortDto[] | null = null;\n if (state.sort) {\n sort = new Array<SortDto>()\n state.sort.forEach((s) => {\n\n switch (s.dir) {\n case 'asc':\n sort?.push({\n attributePath: s.field,\n sortOrder: SortOrdersDto.AscendingDto\n });\n break;\n case 'desc':\n sort?.push({\n attributePath: s.field,\n sortOrder: SortOrdersDto.DescendingDto,\n });\n break;\n default:\n sort?.push({\n attributePath: s.field,\n sortOrder: SortOrdersDto.DefaultDto,\n });\n break;\n }\n\n });\n }\n return sort;\n }\n\n private static getOperatorAndValue(operator: FilterOperator, value: unknown): {\n operator: FieldFilterOperatorsDto,\n value: unknown\n } {\n\n switch (operator) {\n case 'eq':\n return {operator: FieldFilterOperatorsDto.EqualsDto, value: value};\n case 'neq':\n return {operator: FieldFilterOperatorsDto.NotEqualsDto, value: value};\n case 'lt':\n return {operator: FieldFilterOperatorsDto.LessThanDto, value: value};\n case 'lte':\n return {operator: FieldFilterOperatorsDto.LessEqualThanDto, value: value};\n case 'gt':\n return {operator: FieldFilterOperatorsDto.GreaterThanDto, value: value};\n case 'gte':\n return {operator: FieldFilterOperatorsDto.GreaterEqualThanDto, value: value};\n case 'contains':\n return {operator: FieldFilterOperatorsDto.LikeDto, value: value};\n case 'doesnotcontain':\n return {operator: FieldFilterOperatorsDto.MatchRegExDto, value: `^(?!.*${value}).*$`};\n case 'startswith':\n return {operator: FieldFilterOperatorsDto.MatchRegExDto, value: value + '.*'};\n case 'endswith':\n return {operator: FieldFilterOperatorsDto.MatchRegExDto, value: '.*' + value};\n case 'isnull':\n return {operator: FieldFilterOperatorsDto.EqualsDto, value: null};\n case 'isnotnull':\n return {operator: FieldFilterOperatorsDto.NotEqualsDto, value: null};\n case 'isempty':\n return {operator: FieldFilterOperatorsDto.EqualsDto, value: \"\"};\n case 'isnotempty':\n return {operator: FieldFilterOperatorsDto.NotEqualsDto, value: \"\"};\n default:\n throw new Error('The filter operator is not supported');\n }\n }\n}\n","import {TreeItemDataTyped} from \"@meshmakers/shared-services\";\nimport {HierarchyDataSourceBase} from \"@meshmakers/shared-ui\";\n\nexport abstract class OctoGraphQlHierarchyDataSource<TQueryDto> extends HierarchyDataSourceBase<TQueryDto> {\n public abstract override fetchChildren(item: TreeItemDataTyped<TQueryDto>): Promise<TreeItemDataTyped<TQueryDto>[]>;\n\n public abstract override fetchRootNodes(): Promise<TreeItemDataTyped<TQueryDto>[]>;\n}\n","import {Component, Input, inject} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ButtonsModule} from '@progress/kendo-angular-buttons';\nimport {SVGIconModule} from '@progress/kendo-angular-icons';\nimport {copyIcon} from '@progress/kendo-svg-icons';\nimport {NotificationDisplayService} from '@meshmakers/shared-ui';\n\ninterface CopyOption {\n label: string;\n value: string;\n displayText: string;\n}\n\n/**\n * A reusable component for displaying and copying entity identifiers.\n * Provides a dropdown button with options to copy:\n * - RtId: The runtime ObjectId\n * - CkTypeId: The full versioned Construction Kit type ID\n * - RtCkTypeId: The runtime CK type ID (unversioned)\n * - RtEntityId: Combined format {RtCkTypeId}@{RtId}\n *\n * @example\n * ```html\n * <mm-entity-id-info\n * [rtId]=\"entity.rtId\"\n * [rtCkTypeId]=\"entity.ckTypeId\"\n * [ckTypeId]=\"entity.constructionKitType?.ckTypeId?.fullName\">\n * </mm-entity-id-info>\n * ```\n */\n@Component({\n selector: 'mm-entity-id-info',\n standalone: true,\n imports: [\n CommonModule,\n ButtonsModule,\n SVGIconModule\n ],\n template: `\n <kendo-dropdownbutton\n [data]=\"copyOptions\"\n [svgIcon]=\"copyIcon\"\n look=\"flat\"\n size=\"small\"\n title=\"Copy Entity ID to clipboard\"\n (itemClick)=\"copyToClipboard($event)\">\n <ng-template kendoDropDownButtonItemTemplate let-item>\n <div class=\"copy-item\">\n <span class=\"copy-label\">{{ item.label }}</span>\n <span class=\"copy-value\">{{ item.displayText }}</span>\n </div>\n </ng-template>\n Copy ID\n </kendo-dropdownbutton>\n `,\n styles: [`\n :host {\n display: inline-block;\n }\n\n kendo-dropdownbutton {\n ::ng-deep {\n .k-button {\n color: var(--kendo-color-primary, #64ceb9) !important;\n border: 1px solid var(--kendo-color-border, rgba(100, 206, 185, 0.3)) !important;\n\n &:hover {\n background: var(--kendo-color-base-hover, rgba(100, 206, 185, 0.15)) !important;\n border-color: var(--kendo-color-primary, rgba(100, 206, 185, 0.5)) !important;\n }\n }\n\n .k-popup {\n min-width: 350px;\n }\n\n .k-menu-item {\n padding: 0 !important;\n }\n }\n }\n\n .copy-item {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 8px 12px;\n width: 100%;\n }\n\n .copy-label {\n font-size: 0.7rem;\n font-weight: 600;\n color: var(--kendo-color-primary, #64ceb9);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .copy-value {\n font-family: 'Roboto Mono', monospace;\n font-size: 0.75rem;\n color: var(--kendo-color-subtle, #9292a6);\n word-break: break-all;\n }\n `]\n})\nexport class EntityIdInfoComponent {\n private readonly notificationService = inject(NotificationDisplayService);\n\n protected readonly copyIcon = copyIcon;\n\n /** The RtId (ObjectId) of the entity */\n @Input({ required: true }) rtId!: string;\n\n /** The RtCkTypeId - runtime CK type ID (e.g., System.Communication/MeshAdapter) */\n @Input({ required: true }) rtCkTypeId!: string;\n\n /** The CkTypeId - full versioned Construction Kit type ID (e.g., System.Communication-2.0.3/MeshAdapter-1) */\n @Input() ckTypeId?: string;\n\n protected get copyOptions(): CopyOption[] {\n const fullCkTypeId = this.ckTypeId || this.rtCkTypeId;\n const rtEntityId = `${this.rtCkTypeId}@${this.rtId}`;\n\n return [\n {\n label: 'RtId',\n value: this.rtId,\n displayText: this.truncateValue(this.rtId, 24)\n },\n {\n label: 'CkTypeId',\n value: fullCkTypeId,\n displayText: this.truncateValue(fullCkTypeId, 40)\n },\n {\n label: 'RtCkTypeId',\n value: this.rtCkTypeId,\n displayText: this.truncateValue(this.rtCkTypeId, 40)\n },\n {\n label: 'RtEntityId',\n value: rtEntityId,\n displayText: this.truncateValue(rtEntityId, 40)\n }\n ];\n }\n\n private truncateValue(value: string, maxLength: number): string {\n if (value.length <= maxLength) return value;\n return value.substring(0, maxLength - 3) + '...';\n }\n\n protected async copyToClipboard(option: CopyOption): Promise<void> {\n try {\n await navigator.clipboard.writeText(option.value);\n this.notificationService.showSuccess(`${option.label} copied`, 2000);\n } catch (error) {\n console.error('Failed to copy to clipboard:', error);\n this.notificationService.showError('Failed to copy to clipboard');\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n inject,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { DateInputsModule } from '@progress/kendo-angular-dateinputs';\nimport { DropDownsModule } from '@progress/kendo-angular-dropdowns';\nimport { GridModule } from '@progress/kendo-angular-grid';\nimport { IconsModule } from '@progress/kendo-angular-icons';\nimport { InputsModule } from '@progress/kendo-angular-inputs';\nimport { IntlModule } from '@progress/kendo-angular-intl';\nimport { PopupModule } from '@progress/kendo-angular-popup';\n// Note: Kendo locale data (de/en) should be loaded via polyfills in the consuming application\nimport {\n AttributeItem,\n AttributeSelectorService,\n AttributeValueTypeDto,\n FieldFilterDto,\n FieldFilterOperatorsDto,\n} from '@meshmakers/octo-services';\nimport {\n dollarIcon,\n minusIcon,\n plusIcon,\n trashIcon,\n} from '@progress/kendo-svg-icons';\nimport { firstValueFrom } from 'rxjs';\n\n/**\n * Variable definition for use in filter values.\n * Generic interface that can be provided by any consumer (e.g., MeshBoard).\n */\nexport interface FilterVariable {\n /** Variable name (without $ prefix) */\n name: string;\n /** Display label for UI */\n label?: string;\n /** Variable data type */\n type?: 'string' | 'number' | 'boolean' | 'date' | 'datetime';\n}\n\nexport interface FieldFilterItem extends FieldFilterDto {\n id: number;\n /** If true, comparisonValue contains a variable reference (e.g., $myVar) */\n useVariable?: boolean;\n}\n\ntype InputType = 'text' | 'number' | 'boolean' | 'datetime';\n\n@Component({\n selector: 'mm-field-filter-editor',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n GridModule,\n ButtonsModule,\n DropDownsModule,\n InputsModule,\n DateInputsModule,\n IconsModule,\n PopupModule,\n IntlModule,\n ],\n template: `\n <div class=\"field-filter-editor\">\n @if (ckTypeId && !hideNavigationProperties) {\n <div class=\"attribute-options\">\n <label class=\"inline-checkbox\">\n <input\n type=\"checkbox\"\n kendoCheckBox\n [(ngModel)]=\"includeNavigationProperties\"\n (ngModelChange)=\"onNavigationPropertiesChange()\"\n />\n Include Navigation Properties\n </label>\n <label class=\"inline-field\">\n Max Depth\n <kendo-numerictextbox\n [(ngModel)]=\"maxDepth\"\n [min]=\"1\"\n [max]=\"5\"\n [step]=\"1\"\n [format]=\"'n0'\"\n [spinners]=\"true\"\n [disabled]=\"!includeNavigationProperties\"\n (valueChange)=\"onMaxDepthChange($event)\"\n class=\"depth-input\"\n >\n </kendo-numerictextbox>\n </label>\n @if (isLoadingAttributes) {\n <span class=\"loading-hint\">Loading...</span>\n }\n </div>\n }\n <div class=\"toolbar\">\n <button\n kendoButton\n [svgIcon]=\"plusIcon\"\n themeColor=\"primary\"\n (click)=\"addFilter()\"\n title=\"Add filter\"\n >\n Add Filter\n </button>\n <button\n kendoButton\n [svgIcon]=\"trashIcon\"\n themeColor=\"error\"\n (click)=\"removeSelected()\"\n [disabled]=\"selectedKeys.length === 0\"\n title=\"Remove selected filters\"\n >\n Remove Selected\n </button>\n </div>\n\n <kendo-grid\n [data]=\"filters\"\n [selectable]=\"{ mode: 'multiple', enabled: true }\"\n [kendoGridSelectBy]=\"'id'\"\n [(selectedKeys)]=\"selectedKeys\"\n class=\"filter-grid\"\n >\n <kendo-grid-column title=\"\" [width]=\"50\" [class]=\"'checkbox-column'\">\n <ng-template kendoGridHeaderTemplate>\n <input\n type=\"checkbox\"\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isIndeterminate()\"\n (change)=\"toggleSelectAll($event)\"\n />\n </ng-template>\n <ng-template kendoGridCellTemplate let-dataItem>\n <input\n type=\"checkbox\"\n [checked]=\"isSelected(dataItem)\"\n (change)=\"toggleSelection(dataItem)\"\n />\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column\n field=\"attributePath\"\n title=\"Attribute Path\"\n [width]=\"280\"\n >\n <ng-template kendoGridCellTemplate let-dataItem>\n @if (availableAttributes.length > 0) {\n <kendo-combobox\n [data]=\"filteredAttributeList\"\n [(ngModel)]=\"dataItem.attributePath\"\n (valueChange)=\"onAttributeChange(dataItem, $event)\"\n [textField]=\"'attributePath'\"\n [valueField]=\"'attributePath'\"\n [valuePrimitive]=\"true\"\n [allowCustom]=\"true\"\n [filterable]=\"true\"\n (filterChange)=\"onAttributeFilterChange($event)\"\n [listHeight]=\"300\"\n [popupSettings]=\"{ appendTo: 'root', animate: true }\"\n class=\"attribute-dropdown\"\n >\n <ng-template kendoComboBoxItemTemplate let-item>\n <div class=\"attribute-item\">\n <span class=\"attribute-path\">{{ item.attributePath }}</span>\n <span class=\"attribute-type\">{{\n item.attributeValueType\n }}</span>\n </div>\n </ng-template>\n </kendo-combobox>\n } @else {\n <kendo-textbox\n [(ngModel)]=\"dataItem.attributePath\"\n (valueChange)=\"onFilterChange()\"\n placeholder=\"Enter attribute path\"\n class=\"attribute-input\"\n >\n </kendo-textbox>\n }\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column field=\"operator\" title=\"Operator\" [width]=\"180\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <kendo-dropdownlist\n [data]=\"operators\"\n [(ngModel)]=\"dataItem.operator\"\n (valueChange)=\"onOperatorChange(dataItem)\"\n [textField]=\"'label'\"\n [valueField]=\"'value'\"\n [valuePrimitive]=\"true\"\n [listHeight]=\"300\"\n [popupSettings]=\"{ appendTo: 'root', animate: true }\"\n class=\"operator-dropdown\"\n >\n </kendo-dropdownlist>\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column field=\"comparisonValue\" title=\"Value\" [width]=\"280\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <div class=\"value-cell\">\n @if (dataItem.useVariable && enableVariables) {\n <!-- Variable mode: show variable dropdown -->\n <kendo-dropdownlist\n [data]=\"availableVariables\"\n [value]=\"getSelectedVariable(dataItem)\"\n (valueChange)=\"onVariableSelected(dataItem, $event)\"\n [textField]=\"'label'\"\n [valueField]=\"'name'\"\n [valuePrimitive]=\"false\"\n [popupSettings]=\"{ appendTo: 'root', animate: true }\"\n placeholder=\"Select variable...\"\n class=\"value-input variable-dropdown\"\n >\n <ng-template kendoDropDownListItemTemplate let-item>\n <div class=\"variable-item\">\n <span class=\"variable-name\">{{\n formatVariableDisplay(item.name)\n }}</span>\n @if (item.label && item.label !== item.name) {\n <span class=\"variable-label\">{{ item.label }}</span>\n }\n </div>\n </ng-template>\n <ng-template kendoDropDownListValueTemplate let-item>\n @if (item) {\n <span class=\"variable-value\">{{\n formatVariableDisplay(item.name)\n }}</span>\n } @else {\n <span class=\"variable-placeholder\"\n >Select variable...</span\n >\n }\n </ng-template>\n </kendo-dropdownlist>\n } @else {\n <!-- Literal value mode: show type-specific input -->\n @switch (getInputType(dataItem)) {\n @case ('boolean') {\n @if (isArrayOperator(dataItem.operator)) {\n <kendo-textbox\n [value]=\"getDisplayValue(dataItem)\"\n (valueChange)=\"\n onComparisonValueChange(dataItem, $event)\n \"\n placeholder=\"true, false\"\n class=\"value-input\"\n >\n </kendo-textbox>\n } @else {\n <kendo-dropdownlist\n [data]=\"booleanOptions\"\n [value]=\"getBooleanValue(dataItem)\"\n (valueChange)=\"onBooleanValueChange(dataItem, $event)\"\n [popupSettings]=\"{ appendTo: 'root', animate: true }\"\n class=\"value-input\"\n >\n </kendo-dropdownlist>\n }\n }\n @case ('number') {\n @if (isArrayOperator(dataItem.operator)) {\n <kendo-textbox\n [value]=\"getDisplayValue(dataItem)\"\n (valueChange)=\"\n onComparisonValueChange(dataItem, $event)\n \"\n placeholder=\"1, 2, 3\"\n class=\"value-input\"\n >\n </kendo-textbox>\n } @else {\n <kendo-numerictextbox\n [value]=\"getNumericValue(dataItem)\"\n (valueChange)=\"onNumericValueChange(dataItem, $event)\"\n [decimals]=\"getDecimals(dataItem)\"\n [format]=\"getNumberFormat(dataItem)\"\n class=\"value-input\"\n >\n </kendo-numerictextbox>\n }\n }\n @case ('datetime') {\n @if (isArrayOperator(dataItem.operator)) {\n <kendo-textbox\n [value]=\"getDisplayValue(dataItem)\"\n (valueChange)=\"\n onComparisonValueChange(dataItem, $event)\n \"\n placeholder=\"2024-01-15, 2024-02-20\"\n class=\"value-input\"\n >\n </kendo-textbox>\n } @else {\n <kendo-datetimepicker\n [value]=\"getDateTimeValue(dataItem)\"\n (valueChange)=\"onDateTimeValueChange(dataItem, $event)\"\n [popupSettings]=\"{ appendTo: 'root', animate: true }\"\n class=\"value-input\"\n >\n </kendo-datetimepicker>\n }\n }\n @default {\n <kendo-textbox\n [value]=\"getDisplayValue(dataItem)\"\n (valueChange)=\"onComparisonValueChange(dataItem, $event)\"\n (blur)=\"onComparisonValueBlur(dataItem)\"\n [placeholder]=\"getValuePlaceholder(dataItem)\"\n class=\"value-input\"\n >\n </kendo-textbox>\n }\n }\n }\n <!-- Variable toggle button -->\n @if (enableVariables && availableVariables.length > 0) {\n <button\n kendoButton\n [svgIcon]=\"dollarIcon\"\n fillMode=\"flat\"\n [themeColor]=\"dataItem.useVariable ? 'primary' : 'base'\"\n (click)=\"toggleVariableMode(dataItem)\"\n [title]=\"\n dataItem.useVariable\n ? 'Switch to literal value'\n : 'Use variable'\n \"\n class=\"variable-toggle\"\n ></button>\n }\n </div>\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column title=\"\" [width]=\"60\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <button\n kendoButton\n [svgIcon]=\"minusIcon\"\n fillMode=\"flat\"\n themeColor=\"error\"\n (click)=\"removeFilter(dataItem)\"\n title=\"Remove this filter\"\n ></button>\n </ng-template>\n </kendo-grid-column>\n </kendo-grid>\n\n @if (filters.length === 0) {\n <div class=\"empty-state\">\n <p>No filters defined. Click \"Add Filter\" to create a new filter.</p>\n </div>\n }\n </div>\n `,\n styles: [\n `\n .field-filter-editor {\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .attribute-options {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85rem;\n }\n\n .inline-checkbox {\n display: flex;\n align-items: center;\n gap: 6px;\n cursor: pointer;\n font-weight: normal;\n }\n\n .inline-field {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: normal;\n }\n\n .depth-input {\n width: 80px;\n }\n\n .loading-hint {\n font-size: 0.8rem;\n color: var(--kendo-color-subtle, #6c757d);\n }\n\n .toolbar {\n display: flex;\n gap: 10px;\n margin-bottom: 5px;\n }\n\n .filter-grid {\n border: 1px solid #d5d5d5;\n }\n\n .filter-grid ::ng-deep .k-grid-header .k-header {\n font-weight: 600;\n }\n\n .checkbox-column {\n text-align: center;\n }\n\n .attribute-dropdown,\n .operator-dropdown,\n .attribute-input {\n width: 100%;\n }\n\n .value-input {\n width: 100%;\n }\n\n .attribute-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n }\n\n .attribute-path {\n flex: 1;\n }\n\n .attribute-type {\n font-size: 11px;\n color: #888;\n margin-left: 8px;\n padding: 2px 6px;\n background: #f0f0f0;\n border-radius: 3px;\n }\n\n .empty-state {\n padding: 40px;\n text-align: center;\n border: 1px dashed;\n border-radius: 8px;\n font-family: 'Montserrat', sans-serif;\n font-size: 0.9rem;\n }\n\n .empty-state p {\n margin: 0;\n }\n\n .value-cell {\n display: flex;\n gap: 4px;\n align-items: center;\n }\n\n .value-cell .value-input {\n flex: 1;\n }\n\n .variable-toggle {\n flex-shrink: 0;\n }\n\n .variable-item {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .variable-name {\n font-family: monospace;\n font-weight: 500;\n }\n\n .variable-label {\n font-size: 11px;\n color: var(--kendo-color-subtle, #888);\n }\n\n .variable-value {\n font-family: monospace;\n color: var(--kendo-color-primary, #0d6efd);\n }\n\n .variable-placeholder {\n color: var(--kendo-color-subtle, #888);\n }\n\n .variable-dropdown ::ng-deep .k-input-value-text {\n font-family: monospace;\n }\n `,\n ],\n})\nexport class FieldFilterEditorComponent implements OnChanges {\n private readonly attributeService = inject(AttributeSelectorService, {\n optional: true,\n });\n\n protected readonly plusIcon = plusIcon;\n protected readonly minusIcon = minusIcon;\n protected readonly trashIcon = trashIcon;\n protected readonly dollarIcon = dollarIcon;\n\n private readonly arrayOperators = [\n FieldFilterOperatorsDto.InDto,\n FieldFilterOperatorsDto.NotInDto,\n ];\n\n public readonly operators: {\n label: string;\n value: FieldFilterOperatorsDto;\n }[] = [\n { label: 'Equals', value: FieldFilterOperatorsDto.EqualsDto },\n { label: 'Not Equals', value: FieldFilterOperatorsDto.NotEqualsDto },\n { label: 'Greater Than', value: FieldFilterOperatorsDto.GreaterThanDto },\n {\n label: 'Greater Equal',\n value: FieldFilterOperatorsDto.GreaterEqualThanDto,\n },\n { label: 'Less Than', value: FieldFilterOperatorsDto.LessThanDto },\n { label: 'Less Equal', value: FieldFilterOperatorsDto.LessEqualThanDto },\n { label: 'Like', value: FieldFilterOperatorsDto.LikeDto },\n { label: 'In', value: FieldFilterOperatorsDto.InDto },\n { label: 'Not In', value: FieldFilterOperatorsDto.NotInDto },\n { label: 'Any Equals', value: FieldFilterOperatorsDto.AnyEqDto },\n { label: 'Any Like', value: FieldFilterOperatorsDto.AnyLikeDto },\n { label: 'Match RegEx', value: FieldFilterOperatorsDto.MatchRegExDto },\n ];\n\n public readonly booleanOptions = ['true', 'false'];\n\n @Input() public availableAttributes: AttributeItem[] = [];\n\n /**\n * Optional CK type ID for self-loading attributes.\n * When set, the component loads available attributes itself and shows\n * navigation property controls (checkbox + max depth).\n * When not set, the component uses the externally provided availableAttributes input.\n */\n @Input() public ckTypeId?: string;\n\n /**\n * When true, hides the \"Include Navigation Properties\" checkbox and Max Depth controls,\n * and forces attribute loading without navigation properties.\n * Used for stream data queries which don't support navigation properties.\n */\n @Input() public hideNavigationProperties = false;\n\n /**\n * When set, restricts the available attributes to only these attribute paths (filtered client-side after fetching).\n * Used for stream data queries to show only stream-data-enabled attributes.\n */\n @Input() public attributePaths?: string[];\n\n /** Enable variable mode - allows using variables instead of literal values */\n @Input() public enableVariables = false;\n\n /** Available variables for selection when enableVariables is true */\n @Input() public availableVariables: FilterVariable[] = [];\n\n /** Controls for self-loading mode (when ckTypeId is set) */\n public includeNavigationProperties = true;\n public maxDepth: number | null = null;\n public isLoadingAttributes = false;\n\n private _filters: FieldFilterItem[] = [];\n private nextId = 1;\n public filteredAttributeList: AttributeItem[] = [];\n private attributeTypeMap = new Map<string, AttributeValueTypeDto>();\n\n @Input()\n public get filters(): FieldFilterItem[] {\n return this._filters;\n }\n public set filters(value: FieldFilterItem[]) {\n this._filters = value;\n this.filtersChange.emit(this._filters);\n }\n\n @Output() public filtersChange = new EventEmitter<FieldFilterItem[]>();\n\n public selectedKeys: number[] = [];\n\n ngOnChanges(changes?: SimpleChanges): void {\n // When hideNavigationProperties changes to true, reset nav props\n if (\n changes?.['hideNavigationProperties'] &&\n this.hideNavigationProperties\n ) {\n this.includeNavigationProperties = false;\n this.maxDepth = null;\n }\n\n // Reload attributes when ckTypeId, hideNavigationProperties, or attributePaths changes\n if ((changes?.['ckTypeId'] || changes?.['hideNavigationProperties'] || changes?.['attributePaths']) && this.ckTypeId) {\n this.loadAttributesFromCkType();\n }\n\n this.filteredAttributeList = [...this.availableAttributes];\n this.buildAttributeTypeMap();\n // Ensure useVariable flag is set correctly for filters with variable values\n this.detectVariableFilters();\n }\n\n /**\n * Detects filters that contain variable references and sets useVariable flag.\n * This ensures proper display when filters are loaded from saved configuration.\n */\n private detectVariableFilters(): void {\n for (const filter of this._filters) {\n // Always check if the value is a variable reference and update the flag\n const isVariable = this.isVariableValue(filter.comparisonValue);\n if (isVariable && !filter.useVariable) {\n filter.useVariable = true;\n }\n }\n }\n\n private buildAttributeTypeMap(): void {\n this.attributeTypeMap.clear();\n for (const attr of this.availableAttributes) {\n this.attributeTypeMap.set(\n attr.attributePath,\n attr.attributeValueType as AttributeValueTypeDto,\n );\n }\n }\n\n // ============================================================================\n // Self-loading attribute methods (when ckTypeId is set)\n // ============================================================================\n\n public onNavigationPropertiesChange(): void {\n if (!this.includeNavigationProperties) {\n this.maxDepth = null;\n }\n this.loadAttributesFromCkType();\n }\n\n public onMaxDepthChange(value: number | null): void {\n this.maxDepth = value;\n this.loadAttributesFromCkType();\n }\n\n private async loadAttributesFromCkType(): Promise<void> {\n if (!this.ckTypeId || !this.attributeService) return;\n\n this.isLoadingAttributes = true;\n const includeNavProps = this.hideNavigationProperties\n ? false\n : this.includeNavigationProperties;\n try {\n const result = await firstValueFrom(\n this.attributeService.getAvailableAttributes(\n this.ckTypeId,\n undefined, // filter\n 1000, // first\n undefined, // after\n undefined, // attributeValueType\n undefined, // searchTerm\n includeNavProps,\n this.maxDepth ?? undefined,\n ),\n );\n // Apply client-side attribute path restriction if set\n const allowedPathsSet = this.attributePaths ? new Set(this.attributePaths) : null;\n this.availableAttributes = allowedPathsSet\n ? result.items.filter(item => allowedPathsSet.has(item.attributePath))\n : result.items;\n this.filteredAttributeList = [...this.availableAttributes];\n this.buildAttributeTypeMap();\n } catch (error) {\n console.error('Error loading filter attributes:', error);\n this.availableAttributes = [];\n this.filteredAttributeList = [];\n } finally {\n this.isLoadingAttributes = false;\n }\n }\n\n private filterAvailableAttributes(items: AttributeItem[]): AttributeItem[] {\n let filtered = items;\n if (!this.includeNavigationProperties) {\n filtered = filtered.filter(\n (item) => this.getAttributeDepth(item.attributePath) === 0,\n );\n }\n if (this.maxDepth != null) {\n filtered = filtered.filter(\n (item) => this.getAttributeDepth(item.attributePath) <= this.maxDepth!,\n );\n }\n return filtered;\n }\n\n private getAttributeDepth(attributePath: string): number {\n if (!attributePath) return 0;\n return attributePath.split('.').length - 1;\n }\n\n public addFilter(): void {\n const newFilter: FieldFilterItem = {\n id: this.nextId++,\n attributePath: '',\n operator: FieldFilterOperatorsDto.EqualsDto,\n comparisonValue: '',\n };\n this._filters = [...this._filters, newFilter];\n this.filtersChange.emit(this._filters);\n }\n\n public removeFilter(filter: FieldFilterItem): void {\n this._filters = this._filters.filter((f) => f.id !== filter.id);\n this.selectedKeys = this.selectedKeys.filter((k) => k !== filter.id);\n this.filtersChange.emit(this._filters);\n }\n\n public removeSelected(): void {\n this._filters = this._filters.filter(\n (f) => !this.selectedKeys.includes(f.id),\n );\n this.selectedKeys = [];\n this.filtersChange.emit(this._filters);\n }\n\n public onFilterChange(): void {\n this.filtersChange.emit(this._filters);\n }\n\n public onAttributeChange(\n filter: FieldFilterItem,\n attributePath: string,\n ): void {\n filter.attributePath = attributePath;\n // Reset comparison value when attribute changes\n filter.comparisonValue = '';\n this.onFilterChange();\n }\n\n public onOperatorChange(filter: FieldFilterItem): void {\n if (!filter.comparisonValue) {\n this.onFilterChange();\n return;\n }\n\n const currentValue = String(filter.comparisonValue);\n\n if (this.isArrayOperator(filter.operator)) {\n const valuesToProcess = this.extractArrayContent(currentValue);\n const cleanedValues = this.parseAndCleanArrayValues(valuesToProcess);\n filter.comparisonValue = `[${cleanedValues.join(', ')}]`;\n } else {\n const scalarValue = this.extractArrayContent(currentValue);\n if (scalarValue.includes(',')) {\n filter.comparisonValue = scalarValue.split(',')[0].trim();\n } else {\n filter.comparisonValue = scalarValue.trim();\n }\n }\n\n this.onFilterChange();\n }\n\n public onComparisonValueChange(\n filter: FieldFilterItem,\n inputValue: string | null,\n ): void {\n if (inputValue === null) {\n filter.comparisonValue = '';\n return;\n }\n\n if (this.isArrayOperator(filter.operator)) {\n const cleanedValues = this.parseAndCleanArrayValues(inputValue);\n filter.comparisonValue = `[${cleanedValues.join(', ')}]`;\n } else {\n filter.comparisonValue = this.extractArrayContent(inputValue);\n }\n\n this.onFilterChange();\n }\n\n public onComparisonValueBlur(filter: FieldFilterItem): void {\n if (!filter.comparisonValue) return;\n\n const value = String(filter.comparisonValue);\n\n if (this.isArrayOperator(filter.operator)) {\n const cleanedValues = this.parseAndCleanArrayValues(value);\n filter.comparisonValue = `[${cleanedValues.join(', ')}]`;\n } else {\n filter.comparisonValue = this.extractArrayContent(value).trim();\n }\n\n this.onFilterChange();\n }\n\n public onBooleanValueChange(filter: FieldFilterItem, value: string): void {\n filter.comparisonValue = value;\n this.onFilterChange();\n }\n\n public onNumericValueChange(\n filter: FieldFilterItem,\n value: number | null,\n ): void {\n filter.comparisonValue = value !== null ? String(value) : '';\n this.onFilterChange();\n }\n\n public onDateTimeValueChange(\n filter: FieldFilterItem,\n value: Date | null,\n ): void {\n filter.comparisonValue = value !== null ? value.toISOString() : '';\n this.onFilterChange();\n }\n\n public getDisplayValue(filter: FieldFilterItem): string {\n if (!filter.comparisonValue) {\n return '';\n }\n\n const value = String(filter.comparisonValue);\n\n if (this.isArrayOperator(filter.operator) && this.isArrayValue(value)) {\n return this.extractArrayContent(value);\n }\n\n return value;\n }\n\n public getBooleanValue(filter: FieldFilterItem): string {\n const value = filter.comparisonValue;\n if (value === 'true' || value === true) return 'true';\n if (value === 'false' || value === false) return 'false';\n return '';\n }\n\n public getNumericValue(filter: FieldFilterItem): number {\n const value = filter.comparisonValue;\n if (value === null || value === undefined || value === '') return 0;\n const num = Number(value);\n return isNaN(num) ? 0 : num;\n }\n\n public getDateTimeValue(filter: FieldFilterItem): Date | null {\n const value = filter.comparisonValue;\n if (!value) return null;\n const date = new Date(String(value));\n return isNaN(date.getTime()) ? null : date;\n }\n\n public getInputType(filter: FieldFilterItem): InputType {\n const attrType = this.attributeTypeMap.get(filter.attributePath);\n if (!attrType) return 'text';\n\n // Normalize to uppercase for case-insensitive comparison\n const normalizedType = String(attrType).toUpperCase();\n\n // Boolean types\n if (normalizedType === 'BOOLEAN') {\n return 'boolean';\n }\n\n // Numeric types\n if (\n normalizedType === 'INT' ||\n normalizedType === 'INTEGER' ||\n normalizedType === 'INT_64' ||\n normalizedType === 'INTEGER_64' ||\n normalizedType === 'DOUBLE'\n ) {\n return 'number';\n }\n\n // DateTime types\n if (\n normalizedType === 'DATE_TIME' ||\n normalizedType === 'DATE_TIME_OFFSET' ||\n normalizedType === 'DATETIME' ||\n normalizedType === 'DATETIMEOFFSET'\n ) {\n return 'datetime';\n }\n\n return 'text';\n }\n\n public getDecimals(filter: FieldFilterItem): number {\n const attrType = this.attributeTypeMap.get(filter.attributePath);\n return attrType === AttributeValueTypeDto.DoubleDto ? 4 : 0;\n }\n\n public getNumberFormat(filter: FieldFilterItem): string {\n const attrType = this.attributeTypeMap.get(filter.attributePath);\n return attrType === AttributeValueTypeDto.DoubleDto ? 'n4' : 'n0';\n }\n\n public getValuePlaceholder(filter: FieldFilterItem): string {\n if (this.isArrayOperator(filter.operator)) {\n return 'Values: A,B,C or \"value,with,comma\"';\n }\n return 'Enter value';\n }\n\n public isArrayOperator(operator: FieldFilterOperatorsDto): boolean {\n return this.arrayOperators.includes(operator);\n }\n\n public isSelected(filter: FieldFilterItem): boolean {\n return this.selectedKeys.includes(filter.id);\n }\n\n public toggleSelection(filter: FieldFilterItem): void {\n if (this.isSelected(filter)) {\n this.selectedKeys = this.selectedKeys.filter((k) => k !== filter.id);\n } else {\n this.selectedKeys = [...this.selectedKeys, filter.id];\n }\n }\n\n public isAllSelected(): boolean {\n return (\n this._filters.length > 0 &&\n this.selectedKeys.length === this._filters.length\n );\n }\n\n public isIndeterminate(): boolean {\n return (\n this.selectedKeys.length > 0 &&\n this.selectedKeys.length < this._filters.length\n );\n }\n\n public toggleSelectAll(event: Event): void {\n const checkbox = event.target as HTMLInputElement;\n if (checkbox.checked) {\n this.selectedKeys = this._filters.map((f) => f.id);\n } else {\n this.selectedKeys = [];\n }\n }\n\n public onAttributeFilterChange(filter: string): void {\n this.filteredAttributeList = this.availableAttributes.filter((attr) =>\n attr.attributePath.toLowerCase().includes(filter.toLowerCase()),\n );\n }\n\n // ============================================================================\n // Variable Mode Methods\n // ============================================================================\n\n /**\n * Toggles between literal value and variable mode for a filter.\n */\n public toggleVariableMode(filter: FieldFilterItem): void {\n filter.useVariable = !filter.useVariable;\n // Clear the value when switching modes\n filter.comparisonValue = '';\n this.onFilterChange();\n }\n\n /**\n * Gets the selected variable object for a filter that uses variable mode.\n */\n public getSelectedVariable(filter: FieldFilterItem): FilterVariable | null {\n if (!filter.comparisonValue) return null;\n\n const varName = this.extractVariableName(String(filter.comparisonValue));\n if (!varName) return null;\n\n return this.availableVariables.find((v) => v.name === varName) || null;\n }\n\n /**\n * Handles variable selection from the dropdown.\n */\n public onVariableSelected(\n filter: FieldFilterItem,\n variable: FilterVariable | null,\n ): void {\n if (variable) {\n // Store as ${variableName} format\n filter.comparisonValue = `\\${${variable.name}}`;\n } else {\n filter.comparisonValue = '';\n }\n this.onFilterChange();\n }\n\n /**\n * Extracts variable name from ${variableName} or $variableName format.\n */\n private extractVariableName(value: string): string | null {\n // Match ${varName} format\n const bracketMatch = value.match(/^\\$\\{([^}]+)\\}$/);\n if (bracketMatch) {\n return bracketMatch[1];\n }\n\n // Match $varName format (without braces)\n const simpleMatch = value.match(/^\\$([a-zA-Z_][a-zA-Z0-9_]*)$/);\n if (simpleMatch) {\n return simpleMatch[1];\n }\n\n return null;\n }\n\n /**\n * Checks if a filter value is a variable reference.\n */\n public isVariableValue(value: unknown): boolean {\n if (!value || typeof value !== 'string') return false;\n return (\n /^\\$\\{[^}]+\\}$/.test(value) || /^\\$[a-zA-Z_][a-zA-Z0-9_]*$/.test(value)\n );\n }\n\n /**\n * Formats a variable name for display (e.g., \"myVar\" -> \"${myVar}\").\n */\n public formatVariableDisplay(name: string): string {\n return '$' + '{' + name + '}';\n }\n\n public getFieldFilters(): FieldFilterDto[] {\n return this._filters\n .filter((f) => f.attributePath && f.attributePath.trim() !== '')\n .map((f) => ({\n attributePath: f.attributePath,\n operator: f.operator,\n comparisonValue: f.comparisonValue,\n }));\n }\n\n public setFieldFilters(filters: FieldFilterDto[]): void {\n this._filters = filters.map((f) => ({\n ...f,\n id: this.nextId++,\n // Detect if the value is a variable reference\n useVariable: this.isVariableValue(f.comparisonValue),\n }));\n this.filtersChange.emit(this._filters);\n }\n\n public clear(): void {\n this._filters = [];\n this.selectedKeys = [];\n this.filtersChange.emit(this._filters);\n }\n\n private isArrayValue(value: string): boolean {\n return value.trim().startsWith('[') && value.trim().endsWith(']');\n }\n\n private extractArrayContent(value: string): string {\n const trimmed = value.trim();\n if (this.isArrayValue(trimmed)) {\n return trimmed.slice(1, -1);\n }\n return trimmed;\n }\n\n private parseAndCleanArrayValues(inputValue: string): string[] {\n const values: string[] = [];\n let current = '';\n let inQuotes = false;\n let quoteChar = '';\n\n for (const char of inputValue) {\n if (!inQuotes && (char === '\"' || char === \"'\")) {\n inQuotes = true;\n quoteChar = char;\n current += char;\n } else if (inQuotes && char === quoteChar) {\n inQuotes = false;\n current += char;\n quoteChar = '';\n } else if (!inQuotes && char === ',') {\n const trimmed = current.trim();\n if (trimmed.length > 0) {\n values.push(trimmed);\n }\n current = '';\n } else {\n current += char;\n }\n }\n\n const trimmed = current.trim();\n if (trimmed.length > 0) {\n values.push(trimmed);\n }\n\n return values;\n }\n}\n","import {Component, Input} from '@angular/core';\n\n/**\n * Animated OctoMesh logo loader component.\n * Displays the OctoMesh octopus SVG with wiggling tentacles\n * and orbiting data blocks representing data loading.\n *\n * Uses `--kendo-color-primary` for theme-independent coloring.\n * Override the color via CSS `color` property on the host element.\n *\n * @example\n * ```html\n * <mm-octo-loader [size]=\"'medium'\"></mm-octo-loader>\n * <mm-octo-loader [size]=\"'small'\"></mm-octo-loader>\n * ```\n */\n@Component({\n selector: 'mm-octo-loader',\n standalone: true,\n template: `\n <div class=\"octo-loader\" [class.octo-loader--small]=\"size === 'small'\" [class.octo-loader--medium]=\"size === 'medium'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"-22 -8 112 118\" class=\"octo-loader__svg\" overflow=\"visible\">\n <!-- Orbit track -->\n <circle class=\"octo-orbit\" cx=\"34\" cy=\"48\" r=\"52\" fill=\"none\" stroke-width=\"2.5\" stroke-dasharray=\"5 9\" opacity=\"0.5\">\n <animateTransform attributeName=\"transform\" type=\"rotate\"\n from=\"0 34 48\" to=\"360 34 48\" dur=\"12s\" repeatCount=\"indefinite\"/>\n </circle>\n\n <!-- Orbiting data blocks -->\n <g>\n <animateTransform attributeName=\"transform\" type=\"rotate\"\n from=\"0 34 48\" to=\"360 34 48\" dur=\"3s\" repeatCount=\"indefinite\"/>\n <rect class=\"octo-data\" x=\"28\" y=\"-9\" width=\"12\" height=\"8\" rx=\"1.5\" opacity=\"0.95\"/>\n </g>\n <g>\n <animateTransform attributeName=\"transform\" type=\"rotate\"\n from=\"120 34 48\" to=\"480 34 48\" dur=\"3s\" repeatCount=\"indefinite\"/>\n <rect class=\"octo-data\" x=\"28\" y=\"-9\" width=\"12\" height=\"8\" rx=\"1.5\" opacity=\"0.75\"/>\n </g>\n <g>\n <animateTransform attributeName=\"transform\" type=\"rotate\"\n from=\"240 34 48\" to=\"600 34 48\" dur=\"3s\" repeatCount=\"indefinite\"/>\n <rect class=\"octo-data\" x=\"28\" y=\"-9\" width=\"12\" height=\"8\" rx=\"1.5\" opacity=\"0.5\"/>\n </g>\n\n <!-- Octo character -->\n <g>\n <!-- Body -->\n <polygon fill=\"currentColor\"\n points=\"63.04 52.74 63.04 43.04 63.04 38.19 63.04 28.49 67.89 0 43.64 4.24 34.01 4.24 14.61 4.24 0 4.24 0 18.79 0 28.49 0 40.61 0 52.74 14.55 52.74 14.55 52.13 14.55 47.89 4.85 47.89 4.85 43.04 4.85 36.37 4.85 23.64 4.85 17.58 4.85 9.09 19.4 9.09 33.94 9.09 43.64 9.09 62.01 6.02 58.19 28.49 58.19 33.34 58.19 38.19 58.19 43.04 58.19 47.89 48.49 47.89 48.49 52.13 48.49 52.74\"/>\n <!-- Eyes -->\n <rect fill=\"currentColor\" x=\"18.79\" y=\"19.4\" width=\"4.85\" height=\"13.94\"/>\n <rect fill=\"currentColor\" x=\"38.79\" y=\"19.4\" width=\"4.85\" height=\"13.94\"/>\n <!-- Left outer arm -->\n <g class=\"octo-arm octo-arm--ol\">\n <polygon fill=\"currentColor\"\n points=\"0 52.74 9.7 52.74 9.7 72.13 4.85 72.13 4.85 67.28 0 67.28 0 72.13 0 76.98 4.85 76.98 14.55 76.98 14.55 72.13 14.55 52.74\"/>\n </g>\n <!-- Left inner leg -->\n <g class=\"octo-leg octo-leg--left\">\n <polygon fill=\"currentColor\"\n points=\"19.4 91.53 14.55 91.53 14.55 81.83 9.7 81.83 9.7 91.53 9.7 96.38 14.55 96.38 19.4 96.38 24.25 96.38 24.25 91.53 24.25 52.74 19.4 52.74 19.4 91.53\"/>\n </g>\n <!-- Center leg -->\n <g class=\"octo-leg octo-leg--center\">\n <rect fill=\"currentColor\" x=\"29.1\" y=\"52.74\" width=\"4.85\" height=\"33.94\"/>\n </g>\n <!-- Right inner leg -->\n <g class=\"octo-leg octo-leg--right\">\n <polygon fill=\"currentColor\"\n points=\"48.49 91.53 43.64 91.53 43.64 52.74 38.79 52.74 38.79 91.53 38.79 96.38 43.64 96.38 48.49 96.38 53.34 96.38 53.34 91.53 53.34 81.83 48.49 81.83 48.49 91.53\"/>\n </g>\n <!-- Right outer arm -->\n <g class=\"octo-arm octo-arm--or\">\n <polygon fill=\"currentColor\"\n points=\"48.49 52.74 48.49 72.13 48.49 76.98 58.19 76.98 63.04 76.98 63.04 67.28 58.19 67.28 58.19 72.13 53.34 72.13 53.34 52.74 63.04 52.74\"/>\n </g>\n </g>\n\n <!-- Data flow: orbit → left arm → body → left arm → orbit -->\n <rect class=\"octo-data\" x=\"-7\" y=\"-4\" width=\"14\" height=\"8\" rx=\"1.5\" opacity=\"0\">\n <animateMotion path=\"M -10,88 L 7,76 L 7,54 L 7,76 L -10,88\" dur=\"3s\" repeatCount=\"indefinite\"/>\n <animate attributeName=\"opacity\" values=\"0.3;0.8;0.9;0.8;0.3\" keyTimes=\"0;0.25;0.5;0.75;1\" dur=\"3s\" repeatCount=\"indefinite\"/>\n </rect>\n <rect class=\"octo-data\" x=\"-7\" y=\"-4\" width=\"14\" height=\"8\" rx=\"1.5\" opacity=\"0\">\n <animateMotion path=\"M -10,88 L 7,76 L 7,54 L 7,76 L -10,88\" dur=\"3s\" begin=\"-1s\" repeatCount=\"indefinite\"/>\n <animate attributeName=\"opacity\" values=\"0.3;0.8;0.9;0.8;0.3\" keyTimes=\"0;0.25;0.5;0.75;1\" dur=\"3s\" begin=\"-1s\" repeatCount=\"indefinite\"/>\n </rect>\n <rect class=\"octo-data\" x=\"-7\" y=\"-4\" width=\"14\" height=\"8\" rx=\"1.5\" opacity=\"0\">\n <animateMotion path=\"M -10,88 L 7,76 L 7,54 L 7,76 L -10,88\" dur=\"3s\" begin=\"-2s\" repeatCount=\"indefinite\"/>\n <animate attributeName=\"opacity\" values=\"0.3;0.8;0.9;0.8;0.3\" keyTimes=\"0;0.25;0.5;0.75;1\" dur=\"3s\" begin=\"-2s\" repeatCount=\"indefinite\"/>\n </rect>\n\n <!-- Data flow: orbit → right arm → body → right arm → orbit -->\n <rect class=\"octo-data\" x=\"-7\" y=\"-4\" width=\"14\" height=\"8\" rx=\"1.5\" opacity=\"0\">\n <animateMotion path=\"M 73,88 L 56,76 L 56,54 L 56,76 L 73,88\" dur=\"3s\" begin=\"-0.5s\" repeatCount=\"indefinite\"/>\n <animate attributeName=\"opacity\" values=\"0.3;0.8;0.9;0.8;0.3\" keyTimes=\"0;0.25;0.5;0.75;1\" dur=\"3s\" begin=\"-0.5s\" repeatCount=\"indefinite\"/>\n </rect>\n <rect class=\"octo-data\" x=\"-7\" y=\"-4\" width=\"14\" height=\"8\" rx=\"1.5\" opacity=\"0\">\n <animateMotion path=\"M 73,88 L 56,76 L 56,54 L 56,76 L 73,88\" dur=\"3s\" begin=\"-1.5s\" repeatCount=\"indefinite\"/>\n <animate attributeName=\"opacity\" values=\"0.3;0.8;0.9;0.8;0.3\" keyTimes=\"0;0.25;0.5;0.75;1\" dur=\"3s\" begin=\"-1.5s\" repeatCount=\"indefinite\"/>\n </rect>\n <rect class=\"octo-data\" x=\"-7\" y=\"-4\" width=\"14\" height=\"8\" rx=\"1.5\" opacity=\"0\">\n <animateMotion path=\"M 73,88 L 56,76 L 56,54 L 56,76 L 73,88\" dur=\"3s\" begin=\"-2.5s\" repeatCount=\"indefinite\"/>\n <animate attributeName=\"opacity\" values=\"0.3;0.8;0.9;0.8;0.3\" keyTimes=\"0;0.25;0.5;0.75;1\" dur=\"3s\" begin=\"-2.5s\" repeatCount=\"indefinite\"/>\n </rect>\n </svg>\n </div>\n `,\n styles: [`\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--kendo-color-primary, #64ceb9);\n }\n\n .octo-loader {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n\n .octo-loader--small .octo-loader__svg {\n width: 24px;\n height: 24px;\n }\n\n .octo-loader--medium .octo-loader__svg {\n width: 48px;\n height: 48px;\n }\n\n /* Outer arms wiggle */\n .octo-arm--ol {\n transform-origin: 7px 52.74px;\n animation: octo-wiggle-outer 1.2s ease-in-out infinite;\n }\n\n .octo-arm--or {\n transform-origin: 56px 52.74px;\n animation: octo-wiggle-outer 1.2s ease-in-out infinite;\n animation-delay: -0.6s;\n }\n\n /* Inner legs wiggle */\n .octo-leg--left {\n transform-origin: 21.8px 52.74px;\n animation: octo-wiggle-inner 1s ease-in-out infinite;\n }\n\n .octo-leg--center {\n transform-origin: 31.5px 52.74px;\n animation: octo-wiggle-inner 1s ease-in-out infinite reverse;\n animation-delay: -0.33s;\n }\n\n .octo-leg--right {\n transform-origin: 46px 52.74px;\n animation: octo-wiggle-inner 1s ease-in-out infinite;\n animation-delay: -0.66s;\n }\n\n @keyframes octo-wiggle-inner {\n 0%, 100% { transform: rotate(-5deg); }\n 50% { transform: rotate(5deg); }\n }\n\n @keyframes octo-wiggle-outer {\n 0%, 100% { transform: rotate(-4deg); }\n 50% { transform: rotate(4deg); }\n }\n\n .octo-orbit {\n stroke: var(--neo-cyan, #00a8dc);\n }\n\n .octo-data {\n fill: var(--neo-cyan, #00a8dc);\n }\n `]\n})\nexport class OctoLoaderComponent {\n @Input() size: 'small' | 'medium' = 'medium';\n}\n","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type GetBinaryInfoQueryVariablesDto = Types.Exact<{\n rtId: Types.Scalars['OctoObjectId']['input'];\n}>;\n\n\nexport type GetBinaryInfoQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', systemReportingFileSystemItem?: { __typename?: 'SystemReportingFileSystemItemConnection', items?: Array<{ __typename?: 'SystemReportingFileSystemItem', rtId: any, ckTypeId: any, name: string, content: { __typename?: 'LargeBinaryInfo', binaryId: any, size: any, contentType: string, filename: string, downloadUri: any } } | null> | null } | null } | null };\n\nexport const GetBinaryInfoDocumentDto = gql`\n query getBinaryInfo($rtId: OctoObjectId!) {\n runtime {\n systemReportingFileSystemItem(rtId: $rtId) {\n items {\n rtId\n ckTypeId\n name\n content {\n binaryId\n size\n contentType\n filename\n downloadUri\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class GetBinaryInfoDtoGQL extends Apollo.Query<GetBinaryInfoQueryDto, GetBinaryInfoQueryVariablesDto> {\n document = GetBinaryInfoDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type GetRuntimeEntityAssociationsByIdQueryVariablesDto = Types.Exact<{\n rtId: Types.Scalars['OctoObjectId']['input'];\n ckTypeId: Types.Scalars['String']['input'];\n direction: Types.GraphDirectionDto;\n after?: Types.InputMaybe<Types.Scalars['String']['input']>;\n first?: Types.InputMaybe<Types.Scalars['Int']['input']>;\n roleId?: Types.InputMaybe<Types.Scalars['String']['input']>;\n relatedRtCkId?: Types.InputMaybe<Types.Scalars['RtCkTypeId']['input']>;\n relatedRtId?: Types.InputMaybe<Types.Scalars['OctoObjectId']['input']>;\n}>;\n\n\nexport type GetRuntimeEntityAssociationsByIdQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', items?: Array<{ __typename?: 'RtEntity', rtId: any, ckTypeId: any, associations?: { __typename?: 'RtEntityGenericAssociation', definitions?: { __typename?: 'RtAssociationDtoConnection', totalCount?: number | null, items?: Array<{ __typename?: 'RtAssociation', targetRtId: any, targetCkTypeId: any, originRtId: any, originCkTypeId: any, ckAssociationRoleId: any } | null> | null } | null } | null } | null> | null } | null } | null };\n\nexport const GetRuntimeEntityAssociationsByIdDocumentDto = gql`\n query getRuntimeEntityAssociationsById($rtId: OctoObjectId!, $ckTypeId: String!, $direction: GraphDirection!, $after: String, $first: Int, $roleId: String, $relatedRtCkId: RtCkTypeId, $relatedRtId: OctoObjectId) {\n runtime {\n runtimeEntities(ckId: $ckTypeId, rtId: $rtId) {\n items {\n rtId\n ckTypeId\n associations {\n definitions(\n direction: $direction\n roleId: $roleId\n relatedRtCkId: $relatedRtCkId\n relatedRtId: $relatedRtId\n after: $after\n first: $first\n ) {\n totalCount\n items {\n targetRtId\n targetCkTypeId\n originRtId\n originCkTypeId\n ckAssociationRoleId\n }\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class GetRuntimeEntityAssociationsByIdDtoGQL extends Apollo.Query<GetRuntimeEntityAssociationsByIdQueryDto, GetRuntimeEntityAssociationsByIdQueryVariablesDto> {\n document = GetRuntimeEntityAssociationsByIdDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import { Directive, forwardRef, inject } from '@angular/core';\nimport { GraphDirectionDto, GraphQL } from '@meshmakers/octo-services';\nimport {\n DataSourceBase,\n FetchDataOptions,\n FetchResultTyped,\n ListViewComponent,\n} from '@meshmakers/shared-ui';\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { OctoGraphQlDataSource } from '../../data-sources/octo-graph-ql-data-source';\nimport { GetRuntimeEntityAssociationsByIdDtoGQL } from '../../graphQL/getRuntimeEntityAssociationsById';\n\nexport interface AssociationDisplayItem {\n targetRtId: string;\n targetCkTypeId: string;\n originRtId: string;\n originCkTypeId: string;\n ckAssociationRoleId: string;\n direction: 'Inbound' | 'Outbound';\n relatedRtId: string;\n relatedCkTypeId: string;\n}\n\n@Directive({\n selector: '[mmEntityAssociationsDataSource]',\n exportAs: 'mmEntityAssociationsDataSource',\n standalone: true,\n providers: [\n {\n provide: DataSourceBase,\n useExisting: forwardRef(() => EntityAssociationsDataSourceDirective),\n },\n ],\n})\nexport class EntityAssociationsDataSourceDirective extends OctoGraphQlDataSource<AssociationDisplayItem> {\n private readonly getAssociationsGQL = inject(\n GetRuntimeEntityAssociationsByIdDtoGQL,\n );\n\n private rtId: string | null = null;\n private ckTypeId: string | null = null;\n private direction: GraphDirectionDto = GraphDirectionDto.AnyDto;\n private roleId: string | null = null;\n private relatedRtCkId: string | null = null;\n private relatedRtId: string | null = null;\n\n constructor() {\n const listViewComponent = inject(ListViewComponent);\n super(listViewComponent);\n }\n\n public setEntityId(rtId: string, ckTypeId: string): void {\n this.rtId = rtId;\n this.ckTypeId = ckTypeId;\n }\n\n public setDirection(direction: GraphDirectionDto): void {\n this.direction = direction;\n this.fetchAgain();\n }\n\n public setRoleId(roleId: string | null): void {\n this.roleId = roleId;\n this.fetchAgain();\n }\n\n public setRelatedRtCkId(relatedRtCkId: string | null): void {\n this.relatedRtCkId = relatedRtCkId;\n this.fetchAgain();\n }\n\n public setRelatedRtId(relatedRtId: string | null): void {\n this.relatedRtId = relatedRtId;\n this.fetchAgain();\n }\n\n public refresh(): void {\n this.fetchAgain();\n }\n\n public fetchData(\n queryOptions: FetchDataOptions,\n ): Observable<FetchResultTyped<AssociationDisplayItem> | null> {\n if (!this.rtId || !this.ckTypeId) {\n return of(new FetchResultTyped<AssociationDisplayItem>([], 0));\n }\n\n const variables = {\n rtId: this.rtId,\n ckTypeId: this.ckTypeId,\n direction: this.direction,\n roleId: this.roleId,\n relatedRtCkId: this.relatedRtCkId,\n relatedRtId: this.relatedRtId,\n first: queryOptions.state.take,\n after: GraphQL.offsetToCursor(queryOptions.state.skip ?? 0),\n };\n\n return this.getAssociationsGQL\n .fetch({\n variables: variables,\n fetchPolicy: queryOptions.forceRefresh ? 'network-only' : 'cache-first',\n })\n .pipe(\n map((result) => {\n const entity = result.data?.runtime?.runtimeEntities?.items?.[0];\n const items = entity?.associations?.definitions?.items ?? [];\n const totalCount = entity?.associations?.definitions?.totalCount ?? 0;\n\n const transformedItems = items\n .filter((item): item is NonNullable<typeof item> => item != null)\n .map((item) => {\n const isOutbound = item.originRtId === this.rtId;\n return {\n targetRtId: item.targetRtId,\n targetCkTypeId: item.targetCkTypeId,\n originRtId: item.originRtId,\n originCkTypeId: item.originCkTypeId,\n ckAssociationRoleId: item.ckAssociationRoleId,\n direction: isOutbound ? 'Outbound' : 'Inbound',\n relatedRtId: isOutbound ? item.targetRtId : item.originRtId,\n relatedCkTypeId: isOutbound\n ? item.targetCkTypeId\n : item.originCkTypeId,\n } as AssociationDisplayItem;\n });\n\n return new FetchResultTyped<AssociationDisplayItem>(\n transformedItems,\n totalCount,\n );\n }),\n );\n }\n}\n","/**\n * Translatable messages for the RuntimeBrowser components.\n * Pass translated strings to override the English defaults.\n */\nexport interface RuntimeBrowserMessages {\n title: string;\n badgeLabel: string;\n titlePrefix: string;\n ready: string;\n selectItem: string;\n noPropertiesAvailable: string;\n constructionKitModel: string;\n constructionKitModels: string;\n fullName: string;\n semanticName: string;\n modelName: string;\n version: string;\n state: string;\n selectTypeFromTree: string;\n browseModelsAndTypes: string;\n type: string;\n abstract: string;\n final: string;\n base: string;\n runtimeEntities: string;\n runtimeId: string;\n typeId: string;\n entityIdentifier: string;\n wellKnownName: string;\n entityInformation: string;\n loadingEntityDetails: string;\n retry: string;\n attributes: string;\n associations: string;\n direction: string;\n role: string;\n relatedType: string;\n relatedEntity: string;\n all: string;\n inbound: string;\n outbound: string;\n allRoles: string;\n allTypes: string;\n entityId: string;\n viewDetails: string;\n copyToClipboard: string;\n copyEntityIdentifierToClipboard: string;\n goToEntity: string;\n refresh: string;\n create: string;\n edit: string;\n delete: string;\n createEntity: string;\n updateEntity: string;\n name: string;\n runtimeCkTypeId: string;\n targetLocation: string;\n rootLevel: string;\n entityType: string;\n selectType: string;\n selectTypePrompt: string;\n save: string;\n cancel: string;\n longitude: string;\n latitude: string;\n resetToInitialValue: string;\n attributesFor: string;\n couldNotLoadEntityDetails: string;\n failedToLoadEntityDetails: string;\n copiedToClipboard: string;\n failedToCopyToClipboard: string;\n downloadNotAvailable: string;\n failedToLoadDownloadInfo: string;\n missingRequiredIdentifiers: string;\n failedToCreateEntity: string;\n failedToUpdateEntity: string;\n goToEntityTitle: string;\n goToEntityPrompt: string;\n go: string;\n created: string;\n modified: string;\n}\n\n/**\n * Default English messages for the RuntimeBrowser components.\n */\nexport const DEFAULT_RUNTIME_BROWSER_MESSAGES: RuntimeBrowserMessages = {\n title: 'Runtime Browser',\n badgeLabel: 'Entities & Data',\n titlePrefix: 'REPOSITORY',\n ready: 'READY',\n selectItem: 'Select an item from the tree to view its details',\n noPropertiesAvailable: 'No properties available for this entity',\n constructionKitModel: 'Construction Kit Model',\n constructionKitModels: 'Construction Kit Models',\n fullName: 'Full Name',\n semanticName: 'Semantic Name',\n modelName: 'Model Name',\n version: 'Version',\n state: 'State',\n selectTypeFromTree: 'Select a type from the tree to view its details.',\n browseModelsAndTypes:\n 'Browse available construction kit models and their types.',\n type: 'Type',\n abstract: 'Abstract',\n final: 'Final',\n base: 'Base',\n runtimeEntities: 'Runtime Entities',\n runtimeId: 'Runtime ID',\n typeId: 'Type ID',\n entityIdentifier: 'Entity Identifier',\n wellKnownName: 'Well Known Name',\n entityInformation: 'Entity Information',\n loadingEntityDetails: 'Loading entity details...',\n retry: 'Retry',\n attributes: 'Attributes',\n associations: 'Associations',\n direction: 'Direction',\n role: 'Role',\n relatedType: 'Related Type',\n relatedEntity: 'Related Entity',\n all: 'All',\n inbound: 'Inbound',\n outbound: 'Outbound',\n allRoles: 'All roles',\n allTypes: 'All types',\n entityId: 'Entity ID',\n viewDetails: 'View Details',\n copyToClipboard: 'Copy to clipboard',\n copyEntityIdentifierToClipboard: 'Copy entity identifier to clipboard',\n goToEntity: 'Goto Entity',\n refresh: 'Refresh',\n create: 'Create',\n edit: 'Edit',\n delete: 'Delete',\n createEntity: 'Create Entity',\n updateEntity: 'Update Entity',\n name: 'Name',\n runtimeCkTypeId: 'Runtime CK Type ID',\n targetLocation: 'Target Location',\n rootLevel: 'Root Level',\n entityType: 'Entity Type',\n selectType: 'Select Type...',\n selectTypePrompt:\n 'Please select an Entity Type to configure attributes.',\n save: 'Save',\n cancel: 'Cancel',\n longitude: 'Longitude (X)',\n latitude: 'Latitude (Y)',\n resetToInitialValue: 'Reset to initial value',\n attributesFor: 'Attributes for',\n couldNotLoadEntityDetails: 'Could not load entity details',\n failedToLoadEntityDetails: 'Failed to load entity details',\n copiedToClipboard: 'copied to clipboard',\n failedToCopyToClipboard: 'Failed to copy to clipboard',\n downloadNotAvailable: 'Download not available for this file',\n failedToLoadDownloadInfo: 'Failed to load download information',\n missingRequiredIdentifiers:\n 'Missing required identifiers to create an entity.',\n failedToCreateEntity: 'Failed to create entity. Please try again.',\n failedToUpdateEntity: 'Failed to update entity. Please try again.',\n goToEntityTitle: 'Go to Entity',\n goToEntityPrompt: 'Enter entity identifier in format \"ckTypeId@rtId\":',\n go: 'Go',\n created: 'Created',\n modified: 'Modified',\n};\n","import { CommonModule } from \"@angular/common\";\nimport {\n Component,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n} from \"@angular/core\";\nimport { CommandItemExecuteEventArgs } from \"@meshmakers/shared-services\";\nimport { ListViewComponent } from \"@meshmakers/shared-ui\";\nimport { ButtonModule } from \"@progress/kendo-angular-buttons\";\nimport { DropDownListModule } from \"@progress/kendo-angular-dropdowns\";\nimport { SVGIconModule } from \"@progress/kendo-angular-icons\";\nimport { TextBoxModule } from \"@progress/kendo-angular-inputs\";\nimport {\n CardModule,\n SelectEvent,\n TabStripModule,\n} from \"@progress/kendo-angular-layout\";\nimport { NotificationService } from \"@progress/kendo-angular-notification\";\nimport {\n copyIcon,\n eyeIcon,\n gearIcon,\n infoCircleIcon,\n} from \"@progress/kendo-svg-icons\";\nimport { firstValueFrom, Subject } from \"rxjs\";\nimport { debounceTime, distinctUntilChanged, takeUntil } from \"rxjs/operators\";\nimport { GetBinaryInfoDtoGQL } from \"../../graphQL/getBinaryInfo\";\nimport { GraphDirectionDto, RtEntityDto } from \"../../graphQL/globalTypes\";\nimport {\n BinaryDownloadEvent,\n PropertyChangeEvent,\n PropertyConverterService,\n PropertyGridComponent,\n PropertyGridConfig,\n PropertyGridItem,\n} from \"../../property-grid\";\nimport {\n AssociationDisplayItem,\n EntityAssociationsDataSourceDirective,\n} from \"../data-sources/entity-associations-data-source.directive\";\nimport {\n DEFAULT_RUNTIME_BROWSER_MESSAGES,\n RuntimeBrowserMessages,\n} from \"../runtime-browser.model\";\n\ninterface DirectionOption {\n text: string;\n value: GraphDirectionDto;\n}\n\n@Component({\n selector: \"mm-entity-detail-view\",\n standalone: true,\n imports: [\n CommonModule,\n TabStripModule,\n ButtonModule,\n SVGIconModule,\n CardModule,\n DropDownListModule,\n TextBoxModule,\n PropertyGridComponent,\n ListViewComponent,\n EntityAssociationsDataSourceDirective,\n ],\n template: `\n @if (loading) {\n <div class=\"loading-state\">\n <p>{{ _messages.loadingEntityDetails }}</p>\n </div>\n }\n\n @if (error) {\n <div class=\"error-state\">\n <p class=\"error-message\">{{ error }}</p>\n <button kendoButton (click)=\"retry.emit()\">\n {{ _messages.retry }}\n </button>\n </div>\n }\n\n @if (entity && !loading) {\n <div class=\"entity-content\">\n <!-- Basic Info Card -->\n <kendo-card class=\"basic-info-card\" width=\"100%\">\n <kendo-card-header>\n <h3>\n <kendo-svgicon [icon]=\"infoCircleIcon\"></kendo-svgicon>\n {{ _messages.entityInformation }}\n </h3>\n </kendo-card-header>\n <kendo-card-body>\n <div class=\"basic-info-grid\">\n <div class=\"info-item with-action\">\n <label>{{ _messages.runtimeId }}:</label>\n <div class=\"value-with-action\">\n <span class=\"value\">{{ entity.rtId }}</span>\n <button\n kendoButton\n fillMode=\"flat\"\n size=\"small\"\n [svgIcon]=\"copyIcon\"\n [title]=\"_messages.copyToClipboard\"\n (click)=\"copyToClipboard(entity.rtId, _messages.runtimeId)\"\n ></button>\n </div>\n </div>\n <div class=\"info-item with-action\">\n <label>{{ _messages.typeId }}:</label>\n <div class=\"value-with-action\">\n <span class=\"value\">{{ entity.ckTypeId }}</span>\n <button\n kendoButton\n fillMode=\"flat\"\n size=\"small\"\n [svgIcon]=\"copyIcon\"\n [title]=\"_messages.copyToClipboard\"\n (click)=\"copyToClipboard(entity.ckTypeId, _messages.typeId)\"\n ></button>\n </div>\n </div>\n <div class=\"info-item with-action\">\n <label>{{ _messages.entityIdentifier }}:</label>\n <div class=\"value-with-action\">\n <span class=\"value\">{{ getEntityIdentifier() }}</span>\n <button\n kendoButton\n fillMode=\"flat\"\n size=\"small\"\n [svgIcon]=\"copyIcon\"\n [title]=\"_messages.copyEntityIdentifierToClipboard\"\n (click)=\"\n copyToClipboard(\n getEntityIdentifier(),\n _messages.entityIdentifier\n )\n \"\n ></button>\n </div>\n </div>\n @if (entity.rtWellKnownName) {\n <div class=\"info-item\">\n <label>{{ _messages.wellKnownName }}:</label>\n <span class=\"value\">{{ entity.rtWellKnownName }}</span>\n </div>\n }\n </div>\n </kendo-card-body>\n </kendo-card>\n\n <!-- Tab Strip for Detailed Information -->\n <kendo-tabstrip class=\"entity-tabs\" (tabSelect)=\"onTabSelect($event)\">\n <kendo-tabstrip-tab\n [title]=\"_messages.attributes + ' (' + getPropertyCount() + ')'\"\n [selected]=\"true\"\n >\n <ng-template kendoTabContent>\n <div class=\"tab-content properties-tab\">\n @if (!hasProperties()) {\n <div class=\"empty-state\">\n <kendo-svgicon [icon]=\"propertiesIcon\"></kendo-svgicon>\n <p>{{ _messages.noPropertiesAvailable }}</p>\n </div>\n }\n\n @if (hasProperties()) {\n <mm-property-grid\n [data]=\"propertyGridItems\"\n [config]=\"propertyGridConfig\"\n [showTypeColumn]=\"true\"\n (propertyChange)=\"propertyChange.emit($event)\"\n (binaryDownload)=\"onBinaryDownload($event)\"\n >\n </mm-property-grid>\n }\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n\n <kendo-tabstrip-tab\n [title]=\"\n _messages.associations + ' (' + getAssociationCount() + ')'\n \"\n >\n <ng-template kendoTabContent>\n <div class=\"tab-content associations-tab\">\n <div class=\"associations-toolbar\">\n <div class=\"filter-group\">\n <label>{{ _messages.direction }}:</label>\n <kendo-dropdownlist\n [data]=\"directionOptions\"\n [value]=\"selectedDirection\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n (valueChange)=\"onDirectionChange($event)\"\n >\n </kendo-dropdownlist>\n </div>\n <div class=\"filter-group\">\n <label>{{ _messages.role }}:</label>\n <kendo-textbox\n [value]=\"selectedRoleId ?? ''\"\n [clearButton]=\"true\"\n [placeholder]=\"_messages.allRoles\"\n (valueChange)=\"onRoleIdChange($event)\"\n >\n </kendo-textbox>\n </div>\n <div class=\"filter-group\">\n <label>{{ _messages.relatedType }}:</label>\n <kendo-textbox\n [value]=\"selectedRelatedRtCkId ?? ''\"\n [clearButton]=\"true\"\n [placeholder]=\"_messages.allTypes\"\n (valueChange)=\"onRelatedRtCkIdChange($event)\"\n >\n </kendo-textbox>\n </div>\n <div class=\"filter-group\">\n <label>{{ _messages.relatedEntity }}:</label>\n <kendo-textbox\n [value]=\"selectedRelatedRtId ?? ''\"\n [clearButton]=\"true\"\n [placeholder]=\"_messages.entityId\"\n (valueChange)=\"onRelatedRtIdChange($event)\"\n >\n </kendo-textbox>\n </div>\n </div>\n\n <mm-list-view\n mmEntityAssociationsDataSource\n #associationsDir=\"mmEntityAssociationsDataSource\"\n [sortable]=\"true\"\n [pageable]=\"{ buttonCount: 3, pageSizes: [10, 20, 50] }\"\n [pageSize]=\"20\"\n [selectable]=\"{ mode: 'single', enabled: true }\"\n [columns]=\"[\n {\n field: 'ckAssociationRoleId',\n displayName: _messages.role,\n dataType: 'text',\n },\n {\n field: 'direction',\n displayName: _messages.direction,\n dataType: 'text',\n },\n {\n field: 'relatedRtId',\n displayName: _messages.relatedEntity,\n dataType: 'text',\n },\n {\n field: 'relatedCkTypeId',\n displayName: _messages.relatedType,\n dataType: 'text',\n },\n ]\"\n [actionCommandItems]=\"[\n {\n id: 'view',\n type: 'link',\n text: _messages.viewDetails,\n svgIcon: detailsIcon,\n onClick: onViewAssociationDetails,\n },\n ]\"\n >\n </mm-list-view>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n </kendo-tabstrip>\n </div>\n }\n `,\n styleUrls: [\"./entity-detail-view.component.scss\"],\n})\nexport class EntityDetailViewComponent implements OnChanges, OnDestroy {\n @Input() entity: RtEntityDto | null = null;\n @Input() loading = false;\n @Input() error: string | null = null;\n @Input() showHeader = true;\n @Input() set messages(value: Partial<RuntimeBrowserMessages>) {\n this._messages = { ...DEFAULT_RUNTIME_BROWSER_MESSAGES, ...value };\n }\n\n @Output() retry = new EventEmitter<void>();\n @Output() propertyChange = new EventEmitter<PropertyChangeEvent>();\n @Output() navigateToEntity = new EventEmitter<{\n rtId: string;\n ckTypeId: string;\n }>();\n\n @ViewChild(\"associationsDir\", { static: false })\n associationsDataSource?: EntityAssociationsDataSourceDirective;\n\n private readonly notificationService = inject(NotificationService);\n private readonly propertyConverter = inject(PropertyConverterService);\n private readonly getBinaryInfoGQL = inject(GetBinaryInfoDtoGQL);\n protected _messages: RuntimeBrowserMessages = {\n ...DEFAULT_RUNTIME_BROWSER_MESSAGES,\n };\n\n protected readonly infoCircleIcon = infoCircleIcon;\n protected readonly propertiesIcon = gearIcon;\n protected readonly copyIcon = copyIcon;\n protected readonly detailsIcon = eyeIcon;\n\n propertyGridItems: PropertyGridItem[] = [];\n propertyGridConfig: PropertyGridConfig = {\n readOnlyMode: false,\n showTypeIcons: true,\n height: \"500px\",\n showSearch: true,\n };\n\n // Direction filter - use getter for current messages\n protected get directionOptions(): DirectionOption[] {\n return [\n {\n text: this._messages.all,\n value: GraphDirectionDto.AnyDto,\n },\n {\n text: this._messages.inbound,\n value: GraphDirectionDto.InboundDto,\n },\n {\n text: this._messages.outbound,\n value: GraphDirectionDto.OutboundDto,\n },\n ];\n }\n protected selectedDirection: GraphDirectionDto = GraphDirectionDto.AnyDto;\n\n // Role filter\n protected selectedRoleId: string | null = null;\n\n // Related Type filter\n protected selectedRelatedRtCkId: string | null = null;\n\n // Related Entity filter\n protected selectedRelatedRtId: string | null = null;\n\n // Debounced filter subjects\n private readonly destroy$ = new Subject<void>();\n private readonly roleIdFilter$ = new Subject<string | null>();\n private readonly relatedRtCkIdFilter$ = new Subject<string | null>();\n private readonly relatedRtIdFilter$ = new Subject<string | null>();\n\n constructor() {\n this.roleIdFilter$\n .pipe(debounceTime(500), distinctUntilChanged(), takeUntil(this.destroy$))\n .subscribe((roleId) => {\n if (\n this.associationsDataSource &&\n this.entity?.rtId &&\n this.entity?.ckTypeId\n ) {\n this.associationsDataSource.setRoleId(roleId);\n }\n });\n\n this.relatedRtCkIdFilter$\n .pipe(debounceTime(500), distinctUntilChanged(), takeUntil(this.destroy$))\n .subscribe((relatedRtCkId) => {\n if (\n this.associationsDataSource &&\n this.entity?.rtId &&\n this.entity?.ckTypeId\n ) {\n this.associationsDataSource.setRelatedRtCkId(relatedRtCkId);\n }\n });\n\n this.relatedRtIdFilter$\n .pipe(debounceTime(500), distinctUntilChanged(), takeUntil(this.destroy$))\n .subscribe((relatedRtId) => {\n if (\n this.associationsDataSource &&\n this.entity?.rtId &&\n this.entity?.ckTypeId\n ) {\n this.associationsDataSource.setRelatedRtId(relatedRtId);\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"entity\"] && this.entity) {\n this.updatePropertyGrid();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private updatePropertyGrid(): void {\n if (!this.entity) {\n this.propertyGridItems = [];\n return;\n }\n\n // Convert entity to property grid items using the converter service\n const mappedEntity = this.toPropertyEntity(this.entity);\n this.propertyConverter.convertRtEntityToProperties(mappedEntity).subscribe({\n next: (items: PropertyGridItem[]) => {\n this.propertyGridItems = items;\n },\n error: (err: unknown) => {\n console.error(\"Error converting entity to properties:\", err);\n this.propertyGridItems = [];\n },\n });\n }\n\n private toPropertyEntity(entity: RtEntityDto): {\n rtId?: string;\n ckTypeId?: string;\n rtCreationDateTime?: string;\n rtChangedDateTime?: string;\n rtWellKnownName?: string;\n attributes?: {\n items?: { attributeName?: string | null; value?: unknown }[];\n };\n } {\n const attributeItems = (entity.attributes?.items ?? []).filter(\n (item): item is { attributeName?: string | null; value?: unknown } =>\n item != null,\n );\n return {\n rtId: entity.rtId,\n ckTypeId: entity.ckTypeId,\n rtCreationDateTime: this.normalizeDateValue(entity.rtCreationDateTime),\n rtChangedDateTime: this.normalizeDateValue(entity.rtChangedDateTime),\n rtWellKnownName: entity.rtWellKnownName ?? undefined,\n attributes:\n attributeItems.length > 0 ? { items: attributeItems } : undefined,\n };\n }\n\n private normalizeDateValue(value: unknown): string | undefined {\n if (typeof value === \"string\") {\n return value;\n }\n if (value instanceof Date) {\n const time = value.getTime();\n return isNaN(time) ? undefined : value.toISOString();\n }\n return undefined;\n }\n\n protected onTabSelect(event: SelectEvent): void {\n // Tab 0 = Attributes, Tab 1 = Associations\n if (event.index === 1) {\n this.loadAssociations();\n }\n }\n\n private loadAssociations(): void {\n // Use setTimeout to ensure ViewChild is initialized\n setTimeout(() => {\n if (this.associationsDataSource && this.entity) {\n this.associationsDataSource.setEntityId(\n this.entity.rtId,\n this.entity.ckTypeId,\n );\n this.associationsDataSource.setDirection(this.selectedDirection);\n }\n }, 0);\n }\n\n protected onDirectionChange(direction: GraphDirectionDto): void {\n this.selectedDirection = direction;\n if (\n this.associationsDataSource &&\n this.entity?.rtId &&\n this.entity?.ckTypeId\n ) {\n this.associationsDataSource.setDirection(direction);\n }\n }\n\n protected onRoleIdChange(roleId: string | null): void {\n this.selectedRoleId = roleId || null;\n this.roleIdFilter$.next(this.selectedRoleId);\n }\n\n protected onRelatedRtCkIdChange(relatedRtCkId: string | null): void {\n this.selectedRelatedRtCkId = relatedRtCkId || null;\n this.relatedRtCkIdFilter$.next(this.selectedRelatedRtCkId);\n }\n\n protected onRelatedRtIdChange(relatedRtId: string | null): void {\n this.selectedRelatedRtId = relatedRtId || null;\n this.relatedRtIdFilter$.next(this.selectedRelatedRtId);\n }\n\n protected onViewAssociationDetails = async (\n eventArgs: CommandItemExecuteEventArgs,\n ): Promise<void> => {\n const assoc = eventArgs.data as AssociationDisplayItem;\n if (assoc?.relatedRtId && assoc?.relatedCkTypeId) {\n this.navigateToEntity.emit({\n rtId: assoc.relatedRtId,\n ckTypeId: assoc.relatedCkTypeId,\n });\n }\n };\n\n getEntityIdentifier(): string {\n if (!this.entity?.ckTypeId || !this.entity?.rtId) {\n return \"Unknown\";\n }\n return `${this.entity.ckTypeId}@${this.entity.rtId}`;\n }\n\n hasProperties(): boolean {\n return this.propertyGridItems.length > 0;\n }\n\n getPropertyCount(): number {\n return this.propertyGridItems.length;\n }\n\n getAssociationCount(): number {\n return this.entity?.associations?.definitions?.totalCount ?? 0;\n }\n\n protected copyToClipboard(\n value: string | null | undefined,\n label: string,\n ): void {\n if (!value) return;\n\n navigator.clipboard\n .writeText(value)\n .then(() => {\n this.notificationService.show({\n content: `${label} ${this._messages.copiedToClipboard}`,\n type: { style: \"success\", icon: true },\n position: { horizontal: \"right\", vertical: \"top\" },\n hideAfter: 2000,\n animation: { type: \"fade\", duration: 400 },\n });\n })\n .catch((err) => {\n console.error(\"Failed to copy:\", err);\n this.notificationService.show({\n content: this._messages.failedToCopyToClipboard,\n type: { style: \"error\", icon: true },\n position: { horizontal: \"right\", vertical: \"top\" },\n hideAfter: 3000,\n animation: { type: \"fade\", duration: 400 },\n });\n });\n }\n\n /**\n * Handle binary download request from property grid.\n * Loads the full binary info including downloadUri and opens the download.\n */\n protected async onBinaryDownload(_event: BinaryDownloadEvent): Promise<void> {\n if (!this.entity?.rtId) {\n console.warn(\"Cannot download: no entity rtId available\");\n return;\n }\n\n try {\n // Load binary info with downloadUri using the entity's rtId\n const result = await firstValueFrom(\n this.getBinaryInfoGQL.fetch({\n variables: { rtId: this.entity.rtId },\n }),\n );\n\n const item =\n result.data?.runtime?.systemReportingFileSystemItem?.items?.[0];\n if (item?.content?.downloadUri) {\n // Open download in new tab\n window.open(item.content.downloadUri, \"_blank\", \"noopener,noreferrer\");\n } else {\n console.warn(\"No downloadUri found for binary\");\n this.notificationService.show({\n content: this._messages.downloadNotAvailable,\n type: { style: \"warning\", icon: true },\n position: { horizontal: \"right\", vertical: \"top\" },\n hideAfter: 3000,\n animation: { type: \"fade\", duration: 400 },\n });\n }\n } catch (error) {\n console.error(\"Failed to load binary info:\", error);\n this.notificationService.show({\n content: this._messages.failedToLoadDownloadInfo,\n type: { style: \"error\", icon: true },\n position: { horizontal: \"right\", vertical: \"top\" },\n hideAfter: 3000,\n animation: { type: \"fade\", duration: 400 },\n });\n }\n }\n}\n\n","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type GetRuntimeEntityByIdQueryVariablesDto = Types.Exact<{\n rtId: Types.Scalars['OctoObjectId']['input'];\n ckTypeId: Types.Scalars['String']['input'];\n}>;\n\n\nexport type GetRuntimeEntityByIdQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', items?: Array<{ __typename?: 'RtEntity', rtId: any, ckTypeId: any, rtWellKnownName?: string | null, rtCreationDateTime?: any | null, rtChangedDateTime?: any | null, attributes?: { __typename?: 'RtEntityAttributeDtoConnection', items?: Array<{ __typename?: 'RtEntityAttribute', attributeName?: string | null, value?: any | null } | null> | null } | null, associations?: { __typename?: 'RtEntityGenericAssociation', definitions?: { __typename?: 'RtAssociationDtoConnection', totalCount?: number | null } | null } | null } | null> | null } | null } | null };\n\nexport const GetRuntimeEntityByIdDocumentDto = gql`\n query getRuntimeEntityById($rtId: OctoObjectId!, $ckTypeId: String!) {\n runtime {\n runtimeEntities(ckId: $ckTypeId, rtId: $rtId) {\n items {\n rtId\n ckTypeId\n rtWellKnownName\n rtCreationDateTime\n rtChangedDateTime\n attributes(resolveEnumValuesToNames: true) {\n items {\n attributeName\n value\n }\n }\n associations {\n definitions(direction: ANY, first: 0) {\n totalCount\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class GetRuntimeEntityByIdDtoGQL extends Apollo.Query<GetRuntimeEntityByIdQueryDto, GetRuntimeEntityByIdQueryVariablesDto> {\n document = GetRuntimeEntityByIdDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import { Injectable, inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { GetRuntimeEntityByIdDtoGQL } from '../../graphQL/getRuntimeEntityById';\nimport { RtEntityDto } from '../../graphQL/globalTypes';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EntityDetailDataSource {\n private readonly getRuntimeEntityByIdGQL = inject(GetRuntimeEntityByIdDtoGQL);\n\n /**\n * Fetches detailed entity information including attributes and associations\n */\n async fetchEntityDetails(\n rtId: string,\n ckTypeId: string,\n ): Promise<RtEntityDto | null> {\n try {\n const result = await firstValueFrom(\n this.getRuntimeEntityByIdGQL\n .fetch({\n variables: {\n rtId,\n ckTypeId,\n },\n })\n .pipe(\n map(\n (response) => response.data?.runtime?.runtimeEntities?.items?.[0],\n ),\n ),\n );\n\n return (result as RtEntityDto) || null;\n } catch (error) {\n console.error('Failed to fetch entity details:', error);\n throw error;\n }\n }\n\n /**\n * Fetches entity with expanded associations for deeper navigation\n */\n async fetchEntityWithAssociations(\n rtId: string,\n ckTypeId: string,\n ): Promise<RtEntityDto | null> {\n try {\n // For now, use the same query - can be extended later for more detailed association data\n return this.fetchEntityDetails(rtId, ckTypeId);\n } catch (error) {\n console.error('Failed to fetch entity with associations:', error);\n throw error;\n }\n }\n}\n","export interface RtEntityId {\n rtId: string;\n ckTypeId: string;\n}\n\nexport class RtEntityIdHelper {\n /**\n * Encodes ckTypeId@rtId into a URL-safe Base64 string for routing\n */\n static encode(rtId: string, ckTypeId: string): string {\n return btoa(`${ckTypeId}@${rtId}`).replace(/[+/=]/g, (match) => {\n switch (match) {\n case '+':\n return '-';\n case '/':\n return '_';\n case '=':\n return '';\n default:\n return match;\n }\n });\n }\n\n /**\n * Encodes a ckTypeId@rtId string directly into a URL-safe Base64 string\n */\n static encodeFromString(entityIdentifier: string): string {\n return btoa(entityIdentifier).replace(/[+/=]/g, (match) => {\n switch (match) {\n case '+':\n return '-';\n case '/':\n return '_';\n case '=':\n return '';\n default:\n return match;\n }\n });\n }\n\n /**\n * Decodes URL parameter back to RtEntityId\n */\n static decode(encoded: string): RtEntityId {\n // Restore base64 padding and special characters\n const padded = encoded.padEnd(\n encoded.length + ((4 - (encoded.length % 4)) % 4),\n '=',\n );\n const restored = padded.replace(/-/g, '+').replace(/_/g, '/');\n\n try {\n const decoded = atob(restored);\n const parts = decoded.split('@');\n\n if (parts.length !== 2) {\n throw new Error(\n 'Invalid entity identifier format. Expected \"ckTypeId@rtId\"',\n );\n }\n\n const [ckTypeId, rtId] = parts;\n\n if (!rtId || !ckTypeId) {\n throw new Error(\n 'Invalid encoded entity ID format - missing rtId or ckTypeId',\n );\n }\n\n return { rtId, ckTypeId };\n } catch (error) {\n throw new Error(`Failed to decode entity ID: ${error}`);\n }\n }\n\n /**\n * Validates if a string is in the correct ckTypeId@rtId format\n */\n static isValidFormat(entityIdentifier: string): boolean {\n const parts = entityIdentifier.split('@');\n return (\n parts.length === 2 && parts[0].trim() !== '' && parts[1].trim() !== ''\n );\n }\n}\n","import { CommonModule, Location } from '@angular/common';\nimport { Component, OnDestroy, OnInit, inject } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ButtonModule } from '@progress/kendo-angular-buttons';\nimport { SVGIconModule } from '@progress/kendo-angular-icons';\nimport { arrowLeftIcon } from '@progress/kendo-svg-icons';\nimport { Subject, takeUntil } from 'rxjs';\nimport { RtEntityDto } from '../graphQL/globalTypes';\nimport { EntityDetailViewComponent } from './components/entity-detail-view.component';\nimport { EntityDetailDataSource } from './data-sources/entity-detail-data-source.service';\nimport { RtEntityId, RtEntityIdHelper } from './models/rt-entity-id';\n\n@Component({\n selector: 'mm-entity-detail',\n imports: [\n CommonModule,\n ButtonModule,\n SVGIconModule,\n EntityDetailViewComponent,\n ],\n template: `\n <div class=\"entity-detail\">\n <div class=\"entity-detail-header\">\n <button\n kendoButton\n size=\"small\"\n [svgIcon]=\"arrowLeftIcon\"\n (click)=\"navigateBack()\"\n >\n Back\n </button>\n\n @if (entity) {\n <div class=\"header-info\">\n <div class=\"entity-title\">\n <h2>{{ getEntityDisplayName() }}</h2>\n <p class=\"entity-type\">{{ entity.ckTypeId }}</p>\n </div>\n </div>\n }\n </div>\n\n <mm-entity-detail-view\n [entity]=\"entity\"\n [loading]=\"loading\"\n [error]=\"error\"\n (retry)=\"loadEntity()\"\n (propertyChange)=\"onPropertyChange($event)\"\n (navigateToEntity)=\"navigateToEntity($event.rtId, $event.ckTypeId)\"\n >\n </mm-entity-detail-view>\n </div>\n `,\n styleUrls: ['./entity-detail.component.scss'],\n})\nexport class EntityDetailComponent implements OnInit, OnDestroy {\n private readonly location = inject(Location);\n private readonly route = inject(ActivatedRoute);\n private readonly router = inject(Router);\n private readonly dataSource = inject(EntityDetailDataSource);\n private readonly destroy$ = new Subject<void>();\n\n protected readonly arrowLeftIcon = arrowLeftIcon;\n\n entity: RtEntityDto | null = null;\n loading = false;\n error: string | null = null;\n entityId: RtEntityId | null = null;\n\n async ngOnInit(): Promise<void> {\n this.route.params\n .pipe(takeUntil(this.destroy$))\n .subscribe(async (params) => {\n const encodedId = params['id'];\n if (encodedId) {\n try {\n this.entityId = RtEntityIdHelper.decode(encodedId);\n await this.loadEntity();\n } catch (error) {\n this.error = 'Invalid entity ID format';\n console.error('Failed to decode entity ID:', error);\n }\n }\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async loadEntity(): Promise<void> {\n if (!this.entityId) {\n return;\n }\n\n this.loading = true;\n this.error = null;\n\n try {\n this.entity = await this.dataSource.fetchEntityDetails(\n this.entityId.rtId,\n this.entityId.ckTypeId,\n );\n if (!this.entity) {\n this.error = 'Entity not found';\n }\n } catch (error) {\n console.error('Failed to load entity:', error);\n this.error = 'Failed to load entity details';\n } finally {\n this.loading = false;\n }\n }\n\n navigateBack(): void {\n this.location.back();\n }\n\n async navigateToEntity(rtId: string, ckTypeId: string): Promise<void> {\n if (!rtId || !ckTypeId || rtId === 'Unknown' || ckTypeId === 'Unknown')\n return;\n\n const encodedId = RtEntityIdHelper.encode(rtId, ckTypeId);\n // Navigate to another entity detail page\n const currentUrl = this.router.url;\n const newEntityUrl = currentUrl.replace(\n /\\/browser\\/entity\\/[^/]+$/,\n `/browser/entity/${encodedId}`,\n );\n await this.router.navigateByUrl(newEntityUrl);\n }\n\n getEntityDisplayName(): string {\n if (!this.entity) return 'Unknown Entity';\n\n const nameAttr = this.entity.attributes?.items?.find(\n (attr) =>\n attr?.attributeName === 'name' || attr?.attributeName === 'displayName',\n );\n\n if (nameAttr?.value && typeof nameAttr.value === 'string') {\n return nameAttr.value;\n }\n\n return (\n this.entity.rtWellKnownName || this.entity.ckTypeId || 'Unknown Entity'\n );\n }\n\n /**\n * Handle property value changes from the property grid\n */\n onPropertyChange(event: unknown): void {\n console.debug('Property changed:', event);\n // TODO: Implement property change handling\n // This could be used to track modifications and enable save functionality\n }\n}\n","export const botService = {\n name: 'bot-service',\n content: '<path d=\"M432.3,458.1c-7.1,6.7-15.7,9.9-24.8,9.9-101.1.2-202.3.4-303.4,0-16.9,0-29.5-9.4-36.3-25.1-2.4-5.6-4.2-12-4.3-18.1-.4-34.3-.2-68.7-.2-103v-5.3c-14.1-1-22-9.7-22-23.7s.3-23.7,0-35.5c-.5-16.2,5.8-24.5,22.1-27.8,0-22.3-.2-44.6,0-66.9.2-14,7.9-24,18.8-31.8,7.6-5.4,16.1-6.8,25.3-6.7,40.2.2,80.3,0,120.5,0h5.3v-25.7c0-1.2-1-2.7-1.9-3.7-8.4-9.5-10.1-20.7-6.8-32.4,3.4-12.3,12.7-19.8,24.9-22,19.7-3.5,38.5,11.3,38.2,31.1-.2,9.2-2.8,16.8-8.5,23.6-.8.9-1.6,2.2-1.6,3.3,0,8.5,0,16.9,0,25.7h5.3c42.5,0,85-.2,127.5,0,13.6,0,23.5,7.7,31.2,18.2,5.7,7.7,7.3,16.6,7.1,26.2-.4,20.3,0,40.6,0,61.2,7.6,1.2,14.8,3.1,18.5,10.5,1.7,3.5,3.3,7.5,3.4,11.3.4,14.2,0,28.3.2,42.5.2,10.7-9.2,23.3-22.1,22.1v5.4c0,35.3.3,70.7-.2,106-.2,12.2-6,22.5-15.8,30.6M211.8,380.1h128.5v-37.8c0-2.8-3.4-4.6-6.3-3.4-.9.4-1.9.7-2.8.5-1.9-.3-3.7-1.2-5.5-1.2h-150.9c-1.4,0-2.9.1-4.2.2v41.8h41.2M315.8,289.2c9.2,7.5,21.6,6.3,30.2-1.2,8.3-7.2,12.9-16.2,14.5-27.2,2.5-17.9-1-33.7-15.6-45.3-8.5-6.8-18.6-7.6-28-1.4-12.6,8.3-17.6,21.1-18.4,35.2-.9,15.6,4,29.5,17.3,39.9M152.3,269.6c1.7,3.6,2.8,7.6,5.2,10.7,14,18.7,33.5,18.5,46.2,0,7.2-10.5,9.7-22.1,7.9-35-1.6-11-5.4-20.6-13.7-28.1-13.2-11.8-26.5-8.3-36.7,2-8.6,8.7-12.1,20.2-11.7,32.5.2,5.8,1.5,11.6,2.8,17.9Z\"/>',\n viewBox: '0 0 512 512'\n}\n\nexport const dashboard = {\n name: 'dashboard',\n content: '<path d=\"M520-600v-240h320v240H520ZM120-440v-400h320v400H120Zm400 320v-400h320v400H520Zm-400 0v-240h320v240H120Zm80-400h160v-240H200v240Zm400 320h160v-240H600v240Zm0-480h160v-80H600v80ZM200-200h160v-80H200v80Zm160-320Zm240-160Zm0 240ZM360-280Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const tenancy = {\n name: 'tenancy',\n content: '<path d=\"M160-120q-50 0-85-35t-35-85q0-50 35-85t85-35q9 0 17.5 1.5T194-355l162-223q-17-21-26.5-47t-9.5-55q0-66 47-113t113-47q66 0 113 47t47 113q0 29-10 55t-27 47l163 223q8-2 16.5-3.5T800-360q50 0 85 35t35 85q0 50-35 85t-85 35q-50 0-85-35t-35-85q0-19 5.5-36.5T701-308L539-531q-5 2-9.5 3t-9.5 3v172q35 12 57.5 43t22.5 70q0 50-35 85t-85 35q-50 0-85-35t-35-85q0-39 22.5-69.5T440-353v-172q-5-2-9.5-3t-9.5-3L259-308q10 14 15.5 31.5T280-240q0 50-35 85t-85 35Zm0-80q17 0 28.5-11.5T200-240q0-17-11.5-28.5T160-280q-17 0-28.5 11.5T120-240q0 17 11.5 28.5T160-200Zm320-480Zm0 480q17 0 28.5-11.5T520-240q0-17-11.5-28.5T480-280q-17 0-28.5 11.5T440-240q0 17 11.5 28.5T480-200Zm320 0q17 0 28.5-11.5T840-240q0-17-11.5-28.5T800-280q-17 0-28.5 11.5T760-240q0 17 11.5 28.5T800-200Zm-640-40Zm320 0Zm320 0ZM480-600q33 0 56.5-23.5T560-680q0-33-23.5-56.5T480-760q-33 0-56.5 23.5T400-680q0 33 23.5 56.5T480-600Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const code = {\n name: 'code',\n content: '<path d=\"M320-240 80-480l240-240 57 57-184 184 183 183-56 56Zm320 0-57-57 184-184-183-183 56-56 240 240-240 240Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const identityService = {\n name: 'identity-service',\n content: ' <path d=\"M24.4,0h0v3.4h0v44h0v3.7h0c12.7-6.7,21.3-18.1,21.3-28.5V6.4L24.4,0Z\"/>\\n' +\n ' <path d=\"M24.4,22.7c-.6,0-1.1.5-1.1,1-.2,4.1-1.1,8.4-2.6,12.2-1.4,3.8-3.4,7-5.7,9.7-.4.5-.4,1.2.1,1.6.2.2.5.3.7.3s.6-.1.8-.4c2.6-2.9,4.6-6.4,6.2-10.4.6-1.7,1.1-3.4,1.6-5.2v-8.9h0Z\"/>\\n' +\n ' <path d=\"M24.4,48.1c-.3.4-.5.9-.8,1.3-.2.2-.2.5-.2.8,0,.3.2.5.5.7.2,0,.3.2.5.2v-3h0Z\"/>\\n' +\n ' <path d=\"M20.6,28.2c.1-.7.2-1.4.4-2.3.2-1,.4-1.9.7-2.7.3-.7.6-1.3.9-1.8.4-.6,1-.9,1.6-1,0,0,.1,0,.2,0v-2.3c-.2,0-.4,0-.6,0-1.2.2-2.3.9-3.1,1.9-.5.6-.9,1.4-1.2,2.3-.3.9-.6,1.9-.8,3-.2.9-.3,1.6-.4,2.4-.2,1.3-.3,2.5-.9,4.1-.6,1.6-1.3,3.3-2.3,5.2-1.3,2.5-2.5,4.3-3,4.9-.4.5-.3,1.2.2,1.6.2.2.5.3.8.2s.6-.2.8-.4c.7-.8,2.1-2.9,3.3-5.2,1-2,1.9-3.8,2.5-5.5.6-1.8.8-3.1,1-4.5h0Z\"/>\\n' +\n ' <path d=\"M24.4,37.2c-1.8,4.5-3.9,8.9-5.2,10.6-.4.5-.3,1.2.2,1.6.2.2.4.2.7.2s.7-.2.9-.4c.9-1.2,2.2-3.5,3.5-6.3v-5.7h0Z\"/>\\n' +\n ' <path d=\"M24.4,13.8c-.9,0-1.9.1-2.8.4-1.6.5-3,1.4-4.2,2.7-1.5,1.7-2.6,4-3,6.9,0,0,0,.1,0,.1h0c-.2,2.7-1,6.2-1.9,9.3-.9,2.8-1.8,4.7-2.5,5.3-.2.2-.4.5-.4.8,0,.3,0,.6.2.8.2.2.5.4.8.4.3,0,.6,0,.8-.2,1.4-1.2,2.6-4.5,3.2-6.4,1-3.2,1.8-6.9,2-9.7.4-2.4,1.2-4.3,2.5-5.7.9-1,1.9-1.7,3.2-2.1.7-.2,1.4-.3,2.1-.3v-2.2h0Z\"/>\\n' +\n ' <path d=\"M24.4,9.4c-1.8,0-3.6.3-5.2,1.1-2,.9-3.8,2.2-5.3,4-2,2.4-3.3,5.6-3.8,8.8-.3,2.3-.7,4.3-1.1,5.8-.5,2-1.2,3.3-1.9,3.9-.2.2-.4.5-.4.8,0,.3,0,.6.2.8.2.2.5.4.9.4s.5,0,.7-.3c1.1-.9,2-2.6,2.6-5.1.5-1.7.8-3.8,1.2-6.2.4-2.8,1.5-5.6,3.3-7.7,1.2-1.5,2.8-2.7,4.4-3.4,1.4-.6,2.9-.9,4.4-.9v-2.2h0Z\"/>\\n' +\n ' <path d=\"M16.1,7.1c-.4.1-9.5,3.3-10.6,16.4,0,.3,0,.6.3.8.2.2.5.4.8.4h.1c.3,0,.5-.1.7-.3.2-.2.4-.5.4-.8,1-11.7,8.7-14.4,9.1-14.5.3-.1.5-.3.6-.6.1-.3.1-.6,0-.8-.2-.6-.8-.9-1.4-.7h0Z\"/>\\n' +\n ' <path d=\"M24.4,5.2c-2.5,0-4.2.4-4.4.5-.6.1-1,.8-.8,1.3.1.6.8,1,1.3.8.1,0,1.7-.4,3.8-.4v-2.2h0Z\"/>\\n' +\n ' <path d=\"M24.4,0c-2.1,0-4.2.4-6.3,1.1-6,1.9-10,5.9-10.2,6.1-.2.2-.3.5-.3.8s.1.6.3.8c.2.2.5.3.8.3s.6-.1.8-.3c.2-.1,3.8-3.7,9.3-5.5,1.9-.6,3.8-1,5.7-1V0Z\"/>',\n viewBox: '0 0 52 52'\n}\n\nexport const storage = {\n name: 'storage',\n content: '<path d=\"M120-160v-160h720v160H120Zm80-40h80v-80h-80v80Zm-80-440v-160h720v160H120Zm80-40h80v-80h-80v80Zm-80 280v-160h720v160H120Zm80-40h80v-80h-80v80Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const publicIcon = {\n name: 'public',\n content: '<path d=\"M480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm-40-82v-78q-33 0-56.5-23.5T360-320v-40L168-552q-3 18-5.5 36t-2.5 36q0 121 79.5 212T440-162Zm276-102q41-45 62.5-100.5T800-480q0-98-54.5-179T600-776v16q0 33-23.5 56.5T520-680h-80v80q0 17-11.5 28.5T400-560h-80v80h240q17 0 28.5 11.5T600-440v120h40q26 0 47 15.5t29 40.5Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const power = {\n name: 'power',\n content: '<path d=\"M460-200h40v-74l140-140v-186H320v186l140 140v74Zm-80 80v-120L240-380v-220q0-33 23.5-56.5T320-680h40l-40 40v-200h80v160h160v-160h80v200l-40-40h40q33 0 56.5 23.5T720-600v220L580-240v120H380Zm100-280Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const team_dashboard = {\n name: 'team-dashboard',\n content: '<path d=\"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm200-80v-240H200v240h200Zm80 0h280v-240H480v240ZM200-520h560v-240H200v240Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const swagger_asset = {\n name: 'swagger-asset',\n content:\n ' <path id=\"path1\" d=\"M82.1,9.3c-36.8,0-66.8,28.1-66.8,62.7s30,62.7,66.8,62.7,66.8-28.1,66.8-62.7S118.9,9.3,82.1,9.3ZM82.1,15.3c33.4,0,60.4,25.4,60.4,56.7s-27.1,56.7-60.4,56.7-60.4-25.4-60.4-56.7S48.7,15.3,82.1,15.3ZM61.9,39.9h-2.4c-5.5.3-8.7,2.7-9.7,7.7-.6,3.5-.5,7-.8,10.5,0,1.8-.3,3.6-.6,5.4-.7,3.2-2.2,4.2-5.7,4.3-.5,0-.9,0-1.4.2v7.6c6.3.3,7.1,2.4,7.6,8.5.2,2.2,0,4.5,0,6.7s.4,4.2.9,6.3c1.4,5.6,7.3,7.5,14.3,6.4v-6.7h-3.1c-2.4,0-3.3-.6-3.5-2.8-.3-2.8-.2-5.6-.4-8.5-.4-5.2-1-10.4-6.4-13.7,2.8-1.9,4.8-4.2,5.5-7.3.5-2.1.7-4.3.9-6.5s0-4.4,0-6.5c.3-3.5.6-4.9,5-4.8.7,0,1.3,0,2,0v-6.8h-2.5.3ZM104.1,40c-1.5,0-3,0-4.5.3v6.7h3.5c1.8,0,3.2.7,3.4,2.6.2,1.7.2,3.5.4,5.3.4,3.5.6,7,1.2,10.5.6,2.8,2.6,5,5.2,6.7-4.6,2.9-5.9,7-6.1,11.6,0,3.2-.2,6.3-.4,9.5-.2,2.9-1.2,3.8-4.3,3.9-.9,0-1.7,0-2.7,0v6.8c1.8,0,3.5,0,5.2,0,5.2-.3,8.3-2.7,9.4-7.4.4-2.6.7-5.2.8-7.9.2-2.4.2-4.8.4-7.2.4-3.7,2.2-5.3,6.2-5.5.4,0,.7,0,1.1-.2v-7.6c-.7,0-1.1,0-1.6-.2-3,0-4.5-1.1-5.2-3.7-.5-1.7-.7-3.4-.9-5.2-.2-3.2-.2-6.5-.4-9.7-.4-6.2-4.4-9.2-10.5-9.3h-.2ZM65.8,67.6c-2.6,0-4.7,2-4.7,4.4s1.8,4.2,4.3,4.4h.3c2.5,0,4.7-1.7,4.9-4.1v-.2c0-2.4-2-4.4-4.6-4.5h-.2ZM82,67.6c-2.5,0-4.6,1.7-4.6,4.1v.4c0,2.6,1.9,4.3,4.8,4.3s4.6-1.7,4.6-4.5-1.9-4.4-4.8-4.3h0ZM98.5,67.6c-2.6,0-4.8,1.9-4.9,4.4,0,2.5,2.1,4.4,4.7,4.4h0c2.4.4,4.7-1.8,4.9-4.3,0-2.4-2.2-4.5-4.8-4.5h.1Z\"/>\\n' +\n ' <g>\\n' +\n ' <path d=\"M86.8,181c0-7.3,0-14.7,0-22.1,2.6,1.3,5.1,2.5,8,3.1,3.6.8,7.2,1.9,10.8,2.6,2.5.5,5,.6,7.5.9,3,.3,6.1.6,9.1.8,1.4.1,2.8.2,4.2.2,4.4,0,8.7.1,13.1.2,6.4,0,12.7-.2,19.1-.9,2.5-.2,5-.4,7.4-.7,2.8-.4,5.5-1,8.2-1.6,4.2-1,8.4-2,12.3-4,1-.5,2.1-.9,3.2-1.3,0,6.3,0,12.6,0,18.9-.2.2-.4.4-.4.5-.1,2.1-1.4,3.7-3.2,4.9-3,2-6.3,3.4-10,4.5-6.3,1.9-12.9,2.8-19.5,3.5-3.7.4-7.4.8-11.1.8-5.7,0-11.4,0-17.1-.2-3.9-.1-7.7-.5-11.6-.8-2.2-.2-4.4-.2-6.5-.7-4.8-1-9.5-2.2-14.2-3.5-3.4-1-6.4-2.6-8.8-5.1,0-.1-.4-.1-.5-.1h0Z\"/>\\n' +\n ' <path d=\"M86.8,154.1c0-6.6,0-13.1,0-19.7,2.4.9,4.6,1.9,6.9,2.8,7,2.6,14.5,3.6,22,4.3,3.8.4,7.5.7,11.3.8,4.7.1,9.3,0,14,0,5.9,0,11.9-.3,17.7-.9,2.9-.3,5.8-.4,8.7-.9,3.7-.7,7.3-1.5,10.9-2.5,3-.8,6.1-1.6,8.8-3.1.8-.4,1.8-.7,2.6-1.1,0,6.3,0,12.7,0,19.1-.8.6-1.5,1.3-2.4,1.7-2.9,1.3-5.6,2.8-8.7,3.8-7.5,2.3-15.2,3.4-23,4-3.8.3-7.7.5-11.5.6-4.8,0-9.5,0-14.3-.2-4.7-.2-9.3-.5-14-.8-1.4,0-2.9,0-4.3-.3-3.8-.7-7.7-1.4-11.4-2.3-3.7-.9-7.4-1.9-10.5-3.9-.8-.5-1.8-.9-2.8-1.3h0Z\"/>\\n' +\n ' <path d=\"M86.8,129.6c0-6.6,0-13.1,0-19.7,2.1.8,4,1.7,6.1,2.5,5,1.7,10,3.2,15.4,3.6,4.9.4,9.8,1.2,14.7,1.6,4.4.3,8.8.4,13.1.4,3.2,0,6.3-.1,9.5-.2,2.2,0,4.4-.1,6.6-.2,1.3,0,2.5-.1,3.8-.3,2.4-.2,4.7-.5,7-.8,2.5-.3,5.1-.5,7.6-1,3.2-.7,6.3-1.5,9.3-2.4,2.5-.8,4.8-1.8,7.2-2.7.9-.3,1.8-.7,2.6-1.1,0,6.3,0,12.7,0,19.1-1.1.7-2,1.3-3,1.9-2.2,1.3-4.6,2.5-7.2,3.2-5.6,1.7-11.2,3.2-17.1,3.6-5.7.3-11.3,1.1-16.9,1.4-5.7.2-11.4,0-17.1-.1-4.7-.2-9.4-.7-14.1-1-3.6-.2-7.1-.7-10.6-1.5-4.8-1.2-9.6-2.2-13.9-4.6-1-.5-2-1-3-1.5h0Z\"/>\\n' +\n ' <path d=\"M86.8,105.3c0-1.7,0-3.4,0-5.1.6-.6,1.2-1.2,1.9-1.7,3.2-2.3,6.9-3.9,10.9-4.8,3.4-.8,6.9-1.6,10.3-2.4,0,0,.1-.3.2-.4,18.2,0,36.4,0,54.6,0,.1.2.2.3.4.4,2.4.5,4.9.9,7.3,1.5,4.1,1.1,8.3,2,11.9,4.3,2.5,1.6,4.8,3.2,5,6.2,0,0,.3.1.5.2,0,0,0,.2,0,.3-1.9,1.1-3.6,2.2-5.5,3.3-3.2,1.7-6.8,2.5-10.3,3.4-2.6.7-5.3,1.2-8,1.6-2.3.4-4.7.5-7.1.7-4.3.4-8.6.8-12.9,1-4.2.2-8.4,0-12.6,0s-3.4,0-5.1,0c-4.3-.3-8.6-.7-12.9-1-2.5-.2-5.1-.4-7.6-.9-4.4-.9-8.9-2-13.2-3.3-2.3-.7-4.3-2.1-6.5-3.1-.4-.2-.9-.3-1.3-.4Z\"/>\\n' +\n ' <path d=\"M86.8,129.7c1,.4,2,.8,3,1.4,4.3,2.4,9.1,3.4,13.9,4.6,3.5.8,7,1.3,10.6,1.5,4.7.3,9.4.8,14.1,1,5.7.2,11.4.4,17.1.1,5.7-.2,11.3-1,16.9-1.4,6-.3,11.5-1.9,17.1-3.6,2.6-.8,4.9-1.9,7.2-3.2,1-.6,2-1.2,3-1.8,0,1.8,0,3.5,0,5.3-.9.5-1.8.7-2.6,1.2-2.7,1.5-5.7,2.3-8.8,3.1-3.6.9-7.2,1.8-10.9,2.5-2.9.5-5.8.6-8.7.9-5.9.6-11.8.9-17.7.9-4.7,0-9.3,0-14,0-3.8-.1-7.5-.5-11.3-.8-7.5-.7-15-1.7-22-4.3-2.3-.8-4.6-1.9-6.9-2.9,0-1.5,0-3,0-4.6h0Z\"/>\\n' +\n ' <path d=\"M86.8,105.4c.4,0,.9,0,1.3.3,2.2,1,4.2,2.4,6.5,3.1,4.3,1.3,8.8,2.3,13.2,3.3,2.5.5,5.1.7,7.6.9,4.3.4,8.6.7,12.9,1,1.7.1,3.4,0,5.1,0,4.2,0,8.4.1,12.6,0,4.3-.2,8.6-.6,12.9-1,2.4-.2,4.7-.3,7.1-.7,2.7-.4,5.4-1,8-1.6,3.5-.9,7.1-1.7,10.3-3.4,1.9-1,3.6-2.2,5.5-3.2,0,1.8,0,3.5,0,5.2-.9.5-1.8.8-2.6,1.2-2.4.9-4.7,2-7.2,2.7-3.1.9-6.2,1.7-9.3,2.4-2.5.5-5.1.7-7.6,1-2.3.3-4.7.5-7,.8-1.3.1-2.5.2-3.8.3-2.2,0-4.4.2-6.6.2-3.2,0-6.3.2-9.5.2-4.4,0-8.8-.1-13.1-.4-4.9-.4-9.8-1.2-14.7-1.6-5.4-.4-10.4-1.9-15.4-3.6-2-.7-4-1.7-6.1-2.6,0-1.4,0-2.9,0-4.4h0Z\"/>\\n' +\n ' <path d=\"M86.8,154.2c.9.3,1.9.7,2.8,1.2,3.2,2.1,6.9,3,10.5,3.9,3.8,1,7.6,1.6,11.4,2.3,1.4.3,2.9.2,4.3.3,4.7.3,9.3.7,14,.8,4.7.2,9.5.2,14.3.2,3.8,0,7.7-.3,11.5-.6,7.8-.6,15.5-1.6,23-4,3.1-1,5.8-2.5,8.7-3.8.9-.4,1.5-1.1,2.4-1.6,0,1.8,0,3.5,0,5.2-1.1.5-2.1.9-3.2,1.4-3.8,1.9-8.1,3-12.3,4-2.7.7-5.5,1.2-8.2,1.6-2.5.4-5,.5-7.4.7-6.3.6-12.7,1-19.1.9-4.4,0-8.7-.1-13.1-.2-1.4,0-2.8-.1-4.2-.2-3-.3-6.1-.5-9.1-.8-2.5-.3-5.1-.4-7.5-.9-3.7-.7-7.2-1.8-10.8-2.6-2.9-.7-5.4-1.9-8-3.2,0-1.5,0-3,0-4.6h0Z\"/>\\n' +\n ' <path d=\"M86.8,181.1c.2,0,.4,0,.5,0,2.4,2.5,5.4,4.1,8.8,5.1,4.7,1.4,9.5,2.5,14.2,3.5,2.1.5,4.3.5,6.5.7,3.9.3,7.7.7,11.6.8,5.7.2,11.4.3,17.1.2,3.7,0,7.4-.4,11.1-.8,6.6-.7,13.1-1.6,19.5-3.5,3.6-1.1,7-2.5,10-4.5,1.8-1.2,3-2.8,3.2-4.9,0-.2.2-.3.4-.4,0,4.9,0,9.8,0,14.7h-102.9v-10.9h0Z\"/>\\n' +\n ' <path d=\"M189.8,103.5c-.2,0-.5,0-.5,0-.2-3-2.5-4.6-5-6.2-3.6-2.3-7.8-3.2-11.9-4.3-2.4-.7-4.8-1-7.3-1.5-.1,0-.2-.2-.3-.4,8.3,0,16.5,0,24.8,0v12.6Z\"/>\\n' +\n ' <path d=\"M110.1,90.9c0,.1,0,.4,0,.4-3.4.8-6.9,1.6-10.3,2.4-4,.9-7.7,2.5-10.9,4.8-.7.5-1.2,1.1-1.9,1.6,0-3.1,0-6.1,0-9.2h23.2Z\"/>\\n' +\n ' </g>',\n viewBox: '0 0 192 192'\n}\n\nexport const swagger_bot = {\n name: 'swagger-bot',\n content:\n ' <sodipodi:namedview id=\"namedview1\" bordercolor=\"#eeeeee\" borderopacity=\"1\" inkscape:current-layer=\"Ebene_1\" inkscape:cx=\"83.119467\" inkscape:cy=\"87.592263\" inkscape:deskcolor=\"#505050\" inkscape:pagecheckerboard=\"0\" inkscape:pageopacity=\"0\" inkscape:showpageshadow=\"0\" inkscape:window-height=\"1092\" inkscape:window-maximized=\"1\" inkscape:window-width=\"1792\" inkscape:window-x=\"0\" inkscape:window-y=\"822\" inkscape:zoom=\"1.3414427\" pagecolor=\"#505050\"/>\\n' +\n ' <path d=\"M82.1,9.3c-36.8,0-66.8,28.1-66.8,62.7s30,62.7,66.8,62.7,66.8-28.1,66.8-62.7S118.9,9.3,82.1,9.3ZM82.1,15.3c33.4,0,60.4,25.4,60.4,56.7s-27.1,56.7-60.4,56.7-60.4-25.4-60.4-56.7S48.7,15.3,82.1,15.3ZM61.9,39.9h-2.4c-5.5.3-8.7,2.7-9.7,7.7-.6,3.5-.5,7-.8,10.5,0,1.8-.3,3.6-.6,5.4-.7,3.2-2.2,4.2-5.7,4.3-.5,0-.9,0-1.4.2v7.6c6.3.3,7.1,2.4,7.6,8.5.2,2.2,0,4.5,0,6.7s.4,4.2.9,6.3c1.4,5.6,7.3,7.5,14.3,6.4v-6.7h-3.1c-2.4,0-3.3-.6-3.5-2.8-.3-2.8-.2-5.6-.4-8.5-.4-5.2-1-10.4-6.4-13.7,2.8-1.9,4.8-4.2,5.5-7.3.5-2.1.7-4.3.9-6.5s0-4.4,0-6.5c.3-3.5.6-4.9,5-4.8.7,0,1.3,0,2,0v-6.8h-2.5.3ZM104.1,40c-1.5,0-3,0-4.5.3v6.7h3.5c1.8,0,3.2.7,3.4,2.6.2,1.7.2,3.5.4,5.3.4,3.5.6,7,1.2,10.5.6,2.8,2.6,5,5.2,6.7-4.6,2.9-5.9,7-6.1,11.6,0,3.2-.2,6.3-.4,9.5-.2,2.9-1.2,3.8-4.3,3.9-.9,0-1.7,0-2.7,0v6.8c1.8,0,3.5,0,5.2,0,5.2-.3,8.3-2.7,9.4-7.4.4-2.6.7-5.2.8-7.9.2-2.4.2-4.8.4-7.2.4-3.7,2.2-5.3,6.2-5.5.4,0,.7,0,1.1-.2v-7.6c-.7,0-1.1,0-1.6-.2-3,0-4.5-1.1-5.2-3.7-.5-1.7-.7-3.4-.9-5.2-.2-3.2-.2-6.5-.4-9.7-.4-6.2-4.4-9.2-10.5-9.3h-.2ZM65.8,67.6c-2.6,0-4.7,2-4.7,4.4s1.8,4.2,4.3,4.4h.3c2.5,0,4.7-1.7,4.9-4.1v-.2c0-2.4-2-4.4-4.6-4.5h-.2ZM82,67.6c-2.5,0-4.6,1.7-4.6,4.1v.4c0,2.6,1.9,4.3,4.8,4.3s4.6-1.7,4.6-4.5-1.9-4.4-4.8-4.3h0ZM98.5,67.6c-2.6,0-4.8,1.9-4.9,4.4,0,2.5,2.1,4.4,4.7,4.4h0c2.4.4,4.7-1.8,4.9-4.3,0-2.4-2.2-4.5-4.8-4.5h.1Z\"/>\\n' +\n ' <path d=\"M175.1,180.6c-1.5,1.4-3.2,2.1-5.1,2.1-20.8,0-41.5,0-62.3,0-3.5,0-6.1-2-7.4-5.3-.5-1.2-.9-2.5-.9-3.8,0-7.3,0-14.5,0-21.8v-1.1c-2.9-.2-4.5-2-4.5-5,0-2.5,0-5,0-7.5,0-3.4,1.2-5.2,4.5-5.9,0-4.7,0-9.4,0-14.1,0-3,1.6-5.1,3.9-6.7,1.6-1.1,3.3-1.4,5.2-1.4,8.2,0,16.5,0,24.7,0h1.1c0-1.9,0-3.7,0-5.4,0-.3-.2-.6-.4-.8-1.7-2-2.1-4.4-1.4-6.9.7-2.6,2.6-4.2,5.1-4.6,4-.7,7.9,2.4,7.8,6.6,0,1.9-.6,3.5-1.8,5-.2.2-.3.5-.3.7,0,1.8,0,3.6,0,5.4h1.1c8.7,0,17.4,0,26.2,0,2.8,0,4.8,1.6,6.4,3.8,1.2,1.6,1.5,3.5,1.5,5.5,0,4.3,0,8.6,0,12.9,1.6.2,3,.7,3.8,2.2.4.7.7,1.6.7,2.4,0,3,0,6,0,9,0,2.3-1.9,4.9-4.5,4.7v1.1c0,7.5,0,14.9,0,22.4,0,2.6-1.2,4.8-3.2,6.5M129.8,164.1h26.4c0-.9,0-1.6,0-2.4,0-1.9,0-3.7,0-5.6,0-.6-.7-1-1.3-.7-.2,0-.4.1-.6.1-.4,0-.8-.3-1.1-.3-10.3,0-20.7,0-31,0-.3,0-.6,0-.9,0v8.8h8.5M151.2,144.9c1.9,1.6,4.4,1.3,6.2-.3,1.7-1.5,2.7-3.4,3-5.8.5-3.8-.2-7.1-3.2-9.6-1.7-1.4-3.8-1.6-5.7-.3-2.6,1.8-3.6,4.5-3.8,7.4-.2,3.3.8,6.2,3.5,8.4M117.6,140.7c.3.8.6,1.6,1.1,2.3,2.9,4,6.9,3.9,9.5,0,1.5-2.2,2-4.7,1.6-7.4-.3-2.3-1.1-4.4-2.8-5.9-2.7-2.5-5.5-1.8-7.5.4-1.8,1.8-2.5,4.3-2.4,6.9,0,1.2.3,2.4.6,3.8Z\"/>\\n' +\n ' <path d=\"M129.7,164.1h-8.4v-8.8c.3,0,.6,0,.9,0,10.3,0,20.7,0,31,0,.4,0,.7.2,1.1.3.2,0,.4,0,.6-.1.6-.3,1.3.1,1.3.7,0,1.9,0,3.7,0,5.6,0,.8,0,1.5,0,2.4h-26.5Z\"/>\\n' +\n ' <path d=\"M151.1,144.9c-2.7-2.2-3.7-5.1-3.5-8.4.2-3,1.2-5.7,3.8-7.4,1.9-1.3,4-1.1,5.7.3,3,2.5,3.7,5.8,3.2,9.6-.3,2.3-1.3,4.2-3,5.8-1.8,1.6-4.3,1.8-6.3.3Z\"/>\\n' +\n ' <path d=\"M117.5,140.7c-.2-1.3-.5-2.5-.5-3.7,0-2.6.6-5,2.4-6.9,2.1-2.2,4.8-2.9,7.5-.4,1.7,1.6,2.5,3.6,2.8,5.9.4,2.7-.1,5.2-1.6,7.4-2.6,3.9-6.6,4-9.5,0-.5-.7-.7-1.5-1.1-2.3Z\"/>',\n viewBox: '0 0 192 192'\n}\n\nexport const swagger_identity = {\n name: 'swagger-identity',\n content:\n ' <path d=\"M82.1,9.3c-36.8,0-66.8,28.1-66.8,62.7s30,62.7,66.8,62.7,66.8-28.1,66.8-62.7S118.9,9.3,82.1,9.3ZM82.1,15.3c33.4,0,60.4,25.4,60.4,56.7s-27.1,56.7-60.4,56.7-60.4-25.4-60.4-56.7S48.7,15.3,82.1,15.3ZM61.9,39.9h-2.4c-5.5.3-8.7,2.7-9.7,7.7-.6,3.5-.5,7-.8,10.5,0,1.8-.3,3.6-.6,5.4-.7,3.2-2.2,4.2-5.7,4.3-.5,0-.9,0-1.4.2v7.6c6.3.3,7.1,2.4,7.6,8.5.2,2.2,0,4.5,0,6.7s.4,4.2.9,6.3c1.4,5.6,7.3,7.5,14.3,6.4v-6.7h-3.1c-2.4,0-3.3-.6-3.5-2.8-.3-2.8-.2-5.6-.4-8.5-.4-5.2-1-10.4-6.4-13.7,2.8-1.9,4.8-4.2,5.5-7.3.5-2.1.7-4.3.9-6.5s0-4.4,0-6.5c.3-3.5.6-4.9,5-4.8.7,0,1.3,0,2,0v-6.8h-2.5.3ZM104.1,40c-1.5,0-3,0-4.5.3v6.7h3.5c1.8,0,3.2.7,3.4,2.6.2,1.7.2,3.5.4,5.3.4,3.5.6,7,1.2,10.5.6,2.8,2.6,5,5.2,6.7-4.6,2.9-5.9,7-6.1,11.6,0,3.2-.2,6.3-.4,9.5-.2,2.9-1.2,3.8-4.3,3.9-.9,0-1.7,0-2.7,0v6.8c1.8,0,3.5,0,5.2,0,5.2-.3,8.3-2.7,9.4-7.4.4-2.6.7-5.2.8-7.9.2-2.4.2-4.8.4-7.2.4-3.7,2.2-5.3,6.2-5.5.4,0,.7,0,1.1-.2v-7.6c-.7,0-1.1,0-1.6-.2-3,0-4.5-1.1-5.2-3.7-.5-1.7-.7-3.4-.9-5.2-.2-3.2-.2-6.5-.4-9.7-.4-6.2-4.4-9.2-10.5-9.3h-.2ZM65.8,67.6c-2.6,0-4.7,2-4.7,4.4s1.8,4.2,4.3,4.4h.3c2.5,0,4.7-1.7,4.9-4.1v-.2c0-2.4-2-4.4-4.6-4.5h-.2ZM82,67.6c-2.5,0-4.6,1.7-4.6,4.1v.4c0,2.6,1.9,4.3,4.8,4.3s4.6-1.7,4.6-4.5-1.9-4.4-4.8-4.3h0ZM98.5,67.6c-2.6,0-4.8,1.9-4.9,4.4,0,2.5,2.1,4.4,4.7,4.4h0c2.4.4,4.7-1.8,4.9-4.3,0-2.4-2.2-4.5-4.8-4.5h.1Z\"/>\\n' +\n ' <path d=\"M129.7,164.1h-8.4v-8.8c.3,0,.6,0,.9,0,10.3,0,20.7,0,31,0,.4,0,.7.2,1.1.3.2,0,.4,0,.6-.1.6-.3,1.3.1,1.3.7,0,1.9,0,3.7,0,5.6,0,.8,0,1.5,0,2.4h-26.5Z\"/>\\n' +\n ' <path d=\"M151.1,144.9c-2.7-2.2-3.7-5.1-3.5-8.4.2-3,1.2-5.7,3.8-7.4,1.9-1.3,4-1.1,5.7.3,3,2.5,3.7,5.8,3.2,9.6-.3,2.3-1.3,4.2-3,5.8-1.8,1.6-4.3,1.8-6.3.3Z\"/>\\n' +\n ' <path d=\"M117.5,140.7c-.2-1.3-.5-2.5-.5-3.7,0-2.6.6-5,2.4-6.9,2.1-2.2,4.8-2.9,7.5-.4,1.7,1.6,2.5,3.6,2.8,5.9.4,2.7-.1,5.2-1.6,7.4-2.6,3.9-6.6,4-9.5,0-.5-.7-.7-1.5-1.1-2.3Z\"/>\\n' +\n ' <path d=\"M134.9,76.4h0v7.5h0v97.5h0v8.2h0c32.3-14.8,54.2-40.1,54.2-63.1v-35.9l-54.2-14.2Z\"/>\\n' +\n ' <path d=\"M134.9,126.7c-1.5,0-2.8,1.1-2.8,2.2-.5,9.1-2.8,18.6-6.6,27-3.6,8.4-8.7,15.5-14.5,21.5-1,1.1-1,2.7.3,3.5.5.4,1.3.7,1.8.7s1.5-.2,2-.9c6.6-6.4,11.7-14.2,15.8-23,1.5-3.8,2.8-7.5,4.1-11.5v-19.7h0v.2Z\"/>\\n' +\n ' <path d=\"M134.9,183c-.8.9-1.3,2-2,2.9-.5.4-.5,1.1-.5,1.8s.5,1.1,1.3,1.6c.5,0,.8.4,1.3.4v-6.6h0Z\"/>\\n' +\n ' <path d=\"M125.2,138.9c.3-1.6.5-3.1,1-5.1.5-2.2,1-4.2,1.8-6,.8-1.6,1.5-2.9,2.3-4,1-1.3,2.5-2,4.1-2.2h.5v-5.1h-1.5c-3.1.4-5.9,2-7.9,4.2-1.3,1.3-2.3,3.1-3.1,5.1-.8,2-1.5,4.2-2,6.6-.5,2-.8,3.5-1,5.3-.5,2.9-.8,5.5-2.3,9.1s-3.3,7.3-5.9,11.5c-3.3,5.5-6.4,9.5-7.6,10.9-1,1.1-.8,2.7.5,3.5.5.4,1.3.7,2,.4s1.5-.4,2-.9c1.8-1.8,5.3-6.4,8.4-11.5,2.5-4.4,4.8-8.4,6.4-12.2,1.5-4,2-6.9,2.5-10h0l-.3.2Z\"/>\\n' +\n ' <path d=\"M134.9,158.8c-4.6,10-9.9,19.7-13.2,23.5-1,1.1-.8,2.7.5,3.5.5.4,1,.4,1.8.4s1.8-.4,2.3-.9c2.3-2.7,5.6-7.8,8.9-14v-12.6h-.3Z\"/>\\n' +\n ' <path d=\"M134.9,107c-2.3,0-4.8.2-7.1.9-4.1,1.1-7.6,3.1-10.7,6-3.8,3.8-6.6,8.9-7.6,15.3v.2h0c-.5,6-2.5,13.7-4.8,20.6-2.3,6.2-4.6,10.4-6.4,11.7-.5.4-1,1.1-1,1.8s0,1.3.5,1.8,1.3.9,2,.9,1.5,0,2-.4c3.6-2.7,6.6-10,8.1-14.2,2.5-7.1,4.6-15.3,5.1-21.5,1-5.3,3.1-9.5,6.4-12.6,2.3-2.2,4.8-3.8,8.1-4.7,1.8-.4,3.6-.7,5.3-.7v-4.9h0v-.2Z\"/>\\n' +\n ' <path d=\"M134.9,97.3c-4.6,0-9.2.7-13.2,2.4-5.1,2-9.7,4.9-13.5,8.9-5.1,5.3-8.4,12.4-9.7,19.5-.8,5.1-1.8,9.5-2.8,12.8-1.3,4.4-3.1,7.3-4.8,8.6-.5.4-1,1.1-1,1.8s0,1.3.5,1.8,1.3.9,2.3.9,1.3,0,1.8-.7c2.8-2,5.1-5.8,6.6-11.3,1.3-3.8,2-8.4,3.1-13.7,1-6.2,3.8-12.4,8.4-17.1,3.1-3.3,7.1-6,11.2-7.5,3.6-1.3,7.4-2,11.2-2v-4.9h0v.4Z\"/>\\n' +\n ' <path d=\"M113.8,92.2c-1,.2-24.2,7.3-27,36.3,0,.7,0,1.3.8,1.8.5.4,1.3.9,2,.9h.3c.8,0,1.3-.2,1.8-.7.5-.4,1-1.1,1-1.8,2.5-25.9,22.1-31.9,23.2-32.1.8-.2,1.3-.7,1.5-1.3s.3-1.3,0-1.8c-.5-1.3-2-2-3.6-1.6h0v.2Z\"/>\\n' +\n ' <path d=\"M134.9,88c-6.4,0-10.7.9-11.2,1.1-1.5.2-2.5,1.8-2,2.9.3,1.3,2,2.2,3.3,1.8.3,0,4.3-.9,9.7-.9v-4.9h.3Z\"/>\\n' +\n ' <path d=\"M134.9,76.4c-5.3,0-10.7.9-16,2.4-15.3,4.2-25.4,13.1-26,13.5s-.8,1.1-.8,1.8.3,1.3.8,1.8c.5.4,1.3.7,2,.7s1.5-.2,2-.7c.5-.2,9.7-8.2,23.7-12.2,4.8-1.3,9.7-2.2,14.5-2.2v-5.1h-.3Z\"/>',\n viewBox: '0 0 192 192'\n}\n\nexport const swagger_communication = {\n name: 'swagger-communication',\n content:\n ' <path stroke=\"2px\" d=\"M70.8,1.4C34,1.4,4,29.5,4,64.1s30,62.7,66.8,62.7,66.8-28.1,66.8-62.7S107.7,1.4,70.8,1.4ZM70.8,7.4c33.4,0,60.4,25.4,60.4,56.7s-27.1,56.7-60.4,56.7S10.4,95.4,10.4,64.1,37.5,7.4,70.8,7.4ZM50.6,32.1c-.8,0-1.6,0-2.4,0-5.5.3-8.7,2.7-9.7,7.7-.6,3.5-.5,7-.8,10.5,0,1.8-.3,3.6-.6,5.4-.7,3.2-2.2,4.2-5.7,4.3-.5,0-.9.1-1.4.2v7.6c6.3.3,7.1,2.4,7.6,8.5.2,2.2,0,4.5,0,6.7,0,2.1.4,4.2.9,6.3,1.4,5.6,7.3,7.5,14.3,6.4v-6.7c-1.1,0-2.1,0-3.1,0-2.4,0-3.3-.6-3.5-2.8-.3-2.8-.2-5.6-.4-8.5-.4-5.2-1-10.4-6.4-13.7,2.8-1.9,4.8-4.2,5.5-7.3.5-2.1.7-4.3.9-6.5.2-2.2-.1-4.4,0-6.5.3-3.5.6-4.9,5-4.8.7,0,1.3,0,2-.1v-6.8c-.9,0-1.7,0-2.5,0h0ZM92.9,32.1c-1.5,0-3,0-4.5.3v6.7c1.4,0,2.4,0,3.5,0,1.8,0,3.2.7,3.4,2.6.2,1.7.2,3.5.4,5.3.4,3.5.6,7,1.2,10.5.6,2.8,2.6,5,5.2,6.7-4.6,2.9-5.9,7-6.1,11.6-.1,3.2-.2,6.3-.4,9.5-.2,2.9-1.2,3.8-4.3,3.9-.9,0-1.7,0-2.7.1v6.8c1.8,0,3.5.1,5.2,0,5.2-.3,8.3-2.7,9.4-7.4.4-2.6.7-5.2.8-7.9.2-2.4.2-4.8.4-7.2.4-3.7,2.2-5.3,6.2-5.5.4,0,.7-.1,1.1-.2v-7.6c-.7,0-1.1-.1-1.6-.2-3-.1-4.5-1.1-5.2-3.7-.5-1.7-.7-3.4-.9-5.2-.2-3.2-.2-6.5-.4-9.7-.4-6.2-4.4-9.2-10.5-9.3h0ZM54.5,59.7c-2.6,0-4.7,2-4.7,4.4s1.8,4.2,4.3,4.4h.3c2.5.1,4.7-1.7,4.9-4.1v-.2c0-2.4-2-4.4-4.6-4.5h-.1ZM70.8,59.7c-2.5,0-4.6,1.7-4.6,4.1,0,.1,0,.3,0,.4,0,2.6,1.9,4.3,4.8,4.3s4.6-1.7,4.6-4.5c0-2.6-1.9-4.4-4.8-4.3h0ZM87.2,59.7c-2.6,0-4.8,1.9-4.9,4.4,0,2.5,2.1,4.4,4.7,4.4h0c2.4.4,4.7-1.8,4.9-4.3.1-2.4-2.2-4.5-4.8-4.5h0Z\"/>\\n' +\n ' <path d=\"M134.5,176h6.2v-10.4l21.7-19.7v-26.2h-49.6v26.2l21.7,19.7v10.4ZM122,187.3v-16.9l-21.8-19.7v-31c0-3.1,1.2-5.8,3.7-8,2.4-2.2,5.4-3.3,8.8-3.3h6.2l-6.2,5.6v-28.2h12.5v22.6h24.9v-22.6h12.5v28.2l-6.2-5.6h6.2c3.4,0,6.4,1.1,8.8,3.3,2.4,2.2,3.7,4.9,3.7,8v31l-21.8,19.7v16.9h-31.2Z\"/>\\n',\n viewBox: '0 0 192 192'\n}\n\nexport const swagger = {\n name: \"swagger\",\n content: '<path id=\"path1\" class=\"st0\" d=\"M96,0C43.1,0,0,43,0,96s43.1,96,96,96,96-43,96-96S148.9,0,96,0ZM96,9.2c48,0,86.8,38.9,86.8,86.8s-38.9,86.8-86.8,86.8S9.2,143.9,9.2,96,48,9.2,96,9.2ZM67,46.9h-3.4c-7.9.5-12.5,4.1-13.9,11.8-.9,5.4-.7,10.7-1.1,16.1,0,2.8-.4,5.5-.9,8.3-1,4.9-3.2,6.4-8.2,6.6-.7,0-1.3,0-2,.3v11.6c9.1.5,10.2,3.7,10.9,13,.3,3.4,0,6.9,0,10.3s.6,6.4,1.3,9.6c2,8.6,10.5,11.5,20.6,9.8v-10.3h-4.5c-3.4,0-4.7-.9-5-4.3-.4-4.3-.3-8.6-.6-13-.6-8-1.4-15.9-9.2-21,4-2.9,6.9-6.4,7.9-11.2.7-3.2,1-6.6,1.3-10s0-6.7,0-10c.4-5.4.9-7.5,7.2-7.3h2.9v-10.4h-3.6.4ZM127.6,47c-2.2,0-4.3,0-6.5.5v10.3h5c2.6,0,4.6,1.1,4.9,4,.3,2.6.3,5.4.6,8.1.6,5.4.9,10.7,1.7,16.1.9,4.3,3.7,7.7,7.5,10.3-6.6,4.4-8.5,10.7-8.8,17.8,0,4.9-.3,9.6-.6,14.5-.3,4.4-1.7,5.8-6.2,6h-3.9v10.4h7.5c7.5-.5,11.9-4.1,13.5-11.3.6-4,1-8,1.1-12.1.3-3.7.3-7.3.6-11,.6-5.7,3.2-8.1,8.9-8.4.6,0,1,0,1.6-.3v-11.6c-1,0-1.6,0-2.3-.3-4.3,0-6.5-1.7-7.5-5.7-.7-2.6-1-5.2-1.3-8-.3-4.9-.3-10-.6-14.9-.6-9.5-6.3-14.1-15.1-14.2,0,0-.3,0-.3,0ZM72.6,89.3c-3.7,0-6.8,3.1-6.8,6.7s2.6,6.4,6.2,6.7h.4c3.6,0,6.8-2.6,7-6.3v-.3c0-3.7-2.9-6.7-6.6-6.9,0,0-.3,0-.3,0ZM95.9,89.3c-3.6,0-6.6,2.6-6.6,6.3v.6c0,4,2.7,6.6,6.9,6.6s6.6-2.6,6.6-6.9-2.7-6.7-6.9-6.6h0ZM119.6,89.3c-3.7,0-6.9,2.9-7,6.7,0,3.8,3,6.7,6.8,6.7h0c3.4.6,6.8-2.8,7-6.6,0-3.7-3.2-6.9-6.9-6.9h.1Z\"/>',\n viewBox: '0 0 192 192'\n}\n\nexport const user_diagnostics = {\n name: 'user-diagnostics',\n content: ' <path class=\"st0\" d=\"M48.4,163.2h95.2v-19.2H48.4v19.2ZM48.4,134.4h95.2v-19.2H48.4v19.2ZM96,98.9c13.1-9.6,24.3-18.1,33.6-25.6,9.3-7.4,14-15.2,14-23.4s-2.6-10.7-7.7-14.9c-5.2-4.2-11.3-6.2-18.4-6.2s-8.2.7-12,2c-3.9,1.4-7,3.2-9.4,5.6-2.4-2.4-5.5-4.3-9.4-5.6-3.9-1.4-7.9-2-12-2-7.1,0-13.3,2.1-18.4,6.2-5.2,4.2-7.7,9.1-7.7,14.9,0,8.2,4.5,15.8,13.5,23,9,7.2,20.4,15.8,34,25.9ZM167.4,192H24.6c-6.5,0-12.1-1.9-16.8-5.6-4.7-3.8-7-8.3-7-13.6V19.2c0-5.3,2.3-9.8,7-13.6C12.5,1.9,18.1,0,24.6,0h142.7c6.5,0,12.1,1.9,16.8,5.6s7,8.3,7,13.6v153.6c0,5.3-2.3,9.8-7,13.6s-10.3,5.6-16.8,5.6ZM24.6,172.8h142.7V19.2H24.6v153.6ZM24.6,172.8V19.2v153.6Z\"/>',\n viewBox: '0 0 192 192'\n}\n\nexport const work = {\n name: 'work',\n content: '<path d=\"M160-120q-33 0-56.5-23.5T80-200v-440q0-33 23.5-56.5T160-720h160v-80q0-33 23.5-56.5T400-880h160q33 0 56.5 23.5T640-800v80h160q33 0 56.5 23.5T880-640v440q0 33-23.5 56.5T800-120H160Zm0-80h640v-440H160v440Zm240-520h160v-80H400v80ZM160-200v-440 440Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const more_time = {\n name: 'more-time',\n content: '<path d=\"M440-120q-75 0-140.5-28T185-225q-49-49-77-114.5T80-480q0-75 28-140.5T185-735q49-49 114.5-77T440-840q21 0 40.5 2.5T520-830v82q-20-6-39.5-9t-40.5-3q-118 0-199 81t-81 199q0 118 81 199t199 81q118 0 199-81t81-199q0-11-1-20t-3-20h82q2 11 2 20v20q0 75-28 140.5T695-225q-49 49-114.5 77T440-120Zm112-192L400-464v-216h80v184l128 128-56 56Zm168-288v-120H600v-80h120v-120h80v120h120v80H800v120h-80Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const manage_accounts = {\n name: 'manage-accounts',\n content: '<path d=\"M400-480q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 66-47 113t-113 47ZM80-160v-112q0-33 17-62t47-44q51-26 115-44t141-18h14q6 0 12 2-8 18-13.5 37.5T404-360h-4q-71 0-127.5 18T180-306q-9 5-14.5 14t-5.5 20v32h252q6 21 16 41.5t22 38.5H80Zm560 40-12-60q-12-5-22.5-10.5T584-204l-58 18-40-68 46-40q-2-14-2-26t2-26l-46-40 40-68 58 18q11-8 21.5-13.5T628-460l12-60h80l12 60q12 5 22.5 11t21.5 15l58-20 40 70-46 40q2 12 2 25t-2 25l46 40-40 68-58-18q-11 8-21.5 13.5T732-180l-12 60h-80Zm40-120q33 0 56.5-23.5T760-320q0-33-23.5-56.5T680-400q-33 0-56.5 23.5T600-320q0 33 23.5 56.5T680-240ZM400-560q33 0 56.5-23.5T480-640q0-33-23.5-56.5T400-720q-33 0-56.5 23.5T320-640q0 33 23.5 56.5T400-560Zm0-80Zm12 400Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const group = {\n name: 'group',\n content: '<path d=\"M40-160v-112q0-34 17.5-62.5T104-378q62-31 126-46.5T360-440q66 0 130 15.5T616-378q29 15 46.5 43.5T680-272v112H40Zm720 0v-120q0-44-24.5-84.5T666-434q51 6 96 20.5t84 35.5q36 20 55 44.5t19 53.5v120H760ZM360-480q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 66-47 113t-113 47Zm400-160q0 66-47 113t-113 47q-11 0-28-2.5t-28-5.5q27-32 41.5-71t14.5-81q0-42-14.5-81T544-792q14-5 28-6.5t28-1.5q66 0 113 47t47 113ZM120-240h480v-32q0-11-5.5-20T580-306q-54-27-109-40.5T360-360q-56 0-111 13.5T140-306q-9 5-14.5 14t-5.5 20v32Zm240-320q33 0 56.5-23.5T440-640q0-33-23.5-56.5T360-720q-33 0-56.5 23.5T280-640q0 33 23.5 56.5T360-560Zm0 320Zm0-400Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const app_registration = {\n name: 'app-registration',\n content: '<path d=\"M240-160q-33 0-56.5-23.5T160-240q0-33 23.5-56.5T240-320q33 0 56.5 23.5T320-240q0 33-23.5 56.5T240-160Zm0-240q-33 0-56.5-23.5T160-480q0-33 23.5-56.5T240-560q33 0 56.5 23.5T320-480q0 33-23.5 56.5T240-400Zm0-240q-33 0-56.5-23.5T160-720q0-33 23.5-56.5T240-800q33 0 56.5 23.5T320-720q0 33-23.5 56.5T240-640Zm240 0q-33 0-56.5-23.5T400-720q0-33 23.5-56.5T480-800q33 0 56.5 23.5T560-720q0 33-23.5 56.5T480-640Zm240 0q-33 0-56.5-23.5T640-720q0-33 23.5-56.5T720-800q33 0 56.5 23.5T800-720q0 33-23.5 56.5T720-640ZM480-400q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Zm40 240v-123l221-220q9-9 20-13t22-4q12 0 23 4.5t20 13.5l37 37q8 9 12.5 20t4.5 22q0 11-4 22.5T863-380L643-160H520Zm300-263-37-37 37 37ZM580-220h38l121-122-18-19-19-18-122 121v38Zm141-141-19-18 37 37-18-19Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const settings = {\n name: 'settings',\n content: '<path d=\"m370-80-16-128q-13-5-24.5-12T307-235l-119 50L78-375l103-78q-1-7-1-13.5v-27q0-6.5 1-13.5L78-585l110-190 119 50q11-8 23-15t24-12l16-128h220l16 128q13 5 24.5 12t22.5 15l119-50 110 190-103 78q1 7 1 13.5v27q0 6.5-2 13.5l103 78-110 190-118-50q-11 8-23 15t-24 12L590-80H370Zm70-80h79l14-106q31-8 57.5-23.5T639-327l99 41 39-68-86-65q5-14 7-29.5t2-31.5q0-16-2-31.5t-7-29.5l86-65-39-68-99 42q-22-23-48.5-38.5T533-694l-13-106h-79l-14 106q-31 8-57.5 23.5T321-633l-99-41-39 68 86 64q-5 15-7 30t-2 32q0 16 2 31t7 30l-86 65 39 68 99-42q22 23 48.5 38.5T427-266l13 106Zm42-180q58 0 99-41t41-99q0-58-41-99t-99-41q-59 0-99.5 41T342-480q0 58 40.5 99t99.5 41Zm-2-140Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const account_tree = {\n name: 'account-tree',\n content: '<path d=\"M600-120v-120H440v-400h-80v120H80v-320h280v120h240v-120h280v320H600v-120h-80v320h80v-120h280v320H600ZM160-760v160-160Zm520 400v160-160Zm0-400v160-160Zm0 160h120v-160H680v160Zm0 400h120v-160H680v160ZM160-600h120v-160H160v160Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const analytics = {\n name: 'analytics',\n content: '<path d=\"M280-280h80v-200h-80v200Zm320 0h80v-400h-80v400Zm-160 0h80v-120h-80v120Zm0-200h80v-80h-80v80ZM200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm0-560v560-560Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const travel_explore = {\n name: 'travel-explore',\n content: '<path d=\"M480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q146 0 255.5 91.5T872-559h-82q-19-73-68.5-130.5T600-776v16q0 33-23.5 56.5T520-680h-80v80q0 17-11.5 28.5T400-560h-80v80h80v120h-40L168-552q-3 18-5.5 36t-2.5 36q0 131 92 225t228 95v80Zm364-20L716-228q-21 12-45 20t-51 8q-75 0-127.5-52.5T440-380q0-75 52.5-127.5T620-560q75 0 127.5 52.5T800-380q0 27-8 51t-20 45l128 128-56 56ZM620-280q42 0 71-29t29-71q0-42-29-71t-71-29q-42 0-71 29t-29 71q0 42 29 71t71 29Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const page_info = {\n name: 'page_info',\n content: '<path d=\"M710-150q-63 0-106.5-43.5T560-300q0-63 43.5-106.5T710-450q63 0 106.5 43.5T860-300q0 63-43.5 106.5T710-150Zm0-80q29 0 49.5-20.5T780-300q0-29-20.5-49.5T710-370q-29 0-49.5 20.5T640-300q0 29 20.5 49.5T710-230Zm-550-30v-80h320v80H160Zm90-250q-63 0-106.5-43.5T100-660q0-63 43.5-106.5T250-810q63 0 106.5 43.5T400-660q0 63-43.5 106.5T250-510Zm0-80q29 0 49.5-20.5T320-660q0-29-20.5-49.5T250-730q-29 0-49.5 20.5T180-660q0 29 20.5 49.5T250-590Zm230-30v-80h320v80H480Zm230 320ZM250-660Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const query_builder = {\n name: 'query-builder',\n content: ' <path d=\"M255.8,42.7c-117.8,0-213.1,95.6-213.1,213.3s95.4,213.3,213.1,213.3,213.5-95.6,213.5-213.3S373.8,42.7,255.8,42.7ZM256,426.7c-94.3,0-170.7-76.4-170.7-170.7s76.4-170.7,170.7-170.7,170.7,76.4,170.7,170.7-76.4,170.7-170.7,170.7Z\"/>\\n' +\n ' <path d=\"M266.7,149.3h-32v128l112,67.2,16-26.2-96-57v-112Z\"/>',\n viewBox: '0 0 512 512'\n}\n\nexport const event_list = {\n name: 'event-list',\n content: '<path d=\"M640-120q-33 0-56.5-23.5T560-200v-160q0-33 23.5-56.5T640-440h160q33 0 56.5 23.5T880-360v160q0 33-23.5 56.5T800-120H640Zm0-80h160v-160H640v160ZM80-240v-80h360v80H80Zm560-280q-33 0-56.5-23.5T560-600v-160q0-33 23.5-56.5T640-840h160q33 0 56.5 23.5T880-760v160q0 33-23.5 56.5T800-520H640Zm0-80h160v-160H640v160ZM80-640v-80h360v80H80Zm640 360Zm0-400Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const graphic_eq = {\n name: 'graphic-eq',\n content: '<path d=\"M280-240v-480h80v480h-80ZM440-80v-800h80v800h-80ZM120-400v-160h80v160h-80Zm480 160v-480h80v480h-80Zm160-160v-160h80v160h-80Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const pool = {\n name: 'pool',\n content: '<path d=\"M80-120v-80q38 0 57-20t75-20q56 0 77 20t57 20q36 0 57-20t77-20q56 0 77 20t57 20q36 0 57-20t77-20q56 0 75 20t57 20v80q-59 0-77.5-20T748-160q-36 0-57 20t-77 20q-56 0-77-20t-57-20q-36 0-57 20t-77 20q-56 0-77-20t-57-20q-36 0-54.5 20T80-120Zm0-180v-80q38 0 57-20t75-20q56 0 77.5 20t56.5 20q36 0 57-20t77-20q56 0 77 20t57 20q36 0 57-20t77-20q56 0 75 20t57 20v80q-59 0-77.5-20T748-340q-36 0-55.5 20T614-300q-57 0-77.5-20T480-340q-38 0-56.5 20T346-300q-59 0-78.5-20T212-340q-36 0-54.5 20T80-300Zm196-204 133-133-40-40q-33-33-70-48t-91-15v-100q75 0 124 16.5t96 63.5l256 256q-17 11-33 17.5t-37 6.5q-36 0-57-20t-77-20q-56 0-77 20t-57 20q-21 0-37-6.5T276-504Zm392-336q42 0 71 29.5t29 70.5q0 42-29 71t-71 29q-42 0-71-29t-29-71q0-41 29-70.5t71-29.5Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const component_exchange = {\n name: 'component-exchange',\n content: '<path d=\"m196-120-6-51-8-4q-4-2-11-7l-48 20-44-76 41-31v-21l-41-32 44-76 48 20q5-3 9.5-6t9.5-5l6-51h88l6 51 4 2 4 2q2 1 5 3l6 4 48-20 44 76-41 31v22l219-127-45 79 12 9-158 92-31 54-48-20q-5 3-9.5 6t-9.5 5l-6 51h-88Zm44-220q-25 0-42.5 17.5T180-280q0 25 17.5 42.5T240-220q25 0 42.5-17.5T300-280q0-25-17.5-42.5T240-340Zm156-220-6-51q-2-2-5-3t-5-3v220l-15-26-45 19v-204l-40-70 40-31v-21l-41-32 44-76 48 20q5-3 9.5-6t9.5-5l6-51h88l6 51 8 4q4 2 11 7l48-20 44 76-41 31v21l41 32-44 76-48-20q-5 3-9.5 6t-9.5 5l-6 51h-88Zm44-220q-25 0-42.5 17.5T380-720q0 25 17.5 42.5T440-660q25 0 42.5-17.5T500-720q0-25-17.5-42.5T440-780Zm236 660-6-51-8-4q-4-2-11-7l-48 20-44-76 41-31v-21l-41-31 44-77 48 20q3-2 4-2.5l15-7.5-216-152h48l4-36 195 136h63l6 51 4 2 4 2q2 1 5 3l6 4 48-20 44 76-41 31v21l41 32-44 76-48-20q-5 3-9.5 6t-9.5 5l-6 51h-88Zm44-220q-25 0-42.5 17.5T660-280q0 25 17.5 42.5T720-220q25 0 42.5-17.5T780-280q0-25-17.5-42.5T720-340Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const schedule_send = {\n name: 'schedule-send',\n content: '<path d=\"M120-160v-640l572 240h-12q-35 0-66 8t-60 22L200-680v140l240 60-240 60v140l216-92q-8 23-12 45.5t-4 46.5v2L120-160Zm560 80q-83 0-141.5-58.5T480-280q0-83 58.5-141.5T680-480q83 0 141.5 58.5T880-280q0 83-58.5 141.5T680-80Zm66-106 28-28-74-74v-112h-40v128l86 86ZM200-372v-308 400-92Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const text_snippet = {\n name: 'text-snippet',\n content: '<path d=\"M200-200h560v-367L567-760H200v560Zm0 80q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h400l240 240v400q0 33-23.5 56.5T760-120H200Zm80-160h400v-80H280v80Zm0-160h400v-80H280v80Zm0-160h280v-80H280v80Zm-80 400v-560 560Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const notifications = {\n name: 'notifications',\n content: '<path d=\"M160-200v-80h80v-280q0-83 50-147.5T420-792v-28q0-25 17.5-42.5T480-880q25 0 42.5 17.5T540-820v28q80 20 130 84.5T720-560v280h80v80H160Zm320-300Zm0 420q-33 0-56.5-23.5T400-160h160q0 33-23.5 56.5T480-80ZM320-280h320v-280q0-66-47-113t-113-47q-66 0-113 47t-47 113v280Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const webhook = {\n name: 'webhook',\n content: '<path d=\"M280-120q-83 0-141.5-58.5T80-320q0-73 45.5-127.5T240-516v83q-35 12-57.5 43T160-320q0 50 35 85t85 35q50 0 85-35t35-85v-40h235q8-9 19.5-14.5T680-380q25 0 42.5 17.5T740-320q0 25-17.5 42.5T680-260q-14 0-25.5-5.5T635-280H476q-14 69-68.5 114.5T280-120Zm400 0q-56 0-101.5-27.5T507-220h107q14 10 31 15t35 5q50 0 85-35t35-85q0-50-35-85t-85-35q-20 0-37 5.5T611-418L489-621q-21-4-35-20t-14-39q0-25 17.5-42.5T500-740q25 0 42.5 17.5T560-680v8.5q0 3.5-2 8.5l87 146q8-2 17-2.5t18-.5q83 0 141.5 58.5T880-320q0 83-58.5 141.5T680-120ZM280-260q-25 0-42.5-17.5T220-320q0-22 14-38t34-21l94-156q-29-27-45.5-64.5T300-680q0-83 58.5-141.5T500-880q83 0 141.5 58.5T700-680h-80q0-50-35-85t-85-35q-50 0-85 35t-35 85q0 43 26 75.5t66 41.5L337-338q2 5 2.5 9t.5 9q0 25-17.5 42.5T280-260Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const pages = {\n name: 'pages',\n content: '<path d=\"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm0-560v560-560Zm163 450 117-71 117 71-31-133 104-90-137-11-53-126-53 126-137 11 104 90-31 133Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const insert_link = {\n name: 'insert-link',\n content: '<path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z\"/>',\n viewBox: '0 0 24 24'\n}\n\nexport const add = {\n name: 'add',\n content: '<path d=\"M440-440H200v-80h240v-240h80v240h240v80H520v240h-80v-240Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const customer = {\n name: 'customer',\n content: '<g id=\"info\"/><g id=\"icons\"><g id=\"user\"><ellipse cx=\"12\" cy=\"8\" rx=\"5\" ry=\"6\"/><path d=\"M21.8,19.1c-0.9-1.8-2.6-3.3-4.8-4.2c-0.6-0.2-1.3-0.2-1.8,0.1c-1,0.6-2,0.9-3.2,0.9s-2.2-0.3-3.2-0.9 C8.3,14.8,7.6,14.7,7,15c-2.2,0.9-3.9,2.4-4.8,4.2C1.5,20.5,2.6,22,4.1,22h15.8C21.4,22,22.5,20.5,21.8,19.1z\"/></g></g>',\n viewBox: '0 0 24 24'\n}\n\nexport const computer = {\n name: 'computer',\n content: '<path d=\"M40-120v-80h880v80H40Zm120-120q-33 0-56.5-23.5T80-320v-440q0-33 23.5-56.5T160-840h640q33 0 56.5 23.5T880-760v440q0 33-23.5 56.5T800-240H160Zm0-80h640v-440H160v440Zm0 0v-440 440Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\n// Demo menu icons\nexport const checklist = {\n name: 'checklist',\n content: '<path d=\"M222-200 80-342l56-56 85 85 170-170 56 57-225 226Zm0-320L80-662l56-56 85 85 170-170 56 57-225 226Zm298 240v-80h360v80H520Zm0-320v-80h360v80H520Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const sort = {\n name: 'sort',\n content: '<path d=\"M120-240v-80h240v80H120Zm0-200v-80h480v80H120Zm0-200v-80h720v80H120Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const person_search = {\n name: 'person_search',\n content: '<path d=\"M440-480q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 66-47 113t-113 47Zm0-80q33 0 56.5-23.5T520-640q0-33-23.5-56.5T440-720q-33 0-56.5 23.5T360-640q0 33 23.5 56.5T440-560ZM884-20 756-148q-21 12-45 20t-51 8q-75 0-127.5-52.5T480-300q0-75 52.5-127.5T660-480q75 0 127.5 52.5T840-300q0 27-8 51t-20 45L940-76l-56 56ZM660-200q42 0 71-29t29-71q0-42-29-71t-71-29q-42 0-71 29t-29 71q0 42 29 71t71 29Zm-540 80v-94q0-35 17.5-63.5T184-330q50-27 107-43.5T400-390q-10 20-16.5 41.5T375-300q-75 0-127.5 52.5T195-120H120Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const category = {\n name: 'category',\n content: '<path d=\"m260-520 220-360 220 360H260ZM700-80q-75 0-127.5-52.5T520-260q0-75 52.5-127.5T700-440q75 0 127.5 52.5T880-260q0 75-52.5 127.5T700-80Zm-580-20v-320h320v320H120Zm580-60q42 0 71-29t29-71q0-42-29-71t-71-29q-42 0-71 29t-29 71q0 42 29 71t71 29Zm-500-20h160v-160H200v160Zm202-420h156l-78-126-78 126Zm78 0ZM360-340Zm340 80Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const chat = {\n name: 'chat',\n content: '<path d=\"M240-400h320v-80H240v80Zm0-120h480v-80H240v80Zm0-120h480v-80H240v80ZM80-80v-720q0-33 23.5-56.5T160-880h640q33 0 56.5 23.5T880-800v480q0 33-23.5 56.5T800-240H240L80-80Zm126-240h594v-480H160v525l46-45Zm-46 0v-480 480Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const playlist_add_check = {\n name: 'playlist_add_check',\n content: '<path d=\"M80-400v-80h400v80H80Zm0-160v-80h560v80H80Zm0-160v-80h560v80H80Zm560 560L480-320l56-56 104 103 208-208 56 57-264 264Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const article = {\n name: 'article',\n content: '<path d=\"M280-280h280v-80H280v80Zm0-160h400v-80H280v80Zm0-160h400v-80H280v80Zm-80 480q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm0-560v560-560Z\"/>',\n viewBox: '0 -960 960 960'\n}\n","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type GetRuntimeEntitiesByTypeQueryVariablesDto = Types.Exact<{\n ckTypeId: Types.Scalars['String']['input'];\n after?: Types.InputMaybe<Types.Scalars['String']['input']>;\n first?: Types.InputMaybe<Types.Scalars['Int']['input']>;\n searchFilter?: Types.InputMaybe<Types.SearchFilterDto>;\n fieldFilters?: Types.InputMaybe<Array<Types.InputMaybe<Types.FieldFilterDto>> | Types.InputMaybe<Types.FieldFilterDto>>;\n sort?: Types.InputMaybe<Array<Types.InputMaybe<Types.SortDto>> | Types.InputMaybe<Types.SortDto>>;\n}>;\n\n\nexport type GetRuntimeEntitiesByTypeQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', totalCount?: number | null, pageInfo: { __typename?: 'PageInfo', endCursor?: string | null, hasNextPage: boolean }, items?: Array<{ __typename?: 'RtEntity', rtId: any, ckTypeId: any, rtWellKnownName?: string | null, rtCreationDateTime?: any | null, rtChangedDateTime?: any | null } | null> | null } | null } | null };\n\nexport const GetRuntimeEntitiesByTypeDocumentDto = gql`\n query getRuntimeEntitiesByType($ckTypeId: String!, $after: String, $first: Int, $searchFilter: SearchFilter, $fieldFilters: [FieldFilter], $sort: [Sort]) {\n runtime {\n runtimeEntities(\n ckId: $ckTypeId\n after: $after\n first: $first\n searchFilter: $searchFilter\n fieldFilter: $fieldFilters\n sortOrder: $sort\n ) {\n totalCount\n pageInfo {\n endCursor\n hasNextPage\n }\n items {\n rtId\n ckTypeId\n rtWellKnownName\n rtCreationDateTime\n rtChangedDateTime\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class GetRuntimeEntitiesByTypeDtoGQL extends Apollo.Query<GetRuntimeEntitiesByTypeQueryDto, GetRuntimeEntitiesByTypeQueryVariablesDto> {\n document = GetRuntimeEntitiesByTypeDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import { Directive, forwardRef, inject } from '@angular/core';\nimport { GraphQL, RtEntityDto } from '@meshmakers/octo-services';\nimport {\n DataSourceBase,\n FetchDataOptions,\n FetchResultTyped,\n ListViewComponent,\n} from '@meshmakers/shared-ui';\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { OctoGraphQlDataSource } from '../../data-sources/octo-graph-ql-data-source';\nimport { GetRuntimeEntitiesByTypeDtoGQL } from '../../graphQL/getRuntimeEntitiesByType';\n\n@Directive({\n selector: '[mmCkTypeEntitiesDataSource]',\n exportAs: 'mmCkTypeEntitiesDataSource',\n standalone: true,\n providers: [\n {\n provide: DataSourceBase,\n useExisting: forwardRef(() => CkTypeEntitiesDataSourceDirective),\n },\n ],\n})\nexport class CkTypeEntitiesDataSourceDirective extends OctoGraphQlDataSource<RtEntityDto> {\n private readonly getRuntimeEntitiesGQL = inject(\n GetRuntimeEntitiesByTypeDtoGQL,\n );\n private ckTypeId: string | null = null;\n\n constructor() {\n const listViewComponent = inject(ListViewComponent);\n super(listViewComponent);\n console.debug('CkTypeEntitiesDataSource: Constructor called');\n }\n\n public setRtCkTypeId(ckTypeId: string): void {\n console.debug('CkTypeEntitiesDataSource: Setting CK Type ID:', ckTypeId);\n this.ckTypeId = ckTypeId;\n // Trigger a refresh to tell the ListViewComponent to fetch data again\n this.fetchAgain();\n }\n\n public fetchData(\n queryOptions: FetchDataOptions,\n ): Observable<FetchResultTyped<RtEntityDto> | null> {\n console.debug(\n 'CkTypeEntitiesDataSource: fetchData called with ckTypeId:',\n this.ckTypeId,\n );\n\n if (!this.ckTypeId) {\n // Return empty result if no type ID is set\n console.debug(\n 'CkTypeEntitiesDataSource: No CK Type ID set, returning empty result',\n );\n return of(new FetchResultTyped<RtEntityDto>([], 0));\n }\n\n const sort = this.getSortDefinitions(queryOptions.state);\n const fieldFilters = this.getFieldFilterDefinitions(queryOptions.state);\n\n const variables = {\n ckTypeId: this.ckTypeId,\n first: queryOptions.state.take,\n after: GraphQL.offsetToCursor(queryOptions.state.skip ?? 0),\n sort: sort,\n fieldFilters: fieldFilters,\n };\n\n console.debug(\n 'CkTypeEntitiesDataSource: Making GraphQL request with variables:',\n variables,\n );\n\n return this.getRuntimeEntitiesGQL\n .fetch({\n variables: variables,\n fetchPolicy: queryOptions.forceRefresh ? 'network-only' : 'cache-first',\n })\n .pipe(\n map((result) => {\n console.debug('CkTypeEntitiesDataSource: GraphQL response:', result);\n const items = result.data?.runtime?.runtimeEntities?.items ?? [];\n const totalCount =\n result.data?.runtime?.runtimeEntities?.totalCount ?? 0;\n\n // Transform and filter out null items\n const transformedItems = items\n .filter((item): item is NonNullable<typeof item> => item != null)\n .map((item) => ({\n rtId: item.rtId || '',\n ckTypeId: item.ckTypeId || this.ckTypeId || '',\n rtWellKnownName: item.rtWellKnownName || null,\n rtCreationDateTime: item.rtCreationDateTime || null,\n rtChangedDateTime: item.rtChangedDateTime || null,\n })) as RtEntityDto[];\n\n console.debug(\n 'CkTypeEntitiesDataSource: Returning',\n transformedItems.length,\n 'items',\n );\n\n return new FetchResultTyped<RtEntityDto>(\n transformedItems,\n totalCount,\n );\n }),\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TreeItemDataTyped } from '@meshmakers/shared-services';\nimport { CkModelDto, CkTypeDto, RtEntityDto } from '../../graphQL/globalTypes';\n\n// Extended type to handle both Runtime Entities and CK Models/Types\ntype BrowserItem =\n | RtEntityDto\n | CkModelDto\n | CkTypeDto\n | { isCkModelsRoot?: boolean; ckModelId?: string };\n\nexport interface BrowserState {\n selectedItemId: string;\n selectedItemText: string;\n selectedItemData: BrowserItem;\n parentPath: TreeItemDataTyped<BrowserItem>[]; // Full path from root to parent (deprecated)\n expandedKeys: string[]; // IDs of expanded nodes (parent path)\n timestamp: number;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RuntimeBrowserStateService {\n private currentState: BrowserState | null = null;\n\n /**\n * Save the current browser state including selected item information and parent path\n * @deprecated Use saveStateWithKeys instead for better performance\n */\n public saveState(\n selectedItem: TreeItemDataTyped<BrowserItem> | null,\n parentPath?: TreeItemDataTyped<BrowserItem>[],\n ): void {\n if (!selectedItem) {\n this.currentState = null;\n return;\n }\n\n this.currentState = {\n selectedItemId: this.getItemId(selectedItem),\n selectedItemText: selectedItem.text,\n selectedItemData: selectedItem.item,\n parentPath: parentPath || [],\n expandedKeys: [],\n timestamp: Date.now(),\n };\n\n console.debug('Runtime Browser State saved:', this.currentState);\n console.debug(\n 'Parent path saved:',\n (parentPath || []).map((p) => p.text),\n );\n }\n\n /**\n * Save the current browser state using expanded keys from the tree.\n * This is more efficient as it doesn't require recursive tree traversal.\n */\n public saveStateWithKeys(\n selectedItem: TreeItemDataTyped<BrowserItem> | null,\n expandedKeys: string[],\n ): void {\n if (!selectedItem) {\n this.currentState = null;\n return;\n }\n\n this.currentState = {\n selectedItemId: this.getItemId(selectedItem),\n selectedItemText: selectedItem.text,\n selectedItemData: selectedItem.item,\n parentPath: [], // Not used with this method\n expandedKeys: expandedKeys,\n timestamp: Date.now(),\n };\n\n console.debug(\n 'Runtime Browser State saved with keys:',\n this.currentState.selectedItemId,\n );\n console.debug('Expanded keys saved:', expandedKeys);\n }\n\n /**\n * Get the saved browser state\n */\n public getState(): BrowserState | null {\n // Only return state if it's less than 5 minutes old\n if (\n this.currentState &&\n Date.now() - this.currentState.timestamp < 300000\n ) {\n return this.currentState;\n }\n\n // Clear expired state\n if (this.currentState) {\n this.currentState = null;\n }\n\n return null;\n }\n\n /**\n * Clear the saved state\n */\n public clearState(): void {\n this.currentState = null;\n }\n\n /**\n * Check if the given item matches the saved state\n */\n public isItemMatching(item: TreeItemDataTyped<BrowserItem>): boolean {\n const state = this.getState();\n if (!state) return false;\n\n return this.getItemId(item) === state.selectedItemId;\n }\n\n /**\n * Get unique identifier for a tree item\n */\n private getItemId(item: TreeItemDataTyped<BrowserItem>): string {\n const itemData = item.item;\n\n // Runtime entity\n if ('rtId' in itemData && 'ckTypeId' in itemData) {\n return `${String(itemData.ckTypeId)}@${String(itemData.rtId)}`;\n }\n\n // CK Model\n if (\n 'id' in itemData &&\n !('rtId' in itemData) &&\n !('ckTypeId' in itemData)\n ) {\n return `ck-model:${String(itemData.id)}`;\n }\n\n // CK Type\n if (\n 'ckTypeId' in itemData &&\n !('rtId' in itemData) &&\n !('id' in itemData)\n ) {\n return `ck-type:${String(itemData.ckTypeId)}`;\n }\n\n // CK Models root\n if ('isCkModelsRoot' in itemData && itemData.isCkModelsRoot) {\n return 'ck-models-root';\n }\n\n return item.text || 'unknown';\n }\n}\n","import { Injectable } from '@angular/core';\nimport { RtEntityDto } from '@meshmakers/octo-services';\n\n/**\n * Performs helpful Octomesh Types operations, like checks, comparisons etc.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class TypeHelperService {\n /**\n * Checks if given item is runtime entity.\n *\n * @param item Item to check.\n * @returns True for runtime entity, false otherwise.\n */\n public isRuntimeEntity(item: unknown): item is RtEntityDto {\n return !!(item\n && (item as RtEntityDto).rtId\n && (item as RtEntityDto).ckTypeId);\n }\n}\n","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type CreateEntitiesMutationVariablesDto = Types.Exact<{\n entities: Array<Types.InputMaybe<Types.RtEntityInputDto>> | Types.InputMaybe<Types.RtEntityInputDto>;\n}>;\n\n\nexport type CreateEntitiesMutationDto = { __typename?: 'OctoMutation', runtime?: { __typename?: 'Runtime', runtimeEntities?: { __typename?: 'RtEntityMutations', create?: Array<{ __typename?: 'RtEntity', rtId: any } | null> | null } | null } | null };\n\nexport const CreateEntitiesDocumentDto = gql`\n mutation CreateEntities($entities: [RtEntityInput]!) {\n runtime {\n runtimeEntities {\n create(entities: $entities) {\n rtId\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class CreateEntitiesDtoGQL extends Apollo.Mutation<CreateEntitiesMutationDto, CreateEntitiesMutationVariablesDto> {\n document = CreateEntitiesDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import { computed, Injectable, signal } from \"@angular/core\";\n\n/**\n * Coordinates loading state across attributes-group (and nested RECORD/RECORD_ARRAY).\n * Used by create-editor and update-editor to enable Save only when structure is ready and form is valid/dirty.\n * Singleton: call reset() when entering create or edit mode so stale state from the other mode does not affect the Save button.\n */\n@Injectable({ providedIn: \"root\" })\nexport class AttributeCoordinatorService {\n private loadingCount = signal(0);\n private structureReady = signal(false);\n\n /** True when all attribute resources have finished loading and the form structure has been built. */\n isFullyLoaded = computed(\n () => this.loadingCount() === 0 && this.structureReady(),\n );\n\n /** Clears loading state. Call when entering create or edit mode so the coordinator does not keep state from the previous mode. */\n reset(): void {\n this.loadingCount.set(0);\n this.structureReady.set(false);\n }\n\n startLoading() {\n this.structureReady.set(false);\n this.loadingCount.update((c) => c + 1);\n }\n\n stopLoading() {\n this.loadingCount.update((c) => Math.max(0, c - 1));\n }\n\n markStructureAsReady() {\n this.structureReady.set(true);\n }\n}\n","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type GetCkAttributesDetailedQueryVariablesDto = Types.Exact<{\n ckId: Types.Scalars['String']['input'];\n}>;\n\n\nexport type GetCkAttributesDetailedQueryDto = { __typename?: 'OctoQuery', constructionKit?: { __typename?: 'ConstructionKitQuery', types?: { __typename?: 'CkTypeDtoConnection', items?: Array<{ __typename?: 'CkType', ckTypeId: { __typename?: 'CkTypeId', fullName: string }, attributes?: { __typename?: 'CkTypeAttributeDtoConnection', items?: Array<{ __typename?: 'CkTypeAttribute', attributeName: string, attributeValueType: Types.AttributeValueTypeDto, isOptional: boolean, autoCompleteValues?: Array<string | null> | null, ckAttributeId: { __typename?: 'CkAttributeId', fullName: string }, attribute?: { __typename?: 'CkAttribute', defaultValues?: Array<any | null> | null, ckRecord?: { __typename?: 'CkRecord', ckRecordId: { __typename?: 'CkRecordId', fullName: string } } | null, ckEnum?: { __typename?: 'CkEnum', ckEnumId: { __typename?: 'CkEnumId', fullName: string }, values: Array<{ __typename?: 'CkEnumValue', key?: number | null, name?: string | null } | null> } | null } | null } | null> | null } | null } | null> | null } | null } | null };\n\nexport const GetCkAttributesDetailedDocumentDto = gql`\n query getCkAttributesDetailed($ckId: String!) {\n constructionKit {\n types(ckId: $ckId) {\n items {\n ckTypeId {\n fullName\n }\n attributes {\n items {\n attributeName\n attributeValueType\n isOptional\n autoCompleteValues\n ckAttributeId {\n fullName\n }\n attribute {\n ckRecord {\n ckRecordId {\n fullName\n }\n }\n ckEnum {\n ckEnumId {\n fullName\n }\n values {\n key\n name\n }\n }\n defaultValues\n }\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class GetCkAttributesDetailedDtoGQL extends Apollo.Query<GetCkAttributesDetailedQueryDto, GetCkAttributesDetailedQueryVariablesDto> {\n document = GetCkAttributesDetailedDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type GetCkRecordDetailedQueryVariablesDto = Types.Exact<{\n ckId?: Types.InputMaybe<Types.Scalars['String']['input']>;\n}>;\n\n\nexport type GetCkRecordDetailedQueryDto = { __typename?: 'OctoQuery', constructionKit?: { __typename?: 'ConstructionKitQuery', records?: { __typename?: 'CkRecordDtoConnection', totalCount?: number | null, items?: Array<{ __typename?: 'CkRecord', isAbstract: boolean, ckRecordId: { __typename?: 'CkRecordId', fullName: string }, attributes?: { __typename?: 'CkTypeAttributeDtoConnection', items?: Array<{ __typename?: 'CkTypeAttribute', isOptional: boolean, attributeName: string, attributeValueType: Types.AttributeValueTypeDto, ckAttributeId: { __typename?: 'CkAttributeId', fullName: string }, attribute?: { __typename?: 'CkAttribute', defaultValues?: Array<any | null> | null, ckRecord?: { __typename?: 'CkRecord', ckRecordId: { __typename?: 'CkRecordId', fullName: string } } | null, ckEnum?: { __typename?: 'CkEnum', ckEnumId: { __typename?: 'CkEnumId', fullName: string }, values: Array<{ __typename?: 'CkEnumValue', key?: number | null, name?: string | null } | null> } | null } | null } | null> | null } | null } | null> | null } | null } | null };\n\nexport const GetCkRecordDetailedDocumentDto = gql`\n query getCkRecordDetailed($ckId: String) {\n constructionKit {\n records(ckId: $ckId) {\n totalCount\n items {\n ckRecordId {\n fullName\n }\n isAbstract\n attributes {\n items {\n ckAttributeId {\n fullName\n }\n isOptional\n attributeName\n attributeValueType\n attribute {\n ckRecord {\n ckRecordId {\n fullName\n }\n }\n ckEnum {\n ckEnumId {\n fullName\n }\n values {\n key\n name\n }\n }\n defaultValues\n }\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class GetCkRecordDetailedDtoGQL extends Apollo.Query<GetCkRecordDetailedQueryDto, GetCkRecordDetailedQueryVariablesDto> {\n document = GetCkRecordDetailedDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import { Injectable } from \"@angular/core\";\n\n@Injectable({ providedIn: \"root\" })\nexport class AttributeRecognitionService {\n isString(attributeValueType: string): boolean {\n return attributeValueType === \"STRING\";\n }\n\n isNumber(attributeValueType: string): boolean {\n return [\"INT\", \"INTEGER\", \"INTEGER_64\", \"DOUBLE\", \"NUMBER\", \"LONG\"].includes(\n attributeValueType,\n );\n }\n\n isEnum(attributeValueType: string): boolean {\n return attributeValueType === \"ENUM\";\n }\n\n isRecord(attributeValueType: string): boolean {\n return attributeValueType === \"RECORD\";\n }\n\n isArray(attributeValueType: string): boolean {\n return (\n attributeValueType.endsWith(\"_ARRAY\") &&\n attributeValueType !== \"RECORD_ARRAY\"\n );\n }\n\n isDate(attributeValueType: string): boolean {\n return [\"DATE\", \"DATE_TIME\", \"DATE_TIME_OFFSET\"].includes(\n attributeValueType,\n );\n }\n\n isTime(attributeValueType: string): boolean {\n return [\"TIME_SPAN\"].includes(attributeValueType);\n }\n\n isGeoSpatialPoint(attributeValueType: string): boolean {\n return [\"GEOSPATIAL_POINT\"].includes(attributeValueType);\n }\n\n isBinary(attributeValueType: string): boolean {\n return [\"BINARY\", \"BINARY_LINKED\"].includes(attributeValueType);\n }\n\n isRecordArray(attributeValueType: string): boolean {\n return attributeValueType === \"RECORD_ARRAY\";\n }\n\n isBoolean(attributeValueType: string): boolean {\n return attributeValueType === \"BOOLEAN\";\n }\n\n isIntArray(attributeValueType: string): boolean {\n return [\"INT_ARRAY\", \"INTEGER_ARRAY\"].includes(attributeValueType);\n }\n\n isStringArray(attributeValueType: string): boolean {\n return attributeValueType === \"STRING_ARRAY\";\n }\n}\n","/**\n * Shared utilities for attribute mapping (AttributeMapperService).\n * Provides convertGeospatialPointToGeoJSON, fileToByteArray, getFileFromValue, base64ToByteArray.\n */\n\nfunction isRecordValue(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Converts a GeoJSON-like point control ({ longitude, latitude } or { type, longitude, latitude })\n * to GraphQL-friendly GeoJSON Point shape.\n */\nexport function convertGeospatialPointToGeoJSON(point: unknown): unknown {\n if (!isRecordValue(point)) {\n return point;\n }\n if (\"longitude\" in point && \"latitude\" in point) {\n return {\n type: \"Point\",\n coordinates: [point[\"longitude\"], point[\"latitude\"]],\n };\n }\n if (point[\"type\"] === \"Point\" && \"longitude\" in point && \"latitude\" in point) {\n return {\n type: \"Point\",\n coordinates: [point[\"longitude\"], point[\"latitude\"]],\n };\n }\n return point;\n}\n\n/**\n * Converts a File into a byte array (number[]).\n */\nexport async function fileToByteArray(file: File): Promise<number[]> {\n const arrayBuffer = await file.arrayBuffer();\n return Array.from(new Uint8Array(arrayBuffer));\n}\n\n/**\n * Normalizes File values from different control shapes (File or [File]).\n */\nexport function getFileFromValue(value: unknown): File | null {\n if (Array.isArray(value) && value.length > 0 && value[0] instanceof File) {\n return value[0];\n }\n if (value instanceof File) {\n return value;\n }\n return null;\n}\n\n/**\n * Converts a base64 string into a byte array (number[]).\n */\nexport function base64ToByteArray(base64: string): number[] {\n const binaryString = atob(base64);\n return Array.from(binaryString, (char) => char.charCodeAt(0));\n}\n","import { inject, Injectable } from \"@angular/core\";\nimport { defer, from, Observable } from \"rxjs\";\nimport { Attribute } from \"../models/attribute\";\nimport {\n AttributeEnumOption,\n CkAttributeMetadata,\n} from \"../models/attribute-metadata\";\nimport { AttributeRecognitionService } from \"./attribute-recognition.service\";\nimport {\n base64ToByteArray,\n convertGeospatialPointToGeoJSON,\n fileToByteArray,\n getFileFromValue,\n} from \"./attribute-mapper-utils\";\n\nexport interface RtEntityAttributeInput {\n attributeName: string;\n value: unknown;\n}\n\n/** Property set on synthetic BINARY_LINKED File objects (reference/mockup without content). Used by UI to show a preview indicator. */\nexport const BINARY_LINKED_REFERENCE_FLAG = \"__isBinaryLinkedReference\";\n\n/** Property set on BINARY File objects restored from base64 (content is real; filename is a placeholder). Used by UI to show a reference hint. */\nexport const BINARY_REFERENCE_FLAG = \"__isBinaryFromBase64\";\n\n/**\n * Maps between form model and GraphQL API: builds form attribute definitions from CK metadata and initial/default\n * values, and maps form values to create/update mutation payloads (including RECORD, BINARY, GEOSPATIAL_POINT, etc.).\n */\n@Injectable({\n providedIn: \"root\",\n})\nexport class AttributeMapperService {\n private recognition = inject(AttributeRecognitionService);\n private isRecordValue(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n }\n private isCkAttributeMetadata(\n attr: CkAttributeMetadata | Attribute,\n ): attr is CkAttributeMetadata {\n return \"attribute\" in attr || \"ckAttributeId\" in attr;\n }\n\n // ─── Form ← API: attribute definition + initial/default value ─────────────────────\n\n /**\n * Builds a form attribute definition with a configured control.\n * Value priority: 1. Initial (entity data), 2. Default (CK defaultValues), 3. Empty (placeholder).\n */\n mapToFormAttribute(\n attr: CkAttributeMetadata,\n rawInitialValue?: unknown,\n ): Attribute {\n const attributeName = attr?.attributeName ?? \"\";\n const type = attr?.attributeValueType ?? \"\";\n\n let parsedValue: unknown;\n const hasInitial = rawInitialValue !== undefined && rawInitialValue !== null;\n if (hasInitial) {\n parsedValue = this.parseInitialValue(type, rawInitialValue, attr);\n } else {\n const rawDefault = attr?.attribute?.defaultValues?.[0];\n if (rawDefault !== undefined && rawDefault !== null) {\n parsedValue = this.parseDefaultValue(type, rawDefault, attr);\n } else {\n parsedValue = this.getDefaultPlaceholder(type);\n }\n }\n\n const attribute: Attribute = {\n id: this.getId(attr),\n attributeName: attributeName,\n attributeValueType: type,\n isOptional: attr?.isOptional ?? false,\n enumOptions: this.getEnumOptions(attr),\n value: parsedValue,\n };\n\n return attribute;\n }\n\n /**\n * Converts a raw initial value (from entity) to form value for an existing attribute definition.\n * Use this when attributes were already mapped (e.g. from data service) and only the value needs to be parsed.\n * Avoids rebuilding the full attribute and duplicate mapping overhead.\n */\n getFormValueFromRawInitial(\n attrMetadata: Attribute,\n rawInitialValue: unknown,\n ): unknown {\n return this.parseInitialValue(\n attrMetadata.attributeValueType,\n rawInitialValue,\n attrMetadata,\n );\n }\n\n // ─── Form → GraphQL: mutation payload (create / update) ────────────────────────────\n\n /**\n * Maps form values to GraphQL format (Observable). Use this in editors for better composition,\n * cancellation and optional retry/timeout. Emits once with the mapped attributes array.\n */\n mapFormValueToGraphQLAttributes$(\n formValue: unknown,\n attributesMetadata?: Attribute[],\n ): Observable<RtEntityAttributeInput[]> {\n return defer(() =>\n from(this.mapFormValueToGraphQLAttributes(formValue, attributesMetadata)),\n );\n }\n\n /**\n * Maps form values to GraphQL format for createEntities / updateRuntimeEntities.\n * Record and RecordArray are passed as nested objects/arrays. BINARY_LINKED is included only when value is a File.\n */\n async mapFormValueToGraphQLAttributes(\n formValue: unknown,\n attributesMetadata?: Attribute[],\n ): Promise<RtEntityAttributeInput[]> {\n const result: RtEntityAttributeInput[] = [];\n\n if (!this.isRecordValue(formValue)) {\n return result;\n }\n\n const metadataMap = new Map<string, Attribute>();\n if (attributesMetadata) {\n attributesMetadata.forEach((attr) => {\n metadataMap.set(attr.attributeName, attr);\n });\n }\n\n for (const [key, value] of Object.entries(formValue)) {\n if (!key) {\n continue;\n }\n const metadata = metadataMap.get(key);\n\n if (metadata?.attributeValueType === \"BINARY_LINKED\") {\n const processedValue = await this.processAttributeValue(\n value,\n metadata?.attributeValueType,\n );\n if (processedValue instanceof File) {\n // Skip synthetic reference/preview files — they are placeholders created by\n // parseBinaryLinkedForForm and must not be re-uploaded (would overwrite real data with zeros).\n if (\n (processedValue as unknown as Record<string, unknown>)[\n BINARY_LINKED_REFERENCE_FLAG\n ]\n ) {\n continue;\n }\n result.push({ attributeName: key, value: processedValue });\n } else {\n // Value was cleared (null / empty array) — send null so the backend removes the linked binary.\n result.push({ attributeName: key, value: null });\n }\n continue;\n }\n\n if (value === null || value === undefined) {\n if (metadata?.isOptional) {\n result.push({ attributeName: key, value: null });\n }\n continue;\n }\n\n if (\n metadata?.attributeValueType === \"BINARY\" &&\n this.isOptionalEmptyBinary(metadata, value)\n ) {\n result.push({ attributeName: key, value: null });\n continue;\n }\n\n // Skip empty RECORD (empty object) and RECORD_ARRAY (empty array) unless optional (then send null)\n if (\n metadata?.attributeValueType === \"RECORD\" &&\n this.isValueEmpty(value)\n ) {\n if (metadata?.isOptional) {\n result.push({ attributeName: key, value: null });\n }\n continue;\n }\n if (\n metadata?.attributeValueType === \"RECORD_ARRAY\" &&\n Array.isArray(value) &&\n value.length === 0\n ) {\n if (metadata?.isOptional) {\n result.push({ attributeName: key, value: null });\n }\n continue;\n }\n\n if (metadata?.isOptional && this.isOptionalEmptyScalarOrArray(value, metadata)) {\n result.push({ attributeName: key, value: null });\n continue;\n }\n\n const processedValue = await this.processAttributeValue(\n value,\n metadata?.attributeValueType,\n );\n\n result.push({\n attributeName: key,\n value: processedValue,\n });\n }\n\n return result;\n }\n\n /** Processes a single attribute value for mutation payload (type-specific conversion). */\n private async processAttributeValue(\n value: unknown,\n attributeType?: string,\n ): Promise<unknown> {\n switch (attributeType) {\n case \"RECORD\":\n return value;\n\n case \"RECORD_ARRAY\":\n return value;\n\n case \"GEOSPATIAL_POINT\":\n return convertGeospatialPointToGeoJSON(value);\n\n case \"TIME_SPAN\":\n return this.convertTimeSpanToSeconds(value);\n\n case \"BINARY\": {\n // MeshMakers expects byte[] (array of numbers). Accept File, ArrayBuffer, base64 string, or byte[].\n return await this.convertBinaryToByteArray(value);\n }\n\n case \"BINARY_LINKED\": {\n // MeshMakers: prefer File for multipart, but also accept base64 or byte[]\n if (value instanceof File) {\n return value;\n }\n if (Array.isArray(value) && value[0] instanceof File) {\n return value[0];\n }\n if (typeof value === \"string\") {\n // base64 string\n return base64ToByteArray(value);\n }\n if (value instanceof ArrayBuffer) {\n return this.arrayBufferToByteArray(value);\n }\n if (Array.isArray(value) && typeof value[0] === \"number\") {\n return value;\n }\n return null;\n }\n case \"INTEGER_ARRAY\":\n return this.normalizePrimitiveArray(value, \"number\");\n case \"STRING_ARRAY\":\n return this.normalizePrimitiveArray(value, \"string\");\n case \"DATE_TIME\":\n case \"DATE_TIME_OFFSET\":\n if (value instanceof Date) {\n if (isNaN(value.getTime())) {\n return null;\n }\n return value.toISOString();\n }\n return value;\n\n default:\n return value;\n }\n }\n\n // ─── Scalar / array normalization ────────────────────────────────────────────────\n\n /** Normalizes form value for INTEGER_ARRAY/STRING_ARRAY: primitives[] or { key }[] → primitive[] for GraphQL. */\n private normalizePrimitiveArray(\n value: unknown,\n mode: \"number\" | \"string\",\n ): number[] | string[] | null {\n if (!Array.isArray(value) || value.length === 0) return null;\n if (mode === \"number\") {\n return value.map((v) => {\n if (this.isRecordValue(v) && \"key\" in v) {\n return Number(v[\"key\"]);\n }\n return Number(v);\n });\n }\n return value.map((v) => {\n if (this.isRecordValue(v) && \"key\" in v) {\n return String(v[\"key\"]);\n }\n return String(v);\n });\n }\n\n private arrayBufferToByteArray(buffer: ArrayBuffer): number[] {\n return Array.from(new Uint8Array(buffer));\n }\n\n // ─── Geo / time / binary helpers ──────────────────────────────────────────────────\n\n /** Normalizes API/GeoJSON value to form shape { longitude, latitude } for edit mode. */\n private normalizeGeospatialPointForForm(value: unknown): {\n longitude: number | null;\n latitude: number | null;\n } {\n if (value == null) return { longitude: null, latitude: null };\n if (typeof value === \"string\") {\n try {\n value = JSON.parse(value) as unknown;\n } catch {\n return { longitude: null, latitude: null };\n }\n }\n if (!this.isRecordValue(value)) {\n return { longitude: null, latitude: null };\n }\n if (\"longitude\" in value && \"latitude\" in value) {\n return {\n longitude:\n value[\"longitude\"] != null ? Number(value[\"longitude\"]) : null,\n latitude:\n value[\"latitude\"] != null ? Number(value[\"latitude\"]) : null,\n };\n }\n if (\n Array.isArray(value[\"coordinates\"]) &&\n value[\"coordinates\"].length >= 2\n ) {\n return {\n longitude: Number(value[\"coordinates\"][0]),\n latitude: Number(value[\"coordinates\"][1]),\n };\n }\n return { longitude: null, latitude: null };\n }\n\n /**\n * Converts a TimeSpan control value to seconds.\n */\n private convertTimeSpanToSeconds(value: unknown): number {\n if (value instanceof Date) {\n const hours = value.getHours();\n const minutes = value.getMinutes();\n const seconds = value.getSeconds();\n return hours * 3600 + minutes * 60 + seconds;\n }\n if (typeof value === \"number\") {\n return value;\n }\n return 0;\n }\n\n // --- BINARY helpers for MeshMakers ---\n\n /**\n * Decodes a base64 string into a File with real content, size and optional name/type.\n * Returns null if decoding fails (e.g. invalid base64).\n * Note: A base64 string carries only the raw bytes; it does not contain filename or other metadata.\n * The filename (and contentType) must be supplied by the caller when known (e.g. from a BINARY_LINKED payload); for plain BINARY we use a default name.\n */\n private base64ToFile(\n base64: string,\n filename = \"file.bin\",\n contentType = \"application/octet-stream\",\n ): File | null {\n try {\n const bytes = base64ToByteArray(base64);\n const uint8 = new Uint8Array(bytes);\n const blob = new Blob([uint8], { type: contentType });\n return new File([blob], filename, { type: contentType });\n } catch {\n return null;\n }\n }\n\n /**\n * Converts supported binary representations into byte arrays.\n */\n private async convertBinaryToByteArray(\n value: unknown,\n ): Promise<number[] | unknown> {\n if (\n Array.isArray(value) &&\n (value.length === 0 || typeof value[0] === \"number\")\n ) {\n return value as number[];\n }\n\n const fileValue = getFileFromValue(value);\n if (fileValue) {\n try {\n return await fileToByteArray(fileValue);\n } catch (e) {\n console.error(\"Error converting File to byte array:\", e);\n return value;\n }\n }\n\n if (typeof value === \"string\") {\n try {\n return base64ToByteArray(value);\n } catch (e) {\n console.error(\"Error converting Base64 to byte array:\", e);\n return value;\n }\n }\n\n return value;\n }\n\n // ─── Type recognition (single responsibility: attribute type checks) ─────────────\n\n private isEnum(attr: Pick<Attribute, \"attributeValueType\"> | CkAttributeMetadata): boolean {\n return attr.attributeValueType === \"ENUM\";\n }\n\n /**\n * Checks whether the attribute is a record type.\n */\n private isRecord(attr: Pick<Attribute, \"attributeValueType\"> | CkAttributeMetadata): boolean {\n return attr.attributeValueType === \"RECORD\";\n }\n\n /**\n * Checks whether the attribute is a record array type.\n */\n private isRecordArray(\n attr: Pick<Attribute, \"attributeValueType\"> | CkAttributeMetadata,\n ): boolean {\n return attr.attributeValueType === \"RECORD_ARRAY\";\n }\n\n /**\n * Checks whether the attribute is a geospatial point type.\n */\n private isGeospatialPoint(\n attr: Pick<Attribute, \"attributeValueType\"> | CkAttributeMetadata,\n ): boolean {\n return attr.attributeValueType === \"GEOSPATIAL_POINT\";\n }\n\n /** True when optional scalar/array is \"cleared\" (send null to remove value). */\n private isOptionalEmptyScalarOrArray(\n value: unknown,\n metadata: Attribute,\n ): boolean {\n if (value === \"\" || value == null) return true;\n const t = metadata?.attributeValueType;\n if (this.recognition.isArray(t) && Array.isArray(value) && value.length === 0)\n return true;\n return false;\n }\n\n private isOptionalEmptyBinary(metadata: Attribute, value: unknown): boolean {\n if (!metadata?.isOptional) return false;\n if (value == null) return true;\n if (Array.isArray(value) && value.length === 0) return true;\n if (Array.isArray(value) && value.length === 1 && value[0] instanceof File)\n return false;\n return false;\n }\n\n /**\n * Checks if a RECORD value is empty (empty object or object with all empty values).\n */\n private isValueEmpty(value: unknown): boolean {\n if (!this.isRecordValue(value)) {\n return true;\n }\n\n const keys = Object.keys(value);\n if (keys.length === 0) {\n return true;\n }\n\n // Check if all values are empty\n return keys.every((key) => {\n const val = value[key];\n return (\n val === null ||\n val === undefined ||\n val === \"\" ||\n (this.isRecordValue(val) && Object.keys(val).length === 0) ||\n (Array.isArray(val) && val.length === 0)\n );\n });\n }\n\n // ─── API → Form: parsing initial / default values ──────────────────────────────────\n\n /** Parses raw API value into form-friendly value for a given attribute type. */\n private parseInitialValue(\n type: string,\n value: unknown,\n attrMetadata: CkAttributeMetadata | Attribute,\n ): unknown {\n // If value is null/undefined, return a safe placeholder for the type\n // 1. If no value, provide a safe default (Empty State)\n if (value === undefined || value === null) {\n return this.getDefaultPlaceholder(type);\n }\n\n // 2. Handle RECORD (single attribute group)\n if (this.recognition.isRecord(type)) {\n // OctoMesh typically returns this in the 'attributes' field\n // If value is already an array, return it. If object with attributes field, extract it.\n if (Array.isArray(value)) return value;\n if (this.isRecordValue(value)) {\n const attrs = value[\"attributes\"];\n return Array.isArray(attrs) ? attrs : [];\n }\n return [];\n }\n\n // 3. Handle RECORD_ARRAY (list of attribute groups)\n if (this.recognition.isRecordArray(type)) {\n // Expect an array of records. Map each record to its list of attributes.\n if (Array.isArray(value)) {\n return value.map((item) => {\n if (Array.isArray(item)) return item; // Already parsed\n if (this.isRecordValue(item)) {\n const attrs = item[\"attributes\"];\n return Array.isArray(attrs) ? attrs : [];\n }\n return [];\n });\n }\n return [];\n }\n\n // 4. Handle ENUM (key for displaying names)\n if (this.recognition.isEnum(type)) {\n const options = this.getEnumOptions(attrMetadata);\n const found = options.find(\n (opt) => opt.name === value || opt.key === value,\n );\n return found ? found.key : value;\n }\n\n if (this.recognition.isArray(type)) {\n return this.parseArrayType(type, value);\n }\n\n if (this.recognition.isTime(type)) {\n return this.parseTimeSpanForForm(value);\n }\n if (this.recognition.isDate(type)) {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n value instanceof Date\n ) {\n const date = new Date(value);\n return isNaN(date.getTime()) ? null : date;\n }\n return null;\n }\n\n if (this.recognition.isGeoSpatialPoint(type)) {\n return this.normalizeGeospatialPointForForm(value);\n }\n\n if (type === \"BINARY\") {\n return this.parseBinaryForForm(value);\n }\n if (type === \"BINARY_LINKED\") {\n return this.parseBinaryLinkedForForm(value);\n }\n\n return value;\n }\n\n /**\n * Parses API TimeSpan string (e.g. \"44682.00:00:00\" = days.hh:mm:ss) to a Date for Kendo TimePicker.\n * TimePicker shows time of day; we use totalSeconds % 86400 so duration is shown as time.\n */\n private parseTimeSpanForForm(value: unknown): Date | null {\n if (value == null) return null;\n if (value instanceof Date) return isNaN(value.getTime()) ? null : value;\n if (typeof value === \"number\") {\n const d = new Date(0);\n d.setUTCHours(0, 0, 0, 0);\n d.setUTCSeconds(value % 86400);\n return d;\n }\n const str = String(value).trim();\n if (!str) return null;\n const totalSeconds = this.parseTimeSpanStringToSeconds(str);\n if (totalSeconds === null) return null;\n const d = new Date(0);\n d.setUTCHours(0, 0, 0, 0);\n d.setUTCSeconds(totalSeconds % 86400);\n return d;\n }\n\n /**\n * Parses .NET-style TimeSpan string \"days.hh:mm:ss\" or \"hh:mm:ss\" to total seconds.\n * When a dot is present, the segment before the dot is always days (e.g. \"44682.00:00:00\" = 44682 days).\n */\n private parseTimeSpanStringToSeconds(s: string): number | null {\n const parts = s.split(\".\");\n let timePart = parts[0] ?? \"\";\n let days = 0;\n if (parts.length >= 2) {\n const firstNum = parseInt(parts[0], 10);\n if (!Number.isNaN(firstNum)) {\n days = firstNum;\n }\n timePart = parts[1] ?? \"00:00:00\";\n }\n const timeMatch = timePart.match(\n /^(\\d+):(\\d+):(\\d+)(?:\\.(\\d+))?$/,\n );\n if (!timeMatch) {\n const asNumber = parseFloat(s);\n if (!Number.isNaN(asNumber)) return Math.floor(asNumber);\n return null;\n }\n const hours = parseInt(timeMatch[1], 10) || 0;\n const minutes = parseInt(timeMatch[2], 10) || 0;\n const seconds = parseInt(timeMatch[3], 10) || 0;\n return days * 86400 + hours * 3600 + minutes * 60 + seconds;\n }\n\n /**\n * For edit mode: BINARY value is base64 string; decode to a real File with content and size for kendo-fileselect.\n * Base64 alone does not carry filename metadata, so we use a default name \"file.bin\".\n * Returns File[] because FileSelect expects a collection of File instances (see Kendo model binding).\n */\n private parseBinaryForForm(value: unknown): File[] {\n if (value == null) return [];\n if (value instanceof File) return [value];\n if (Array.isArray(value) && value[0] instanceof File) return value;\n if (typeof value === \"string\") {\n const file = this.base64ToFile(\n value,\n \"file.bin\",\n \"application/octet-stream\",\n );\n if (file) {\n (file as unknown as Record<string, unknown>)[BINARY_REFERENCE_FLAG] =\n true;\n return [file];\n }\n return [];\n }\n return [];\n }\n\n /**\n * For edit mode: BINARY_LINKED value is { contentType, binaryId, filename, size } and optionally base64 content.\n * If content is provided (contentBase64 / data / base64), decode to a real File with name, size and content for kendo-fileselect.\n * Otherwise create a synthetic File with correct name, size and type so the UI can display metadata (reference to existing file).\n * Returns File[] because FileSelect expects a collection of File instances (see Kendo model binding).\n */\n private parseBinaryLinkedForForm(value: unknown): File[] {\n if (!this.isRecordValue(value)) return [];\n if (value instanceof File) return [value];\n const filename =\n (typeof value[\"filename\"] === \"string\"\n ? value[\"filename\"]\n : typeof value[\"fileName\"] === \"string\"\n ? value[\"fileName\"]\n : null) ?? \"document.bin\";\n const contentType =\n (typeof value[\"contentType\"] === \"string\"\n ? value[\"contentType\"]\n : null) ?? \"application/octet-stream\";\n const base64 =\n typeof value[\"contentBase64\"] === \"string\"\n ? value[\"contentBase64\"]\n : typeof value[\"data\"] === \"string\"\n ? value[\"data\"]\n : typeof value[\"base64\"] === \"string\"\n ? value[\"base64\"]\n : null;\n if (base64) {\n const file = this.base64ToFile(base64, filename, contentType);\n if (file) return [file];\n }\n const size =\n typeof value[\"size\"] === \"number\" ? Math.max(0, value[\"size\"]) : 0;\n const blob =\n size > 0\n ? new Blob([new ArrayBuffer(size)], { type: contentType })\n : new Blob([], { type: contentType });\n const file = new File([blob], filename, { type: contentType });\n (file as unknown as Record<string, unknown>)[\n BINARY_LINKED_REFERENCE_FLAG\n ] = true;\n return [file];\n }\n\n private getDefaultPlaceholder(type: string): unknown {\n if (this.recognition.isRecordArray(type)) return [];\n if (this.recognition.isRecord(type)) return []; // Empty attribute array for new record\n if (this.recognition.isArray(type)) return [];\n if (this.recognition.isGeoSpatialPoint(type))\n return { longitude: null, latitude: null };\n if (type === \"BINARY\" || type === \"BINARY_LINKED\") return []; // FileSelect expects File[]\n return null;\n }\n\n /**\n * Parses CK attribute defaultValues[0] into form-friendly shape. Used when no initial value exists.\n */\n private parseDefaultValue(\n type: string,\n rawDefault: unknown,\n attrMetadata: CkAttributeMetadata | Attribute,\n ): unknown {\n if (rawDefault === undefined || rawDefault === null) {\n return this.getDefaultPlaceholder(type);\n }\n if (this.recognition.isEnum(type)) {\n const options = this.getEnumOptions(attrMetadata);\n const key =\n typeof rawDefault === \"number\" ? rawDefault : Number(rawDefault);\n const found = options.find((opt) => opt.key === key);\n return found ? found.key : key;\n }\n if (this.recognition.isNumber(type)) {\n return typeof rawDefault === \"number\" ? rawDefault : Number(rawDefault);\n }\n if (this.recognition.isString(type)) {\n return String(rawDefault);\n }\n if (this.recognition.isBoolean(type)) {\n return rawDefault === true || rawDefault === \"true\" || rawDefault === 1;\n }\n if (this.recognition.isDate(type)) {\n if (\n typeof rawDefault === \"string\" ||\n typeof rawDefault === \"number\" ||\n rawDefault instanceof Date\n ) {\n const date = new Date(rawDefault);\n return isNaN(date.getTime()) ? null : date;\n }\n return null;\n }\n if (this.recognition.isTime(type)) {\n if (typeof rawDefault === \"number\") {\n const d = new Date(0);\n d.setUTCHours(0, 0, 0, 0);\n d.setSeconds(rawDefault);\n return d;\n }\n if (\n typeof rawDefault === \"string\" ||\n typeof rawDefault === \"number\" ||\n rawDefault instanceof Date\n ) {\n const date = new Date(rawDefault);\n return isNaN(date.getTime()) ? null : date;\n }\n return null;\n }\n if (this.recognition.isArray(type)) {\n const arr = Array.isArray(rawDefault) ? rawDefault : [rawDefault];\n if (this.recognition.isStringArray(type)) {\n return arr.map((v) => String(v));\n }\n if (this.recognition.isIntArray(type)) {\n return arr.map((v) => Number(v));\n }\n return arr;\n }\n if (this.recognition.isGeoSpatialPoint(type)) {\n return this.normalizeGeospatialPointForForm(rawDefault);\n }\n return rawDefault;\n }\n\n /** Returns primitive arrays for Kendo MultiSelect (valuePrimitive: true). */\n private parseArrayType(type: string, value: unknown): string[] | number[] {\n if (this.recognition.isStringArray(type)) {\n const source =\n this.isRecordValue(value) && \"_v\" in value ? value[\"_v\"] : value;\n if (!Array.isArray(source)) return [];\n return source.map((v) =>\n this.isRecordValue(v) && \"key\" in v ? String(v[\"key\"]) : String(v),\n );\n }\n if (this.recognition.isIntArray(type)) {\n const source =\n this.isRecordValue(value) && \"_v\" in value ? value[\"_v\"] : value; // Handle _v wrapper format from upstream\n if (!Array.isArray(source)) return [];\n return source.map((v) =>\n this.isRecordValue(v) && \"key\" in v ? Number(v[\"key\"]) : Number(v),\n );\n }\n return [];\n }\n\n private getId(attr: CkAttributeMetadata | Attribute): Attribute[\"id\"] {\n if (!this.isCkAttributeMetadata(attr)) {\n return attr.id;\n }\n if (this.isEnum(attr)) {\n return {\n ckId: attr.attribute?.ckEnum?.ckEnumId?.fullName ?? \"\",\n\n rtId: null,\n };\n } else if (this.isRecord(attr) || this.isRecordArray(attr)) {\n return {\n ckId: attr.attribute?.ckRecord?.ckRecordId?.fullName ?? \"\",\n\n rtId: null,\n };\n } else {\n return {\n ckId: attr.ckAttributeId?.fullName ?? \"\",\n\n rtId: null,\n };\n }\n }\n private getEnumOptions(\n attr: CkAttributeMetadata | Attribute,\n ): AttributeEnumOption[] {\n if (attr?.enumOptions) {\n return attr.enumOptions;\n }\n if (this.isCkAttributeMetadata(attr) && attr.attribute?.ckEnum) {\n return (\n attr.attribute.ckEnum.values?.map((v: AttributeEnumOption | null) => ({\n key: v?.key ?? null,\n name: v?.name ?? null,\n })) ?? []\n );\n }\n return [];\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Observable, catchError, map, of } from 'rxjs';\nimport { GetCkAttributesDetailedDtoGQL } from '../../graphQL/getCkAttributesDetailed';\nimport { GetCkRecordDetailedDtoGQL } from '../../graphQL/getCkRecordDetailed';\nimport { GetRuntimeEntityByIdDtoGQL } from '../../graphQL/getRuntimeEntityById';\nimport { RtEntityValuesResponse } from '../components/attributes-group/attributes-group.component';\nimport { Attribute } from '../models/attribute';\nimport { CkAttributeMetadata } from '../models/attribute-metadata';\nimport { AttributeMapperService } from './attribute-mapper.service';\n\n/**\n * Single responsibility: fetch attribute definitions (CK types/records) and runtime entity values for the repository browser.\n * Used by attributes-group (rxResource), create-editor and update-editor (firstValueFrom for mutations).\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AttributeDataService {\n private mapper = inject(AttributeMapperService);\n private readonly getCkAttributesDetailedGQL = inject(\n GetCkAttributesDetailedDtoGQL,\n );\n private readonly getCkRecordDetailedGQL = inject(GetCkRecordDetailedDtoGQL);\n private readonly getRtEntityAttributesGQL = inject(\n GetRuntimeEntityByIdDtoGQL,\n );\n\n /** Observable of attribute list for a CK type or record. Sorted: required first, optional last. */\n getAttributesDefinition$(\n ckTypeId: string,\n isRecord = false,\n ): Observable<Attribute[]> {\n if (!ckTypeId) return of([]);\n\n const stream$ = isRecord\n ? this.fetchCkRecordAttributes(ckTypeId)\n : this.fetchCkAttributes(ckTypeId);\n\n return stream$.pipe(\n map((items) =>\n this.sortAttributesByOptional(\n items.map((meta) => this.mapper.mapToFormAttribute(meta, undefined)),\n ),\n ),\n catchError((err) => {\n console.error('Service error:', err);\n return of([]);\n }),\n );\n }\n\n /** Observable of initial attribute values for an existing entity (edit mode). */\n getRtEntityValues$(\n rtId: string,\n ckTypeId: string,\n ): Observable<RtEntityValuesResponse> {\n if (!rtId || !ckTypeId) {\n return of({ initial: [] });\n }\n\n return this.fetchRtEntityAttributes(rtId, ckTypeId).pipe(\n map((attributes) => ({\n initial: attributes,\n })),\n );\n }\n\n private sortAttributesByOptional(attributes: Attribute[]): Attribute[] {\n return [...attributes].sort((a, b) => {\n if (a.isOptional === b.isOptional) return 0;\n return a.isOptional ? 1 : -1;\n });\n }\n\n private fetchCkAttributes(\n ckTypeId: string,\n ): Observable<CkAttributeMetadata[]> {\n return this.getCkAttributesDetailedGQL\n .fetch({ variables: { ckId: ckTypeId } })\n .pipe(\n map(\n (res) =>\n (\n res.data?.constructionKit?.types?.items?.[0]?.attributes?.items ??\n []\n ).filter(\n (item): item is NonNullable<typeof item> => item != null,\n ) as CkAttributeMetadata[],\n ),\n );\n }\n\n private fetchCkRecordAttributes(\n ckRecordId: string,\n ): Observable<CkAttributeMetadata[]> {\n return this.getCkRecordDetailedGQL\n .fetch({ variables: { ckId: ckRecordId } })\n .pipe(\n map(\n (res) =>\n (\n res.data?.constructionKit?.records?.items?.[0]?.attributes\n ?.items ?? []\n ).filter(\n (item): item is NonNullable<typeof item> => item != null,\n ) as CkAttributeMetadata[],\n ),\n );\n }\n\n /** Fetches runtime entity attribute items by rtId and ckTypeId; returns empty array when absent. */\n private fetchRtEntityAttributes(\n rtId: string,\n ckTypeId: string,\n ): Observable<RtEntityValuesResponse['initial']> {\n return this.getRtEntityAttributesGQL\n .fetch({ variables: { rtId: rtId, ckTypeId: ckTypeId } })\n .pipe(\n map((res) => {\n const items =\n res.data?.runtime?.runtimeEntities?.items?.[0]?.attributes?.items ??\n [];\n return items\n .filter(\n (\n item,\n ): item is {\n attributeName?: string | null;\n value?: unknown | null;\n } => !!item?.attributeName,\n )\n .map((item) => ({\n attributeName: item.attributeName ?? '',\n value: item.value ?? null,\n }));\n }),\n );\n }\n}\n","import { Component, input, output } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { AbstractControl, ReactiveFormsModule } from \"@angular/forms\";\nimport { KENDO_LABEL } from \"@progress/kendo-angular-label\";\nimport { KENDO_BUTTONS } from \"@progress/kendo-angular-buttons\";\nimport { arrowRotateCcwIcon, SVGIcon } from \"@progress/kendo-svg-icons\";\nimport { Attribute } from \"../../models/attribute\";\n\n/**\n * Wraps a single form control with label, optional UNDO button, and error message.\n * Used by attributes-group for every scalar/geo/binary field. Baseline value for UNDO comes from parent.\n */\n@Component({\n selector: \"mm-attribute-field\",\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, KENDO_LABEL, KENDO_BUTTONS],\n template: `\n <div class=\"k-form-field\">\n <kendo-label\n [for]=\"fieldId()\"\n [text]=\"overrideLabelText() || attribute().attributeName\"\n [optional]=\"attribute().isOptional\"\n ></kendo-label>\n\n <div class=\"k-form-field-wrap\">\n <div class=\"field-input-container\">\n <div class=\"input-wrapper\">\n <ng-content></ng-content>\n </div>\n\n @if (showUndoButton()) {\n <button\n kendoButton\n [size]=\"undoButtonSize()\"\n [svgIcon]=\"undoIcon\"\n (click)=\"handleUndo()\"\n type=\"button\"\n class=\"undo-button\"\n ></button>\n }\n </div>\n\n @if (hasHint()) {\n <div class=\"k-form-hint\">{{ hintText() }}</div>\n }\n\n @if (hasError()) {\n <div class=\"k-form-error\">{{ errorMessage() }}</div>\n }\n </div>\n </div>\n `,\n styleUrls: [\"./attribute-field.component.scss\"],\n})\nexport class AttributeFieldComponent {\n // ─── Required inputs (from parent attributes-group) ───────────────────────────────\n attribute = input.required<Attribute>();\n control = input.required<AbstractControl>();\n\n // ─── Optional inputs (display & behaviour) ──────────────────────────────────────────\n /** Value to restore on UNDO. If not set, UNDO resets to null. */\n baselineValue = input<unknown>();\n fieldId = input<string>(\"\");\n overrideLabelText = input<string>();\n showUndoButton = input(true);\n undoButtonSize = input<\"small\" | \"medium\" | \"large\">(\"medium\");\n errorMessage = input<string>(\"This field is required or invalid.\");\n hintText = input<string>();\n\n undo = output<void>();\n protected readonly undoIcon: SVGIcon = arrowRotateCcwIcon;\n\n // ─── Template helpers (null-safe for control) ──────────────────────────────────────\n hasError(): boolean {\n const ctrl = this.control();\n if (ctrl == null) return false;\n return ctrl.invalid && (ctrl.dirty || ctrl.touched);\n }\n\n handleUndo(): void {\n const ctrl = this.control();\n if (ctrl == null) return;\n const baseline = this.baselineValue();\n ctrl.reset(baseline !== undefined ? baseline : null);\n this.undo.emit();\n }\n\n hasHint(): boolean {\n return this.hintText() != null && this.hintText() !== \"\";\n }\n}\n","import {\n Component,\n inject,\n forwardRef,\n computed,\n input,\n effect,\n} from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport {\n FormArray,\n FormGroup,\n ReactiveFormsModule,\n AbstractControl,\n FormControl,\n Validators,\n} from \"@angular/forms\";\nimport { AttributeFieldComponent } from \"../attribute-field/attribute-field.component\";\nimport { rxResource } from \"@angular/core/rxjs-interop\";\nimport { finalize } from \"rxjs\";\nimport { Attribute } from \"../../models/attribute\";\nimport { AttributeDataService } from \"../../services/attribute-data.service\";\nimport { AttributeCoordinatorService } from \"../../services/attribute-coordinator.service\";\nimport { AttributeRecognitionService } from \"../../services/attribute-recognition.service\";\nimport { KENDO_LAYOUT, SelectEvent } from \"@progress/kendo-angular-layout\";\nimport { KENDO_DATEINPUTS } from \"@progress/kendo-angular-dateinputs\";\nimport { KENDO_BUTTONS } from \"@progress/kendo-angular-buttons\";\nimport { KENDO_INPUTS } from \"@progress/kendo-angular-inputs\";\nimport { KENDO_LABEL } from \"@progress/kendo-angular-label\";\nimport { KENDO_DROPDOWNS } from \"@progress/kendo-angular-dropdowns\";\nimport { KENDO_UPLOADS } from \"@progress/kendo-angular-upload\";\nimport {\n BINARY_LINKED_REFERENCE_FLAG,\n BINARY_REFERENCE_FLAG,\n AttributeMapperService,\n} from \"../../services/attribute-mapper.service\";\n\n/**\n * Attributes group: dynamic form for a CK type or record.\n * Loads definitions via rxResource, syncs initial values in an effect, supports RECORD/RECORD_ARRAY/scalars/geo/binary.\n */\n@Component({\n selector: \"mm-attributes-group\",\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n KENDO_LAYOUT,\n KENDO_INPUTS,\n KENDO_LABEL,\n KENDO_BUTTONS,\n KENDO_DROPDOWNS,\n KENDO_DATEINPUTS,\n KENDO_UPLOADS,\n AttributeFieldComponent,\n forwardRef(() => AttributesGroupComponent),\n ],\n template: `\n <div class=\"attributes-form-container\" [formGroup]=\"parentFormGroup()\">\n <kendo-card [style.margin-bottom.px]=\"10\">\n <kendo-card-header>\n <div class=\"header-title\">\n <strong>{{ isRecord() ? 'Record' : 'Attributes' }}:</strong>\n {{ ckId() }}\n </div>\n </kendo-card-header>\n\n <kendo-card-body>\n @if (attributesResource.isLoading()) {\n <div class=\"k-i-loading\"></div>\n }\n\n @for (attr of attributes(); track attr.attributeName) {\n @if (recognition.isRecordArray(attr.attributeValueType)) {\n <kendo-expansionpanel>\n <ng-template kendoExpansionPanelTitleDirective>\n <div class=\"header-content\">\n <kendo-label\n [text]=\"attr.attributeName\"\n [optional]=\"attr.isOptional\"\n ></kendo-label>\n </div>\n </ng-template>\n\n <div class=\"record-array-content\">\n @if (attr.isOptional) {\n <div class=\"record-actions-info\">\n <p class=\"record-actions-description\">\n Add records to this array. Remove to delete the selected\n record. Empty arrays are not saved.\n </p>\n </div>\n }\n\n <kendo-tabstrip\n (tabSelect)=\"onTabSelect($event, attr.attributeName)\"\n >\n @for (item of getArrayControls(attr); track $index) {\n <kendo-tabstrip-tab\n [title]=\"attr.attributeName + ' ' + ($index + 1)\"\n [selected]=\"\n $index === getSelectedIndex(attr.attributeName)\n \"\n >\n <ng-template kendoTabContent>\n <div\n class=\"tab-content-wrapper\"\n style=\"padding-top: 10px;\"\n >\n <mm-attributes-group\n [ckId]=\"attr.id.ckId\"\n [isRecord]=\"true\"\n [parentFormGroup]=\"asFormGroup(item)\"\n [initialValues]=\"getRawInitialValue(attr.attributeName, $index)\"\n />\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n }\n </kendo-tabstrip>\n\n <div\n class=\"record-array-actions\"\n style=\"margin-top: 10px; display: flex; gap: 8px;\"\n >\n <button kendoButton size=\"small\" (click)=\"addRecord(attr)\">\n Add\n </button>\n <button\n kendoButton\n size=\"small\"\n themeColor=\"error\"\n fillMode=\"flat\"\n [disabled]=\"!canRemoveRecord(attr)\"\n (click)=\"removeRecord(attr)\"\n >\n Remove\n </button>\n </div>\n </div>\n </kendo-expansionpanel>\n } @else if (recognition.isRecord(attr.attributeValueType)) {\n <kendo-expansionpanel>\n <ng-template kendoExpansionPanelTitleDirective>\n <div class=\"header-content\">\n <kendo-label\n [text]=\"attr.attributeName\"\n [optional]=\"attr.isOptional\"\n ></kendo-label>\n </div>\n </ng-template>\n\n @if (attr.isOptional) {\n <div class=\"record-actions-info\">\n <p class=\"record-actions-description\">\n Load attributes to edit this optional record. Unload to\n remove all data and clear validation.\n </p>\n </div>\n }\n\n @if ((!attr.isOptional || isRecordLoaded(attr.attributeName)) && parentFormGroup().contains(attr.attributeName)) {\n <div style=\"margin-bottom: 10px;\">\n <mm-attributes-group\n [ckId]=\"attr.id.ckId\"\n [isRecord]=\"true\"\n [parentFormGroup]=\"\n asFormGroup(parentFormGroup().get(attr.attributeName)!)\n \"\n [initialValues]=\"getRawInitialValue(attr.attributeName)\"\n />\n </div>\n }\n\n @if (attr.isOptional) {\n <div class=\"record-actions\" style=\"display: flex; gap: 8px;\">\n <button\n kendoButton\n size=\"small\"\n [disabled]=\"isRecordLoaded(attr.attributeName)\"\n (click)=\"loadRecord(attr)\"\n >\n Load\n </button>\n <button\n kendoButton\n size=\"small\"\n themeColor=\"error\"\n fillMode=\"flat\"\n [disabled]=\"!isRecordLoaded(attr.attributeName)\"\n (click)=\"unloadRecord(attr)\"\n >\n Unload\n </button>\n </div>\n }\n </kendo-expansionpanel>\n } @else if (\n recognition.isGeoSpatialPoint(attr.attributeValueType)\n ) {\n <kendo-expansionpanel [expanded]=\"true\">\n <ng-template kendoExpansionPanelTitleDirective>\n <div class=\"header-content\">\n <kendo-label\n [text]=\"attr.attributeName\"\n [optional]=\"attr.isOptional\"\n ></kendo-label>\n </div>\n </ng-template>\n\n @if (parentFormGroup().contains(attr.attributeName)) {\n <div\n [formGroupName]=\"attr.attributeName\"\n class=\"geospatial-grid\"\n >\n <mm-attribute-field\n [hintText]=\"'The longitude of the point on the Earth surface (-180 to 180 degrees).'\"\n [attribute]=\"attr\"\n [overrideLabelText]=\"'Longitude (X)'\"\n [control]=\"\n parentFormGroup().get(attr.attributeName + '.longitude')!\n \"\n [baselineValue]=\"getBaselineValue(attr.attributeName + '.longitude')\"\n [fieldId]=\"attr.attributeName + '_lon'\"\n >\n <kendo-numerictextbox\n [focusableId]=\"attr.attributeName + '_lon'\"\n formControlName=\"longitude\"\n [format]=\"'n6'\"\n [step]=\"0.000001\"\n [min]=\"-180\"\n [max]=\"180\"\n ></kendo-numerictextbox>\n </mm-attribute-field>\n\n <mm-attribute-field\n [hintText]=\"'The latitude of the point on the Earth surface (-90 to 90 degrees).'\"\n [attribute]=\"attr\"\n [overrideLabelText]=\"'Latitude (Y)'\"\n [control]=\"\n parentFormGroup().get(attr.attributeName + '.latitude')!\n \"\n [baselineValue]=\"getBaselineValue(attr.attributeName + '.latitude')\"\n [fieldId]=\"attr.attributeName + '_lat'\"\n >\n <kendo-numerictextbox\n [focusableId]=\"attr.attributeName + '_lat'\"\n formControlName=\"latitude\"\n [format]=\"'n6'\"\n [step]=\"0.000001\"\n [min]=\"-90\"\n [max]=\"90\"\n ></kendo-numerictextbox>\n </mm-attribute-field>\n </div>\n }\n </kendo-expansionpanel>\n } @else if (parentFormGroup().contains(attr.attributeName)) {\n <mm-attribute-field\n [attribute]=\"attr\"\n [control]=\"parentFormGroup().get(attr.attributeName)!\"\n [baselineValue]=\"getBaselineValue(attr.attributeName)\"\n [fieldId]=\"attr.attributeName\"\n >\n @if (recognition.isNumber(attr.attributeValueType)) {\n <kendo-numerictextbox\n [focusableId]=\"attr.attributeName\"\n [formControlName]=\"attr.attributeName\"\n />\n } @else if (recognition.isDate(attr.attributeValueType)) {\n <kendo-datetimepicker\n [focusableId]=\"attr.attributeName\"\n [formControlName]=\"attr.attributeName\"\n />\n } @else if (recognition.isTime(attr.attributeValueType)) {\n <kendo-timepicker\n [focusableId]=\"attr.attributeName\"\n [formControlName]=\"attr.attributeName\"\n />\n } @else if (recognition.isBoolean(attr.attributeValueType)) {\n <kendo-switch\n [attr.id]=\"attr.attributeName\"\n [formControlName]=\"attr.attributeName\"\n />\n } @else if (attr.attributeValueType === \"BINARY\") {\n <div class=\"binary-linked-wrap\">\n <kendo-fileselect\n [multiple]=\"false\"\n [focusableId]=\"attr.attributeName\"\n [formControlName]=\"attr.attributeName\"\n [restrictions]=\"binaryRestrictions\"\n />\n @if (isBinaryReferenceFile(attr.attributeName)) {\n <span class=\"binary-linked-reference-hint\" [title]=\"binaryReferenceTooltip\">\n {{ binaryReferenceLabel }}\n </span>\n }\n </div>\n } @else if (attr.attributeValueType === \"BINARY_LINKED\") {\n <div class=\"binary-linked-wrap\">\n <kendo-fileselect\n [multiple]=\"false\"\n [focusableId]=\"attr.attributeName\"\n [formControlName]=\"attr.attributeName\"\n />\n @if (isReferencePreviewFile(attr.attributeName)) {\n <span class=\"binary-linked-reference-hint\" [title]=\"referencePreviewTooltip\">\n {{ referencePreviewLabel }}\n </span>\n }\n </div>\n } @else if (recognition.isEnum(attr.attributeValueType)) {\n <kendo-dropdownlist\n [attr.id]=\"attr.attributeName\"\n [formControlName]=\"attr.attributeName\"\n [data]=\"attr.enumOptions || []\"\n textField=\"name\"\n valueField=\"key\"\n [valuePrimitive]=\"true\"\n />\n } @else if (recognition.isArray(attr.attributeValueType)) {\n <kendo-multiselect\n [attr.id]=\"attr.attributeName\"\n [formControlName]=\"attr.attributeName\"\n [data]=\"getArrayDisplayData(attr.attributeName)\"\n [allowCustom]=\"true\"\n textField=\"name\"\n valueField=\"key\"\n [valuePrimitive]=\"true\"\n />\n } @else {\n <kendo-textbox\n [focusableId]=\"attr.attributeName\"\n [formControlName]=\"attr.attributeName\"\n />\n }\n </mm-attribute-field>\n }\n }\n </kendo-card-body>\n </kendo-card>\n </div>\n `,\n styleUrls: [\"./attributes-group.component.scss\"],\n})\n/**\n * Renders a dynamic form group for a CK type or record: loads attribute definitions,\n * syncs initial/entity values into the form, and supports RECORD (Load/Unload),\n * RECORD_ARRAY (Add/Remove), scalars, geo, binary. Used recursively for nested records.\n */\nexport class AttributesGroupComponent {\n // ─── Injected services ───────────────────────────────────────────────────────────\n private coordinator = inject(AttributeCoordinatorService);\n private dataService = inject(AttributeDataService);\n protected recognition = inject(AttributeRecognitionService);\n private mapper = inject(AttributeMapperService);\n private isRecordValue(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n }\n\n // ─── Inputs (public API for parent / template) ─────────────────────────────────────\n ckId = input.required<string>();\n parentFormGroup = input.required<FormGroup>();\n isRecord = input<boolean>(false);\n initialValues = input<RawInitialValue[]>();\n\n // ─── Derived state & resource ────────────────────────────────────────────────────\n protected attributes = computed(() => this.attributesResource.value() ?? []);\n private selectedIndices = new Map<string, number>();\n private loadedRecords = new Map<string, boolean>();\n private baselineValues = new Map<string, unknown>();\n protected readonly binaryRestrictions = { maxFileSize: 16 * 1024 * 1024 };\n\n /** Label and tooltip for BINARY when value was restored from base64 (content is real; file name is a placeholder). */\n protected readonly binaryReferenceLabel =\n \"Preview (restored from stored data)\";\n protected readonly binaryReferenceTooltip =\n \"Content and size are from stored data. File name is a placeholder because the original name is not stored.\";\n\n /** Label and tooltip for BINARY_LINKED when value is a reference/mockup (no content, metadata only). */\n protected readonly referencePreviewLabel = \"Preview (reference file)\";\n protected readonly referencePreviewTooltip =\n \"Shows metadata of an existing file in the system; content is not loaded. Replace with a file to change.\";\n\n /** True when the control value is a BINARY file restored from base64 (reference: real content, placeholder name). */\n protected isBinaryReferenceFile(attrName: string): boolean {\n const control = this.parentFormGroup()?.get(attrName);\n const value = control?.value;\n if (!Array.isArray(value) || value.length !== 1 || !(value[0] instanceof File))\n return false;\n return (\n (value[0] as unknown as Record<string, unknown>)[\n BINARY_REFERENCE_FLAG\n ] === true\n );\n }\n\n /** True when the control value is a synthetic BINARY_LINKED file (reference preview without content). */\n protected isReferencePreviewFile(attrName: string): boolean {\n const control = this.parentFormGroup()?.get(attrName);\n const value = control?.value;\n if (!Array.isArray(value) || value.length !== 1 || !(value[0] instanceof File))\n return false;\n return (\n (value[0] as unknown as Record<string, unknown>)[\n BINARY_LINKED_REFERENCE_FLAG\n ] === true\n );\n }\n\n protected attributesResource = rxResource({\n params: () => ({ id: this.ckId(), isRec: this.isRecord() }),\n stream: ({ params }) => {\n this.coordinator.startLoading();\n return this.dataService\n .getAttributesDefinition$(params.id, params.isRec)\n .pipe(finalize(() => this.coordinator.stopLoading()));\n },\n });\n\n // ─── Form sync: effect builds/patches controls from attributes + initial values ────\n constructor() {\n effect(() => {\n const attrs = this.attributes();\n const form = this.parentFormGroup();\n // Use stable empty to avoid new [] reference on every run (prevents infinite detection loop)\n const rawInitial = this.initialValues() ?? EMPTY_INITIAL_VALUES;\n\n if (attrs.length > 0) {\n attrs.forEach((attrMetadata) => {\n const rawValue = rawInitial.find(\n (val) => val.attributeName === attrMetadata.attributeName,\n )?.value;\n\n // Use parsed initial when entity data exists; otherwise use attribute.value from resource (already has Default or Empty from mapper)\n const hasInitialFromEntity = rawValue !== undefined && rawValue !== null;\n const finalValue = hasInitialFromEntity\n ? this.mapper.getFormValueFromRawInitial(attrMetadata, rawValue)\n : attrMetadata.value;\n\n if (!form.contains(attrMetadata.attributeName)) {\n this.initializeControl(form, attrMetadata, finalValue);\n } else {\n const control = form.get(attrMetadata.attributeName);\n if (control) {\n const isInitialEmpty =\n rawInitial === EMPTY_INITIAL_VALUES ||\n this.isDefaultEmptyValue(finalValue, attrMetadata.attributeValueType);\n const hasUserData = !this.isControlValueEmpty(\n control,\n attrMetadata.attributeValueType,\n );\n if (isInitialEmpty && hasUserData) {\n return;\n }\n // Only patch from initialValues when control has not been edited (preserves tab state when switching RECORD_ARRAY tabs)\n if (control.pristine && !control.touched) {\n const current = control.value;\n const changed =\n JSON.stringify(current) !== JSON.stringify(finalValue);\n if (changed) {\n control.patchValue(finalValue, { emitEvent: false });\n this.setBaselineForAttr(attrMetadata, finalValue);\n }\n }\n }\n }\n });\n\n this.coordinator.markStructureAsReady();\n }\n });\n }\n\n // ─── Form structure: create control per attribute type, set baseline for UNDO ───────\n private initializeControl(\n form: FormGroup,\n attr: Attribute,\n initialValue: unknown,\n ) {\n let control: AbstractControl;\n\n if (this.recognition.isRecordArray(attr.attributeValueType)) {\n const initialArray = Array.isArray(initialValue) ? initialValue : [];\n const formArray = new FormArray<FormGroup>(\n [],\n attr.isOptional ? [] : [Validators.required],\n );\n\n // For each \"record\" in the array create a form group\n initialArray.forEach(() => {\n formArray.push(new FormGroup({}));\n });\n control = formArray;\n } else if (this.recognition.isRecord(attr.attributeValueType)) {\n control = new FormGroup({}, attr.isOptional ? [] : [Validators.required]);\n } else if (this.recognition.isGeoSpatialPoint(attr.attributeValueType)) {\n const longitudeValidators = [Validators.min(-180), Validators.max(180)];\n const latitudeValidators = [Validators.min(-90), Validators.max(90)];\n if (!attr.isOptional) {\n longitudeValidators.unshift(Validators.required);\n latitudeValidators.unshift(Validators.required);\n }\n const geoValue = this.isRecordValue(initialValue) ? initialValue : {};\n const geoGroup = new FormGroup({\n longitude: new FormControl(\n geoValue[\"longitude\"] ?? null,\n longitudeValidators,\n ),\n latitude: new FormControl(\n geoValue[\"latitude\"] ?? null,\n latitudeValidators,\n ),\n });\n form.addControl(attr.attributeName, geoGroup);\n this.setBaselineForAttr(attr, initialValue);\n return;\n } else {\n // Plain text/numeric/etc. field\n control = new FormControl(\n initialValue,\n attr.isOptional ? [] : [Validators.required],\n );\n }\n\n form.addControl(attr.attributeName, control);\n this.setBaselineForAttr(attr, initialValue);\n\n if (!(control instanceof FormArray || control instanceof FormGroup)) {\n control.patchValue(initialValue, { emitEvent: false });\n }\n }\n\n private setBaselineForAttr(attr: Attribute, value: unknown): void {\n const key = attr.attributeName;\n if (this.recognition.isGeoSpatialPoint(attr.attributeValueType)) {\n const v = this.isRecordValue(value) ? value : {};\n this.baselineValues.set(\n key + \".longitude\",\n this.cloneForBaseline(v[\"longitude\"] ?? null),\n );\n this.baselineValues.set(\n key + \".latitude\",\n this.cloneForBaseline(v[\"latitude\"] ?? null),\n );\n } else if (\n !this.recognition.isRecord(attr.attributeValueType) &&\n !this.recognition.isRecordArray(attr.attributeValueType)\n ) {\n this.baselineValues.set(key, this.cloneForBaseline(value));\n }\n }\n\n private cloneForBaseline(v: unknown): unknown {\n if (v === null || v === undefined) return v;\n if (v instanceof Date) return new Date(v.getTime());\n if (typeof v === \"object\" && v instanceof File) return v;\n if (Array.isArray(v)) return v.map((x) => this.cloneForBaseline(x));\n if (this.isRecordValue(v)) {\n const out: Record<string, unknown> = {};\n for (const k of Object.keys(v))\n out[k] = this.cloneForBaseline(v[k]);\n return out;\n }\n return v;\n }\n\n getBaselineValue(controlKey: string): unknown {\n return this.baselineValues.has(controlKey)\n ? this.baselineValues.get(controlKey)\n : undefined;\n }\n\n asFormGroup(control: AbstractControl): FormGroup {\n return control as FormGroup;\n }\n\n // ─── Value / empty checks (for effect: when to patch vs skip) ──────────────────────\n private isDefaultEmptyValue(value: unknown, type: string): boolean {\n if (value === null || value === undefined) return true;\n if (this.recognition.isRecordArray(type) || this.recognition.isRecord(type))\n return Array.isArray(value)\n ? value.length === 0\n : !this.isRecordValue(value) || Object.keys(value).length === 0;\n if (this.recognition.isGeoSpatialPoint(type)) {\n const v = this.isRecordValue(value) ? value : {};\n return v[\"longitude\"] == null && v[\"latitude\"] == null;\n }\n if (this.recognition.isArray(type)) return Array.isArray(value) && value.length === 0;\n return false;\n }\n\n private isControlValueEmpty(control: AbstractControl, type: string): boolean {\n const value = control.value;\n if (value === null || value === undefined || value === \"\") return true;\n if (this.recognition.isRecordArray(type) || this.recognition.isRecord(type)) {\n if (Array.isArray(value)) return value.length === 0;\n const obj = value && typeof value === \"object\" ? value : {};\n return Object.keys(obj).length === 0;\n }\n if (this.recognition.isGeoSpatialPoint(type)) {\n const v = value as { longitude?: number | null; latitude?: number | null };\n return v?.longitude == null && v?.latitude == null;\n }\n if (this.recognition.isArray(type))\n return !Array.isArray(value) || value.length === 0;\n return false;\n }\n\n // ─── RECORD (single optional group): Load / Unload ─────────────────────────────────\n isRecordLoaded(name: string): boolean {\n // Respect explicit user choice (Load/Unload): once set, don't override from initial data\n if (this.loadedRecords.has(name)) {\n return this.loadedRecords.get(name)!;\n }\n // Auto-load if initial value is present (record is filled)\n const initial = this.getRawInitialValue(name);\n if (initial && Array.isArray(initial) && initial.length > 0) {\n this.loadedRecords.set(name, true);\n return true;\n }\n return false;\n }\n\n loadRecord(attr: Attribute): void {\n if (!attr.isOptional || this.isRecordLoaded(attr.attributeName)) return;\n if (!this.parentFormGroup().contains(attr.attributeName)) {\n this.parentFormGroup().addControl(attr.attributeName, new FormGroup({}));\n }\n this.loadedRecords.set(attr.attributeName, true);\n }\n\n unloadRecord(attr: Attribute): void {\n if (!this.isRecordLoaded(attr.attributeName)) return;\n\n const group = this.parentFormGroup().get(attr.attributeName) as FormGroup;\n if (group) {\n Object.keys(group.controls).forEach((key) => group.removeControl(key));\n group.reset();\n }\n\n this.loadedRecords.set(attr.attributeName, false);\n }\n\n // ─── RECORD_ARRAY: tabs, Add / Remove, selected index ─────────────────────────────\n getArrayControls(attr: Attribute): FormGroup[] {\n const control = this.parentFormGroup().get(attr.attributeName);\n return control instanceof FormArray\n ? (control.controls as FormGroup[])\n : [];\n }\n\n getSelectedIndex(name: string): number {\n return this.selectedIndices.get(name) ?? 0;\n }\n\n setSelectedIndex(name: string, index: number): void {\n this.selectedIndices.set(name, index);\n }\n\n onTabSelect(event: SelectEvent, name: string): void {\n this.setSelectedIndex(name, event.index);\n }\n\n /** Builds display data for Kendo MultiSelect when value is primitive[] (valuePrimitive: true). */\n getArrayDisplayData(attributeName: string): { name: string; key: string | number }[] {\n const value = this.parentFormGroup().get(attributeName)?.value;\n if (!Array.isArray(value)) return [];\n return value.map((v: string | number) => ({\n name: String(v),\n key: v,\n }));\n }\n\n addRecord(attr: Attribute): void {\n let array = this.parentFormGroup().get(attr.attributeName) as FormArray;\n if (!array) {\n array = new FormArray<FormGroup>(\n [],\n attr.isOptional ? [] : [Validators.required],\n );\n this.parentFormGroup().addControl(attr.attributeName, array);\n }\n array.push(new FormGroup({}));\n this.setSelectedIndex(attr.attributeName, array.length - 1);\n }\n\n canRemoveRecord(attr: Attribute): boolean {\n const array = this.parentFormGroup().get(attr.attributeName) as FormArray;\n if (!array || array.length === 0) return false;\n const index = this.getSelectedIndex(attr.attributeName);\n return index >= 0 && index < array.length;\n }\n\n removeRecord(attr: Attribute): void {\n if (!this.canRemoveRecord(attr)) return;\n\n const array = this.parentFormGroup().get(attr.attributeName) as FormArray;\n let index = this.getSelectedIndex(attr.attributeName);\n\n array.removeAt(index);\n\n if (array.length === 0) {\n index = 0;\n } else if (index >= array.length) {\n index = array.length - 1;\n }\n this.setSelectedIndex(attr.attributeName, index);\n }\n\n // ─── Initial values for nested RECORD / RECORD_ARRAY (stable empty to avoid loops) ─\n getRawInitialValue(attributeName: string, index?: number): RawInitialValue[] {\n const source = this.initialValues() ?? EMPTY_INITIAL_VALUES;\n const raw = source.find((val) => val.attributeName === attributeName)?.value;\n if (index !== undefined && Array.isArray(raw)) {\n const item = raw[index]?.attributes ?? EMPTY_INITIAL_VALUES;\n return Array.isArray(item) ? item : EMPTY_INITIAL_VALUES;\n }\n if (this.isRecordValue(raw) && Array.isArray(raw[\"attributes\"])) {\n return raw[\"attributes\"];\n }\n if (raw !== undefined && raw !== null && Array.isArray(raw)) {\n return raw;\n }\n return EMPTY_INITIAL_VALUES;\n }\n}\n\n// ─── Exported types (used by attribute-data-service and parent components) ───────────\nexport interface RawInitialValue {\n attributeName: string;\n value: unknown;\n __typename?: string;\n}\n\n/** Stable empty array to avoid new [] references that would retrigger effects (infinite loop). */\nconst EMPTY_INITIAL_VALUES: RawInitialValue[] = [];\n\nexport interface RtEntityValuesResponse {\n initial: RawInitialValue[];\n}\n","import { inject, Injectable } from \"@angular/core\";\nimport { RtEntityInputDto, RtEntityUpdateDto } from \"@meshmakers/octo-services\";\nimport { NotificationService } from \"@progress/kendo-angular-notification\";\n\n/**\n * Shared utilities for create and update entity editors: mutation options (including multipart for binary uploads)\n * and error notifications. Injected by both CreateEditorComponent and UpdateEditorComponent.\n */\n@Injectable({\n providedIn: \"root\",\n})\nexport class SharedEditor {\n private readonly notificationService = inject(NotificationService);\n\n /**\n * Builds Apollo mutation options for createEntities: variables and optional multipart context when attributes contain File(s).\n */\n public prepareMutationOptions(entityInput: RtEntityInputDto): {\n variables: { entities: RtEntityInputDto[] };\n context?: { useMultipart: true };\n } {\n const mutationOptions: {\n variables: { entities: RtEntityInputDto[] };\n context?: { useMultipart: true };\n } = {\n variables: { entities: [entityInput] },\n };\n\n // Use multipart for binary file uploads (BINARY_LINKED or BINARY)\n const hasBinaryFiles =\n entityInput.attributes?.some((attr) => {\n // BINARY_LINKED: File, BINARY: File or File[]\n if (attr?.value instanceof File) return true;\n if (Array.isArray(attr?.value) && attr?.value[0] instanceof File)\n return true;\n return false;\n }) ?? false;\n if (hasBinaryFiles) {\n mutationOptions.context = { useMultipart: true };\n }\n\n return mutationOptions;\n }\n\n /**\n * Builds Apollo mutation options for updateRuntimeEntities: variables and optional multipart context when attributes contain File(s).\n */\n public prepareUpdateMutationOptions(entities: RtEntityUpdateDto[]): {\n variables: { entities: RtEntityUpdateDto[] };\n context?: { useMultipart: true };\n } {\n const mutationOptions: {\n variables: { entities: RtEntityUpdateDto[] };\n context?: { useMultipart: true };\n } = {\n variables: { entities },\n };\n\n const hasBinaryFiles =\n entities?.some((e) =>\n e?.item?.attributes?.some((attr) => {\n if (attr?.value instanceof File) return true;\n if (Array.isArray(attr?.value) && attr?.value[0] instanceof File)\n return true;\n return false;\n }),\n ) ?? false;\n\n if (hasBinaryFiles) {\n mutationOptions.context = { useMultipart: true };\n }\n\n return mutationOptions;\n }\n\n /**\n * Shows an error notification to the user.\n */\n public showErrorNotification(message: string): void {\n this.notificationService.show({\n content: message,\n hideAfter: 3000,\n position: { horizontal: \"right\", vertical: \"top\" },\n animation: { type: \"fade\", duration: 400 },\n type: { style: \"error\", icon: true },\n });\n }\n}\n","import {\n Component,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n} from \"@angular/core\";\nimport { toObservable, toSignal } from \"@angular/core/rxjs-interop\";\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from \"@angular/forms\";\nimport {\n AssociationModOptionsDto,\n RtEntityInputDto,\n} from \"@meshmakers/octo-services\";\nimport { KENDO_BUTTONS } from \"@progress/kendo-angular-buttons\";\nimport { KENDO_DATEINPUTS } from \"@progress/kendo-angular-dateinputs\";\nimport { KENDO_DROPDOWNS } from \"@progress/kendo-angular-dropdowns\";\nimport { KENDO_INPUTS } from \"@progress/kendo-angular-inputs\";\nimport { KENDO_LABEL } from \"@progress/kendo-angular-label\";\nimport { CardModule } from \"@progress/kendo-angular-layout\";\nimport { firstValueFrom, of, startWith, switchMap } from \"rxjs\";\nimport { CreateEntitiesDtoGQL } from \"../../../graphQL/createEntities\";\nimport { CkTypeDto } from \"../../../graphQL/globalTypes\";\nimport { Attribute } from \"../../models/attribute\";\nimport {\n DEFAULT_RUNTIME_BROWSER_MESSAGES,\n RuntimeBrowserMessages,\n} from \"../../runtime-browser.model\";\nimport { AttributeCoordinatorService } from \"../../services/attribute-coordinator.service\";\nimport { AttributeDataService } from \"../../services/attribute-data.service\";\nimport { AttributeMapperService } from \"../../services/attribute-mapper.service\";\nimport { AttributesGroupComponent } from \"../attributes-group/attributes-group.component\";\nimport { SharedEditor } from \"../shared-editor/shared-editor\";\n\n@Component({\n selector: \"mm-create-editor-component\",\n imports: [\n ReactiveFormsModule,\n CardModule,\n KENDO_INPUTS,\n KENDO_LABEL,\n KENDO_BUTTONS,\n KENDO_DROPDOWNS,\n KENDO_DATEINPUTS,\n AttributesGroupComponent,\n ],\n template: `\n <div class=\"entity-editor-container\">\n <kendo-card class=\"basic-info-card\">\n <kendo-card-header>\n <h3 class=\"title\">\n {{ resolvedMessages().createEntity }}\n </h3>\n </kendo-card-header>\n <kendo-card-body>\n <div class=\"info-item\">\n <label>{{ resolvedMessages().targetLocation }}</label>\n <kendo-textbox\n [disabled]=\"true\"\n [value]=\"\n createInput()!.parent!.name || resolvedMessages().rootLevel\n \"\n ></kendo-textbox>\n </div>\n\n <div class=\"info-item\">\n <label>{{ resolvedMessages().entityType }}</label>\n <kendo-dropdownlist\n [data]=\"createInput()!.ckTypes || []\"\n textField=\"rtCkTypeId\"\n valueField=\"rtCkTypeId\"\n [valuePrimitive]=\"false\"\n [attr.placeholder]=\"resolvedMessages().selectType\"\n (valueChange)=\"onTypeChange($event)\"\n >\n </kendo-dropdownlist>\n </div>\n </kendo-card-body>\n </kendo-card>\n\n <div class=\"attributes-form-container\">\n @if (selectedRtCkTypeId() && form()) {\n <mm-attributes-group\n [ckId]=\"selectedRtCkTypeId()!\"\n [parentFormGroup]=\"form()!\"\n [isRecord]=\"false\"\n />\n } @else {\n <p class=\"select-type-prompt\">\n {{ resolvedMessages().selectTypePrompt }}\n </p>\n }\n </div>\n\n <div class=\"entity-editor-actions\">\n <button\n kendoButton\n (click)=\"onCreate()\"\n [disabled]=\"!isCreateButtonEnabled()\"\n >\n {{ resolvedMessages().save }}\n </button>\n <button\n kendoButton\n [disabled]=\"!isCancelButtonEnabled()\"\n (click)=\"cancelRequested.emit()\"\n >\n {{ resolvedMessages().cancel }}\n </button>\n </div>\n </div>\n `,\n styleUrls: [\"../shared-editor/shared-editor.scss\"],\n})\n/**\n * Editor for creating a new runtime entity under a parent: type selection via dropdown, attribute form\n * via mm-attributes-group, and createEntities mutation with optional parent association. Save is enabled\n * when form is valid, coordinator is ready, and form is dirty vs initial snapshot.\n */\nexport class CreateEditorComponent {\n // Inputs\n createInput = input.required<CreateInput>();\n messages = input<Partial<RuntimeBrowserMessages>>({});\n protected readonly resolvedMessages = computed<RuntimeBrowserMessages>(\n () => ({\n ...DEFAULT_RUNTIME_BROWSER_MESSAGES,\n ...this.messages(),\n }),\n );\n // Outputs\n createOutput = output<CreateOutput>();\n cancelRequested = output<void>();\n // State\n protected isCreating = signal(false);\n protected isCanceling = signal(false);\n protected form = signal<FormGroup | null>(null);\n protected selectedCkTypeId = signal<string | null>(null);\n protected selectedRtCkTypeId = signal<string | null>(null);\n /** Snapshot of form value when coordinator is ready; used for dirty check. */\n private initialValue = signal<string | null>(null);\n // Dependencies\n private readonly createEntitiesGQL = inject(CreateEntitiesDtoGQL);\n private readonly formBuilder = inject(FormBuilder);\n private readonly dataService = inject(AttributeDataService);\n private readonly mapperService = inject(AttributeMapperService);\n private readonly coordinatorService = inject(AttributeCoordinatorService);\n private readonly sharedEditor = inject(SharedEditor);\n\n isCreateButtonEnabled = computed(() => {\n const status = this.formStatusSignal();\n const isLoaded = this.coordinatorService.isFullyLoaded();\n const isDirty = this.formIsDifferentFromInitial();\n\n return (\n !this.isCreating() &&\n !this.isCanceling() &&\n status === \"VALID\" &&\n isLoaded &&\n isDirty\n );\n });\n\n isCancelButtonEnabled = computed(() => {\n return !this.isCreating() && !this.isCanceling();\n });\n\n formIsDifferentFromInitial = computed(() => {\n const current = this.formValueSignal();\n const initial = this.initialValue();\n\n if (!current || initial == null) return false;\n\n return JSON.stringify(current) !== initial;\n });\n\n formStatusSignal = toSignal(\n toObservable(this.form).pipe(\n switchMap((f) => {\n if (!f) return of(\"INVALID\");\n return f.statusChanges.pipe(startWith(f.status));\n }),\n ),\n );\n\n formValueSignal = toSignal(\n toObservable(this.form).pipe(\n switchMap((f) => {\n if (!f) return of(null);\n return f.valueChanges.pipe(startWith(f.getRawValue()));\n }),\n ),\n );\n\n constructor() {\n this.coordinatorService.reset();\n effect(() => {\n if (this.coordinatorService.isFullyLoaded()) {\n const currentForm = this.form();\n if (currentForm) {\n const val = currentForm.getRawValue();\n this.initialValue.set(JSON.stringify(val));\n }\n }\n });\n }\n\n /**\n * Validates preconditions, maps form to attributes, builds create payload, runs mutation, emits result.\n */\n protected async onCreate(): Promise<void> {\n const currentForm = this.form();\n const ckTypeId = this.selectedCkTypeId();\n const rtCkTypeId = this.selectedRtCkTypeId();\n\n if (this.isCreating() || !currentForm?.valid || !ckTypeId || !rtCkTypeId) {\n return;\n }\n\n this.isCreating.set(true);\n\n try {\n const attributesMetadata = await this.fetchAttributesMetadata(rtCkTypeId);\n const mappedAttributes = await firstValueFrom(\n this.mapFormToAttributes$(\n currentForm.getRawValue(),\n attributesMetadata,\n ),\n );\n\n if (!this.hasValidMappedAttributes(mappedAttributes)) {\n this.sharedEditor.showErrorNotification(\n this.resolvedMessages().failedToCreateEntity,\n );\n return;\n }\n\n const entityInput = this.buildCreatePayload(mappedAttributes);\n const options = this.sharedEditor.prepareMutationOptions(entityInput);\n const result = await firstValueFrom(\n this.createEntitiesGQL.mutate(options),\n );\n\n const createdRtId =\n result.data?.runtime?.runtimeEntities?.create?.[0]?.rtId;\n if (createdRtId != null) {\n this.createOutput.emit({\n success: true,\n data: { createdRtEntityId: createdRtId },\n });\n } else {\n this.sharedEditor.showErrorNotification(\n this.resolvedMessages().failedToCreateEntity,\n );\n }\n } catch (error) {\n console.error(\"Error saving entity:\", error);\n this.sharedEditor.showErrorNotification(\n this.resolvedMessages().failedToCreateEntity,\n );\n } finally {\n this.isCreating.set(false);\n }\n }\n\n /** Fetches attribute definitions for the given runtime CK type (single emission). */\n private fetchAttributesMetadata(rtCkTypeId: string): Promise<Attribute[]> {\n return firstValueFrom(\n this.dataService.getAttributesDefinition$(rtCkTypeId, false),\n );\n }\n\n /** Maps form raw value to GraphQL attributes (Observable for composition/retry). */\n private mapFormToAttributes$(\n formValue: unknown,\n attributesMetadata: Attribute[],\n ) {\n return this.mapperService.mapFormValueToGraphQLAttributes$(\n formValue,\n attributesMetadata,\n );\n }\n\n /** Ensures we have at least one mapped attribute (validation). */\n private hasValidMappedAttributes(\n mapped: { attributeName: string; value: unknown }[] | null | undefined,\n ): boolean {\n return Array.isArray(mapped) && mapped.length > 0;\n }\n\n /** Builds the create mutation payload: ckTypeId, attributes, optional parent association. */\n private buildCreatePayload(\n attributes: { attributeName: string; value: unknown }[],\n ): RtEntityInputDto {\n const ckTypeId = this.selectedCkTypeId() ?? this.selectedRtCkTypeId();\n const entity: RtEntityInputDto = {\n ckTypeId: ckTypeId!,\n attributes,\n };\n\n const parent = this.createInput()?.parent;\n if (parent?.ckTypeId && parent?.rtId) {\n entity.associations = [\n {\n roleName: \"parent\",\n targets: [\n {\n modOption: AssociationModOptionsDto.CreateDto,\n target: { ckTypeId: parent.ckTypeId, rtId: parent.rtId },\n },\n ],\n },\n ];\n }\n\n return entity;\n }\n\n /**\n * Resets the form and prepares the state for the selected type.\n * Naming (intentional, not swapped): CkTypeDto has ckTypeId { fullName } and rtCkTypeId.\n * - selectedRtCkTypeId = fullName → used as [ckId] for attributes-group (getCkAttributesDetailed expects type id).\n * - selectedCkTypeId = DTO's rtCkTypeId → used in create mutation payload as entity.ckTypeId.\n */\n protected onTypeChange(selectedType: CkTypeDto | null) {\n if (selectedType === null || selectedType === undefined) return;\n\n const rtCkTypeId = selectedType.ckTypeId.fullName;\n const ckTypeId = selectedType.rtCkTypeId;\n\n if (ckTypeId && rtCkTypeId) {\n this.form.set(this.formBuilder.group({}));\n this.selectedRtCkTypeId.set(rtCkTypeId);\n this.selectedCkTypeId.set(ckTypeId);\n } else {\n this.form.set(null);\n this.selectedRtCkTypeId.set(null);\n this.selectedCkTypeId.set(null);\n }\n }\n}\n\nexport interface CreateInput {\n /**\n * Parent context: object is always present; ckTypeId, rtId and name are optional (undefined for root-level creation, e.g. when creating under a CK Type or when parentNode is null).\n * Code uses parent?.ckTypeId and parent?.rtId defensively when building associations.\n */\n parent: {\n ckTypeId?: string;\n rtId?: string;\n name?: string;\n };\n /**\n * List of available CK types to choose from when creating a new entity. This is required to populate the dropdown for type selection in the UI.\n */\n ckTypes: CkTypeDto[];\n}\n\nexport interface CreateOutput {\n success: boolean;\n data?: {\n /**\n * The RT ID of the newly created entity. This is returned after a successful creation operation and can be used for further operations or navigation. It is optional because the creation might fail, in which case this value would be undefined.\n */\n createdRtEntityId: string;\n };\n}\n\n","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type UpdateRuntimeEntitiesMutationVariablesDto = Types.Exact<{\n entities: Array<Types.InputMaybe<Types.RtEntityUpdateDto>> | Types.InputMaybe<Types.RtEntityUpdateDto>;\n}>;\n\n\nexport type UpdateRuntimeEntitiesMutationDto = { __typename?: 'OctoMutation', runtime?: { __typename?: 'Runtime', runtimeEntities?: { __typename?: 'RtEntityMutations', update?: Array<{ __typename?: 'RtEntity', rtId: any, attributes?: { __typename?: 'RtEntityAttributeDtoConnection', items?: Array<{ __typename?: 'RtEntityAttribute', attributeName?: string | null, value?: any | null } | null> | null } | null } | null> | null } | null } | null };\n\nexport const UpdateRuntimeEntitiesDocumentDto = gql`\n mutation UpdateRuntimeEntities($entities: [RtEntityUpdate]!) {\n runtime {\n runtimeEntities {\n update(entities: $entities) {\n rtId\n attributes {\n items {\n attributeName\n value\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class UpdateRuntimeEntitiesDtoGQL extends Apollo.Mutation<UpdateRuntimeEntitiesMutationDto, UpdateRuntimeEntitiesMutationVariablesDto> {\n document = UpdateRuntimeEntitiesDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import {\n Component,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n} from \"@angular/core\";\nimport { toObservable, toSignal } from \"@angular/core/rxjs-interop\";\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from \"@angular/forms\";\nimport type { RtEntityUpdateDto } from \"@meshmakers/octo-services\";\nimport { KENDO_BUTTONS } from \"@progress/kendo-angular-buttons\";\nimport { KENDO_DATEINPUTS } from \"@progress/kendo-angular-dateinputs\";\nimport { KENDO_DROPDOWNS } from \"@progress/kendo-angular-dropdowns\";\nimport { KENDO_INPUTS } from \"@progress/kendo-angular-inputs\";\nimport { KENDO_LABEL } from \"@progress/kendo-angular-label\";\nimport { CardModule } from \"@progress/kendo-angular-layout\";\nimport { firstValueFrom, of, startWith, switchMap } from \"rxjs\";\nimport { UpdateRuntimeEntitiesDtoGQL } from \"../../../graphQL/updateRuntimeEntities\";\nimport { Attribute } from \"../../models/attribute\";\nimport {\n DEFAULT_RUNTIME_BROWSER_MESSAGES,\n RuntimeBrowserMessages,\n} from \"../../runtime-browser.model\";\nimport { AttributeCoordinatorService } from \"../../services/attribute-coordinator.service\";\nimport { AttributeDataService } from \"../../services/attribute-data.service\";\nimport { AttributeMapperService } from \"../../services/attribute-mapper.service\";\nimport { AttributesGroupComponent } from \"../attributes-group/attributes-group.component\";\nimport { SharedEditor } from \"../shared-editor/shared-editor\";\n\n@Component({\n selector: \"mm-update-editor-component\",\n imports: [\n ReactiveFormsModule,\n CardModule,\n KENDO_INPUTS,\n KENDO_LABEL,\n KENDO_BUTTONS,\n KENDO_DROPDOWNS,\n KENDO_DATEINPUTS,\n AttributesGroupComponent,\n ],\n template: `\n <div class=\"entity-editor-container\">\n <kendo-card class=\"basic-info-card\">\n <kendo-card-header>\n <h3 class=\"title\">\n {{ resolvedMessages().updateEntity }}\n </h3>\n </kendo-card-header>\n <kendo-card-body>\n <div class=\"info-item\">\n <label>{{ resolvedMessages().name }}</label>\n <kendo-textbox\n [disabled]=\"true\"\n [value]=\"updateInput()!.name\"\n ></kendo-textbox>\n </div>\n\n <div class=\"info-item\">\n <label>{{ resolvedMessages().runtimeCkTypeId }}</label>\n <kendo-textbox\n [disabled]=\"true\"\n [value]=\"updateInput()!.rtCkTypeId\"\n ></kendo-textbox>\n </div>\n\n <div class=\"info-item\">\n <label>{{ resolvedMessages().typeId }}</label>\n <kendo-textbox\n [disabled]=\"true\"\n [value]=\"updateInput()!.ckTypeId!\"\n ></kendo-textbox>\n </div>\n\n <div class=\"info-item\">\n <label>{{ resolvedMessages().runtimeId }}</label>\n <kendo-textbox\n [disabled]=\"true\"\n [value]=\"updateInput()!.rtId\"\n ></kendo-textbox>\n </div>\n </kendo-card-body>\n </kendo-card>\n\n <div class=\"attributes-form-container\">\n @if (updateInput().rtCkTypeId && form()) {\n <mm-attributes-group\n [ckId]=\"updateInput().rtCkTypeId\"\n [parentFormGroup]=\"form()!\"\n [initialValues]=\"entityData()?.initial\"\n [isRecord]=\"false\"\n />\n } @else {\n <div class=\"loading-shimmer\">\n {{ resolvedMessages().loadingEntityDetails }}\n </div>\n }\n </div>\n\n <div class=\"entity-editor-actions\">\n <button\n kendoButton\n (click)=\"onUpdate()\"\n [disabled]=\"!isUpdateButtonEnabled()\"\n >\n {{ resolvedMessages().save }}\n </button>\n <button\n kendoButton\n [disabled]=\"!isCancelButtonEnabled()\"\n (click)=\"cancelRequested.emit()\"\n >\n {{ resolvedMessages().cancel }}\n </button>\n </div>\n </div>\n `,\n styleUrls: [\"../shared-editor/shared-editor.scss\"],\n})\n/**\n * Editor for updating an existing runtime entity: loads entity data by rtId/ckTypeId, builds attribute form\n * via mm-attributes-group, and submits updateRuntimeEntities with mapped attributes. Save is enabled only when\n * form is valid, coordinator is ready, and form is dirty vs initial snapshot.\n */\nexport class UpdateEditorComponent {\n // Inputs\n updateInput = input.required<UpdateInput>();\n messages = input<Partial<RuntimeBrowserMessages>>({});\n protected readonly resolvedMessages = computed<RuntimeBrowserMessages>(\n () => ({\n ...DEFAULT_RUNTIME_BROWSER_MESSAGES,\n ...this.messages(),\n }),\n );\n // Outputs\n updateOutput = output<UpdateOutput>();\n cancelRequested = output<void>();\n // State\n protected isUpdating = signal(false);\n protected isCanceling = signal(false);\n protected form = signal<FormGroup | null>(null);\n protected selectedCkTypeId = signal<string | null>(null);\n protected selectedRtCkTypeId = signal<string | null>(null);\n /** Snapshot of form value when coordinator and entity data are ready; used for dirty check. */\n private initialValue = signal<string | null>(null);\n // Dependencies\n private readonly updateRuntimeEntitiesGQL = inject(\n UpdateRuntimeEntitiesDtoGQL,\n );\n private readonly formBuilder = inject(FormBuilder);\n private readonly dataService = inject(AttributeDataService);\n private readonly mapperService = inject(AttributeMapperService);\n private readonly coordinatorService = inject(AttributeCoordinatorService);\n private readonly sharedEditor = inject(SharedEditor);\n\n private dataLoaded = computed(() => !!this.entityData());\n\n isUpdateButtonEnabled = computed(() => {\n const status = this.formStatusSignal();\n const isLoaded = this.coordinatorService.isFullyLoaded();\n const isDirty = this.formIsDifferentFromInitial();\n\n return (\n !this.isUpdating() &&\n !this.isCanceling() &&\n status === \"VALID\" &&\n isLoaded &&\n isDirty\n );\n });\n\n isCancelButtonEnabled = computed(() => {\n return !this.isUpdating() && !this.isCanceling();\n });\n\n formStatusSignal = toSignal(\n toObservable(this.form).pipe(\n switchMap((f) => {\n if (!f) return of(\"INVALID\");\n return f.statusChanges.pipe(startWith(f.status));\n }),\n ),\n );\n\n formValueSignal = toSignal(\n toObservable(this.form).pipe(\n switchMap((f) => {\n if (!f) return of(null);\n return f.valueChanges.pipe(startWith(f.getRawValue()));\n }),\n ),\n );\n\n /**\n * Dirty check: current form value vs snapshot taken when data was loaded.\n * Uses JSON.stringify for stability; do not replace with a custom deep-equal (caused regressions).\n * Known limitations: File objects serialize as {}, Dates as ISO strings. Circular refs are guarded with try/catch.\n */\n formIsDifferentFromInitial = computed(() => {\n const current = this.formValueSignal();\n const initial = this.initialValue();\n\n if (!current || initial == null) return false;\n\n try {\n return JSON.stringify(current) !== initial;\n } catch {\n return true;\n }\n });\n\n protected entityData = toSignal(\n toObservable(this.updateInput).pipe(\n switchMap((input) =>\n this.dataService.getRtEntityValues$(input.rtId, input.ckTypeId!),\n ),\n ),\n );\n\n constructor() {\n this.coordinatorService.reset();\n // INIT: React to input change — reset form and sync type ids from input\n effect(() => {\n const input = this.updateInput();\n this.form.set(this.formBuilder.group({}));\n this.selectedRtCkTypeId.set(input.rtCkTypeId);\n this.selectedCkTypeId.set(input.ckTypeId);\n });\n\n // SNAPSHOT: Take it only once when coordinator and data are ready\n effect(() => {\n const isCoordinatorReady = this.coordinatorService.isFullyLoaded();\n const isDataArrived = this.dataLoaded();\n const currentForm = this.form();\n\n // Boundary condition: everything must be wired\n if (isCoordinatorReady && isDataArrived && currentForm) {\n // Take snapshot without temporal side effects\n const rawValue = currentForm.getRawValue();\n this.initialValue.set(JSON.stringify(rawValue));\n }\n });\n }\n\n /**\n * Validates preconditions for update (form valid, not already updating, ids present).\n */\n protected async onUpdate(): Promise<void> {\n const input = this.updateInput();\n const currentForm = this.form();\n const ckTypeId = this.selectedCkTypeId() ?? input.ckTypeId;\n const rtCkTypeId = this.selectedRtCkTypeId() ?? input.rtCkTypeId;\n\n if (\n this.isUpdating() ||\n !currentForm?.valid ||\n !ckTypeId ||\n !rtCkTypeId ||\n !input.rtId\n ) {\n return;\n }\n\n this.isUpdating.set(true);\n\n try {\n const attributesMetadata = await this.fetchAttributesMetadata(rtCkTypeId);\n const mappedAttributes = await firstValueFrom(\n this.mapFormToAttributes$(\n currentForm.getRawValue(),\n attributesMetadata,\n ),\n );\n\n if (!this.hasValidMappedAttributes(mappedAttributes)) {\n this.sharedEditor.showErrorNotification(\n this.resolvedMessages().failedToUpdateEntity,\n );\n return;\n }\n\n const updateEntity = this.buildUpdatePayload(\n input,\n ckTypeId,\n mappedAttributes,\n );\n const options = this.sharedEditor.prepareUpdateMutationOptions([\n updateEntity,\n ]);\n const result = await firstValueFrom(\n this.updateRuntimeEntitiesGQL.mutate(options),\n );\n\n const updatedRtId =\n result.data?.runtime?.runtimeEntities?.update?.[0]?.rtId;\n if (updatedRtId != null) {\n this.updateOutput.emit({\n success: true,\n data: { updatedRtEntityId: updatedRtId },\n });\n } else {\n this.sharedEditor.showErrorNotification(\n this.resolvedMessages().failedToUpdateEntity,\n );\n }\n } catch (error) {\n console.error(\"Error updating entity:\", error);\n this.sharedEditor.showErrorNotification(\n this.resolvedMessages().failedToUpdateEntity,\n );\n } finally {\n this.isUpdating.set(false);\n }\n }\n\n /** Fetches attribute definitions for the given runtime CK type (single emission). */\n private fetchAttributesMetadata(rtCkTypeId: string): Promise<Attribute[]> {\n return firstValueFrom(\n this.dataService.getAttributesDefinition$(rtCkTypeId, false),\n );\n }\n\n /** Maps form raw value to GraphQL attributes (Observable for composition/retry). */\n private mapFormToAttributes$(\n formValue: unknown,\n attributesMetadata: Attribute[],\n ) {\n return this.mapperService.mapFormValueToGraphQLAttributes$(\n formValue,\n attributesMetadata,\n );\n }\n\n /** Ensures we have at least one mapped attribute (validation). */\n private hasValidMappedAttributes(\n mapped: { attributeName: string; value: unknown }[] | null | undefined,\n ): boolean {\n return Array.isArray(mapped) && mapped.length > 0;\n }\n\n /** Builds the update mutation payload: rtId + item { ckTypeId, attributes }. */\n private buildUpdatePayload(\n input: UpdateInput,\n ckTypeId: string,\n attributes: { attributeName: string; value: unknown }[],\n ): RtEntityUpdateDto {\n return {\n rtId: input.rtId,\n item: {\n ckTypeId,\n attributes,\n },\n };\n }\n}\n\nexport interface UpdateInput {\n /**\n * The name of the entity being updated. This is required to display the name of the entity in the UI.\n */\n name: string;\n /**\n * The RT ID of the entity being updated. This is required to identify which entity to update in the backend.\n */\n rtId: string;\n /**\n * The RT CK type ID of the entity being updated. This is required to understand the structure and attributes of the entity for proper mapping and validation during the update operation.\n */\n rtCkTypeId: string;\n /**\n * The CK type ID of the entity being updated. This is required to understand the structure and attributes of the entity for proper mapping and validation during the update operation.\n */\n ckTypeId: string;\n}\n\nexport interface UpdateOutput {\n success: boolean;\n data?: {\n /**\n * The RT ID of the updated entity. This is returned after a successful update operation and can be used for further operations or navigation. It is optional because the update might fail, in which case this value would be undefined.\n */\n updatedRtEntityId: string;\n };\n}\n\n","import { CommonModule } from \"@angular/common\";\nimport {\n AfterViewInit,\n Component,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n} from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport {\n CommandItemExecuteEventArgs,\n TreeItemDataTyped,\n} from \"@meshmakers/shared-services\";\nimport { ListViewComponent } from \"@meshmakers/shared-ui\";\nimport { ButtonModule } from \"@progress/kendo-angular-buttons\";\nimport { SVGIconModule } from \"@progress/kendo-angular-icons\";\nimport { eyeIcon } from \"@progress/kendo-svg-icons\";\nimport { CkModelDto, CkTypeDto, RtEntityDto } from \"../../graphQL/globalTypes\";\nimport { CkTypeEntitiesDataSourceDirective } from \"../data-sources/ck-type-entities-data-source.directive\";\nimport { EntityDetailDataSource } from \"../data-sources/entity-detail-data-source.service\";\nimport { RtEntityIdHelper } from \"../models/rt-entity-id\";\nimport {\n DEFAULT_RUNTIME_BROWSER_MESSAGES,\n RuntimeBrowserMessages,\n} from \"../runtime-browser.model\";\nimport { RuntimeBrowserStateService } from \"../services/runtime-browser-state.service\";\nimport { TypeHelperService } from \"../services/type-helper.service\";\nimport {\n CreateEditorComponent,\n CreateInput,\n CreateOutput,\n} from \"./create-editor/create-editor-component\";\nimport { EntityDetailViewComponent } from \"./entity-detail-view.component\";\nimport {\n UpdateEditorComponent,\n UpdateInput,\n UpdateOutput,\n} from \"./update-editor/update-editor-component\";\n\n// Extended type to handle both Runtime Entities and CK Models/Types\ntype BrowserItem =\n | RtEntityDto\n | CkModelDto\n | CkTypeDto\n | { isCkModelsRoot?: boolean; ckModelId?: string };\n\n/** Payload emitted when create or update finishes; parent uses it to refresh tree and optionally reload detail view. */\nexport interface EntitySavedEvent {\n parentCkTypeId?: string;\n parentRtId?: string;\n /** True when save was an update; parent should reload detail view after tree refresh. */\n isUpdate?: boolean;\n}\n\n@Component({\n selector: \"mm-runtime-browser-details\",\n imports: [\n CommonModule,\n ButtonModule,\n SVGIconModule,\n EntityDetailViewComponent,\n ListViewComponent,\n CkTypeEntitiesDataSourceDirective,\n CreateEditorComponent,\n UpdateEditorComponent,\n ],\n template: `\n <div class=\"runtime-browser-details\">\n @if (isCreateModeEnabled) {\n <mm-create-editor-component\n [createInput]=\"createInput!\"\n [messages]=\"_messages\"\n (cancelRequested)=\"onCancel()\"\n (createOutput)=\"onEntityCreationFinished($event)\"\n >\n </mm-create-editor-component>\n } @else if (isUpdateModeEnabled) {\n <mm-update-editor-component\n [updateInput]=\"updateInput!\"\n [messages]=\"_messages\"\n (cancelRequested)=\"onCancel()\"\n (updateOutput)=\"onEntityUpdateFinished($event)\"\n >\n </mm-update-editor-component>\n } @else {\n @if (!selectedItem) {\n <div class=\"no-selection\">\n <div class=\"placeholder-content\">\n <div class=\"placeholder-icon\">\n <span class=\"k-icon k-i-information\"></span>\n </div>\n <h3>{{ _messages.title }}</h3>\n <p>{{ _messages.selectItem }}</p>\n </div>\n </div>\n }\n\n @if (selectedItem) {\n <div class=\"entity-details\">\n @if (typeHelperService.isRuntimeEntity(selectedItem.item)) {\n <mm-entity-detail-view\n [entity]=\"getEntityForDisplay()\"\n [loading]=\"loading\"\n [error]=\"error\"\n [messages]=\"_messages\"\n (retry)=\"loadFullEntityDetails()\"\n (navigateToEntity)=\"\n navigateToEntity($event.rtId, $event.ckTypeId)\n \"\n >\n </mm-entity-detail-view>\n } @else if (isCkModel(selectedItem.item)) {\n <div class=\"ck-model-details\">\n <h3>\n {{ _messages.constructionKitModel }}\n </h3>\n <p>\n <strong>{{ _messages.fullName }}:</strong>\n {{ getCkModelIdFullName(selectedItem.item) }}\n </p>\n <p>\n <strong>{{ _messages.semanticName }}:</strong>\n {{ getCkModelIdSemanticName(selectedItem.item) }}\n </p>\n <p>\n <strong>{{ _messages.modelName }}:</strong>\n {{ getCkModelIdName(selectedItem.item) }}\n </p>\n <p>\n <strong>{{ _messages.version }}:</strong>\n {{ getCkModelIdVersion(selectedItem.item) }}\n </p>\n <p>\n <strong>{{ _messages.state }}:</strong>\n {{ getCkModelState(selectedItem.item) }}\n </p>\n <p class=\"info-text\">\n {{ _messages.selectTypeFromTree }}\n </p>\n </div>\n } @else if (isCkType(selectedItem.item)) {\n <div class=\"ck-type-details\">\n <div class=\"type-header\">\n <h3>\n {{ _messages.type }}:\n {{ getCkTypeId(selectedItem.item) }}\n </h3>\n <div class=\"type-metadata\">\n @if (isCkTypeAbstract(selectedItem.item)) {\n <span class=\"badge abstract\">{{\n _messages.abstract\n }}</span>\n }\n @if (isCkTypeFinal(selectedItem.item)) {\n <span class=\"badge final\">{{ _messages.final }}</span>\n }\n @if (getCkTypeBaseType(selectedItem.item)) {\n <span class=\"base-type\"\n >{{ _messages.base }}:\n {{ getCkTypeBaseType(selectedItem.item) }}</span\n >\n }\n </div>\n </div>\n\n <div class=\"entities-table\">\n <h4>\n {{ _messages.runtimeEntities }}\n </h4>\n <mm-list-view\n mmCkTypeEntitiesDataSource\n #dir=\"mmCkTypeEntitiesDataSource\"\n [sortable]=\"true\"\n [pageable]=\"{ buttonCount: 3, pageSizes: [10, 20, 50] }\"\n [pageSize]=\"20\"\n [selectable]=\"{ mode: 'single', enabled: true }\"\n [columns]=\"ckTypeColumns\"\n [actionCommandItems]=\"[ckTypeViewDetailsCommand]\"\n >\n </mm-list-view>\n </div>\n </div>\n } @else if (isCkModelsRoot(selectedItem.item)) {\n <div class=\"ck-models-root\">\n <h3>\n {{ _messages.constructionKitModels }}\n </h3>\n <p class=\"info-text\">\n {{ _messages.browseModelsAndTypes }}\n </p>\n </div>\n }\n </div>\n }\n }\n </div>\n `,\n styleUrls: [\"./runtime-browser-details.component.scss\"],\n})\nexport class RuntimeBrowserDetailsComponent\n implements OnChanges, AfterViewInit\n{\n @Input() selectedItem: TreeItemDataTyped<BrowserItem> | null = null;\n @Input() set messages(value: Partial<RuntimeBrowserMessages>) {\n this._messages = { ...DEFAULT_RUNTIME_BROWSER_MESSAGES, ...value };\n }\n protected _messages: RuntimeBrowserMessages = {\n ...DEFAULT_RUNTIME_BROWSER_MESSAGES,\n };\n @Output() entitySaved = new EventEmitter<EntitySavedEvent | void>();\n @ViewChild(\"dir\", { static: false })\n dataSourceDirective?: CkTypeEntitiesDataSourceDirective;\n\n private readonly router = inject(Router);\n private readonly route = inject(ActivatedRoute);\n private readonly entityDataSource = inject(EntityDetailDataSource);\n private readonly stateService = inject(RuntimeBrowserStateService);\n\n protected readonly typeHelperService = inject(TypeHelperService);\n protected readonly detailsIcon = eyeIcon;\n protected fullEntity: RtEntityDto | null = null;\n\n protected get ckTypeColumns() {\n return [\n {\n field: \"rtId\",\n displayName: this._messages.runtimeId,\n dataType: \"text\" as const,\n },\n {\n field: \"ckTypeId\",\n displayName: this._messages.typeId,\n dataType: \"text\" as const,\n },\n {\n field: \"rtWellKnownName\",\n displayName: this._messages.wellKnownName,\n dataType: \"text\" as const,\n },\n {\n field: \"rtCreationDateTime\",\n displayName: this._messages.created,\n format: \"short\" as const,\n dataType: \"iso8601\" as const,\n },\n {\n field: \"rtChangedDateTime\",\n displayName: this._messages.modified,\n format: \"short\" as const,\n dataType: \"iso8601\" as const,\n },\n ];\n }\n\n protected get ckTypeViewDetailsCommand() {\n return {\n id: \"view\",\n type: \"link\" as const,\n text: this._messages.viewDetails,\n svgIcon: this.detailsIcon,\n onClick: this.onViewEntityDetails,\n };\n }\n\n protected loading = false;\n protected error: string | null = null;\n private pendingRtCkTypeId: string | null = null;\n\n protected isCreateModeEnabled = false;\n protected isUpdateModeEnabled = false;\n protected createInput: CreateInput | undefined = undefined;\n protected updateInput: UpdateInput | undefined = undefined;\n\n ngAfterViewInit(): void {\n // If we have a pending CK type ID, set it now\n if (this.pendingRtCkTypeId && this.dataSourceDirective) {\n console.debug(\n \"AfterViewInit: Setting pending CK Type ID:\",\n this.pendingRtCkTypeId,\n );\n this.dataSourceDirective.setRtCkTypeId(this.pendingRtCkTypeId);\n this.pendingRtCkTypeId = null;\n }\n }\n\n public async ngOnChanges(changes: SimpleChanges): Promise<void> {\n if (changes[\"selectedItem\"] && this.selectedItem) {\n console.debug(\"Selected item changed:\", this.selectedItem);\n\n // If it's a CK Type, update the data source with the type ID\n if (this.isCkType(this.selectedItem.item)) {\n const rtCkTypeId = this.getRtCkTypeId(this.selectedItem.item);\n console.debug(\"Setting CK Type ID:\", rtCkTypeId);\n\n // Use setTimeout to ensure ViewChild is initialized\n setTimeout(() => {\n if (this.dataSourceDirective) {\n console.debug(\n \"ngOnChanges: ViewChild ready, setting CK Type ID:\",\n rtCkTypeId,\n );\n this.dataSourceDirective.setRtCkTypeId(rtCkTypeId);\n } else {\n console.debug(\n \"ngOnChanges: ViewChild not ready, storing pending CK Type ID:\",\n rtCkTypeId,\n );\n this.pendingRtCkTypeId = rtCkTypeId;\n }\n }, 0);\n } else {\n // Load full entity details for runtime entities\n await this.loadFullEntityDetails();\n // Clear any pending CK type ID\n this.pendingRtCkTypeId = null;\n }\n } else if (changes[\"selectedItem\"] && !this.selectedItem) {\n this.fullEntity = null;\n this.error = null;\n this.pendingRtCkTypeId = null;\n }\n }\n\n protected async loadFullEntityDetails(): Promise<void> {\n // Only load full details for runtime entities\n const item = this.selectedItem?.item;\n if (!this.typeHelperService.isRuntimeEntity(item)) {\n // Not a runtime entity, clear the full entity\n this.fullEntity = null;\n this.loading = false;\n this.error = null;\n return;\n }\n\n const runtimeEntity = item as RtEntityDto;\n this.loading = true;\n this.error = null;\n\n try {\n this.fullEntity = await this.entityDataSource.fetchEntityDetails(\n runtimeEntity.rtId,\n runtimeEntity.ckTypeId!,\n );\n\n if (!this.fullEntity) {\n this.error = this._messages.couldNotLoadEntityDetails;\n }\n } catch (error) {\n console.error(\"Failed to load full entity details:\", error);\n this.error = this._messages.failedToLoadEntityDetails;\n // Fall back to the basic entity data\n this.fullEntity = runtimeEntity;\n } finally {\n this.loading = false;\n }\n }\n\n protected async navigateToDetails(): Promise<void> {\n const item = this.selectedItem?.item;\n if (!this.typeHelperService.isRuntimeEntity(item)) {\n return;\n }\n\n const runtimeEntity = item as RtEntityDto;\n\n // Save current state before navigating\n this.stateService.saveState(this.selectedItem);\n\n const encodedId = RtEntityIdHelper.encode(\n runtimeEntity.rtId,\n runtimeEntity.ckTypeId,\n );\n\n await this.router.navigate([\"entity\", encodedId], {\n relativeTo: this.route,\n });\n }\n\n protected async navigateToEntity(\n rtId: string,\n ckTypeId: string,\n ): Promise<void> {\n if (!rtId || !ckTypeId || rtId === \"Unknown\" || ckTypeId === \"Unknown\") {\n return;\n }\n\n const encodedId = RtEntityIdHelper.encode(rtId, ckTypeId);\n await this.router.navigate([\"entity\", encodedId], {\n relativeTo: this.route,\n });\n }\n\n protected getEntityForDisplay(): RtEntityDto | null {\n if (this.fullEntity) {\n return this.fullEntity;\n }\n\n const item = this.selectedItem?.item;\n if (this.typeHelperService.isRuntimeEntity(item)) {\n return item as RtEntityDto;\n }\n\n return null;\n }\n\n protected isCkModel(item: BrowserItem): item is CkModelDto {\n return !!item && \"id\" in item && !(\"rtId\" in item) && !(\"ckTypeId\" in item);\n }\n\n protected isCkType(item: BrowserItem): item is CkTypeDto {\n return !!item && \"ckTypeId\" in item && !(\"rtId\" in item) && !(\"id\" in item);\n }\n\n protected isCkModelsRoot(\n item: BrowserItem,\n ): item is { isCkModelsRoot?: boolean; ckModelId?: string } {\n return !!item && \"isCkModelsRoot\" in item;\n }\n\n // Helper methods to get CK Model properties\n protected getCkModelIdFullName(item: BrowserItem): string {\n if (!this.isCkModel(item)) return \"Unknown\";\n return item.id.fullName || \"Unknown\";\n }\n\n protected getCkModelIdName(item: BrowserItem): string {\n if (!this.isCkModel(item)) return \"Unknown\";\n return item.id.name || \"Unknown\";\n }\n\n protected getCkModelIdVersion(item: BrowserItem): string {\n if (!this.isCkModel(item)) return \"Unknown\";\n return item.id.version || \"Unknown\";\n }\n\n protected getCkModelIdSemanticName(item: BrowserItem): string {\n if (!this.isCkModel(item)) return \"Unknown\";\n return item.id.semanticVersionedFullName || \"Unknown\";\n }\n\n protected getCkModelState(item: BrowserItem): string {\n if (!this.isCkModel(item)) return \"Unknown\";\n return item.modelState || \"Unknown\";\n }\n\n // Helper methods to get CK Type properties\n protected getCkTypeId(item: BrowserItem): string {\n if (!this.isCkType(item)) return \"Unknown\";\n return item.ckTypeId.fullName || \"Unknown\";\n }\n\n protected getRtCkTypeId(item: BrowserItem): string {\n if (!this.isCkType(item)) return \"Unknown\";\n return item.rtCkTypeId || \"Unknown\";\n }\n\n protected isCkTypeAbstract(item: BrowserItem): boolean {\n return this.isCkType(item) && item.isAbstract === true;\n }\n\n protected isCkTypeFinal(item: BrowserItem): boolean {\n return this.isCkType(item) && item.isFinal === true;\n }\n\n protected getCkTypeBaseType(item: BrowserItem): string | null {\n if (!this.isCkType(item)) return null;\n return item.baseType?.ckTypeId.fullName || null;\n }\n\n protected onViewEntityDetails = async (\n eventArgs: CommandItemExecuteEventArgs,\n ): Promise<void> => {\n const entity = eventArgs.data;\n if (this.typeHelperService.isRuntimeEntity(entity)) {\n await this.navigateToEntity(entity.rtId, entity.ckTypeId);\n }\n };\n\n /**\n * Activates the creation UI and provides necessary data\n * @param parentNode The tree node under which the new entity will be created, or null for root-level creation\n * @param allowedTypes List of compatible entity types for the new node\n */\n public enterCreateMode(\n parentNode: TreeItemDataTyped<BrowserItem> | null,\n allowedTypes: CkTypeDto[],\n ): void {\n const rtEntityDto = parentNode as TreeItemDataTyped<RtEntityDto>;\n\n this.createInput = {\n parent: {\n ckTypeId: rtEntityDto?.item.ckTypeId,\n rtId: rtEntityDto?.item.rtId,\n name: parentNode?.text ?? \"\",\n },\n ckTypes: allowedTypes,\n };\n\n // Toggle the UI state to show the creation form\n this.isCreateModeEnabled = true;\n this.isUpdateModeEnabled = false;\n }\n\n public enterEditMode(\n selectedItem: TreeItemDataTyped<BrowserItem> | null,\n rtCkTypeId: string | undefined,\n ): void {\n const rtEntityDto = selectedItem as TreeItemDataTyped<RtEntityDto>;\n const rtId = rtEntityDto?.item?.rtId ?? \"\";\n const ckTypeId = rtEntityDto?.item?.ckTypeId;\n\n if (!rtId || !ckTypeId || !rtCkTypeId) {\n console.warn(\n \"Enter edit mode skipped: missing rtId, ckTypeId or rtCkTypeId.\",\n { rtId, ckTypeId, rtCkTypeId },\n );\n return;\n }\n\n const name = rtEntityDto?.text ?? \"\";\n this.updateInput = {\n name,\n rtId,\n rtCkTypeId,\n ckTypeId,\n };\n\n this.isCreateModeEnabled = false;\n this.isUpdateModeEnabled = true;\n console.debug(\"Entered update mode with input:\", this.updateInput);\n }\n\n /**\n * Handles the result of the save operation from the child component\n * @param result Object containing success status and new entity details\n */\n public onEntityCreationFinished(result: CreateOutput): void {\n if (result.success) {\n // Use the parent under which we created (from createInput), not the new entity's ID\n const parentRtId = this.createInput?.parent?.rtId;\n if (parentRtId) {\n this.entitySaved.emit({ parentRtId });\n } else {\n // If parent is null or not a runtime entity (e.g., CK Type or Tree root),\n // emit without parent info to refresh entire tree\n this.entitySaved.emit();\n }\n } else {\n // Emit event even on failure to allow cleanup\n this.entitySaved.emit();\n }\n\n this.isCreateModeEnabled = false;\n }\n\n /**\n * Called when update editor saves. Emits so parent refreshes tree, then parent will call\n * reloadCurrentEntityDetails() after refresh so the detail view shows fresh data.\n */\n public onEntityUpdateFinished(result: UpdateOutput): void {\n if (result.success) {\n this.entitySaved.emit({ isUpdate: true });\n } else {\n this.entitySaved.emit();\n }\n this.isUpdateModeEnabled = false;\n }\n\n /**\n * Reloads full entity details for the currently selected item.\n * Called by parent after tree refresh so the detail view shows data after create/update.\n */\n public reloadCurrentEntityDetails(): void {\n this.loadFullEntityDetails();\n }\n\n onCancel() {\n console.debug(\"Creation or update cancelled, resetting state.\");\n\n this.isCreateModeEnabled = false;\n this.isUpdateModeEnabled = false;\n this.createInput = undefined;\n this.updateInput = undefined;\n }\n}\n\n","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type DeleteEntitiesMutationVariablesDto = Types.Exact<{\n rtEntityIds: Array<Types.InputMaybe<Types.RtEntityIdDto>> | Types.InputMaybe<Types.RtEntityIdDto>;\n deleteStrategy?: Types.DeleteStrategiesDto;\n}>;\n\n\nexport type DeleteEntitiesMutationDto = { __typename?: 'OctoMutation', runtime?: { __typename?: 'Runtime', runtimeEntities?: { __typename?: 'RtEntityMutations', delete?: boolean | null } | null } | null };\n\nexport const DeleteEntitiesDocumentDto = gql`\n mutation deleteEntities($rtEntityIds: [RtEntityId]!, $deleteStrategy: DeleteStrategies! = ARCHIVE) {\n runtime {\n runtimeEntities {\n delete(entities: $rtEntityIds, options: $deleteStrategy)\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class DeleteEntitiesDtoGQL extends Apollo.Mutation<DeleteEntitiesMutationDto, DeleteEntitiesMutationVariablesDto> {\n document = DeleteEntitiesDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type GetCkModelsQueryVariablesDto = Types.Exact<{\n after?: Types.InputMaybe<Types.Scalars['String']['input']>;\n first?: Types.InputMaybe<Types.Scalars['Int']['input']>;\n searchFilter?: Types.InputMaybe<Types.SearchFilterDto>;\n fieldFilters?: Types.InputMaybe<Array<Types.InputMaybe<Types.FieldFilterDto>> | Types.InputMaybe<Types.FieldFilterDto>>;\n sort?: Types.InputMaybe<Array<Types.InputMaybe<Types.SortDto>> | Types.InputMaybe<Types.SortDto>>;\n ckId?: Types.InputMaybe<Types.Scalars['String']['input']>;\n}>;\n\n\nexport type GetCkModelsQueryDto = { __typename?: 'OctoQuery', constructionKit?: { __typename?: 'ConstructionKitQuery', models?: { __typename?: 'CkModelDtoConnection', totalCount?: number | null, items?: Array<{ __typename?: 'CkModel', modelState?: Types.ModelStateDto | null, id: { __typename?: 'CkModelId', name: string, version: any, fullName: string, semanticVersionedFullName: string }, dependencies: Array<{ __typename?: 'CkModelId', fullName: string }> } | null> | null } | null } | null };\n\nexport const GetCkModelsDocumentDto = gql`\n query getCkModels($after: String, $first: Int, $searchFilter: SearchFilter, $fieldFilters: [FieldFilter], $sort: [Sort], $ckId: String) {\n constructionKit {\n models(\n after: $after\n first: $first\n searchFilter: $searchFilter\n fieldFilter: $fieldFilters\n sortOrder: $sort\n ckId: $ckId\n ) {\n totalCount\n items {\n id {\n name\n version\n fullName\n semanticVersionedFullName\n }\n modelState\n dependencies {\n fullName\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class GetCkModelsDtoGQL extends Apollo.Query<GetCkModelsQueryDto, GetCkModelsQueryVariablesDto> {\n document = GetCkModelsDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type GetTreeNodesQueryVariablesDto = Types.Exact<{\n rtId: Types.Scalars['OctoObjectId']['input'];\n ckTypeId: Types.Scalars['String']['input'];\n directRoleId: Types.Scalars['String']['input'];\n directTargetCkTypeId: Types.Scalars['String']['input'];\n indirectRoleId: Types.Scalars['String']['input'];\n indirectTargetCkTypeId: Types.Scalars['String']['input'];\n}>;\n\n\nexport type GetTreeNodesQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', items?: Array<{ __typename?: 'RtEntity', rtId: any, ckTypeId: any, attributes?: { __typename?: 'RtEntityAttributeDtoConnection', items?: Array<{ __typename?: 'RtEntityAttribute', attributeName?: string | null, value?: any | null } | null> | null } | null, associations?: { __typename?: 'RtEntityGenericAssociation', targets?: { __typename?: 'RtEntityGenericDtoConnection', items?: Array<{ __typename?: 'RtEntity', rtId: any, ckTypeId: any, attributes?: { __typename?: 'RtEntityAttributeDtoConnection', items?: Array<{ __typename?: 'RtEntityAttribute', attributeName?: string | null, value?: any | null } | null> | null } | null, associations?: { __typename?: 'RtEntityGenericAssociation', targets?: { __typename?: 'RtEntityGenericDtoConnection', totalCount?: number | null } | null } | null } | null> | null } | null } | null } | null> | null } | null } | null };\n\nexport const GetTreeNodesDocumentDto = gql`\n query getTreeNodes($rtId: OctoObjectId!, $ckTypeId: String!, $directRoleId: String!, $directTargetCkTypeId: String!, $indirectRoleId: String!, $indirectTargetCkTypeId: String!) {\n runtime {\n runtimeEntities(rtId: $rtId, ckId: $ckTypeId) {\n items {\n rtId\n ckTypeId\n attributes(attributeNames: [\"name\", \"description\"]) {\n items {\n attributeName\n value\n }\n }\n associations {\n targets(roleId: $directRoleId, ckId: $directTargetCkTypeId, direction: INBOUND) {\n items {\n rtId\n ckTypeId\n attributes(attributeNames: [\"name\", \"description\"]) {\n items {\n attributeName\n value\n }\n }\n associations {\n targets(\n roleId: $indirectRoleId\n ckId: $indirectTargetCkTypeId\n direction: INBOUND\n ) {\n totalCount\n }\n }\n }\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class GetTreeNodesDtoGQL extends Apollo.Query<GetTreeNodesQueryDto, GetTreeNodesQueryVariablesDto> {\n document = GetTreeNodesDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type GetTreesQueryVariablesDto = Types.Exact<{\n ckTypeId: Types.Scalars['String']['input'];\n}>;\n\n\nexport type GetTreesQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', items?: Array<{ __typename?: 'RtEntity', rtId: any, ckTypeId: any, attributes?: { __typename?: 'RtEntityAttributeDtoConnection', items?: Array<{ __typename?: 'RtEntityAttribute', attributeName?: string | null, value?: any | null } | null> | null } | null, associations?: { __typename?: 'RtEntityGenericAssociation', targets?: { __typename?: 'RtEntityGenericDtoConnection', totalCount?: number | null } | null } | null } | null> | null } | null } | null };\n\nexport const GetTreesDocumentDto = gql`\n query getTrees($ckTypeId: String!) {\n runtime {\n runtimeEntities(ckId: $ckTypeId) {\n items {\n rtId\n ckTypeId\n attributes(attributeNames: [\"name\", \"description\"]) {\n items {\n attributeName\n value\n }\n }\n associations {\n targets(\n roleId: \"System/ParentChild\"\n ckId: \"Basic/TreeNode\"\n direction: INBOUND\n ) {\n totalCount\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class GetTreesDtoGQL extends Apollo.Query<GetTreesQueryDto, GetTreesQueryVariablesDto> {\n document = GetTreesDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type UpdateTreeNodesMutationVariablesDto = Types.Exact<{\n entities: Array<Types.InputMaybe<Types.BasicTreeNodeInputUpdateDto>> | Types.InputMaybe<Types.BasicTreeNodeInputUpdateDto>;\n}>;\n\n\nexport type UpdateTreeNodesMutationDto = { __typename?: 'OctoMutation', runtime?: { __typename?: 'Runtime', basicTreeNodes?: { __typename?: 'BasicTreeNodeMutations', update?: Array<{ __typename?: 'BasicTreeNode', rtId: any } | null> | null } | null } | null };\n\nexport const UpdateTreeNodesDocumentDto = gql`\n mutation UpdateTreeNodes($entities: [BasicTreeNodeInputUpdate]!) {\n runtime {\n basicTreeNodes {\n update(entities: $entities) {\n rtId\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class UpdateTreeNodesDtoGQL extends Apollo.Mutation<UpdateTreeNodesMutationDto, UpdateTreeNodesMutationVariablesDto> {\n document = UpdateTreeNodesDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import { Injectable, inject } from '@angular/core';\nimport {\n AssociationModOptionsDto,\n BasicTreeNodeInputUpdateDto,\n CkModelDto,\n CkTypeDto,\n CkTypeMetaData,\n GetCkModelByIdDtoGQL,\n GetCkTypesDtoGQL,\n GraphDirectionDto,\n LevelMetaData,\n RtAssociationDto,\n RtAssociationMetaData,\n RtEntityDto,\n} from '@meshmakers/octo-services';\nimport { TreeItemDataTyped } from '@meshmakers/shared-services';\nimport {\n fileIcon,\n folderMoreIcon,\n folderOpenIcon,\n gearIcon,\n} from '@progress/kendo-svg-icons';\nimport { Apollo } from 'apollo-angular';\nimport { firstValueFrom } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { OctoGraphQlHierarchyDataSource } from '../../data-sources/octo-graph-ql-hierarchy-data-source';\nimport { DeleteEntitiesDtoGQL } from '../../graphQL/deleteEntities';\nimport { GetCkModelsDtoGQL } from '../../graphQL/getCkModels';\nimport {\n GetRuntimeEntityAssociationsByIdDtoGQL,\n GetRuntimeEntityAssociationsByIdQueryDto,\n} from '../../graphQL/getRuntimeEntityAssociationsById';\nimport { GetTreeNodesDtoGQL } from '../../graphQL/getTreeNodes';\nimport { GetTreesDtoGQL } from '../../graphQL/getTrees';\nimport { UpdateTreeNodesDtoGQL } from '../../graphQL/updateTreeNodes';\nimport { code, storage } from '../icons/custom-svg-icons';\nimport { TypeHelperService } from '../services/type-helper.service';\n\n// Extended type to handle both Runtime Entities and CK Models/Types\ntype BrowserItem =\n | RtEntityDto\n | CkModelDto\n | CkTypeDto\n | { isCkModelsRoot?: boolean; ckModelId?: string };\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RuntimeBrowserDataSource extends OctoGraphQlHierarchyDataSource<BrowserItem> {\n private readonly getTreesDtoGQL = inject(GetTreesDtoGQL);\n private readonly getTreeNodesDtoGQL = inject(GetTreeNodesDtoGQL);\n private readonly getCkModelsGQL = inject(GetCkModelsDtoGQL);\n private readonly getCkTypesGQL = inject(GetCkTypesDtoGQL);\n private readonly getCkModelByIdDtoGQL = inject(GetCkModelByIdDtoGQL);\n private readonly deleteEntitiesDtoGQL = inject(DeleteEntitiesDtoGQL);\n private readonly getRuntimeEntityAssociationsByIdDtoGQL = inject(\n GetRuntimeEntityAssociationsByIdDtoGQL,\n );\n private readonly updateTreeNodesDtoGQL = inject(UpdateTreeNodesDtoGQL);\n private readonly typeHelperService = inject(TypeHelperService);\n private isCkModelsRoot(\n item: BrowserItem,\n ): item is { isCkModelsRoot?: boolean; ckModelId?: string } {\n return !!item && 'isCkModelsRoot' in item;\n }\n\n private isCkModel(item: BrowserItem): item is CkModelDto {\n return !!item && 'id' in item && !('rtId' in item) && !('ckTypeId' in item);\n }\n\n private isCkType(item: BrowserItem): item is CkTypeDto {\n return !!item && 'ckTypeId' in item && !('rtId' in item) && !('id' in item);\n }\n\n // Define metadata for different entity types and their hierarchical relationships\n private static readonly levelMetaData: LevelMetaData[] = [\n new LevelMetaData(\n 'Basic/Tree',\n [new RtAssociationMetaData('System/ParentChild', 'Basic/TreeNode')],\n [\n new RtAssociationMetaData('System/ParentChild', 'Basic/TreeNode'),\n new RtAssociationMetaData('Basic/RelatedClassification', 'Basic/Asset'),\n ],\n ),\n new LevelMetaData(\n '*',\n [\n new RtAssociationMetaData('System/ParentChild', 'Basic/TreeNode'),\n new RtAssociationMetaData('Basic/RelatedClassification', 'Basic/Asset'),\n ],\n [\n new RtAssociationMetaData('System/ParentChild', 'Basic/TreeNode'),\n new RtAssociationMetaData('Basic/RelatedClassification', 'Basic/Asset'),\n ],\n ),\n ];\n\n // Define visual metadata for different entity types\n private static readonly ckTypeMetaData: CkTypeMetaData[] = [\n new CkTypeMetaData('Basic/Tree', 'Tree', 'Tree Structure', folderMoreIcon),\n new CkTypeMetaData('Basic/TreeNode', 'Node', 'Tree Node', fileIcon),\n new CkTypeMetaData('Basic/Asset', 'Asset', 'Asset Entity', code),\n new CkTypeMetaData('System/Database', 'Database', 'Database', storage),\n ];\n\n public override async fetchChildren(\n item: TreeItemDataTyped<BrowserItem>,\n ): Promise<TreeItemDataTyped<BrowserItem>[]> {\n // Handle CK Models root node\n if (this.isCkModelsRoot(item.item)) {\n return this.fetchCkModels();\n }\n\n // Handle CK Model node - fetch its types\n if (this.isCkModel(item.item)) {\n const modelId = item.item.id.fullName;\n return this.fetchCkTypes(modelId);\n }\n\n // Handle CK Type node - no children\n if (this.isCkType(item.item)) {\n return [];\n }\n\n // Handle regular runtime entity\n const rtEntity = item.item as RtEntityDto;\n if (!rtEntity.rtId || !rtEntity.ckTypeId) {\n return [];\n }\n\n // Find metadata for the current item type\n let metaData = RuntimeBrowserDataSource.levelMetaData.find(\n (x) => x.ckTypeId === rtEntity.ckTypeId,\n );\n if (!metaData) {\n metaData = RuntimeBrowserDataSource.levelMetaData.find(\n (x) => x.ckTypeId === '*',\n );\n }\n if (!metaData) {\n return [];\n }\n\n const mergedResultsMap: Record<string, TreeItemDataTyped<BrowserItem>> = {};\n\n // Fetch children based on direct and indirect associations\n for (const directRole of metaData.directRoles) {\n const rtEntitiesOrigins = new Array<RtEntityDto>();\n\n for (const indirectRole of metaData.indirectRoles) {\n try {\n const result = await firstValueFrom(\n this.getTreeNodesDtoGQL\n .fetch({\n variables: {\n rtId: rtEntity.rtId,\n ckTypeId: rtEntity.ckTypeId,\n directRoleId: directRole.roleId,\n directTargetCkTypeId: directRole.ckTypeId,\n indirectRoleId: indirectRole.roleId,\n indirectTargetCkTypeId: indirectRole.ckTypeId,\n },\n })\n .pipe(map((r) => r.data?.runtime?.runtimeEntities?.items?.at(0))),\n );\n\n if (result) {\n rtEntitiesOrigins.push(result as RtEntityDto);\n }\n } catch (error) {\n console.error('Error fetching tree nodes:', error);\n }\n }\n\n // Process children and build tree items\n for (const root of rtEntitiesOrigins) {\n if (!root?.associations?.targets?.items) {\n continue;\n }\n\n for (const child of root.associations.targets.items) {\n if (!child?.rtId || !child?.ckTypeId) {\n continue;\n }\n const rtId = child?.rtId;\n\n if (!mergedResultsMap[rtId]) {\n // Find or create metadata for this child type\n let childMetaData = RuntimeBrowserDataSource.ckTypeMetaData.find(\n (x) => x.ckTypeId === child?.ckTypeId,\n );\n if (!childMetaData) {\n childMetaData = new CkTypeMetaData(\n child?.ckTypeId || 'Unknown',\n child?.ckTypeId || 'Unknown',\n child?.ckTypeId || 'Unknown',\n code,\n );\n }\n\n // Extract display name and description from attributes\n const nameValue = child.attributes?.items?.find(\n (x) => x?.attributeName === 'name',\n )?.value;\n const displayNameValue = child.attributes?.items?.find(\n (x) => x?.attributeName === 'displayName',\n )?.value;\n\n // Debug logging\n if (typeof nameValue === 'object') {\n console.warn('Child name value is an object:', nameValue);\n }\n\n const text =\n (typeof nameValue === 'string'\n ? nameValue\n : typeof nameValue === 'object' && nameValue !== null\n ? JSON.stringify(nameValue)\n : null) ||\n (typeof displayNameValue === 'string'\n ? displayNameValue\n : null) ||\n child.ckTypeId ||\n 'Unknown';\n const descValue = child.attributes?.items?.find(\n (x) => x?.attributeName === 'description',\n )?.value;\n const tooltip =\n (typeof descValue === 'string' ? descValue : null) ||\n `${child.ckTypeId} - ${child.rtId}`;\n\n mergedResultsMap[rtId] = new TreeItemDataTyped<BrowserItem>(\n rtId,\n text,\n tooltip,\n child,\n childMetaData.svgIcon,\n (child?.associations?.targets?.totalCount ?? 0) > 0,\n );\n } else {\n // Update expandable status if object already exists\n mergedResultsMap[rtId].expandable ||=\n (child?.associations?.targets?.totalCount ?? 0) > 0;\n }\n }\n }\n }\n\n return Object.values(mergedResultsMap);\n }\n\n public override async fetchRootNodes(): Promise<\n TreeItemDataTyped<BrowserItem>[]\n > {\n try {\n const result = new Array<TreeItemDataTyped<BrowserItem>>();\n\n // Add CK Models root node\n const ckModelsRoot: BrowserItem = { isCkModelsRoot: true };\n result.push(\n new TreeItemDataTyped<BrowserItem>(\n 'ck-models-root',\n 'CK Models',\n 'Construction Kit Models',\n ckModelsRoot,\n folderOpenIcon,\n true, // expandable\n ),\n );\n\n // Check if Basic construction kit is available before trying to fetch Tree entities\n const isBasicCkAvailable =\n await this.checkBasicConstructionKitAvailable();\n\n if (isBasicCkAvailable) {\n // Fetch all Tree entities as root nodes\n const r = await firstValueFrom(\n this.getTreesDtoGQL.fetch({\n variables: { ckTypeId: 'Basic/Tree' },\n fetchPolicy: 'network-only',\n }),\n );\n\n for (const item of (r.data?.runtime?.runtimeEntities\n ?.items as RtEntityDto[]) ?? []) {\n // Find or create metadata for this item type\n let metaData = RuntimeBrowserDataSource.ckTypeMetaData.find(\n (x) => x.ckTypeId === item?.ckTypeId,\n );\n if (!metaData) {\n metaData = new CkTypeMetaData(\n item?.ckTypeId || 'Unknown',\n item?.ckTypeId || 'Unknown',\n item?.ckTypeId || 'Unknown',\n code,\n );\n }\n\n // Extract display information\n const nameValue = item.attributes?.items?.find(\n (x) => x?.attributeName === 'name',\n )?.value;\n const displayNameValue = item.attributes?.items?.find(\n (x) => x?.attributeName === 'displayName',\n )?.value;\n\n // Debug logging\n if (typeof nameValue === 'object') {\n console.warn('Name value is an object:', nameValue);\n }\n\n const text =\n (typeof nameValue === 'string'\n ? nameValue\n : typeof nameValue === 'object' && nameValue !== null\n ? JSON.stringify(nameValue)\n : null) ||\n (typeof displayNameValue === 'string' ? displayNameValue : null) ||\n item.ckTypeId ||\n 'Unknown';\n const descValue = item.attributes?.items?.find(\n (x) => x?.attributeName === 'description',\n )?.value;\n const tooltip =\n (typeof descValue === 'string' ? descValue : null) ||\n `${item.ckTypeId} - ${item.rtId}`;\n\n result.push(\n new TreeItemDataTyped<BrowserItem>(\n `${item.ckTypeId}@${item.rtId}`,\n text,\n tooltip,\n item,\n metaData.svgIcon,\n (item?.associations?.targets?.totalCount ?? 0) > 0,\n ),\n );\n }\n } else {\n console.debug(\n '⚠️ Basic construction kit not available, skipping Tree entities',\n );\n }\n\n return result;\n } catch (error) {\n console.error('Error fetching root nodes:', error);\n return [];\n }\n }\n\n /**\n * Gets ParentChild association of given Runtime Entity.\n *\n * @param ckTypeId Ck Type Id.\n * @param rtId Runtime Id.\n * @param isParentAssoc if true, fetches only parent, otherwise children.\n *\n * @returns Fetches configured association.\n */\n public async getParentChildAssociation(\n ckTypeId: string,\n rtId: string,\n isParentAssoc: boolean,\n ): Promise<RtAssociationDto[] | undefined> {\n let response: Apollo.QueryResult<GetRuntimeEntityAssociationsByIdQueryDto>;\n\n try {\n response = await firstValueFrom(\n this.getRuntimeEntityAssociationsByIdDtoGQL.fetch({\n variables: {\n ckTypeId,\n rtId,\n direction: isParentAssoc\n ? GraphDirectionDto.OutboundDto\n : GraphDirectionDto.InboundDto,\n roleId: 'System/ParentChild',\n },\n fetchPolicy: 'network-only',\n }),\n );\n } catch (error) {\n console.error('Error on attempt to get association', error);\n return undefined;\n }\n\n const assocs = response?.data?.runtime?.runtimeEntities?.items?.[0]\n ?.associations?.definitions?.items as RtAssociationDto[];\n\n return assocs;\n }\n\n /**\n * Swaps parent of the given object.\n *\n * @param srcObjRtId Runtime Entity Id of the object that is supposed to have its association changed.\n * @param oldParentCkTypeId CkTypeId of the current parent.\n * @param oldParentRtId Runtime Entity Id of the current parent.\n * @param newParentCkTypeId CkTypeId of the target parent.\n * @param newParentRtId Runtime Entity Id of the target parent.\n *\n * @returns true if association was successfully swapped.\n */\n public async updateParentChildAssociation(\n srcObjRtId: string,\n oldParentCkTypeId: string,\n oldParentRtId: string,\n newParentCkTypeId: string,\n newParentRtId: string,\n ) {\n const entitiesToUpdate: BasicTreeNodeInputUpdateDto[] = [\n // source\n {\n rtId: srcObjRtId,\n item: {\n parent: [\n {\n target: {\n rtId: oldParentRtId,\n ckTypeId: oldParentCkTypeId,\n },\n modOption: AssociationModOptionsDto.DeleteDto,\n },\n ],\n },\n },\n // target\n {\n rtId: srcObjRtId,\n item: {\n parent: [\n {\n target: {\n rtId: newParentRtId,\n ckTypeId: newParentCkTypeId,\n },\n modOption: AssociationModOptionsDto.CreateDto,\n },\n ],\n },\n },\n ];\n\n try {\n const response = await firstValueFrom(\n this.updateTreeNodesDtoGQL.mutate({\n variables: {\n entities: entitiesToUpdate,\n },\n fetchPolicy: 'network-only',\n }),\n );\n\n if (response.error) {\n throw response.error;\n }\n } catch (error) {\n console.error(\n 'Error on attempt to switch object parents by changing ParentChild association',\n srcObjRtId,\n error,\n );\n return false;\n }\n\n return true;\n }\n\n /**\n * Returns ckTypeId and rtId of a parent of given runtime entity.\n *\n * @param ckTypeId Runtime entity's ck type\n * @param rtId Runtime entity's runtime id\n * @returns object with parent's ckTypeId and rtId, or undefined when not found or on error.\n */\n public async getRuntimeEntityParentData(\n ckTypeId: string,\n rtId: string,\n ): Promise<\n | {\n ckTypeId: string;\n rtId: string;\n }\n | undefined\n > {\n const isParentAssoc = true;\n const parentAssocs = await this.getParentChildAssociation(\n ckTypeId,\n rtId,\n isParentAssoc,\n );\n\n if (!parentAssocs || parentAssocs.length === 0) {\n return undefined;\n }\n\n // the non-null assertion operator can be used because we've checked array length before\n const parentAssoc = parentAssocs[0]!;\n\n return {\n ckTypeId: parentAssoc.targetCkTypeId,\n rtId: parentAssoc.targetRtId,\n };\n }\n\n /**\n * Performs cascade delete operation on given runtime entity.\n *\n * @param itemToDelete Potential runtime entity.\n * @returns true on successful delete, false on database error or if object is not a runtime entity.\n */\n public async deleteRtEntityAndChildren(\n itemToDelete: TreeItemDataTyped<unknown>,\n ): Promise<boolean> {\n const runtimeEntity = itemToDelete.item;\n\n if (!this.typeHelperService.isRuntimeEntity(runtimeEntity)) {\n console.error(\n 'The item given for deletion is not a runtime entity',\n itemToDelete,\n );\n return false;\n }\n\n try {\n const result = await firstValueFrom(\n this.deleteEntitiesDtoGQL.mutate({\n variables: {\n rtEntityIds: [\n {\n ckTypeId: runtimeEntity.ckTypeId,\n rtId: runtimeEntity.rtId,\n },\n ],\n },\n }),\n );\n\n if (result.error) {\n throw result.error;\n }\n\n return result.data?.runtime?.runtimeEntities?.delete ?? false;\n } catch (error) {\n console.error(\n 'Error on attempt to cascade delete nodes during Delete Node operation',\n error,\n );\n return false;\n }\n }\n\n /**\n * Check if the Basic construction kit is available in the system\n */\n private async checkBasicConstructionKitAvailable(): Promise<boolean> {\n try {\n // Check if any types exist in the Basic model\n const response = await firstValueFrom(\n this.getCkModelByIdDtoGQL.fetch({\n variables: {\n model: 'Basic',\n },\n fetchPolicy: 'network-only',\n }),\n );\n\n const hasBasicTypes =\n (response.data?.constructionKit?.models?.items?.length ?? 0) > 0;\n\n if (hasBasicTypes) {\n console.debug('✅ Basic construction kit is available');\n } else {\n console.debug(\n '⚠️ Basic construction kit not found - no types in Basic model',\n );\n }\n\n return hasBasicTypes;\n } catch (error) {\n console.warn(\n '⚠️ Error checking Basic construction kit availability:',\n error,\n );\n return false; // Assume not available on error\n }\n }\n\n private async fetchCkModels(): Promise<TreeItemDataTyped<BrowserItem>[]> {\n try {\n const response = await firstValueFrom(\n this.getCkModelsGQL.fetch({\n variables: {},\n fetchPolicy: 'network-only',\n }),\n );\n\n const result: TreeItemDataTyped<BrowserItem>[] = [];\n const models = response.data?.constructionKit?.models?.items || [];\n\n for (const model of models) {\n if (!model) {\n continue;\n }\n const modelItem = model as unknown as CkModelDto;\n\n result.push(\n new TreeItemDataTyped<BrowserItem>(\n `model:${model.id.fullName}`,\n model.id.fullName || 'Unknown Model',\n `Model: ${model.id.fullName} (${model.modelState || 'Unknown State'})`,\n modelItem,\n folderMoreIcon,\n true, // Models have types as children\n ),\n );\n }\n\n return result;\n } catch (error) {\n console.error('Error fetching CK models:', error);\n return [];\n }\n }\n\n private async fetchCkTypes(\n modelId: string,\n ): Promise<TreeItemDataTyped<BrowserItem>[]> {\n try {\n const response = await firstValueFrom(\n this.getCkTypesGQL.fetch({\n variables: {\n ckModelIds: [modelId],\n },\n fetchPolicy: 'network-only',\n }),\n );\n\n const result: TreeItemDataTyped<BrowserItem>[] = [];\n const types = response.data?.constructionKit?.types?.items || [];\n\n for (const type of types) {\n if (!type) continue;\n const typeItem = type as unknown as CkTypeDto;\n\n const isAbstract = type.isAbstract ? ' (Abstract)' : '';\n const isFinal = type.isFinal ? ' (Final)' : '';\n\n result.push(\n new TreeItemDataTyped<BrowserItem>(\n `type:${type.ckTypeId.fullName}`,\n type.ckTypeId.fullName || 'Unknown Type',\n `Type: ${type.ckTypeId.fullName}${isAbstract}${isFinal}`,\n typeItem,\n gearIcon,\n false, // Types don't have children in this view\n ),\n );\n }\n\n return result;\n } catch (error) {\n console.error('Error fetching CK types:', error);\n return [];\n }\n }\n}\n","import { GetRuntimeEntityByIdDtoGQL } from '../graphQL/getRuntimeEntityById';\nimport {\n AfterViewInit,\n Component,\n computed,\n inject,\n input,\n ViewChild,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { CommandItem, TreeItemDataTyped } from '@meshmakers/shared-services';\nimport {\n BaseTreeDetailComponent,\n InputService,\n NodeDroppedEvent,\n} from '@meshmakers/shared-ui';\nimport { NotificationService } from '@progress/kendo-angular-notification';\nimport {\n arrowRotateCwIcon,\n locationsIcon,\n pencilIcon,\n plusIcon,\n SVGIcon,\n xIcon,\n} from '@progress/kendo-svg-icons';\nimport { firstValueFrom } from 'rxjs';\nimport {\n CkModelDto,\n CkTypeDto,\n GetCkTypesDtoGQL,\n RtEntityDto,\n} from '../graphQL/globalTypes';\nimport {\n EntitySavedEvent,\n RuntimeBrowserDetailsComponent,\n} from './components/runtime-browser-details.component';\nimport { RuntimeBrowserDataSource } from './data-sources/runtime-browser-data-source.service';\nimport { RtEntityIdHelper } from './models/rt-entity-id';\nimport {\n DEFAULT_RUNTIME_BROWSER_MESSAGES,\n RuntimeBrowserMessages,\n} from './runtime-browser.model';\nimport {\n BrowserState,\n RuntimeBrowserStateService,\n} from './services/runtime-browser-state.service';\nimport { TypeHelperService } from './services/type-helper.service';\n\n// Extended type to handle both Runtime Entities and CK Models/Types\ntype BrowserItem =\n | RtEntityDto\n | CkModelDto\n | CkTypeDto\n | { isCkModelsRoot?: boolean; ckModelId?: string };\n\n@Component({\n selector: 'mm-runtime-browser',\n imports: [BaseTreeDetailComponent, RuntimeBrowserDetailsComponent],\n template: `\n <div class=\"runtime-browser-container kendo-theme-provider\">\n <!-- LCARS Header -->\n <div class=\"lcars-page-header\">\n <div class=\"lcars-header-accent\"></div>\n <div class=\"header-content\">\n <h1 class=\"page-title\">\n <span class=\"title-prefix\">{{\n resolvedMessages().titlePrefix\n }}</span>\n <span class=\"title-main\">{{ resolvedMessages().title }}</span>\n </h1>\n <div class=\"header-stats\">\n <div class=\"stat-badge\">\n <span class=\"badge-icon\">&#9632;</span>\n <span class=\"badge-label\">{{\n resolvedMessages().badgeLabel\n }}</span>\n </div>\n </div>\n </div>\n <div class=\"lcars-header-line\"></div>\n </div>\n\n <!-- Main Content -->\n <div class=\"lcars-content-panel\">\n <div class=\"panel-accent-top\"></div>\n <mm-base-tree-detail\n #treeDetail\n [treeDataSource]=\"dataSource\"\n [leftPaneSize]=\"'25%'\"\n [leftToolbarActions]=\"leftToolbarActions\"\n [rightToolbarActions]=\"rightToolbarActions\"\n (nodeSelected)=\"onNodeSelected($event)\"\n (nodeDropped)=\"onNodeDropped($event)\"\n >\n <mm-runtime-browser-details\n #detailsPanel\n slot=\"detail-panel\"\n [selectedItem]=\"selectedItem\"\n [messages]=\"resolvedMessages()\"\n (entitySaved)=\"onEntitySaved($event)\"\n >\n </mm-runtime-browser-details>\n </mm-base-tree-detail>\n <div class=\"panel-accent-bottom\"></div>\n </div>\n\n <!-- LCARS Footer -->\n <div class=\"lcars-footer\">\n <div class=\"footer-bar bar-1\"></div>\n <div class=\"footer-bar bar-2\"></div>\n <div class=\"footer-bar bar-3\"></div>\n <div class=\"footer-spacer\"></div>\n <div class=\"footer-indicator\">\n <span class=\"indicator-dot\"></span>\n <span class=\"indicator-text\">{{ resolvedMessages().ready }}</span>\n </div>\n </div>\n </div>\n `,\n styleUrls: ['./runtime-browser.component.scss'],\n})\nexport class RuntimeBrowserComponent implements AfterViewInit {\n protected readonly ckTypesGQL = inject(GetCkTypesDtoGQL);\n protected readonly dataSource = inject(RuntimeBrowserDataSource);\n private readonly getRuntimeEntityByIdGQL = inject(GetRuntimeEntityByIdDtoGQL);\n private readonly inputService = inject(InputService);\n private readonly router = inject(Router);\n private readonly route = inject(ActivatedRoute);\n private readonly stateService = inject(RuntimeBrowserStateService);\n private readonly typeHelperService = inject(TypeHelperService);\n private readonly notificationService = inject(NotificationService);\n\n private isSelectedItemAnRtEntity = false;\n private isLoading = false;\n private isCreating = false;\n private isEditing = false;\n\n messages = input<Partial<RuntimeBrowserMessages>>({});\n protected readonly resolvedMessages = computed<RuntimeBrowserMessages>(\n () => ({\n ...DEFAULT_RUNTIME_BROWSER_MESSAGES,\n ...this.messages(),\n }),\n );\n\n @ViewChild('treeDetail', { static: false })\n treeDetail!: BaseTreeDetailComponent<BrowserItem>;\n @ViewChild('detailsPanel', { static: false })\n detailsPanel!: RuntimeBrowserDetailsComponent;\n // Define toolbar actions\n\n protected get leftToolbarActions(): CommandItem[] {\n const messages = this.resolvedMessages();\n return [\n {\n id: 'goto-entity',\n type: 'link',\n text: messages.goToEntity,\n svgIcon: locationsIcon,\n onClick: async () => await this.onGotoEntity(),\n isDisabled: () => !this.isGoToEntityButtonEnabled,\n },\n ];\n }\n\n protected get rightToolbarActions(): CommandItem[] {\n const messages = this.resolvedMessages();\n return [\n {\n id: 'refresh',\n type: 'link',\n text: messages.refresh,\n svgIcon: arrowRotateCwIcon,\n onClick: async () => await this.onRefresh(),\n isDisabled: () => !this.isRefreshButtonEnabled,\n },\n {\n id: 'create',\n type: 'link',\n text: messages.create,\n svgIcon: plusIcon,\n onClick: async () => await this.onCreate(),\n isDisabled: () => !this.isCreateButtonEnabled,\n },\n {\n id: 'edit',\n type: 'link',\n text: messages.edit,\n svgIcon: pencilIcon,\n onClick: async () => await this.onEdit(),\n isDisabled: () => !this.isEditButtonEnabled,\n },\n {\n id: 'delete',\n type: 'link',\n text: messages.delete,\n svgIcon: xIcon,\n onClick: async () => await this.onDelete(),\n isDisabled: () => !this.isDeleteButtonEnabled,\n },\n ];\n }\n\n private _selectedItem: TreeItemDataTyped<BrowserItem> | null = null;\n protected get selectedItem(): TreeItemDataTyped<BrowserItem> | null {\n return this._selectedItem;\n }\n protected set selectedItem(item: TreeItemDataTyped<BrowserItem> | null) {\n this._selectedItem = item;\n this.isSelectedItemAnRtEntity = item\n ? this.typeHelperService.isRuntimeEntity(item.item)\n : false;\n }\n\n private get isGoToEntityButtonEnabled() {\n return !this.isLoading;\n }\n private get isRefreshButtonEnabled() {\n return !this.isLoading;\n }\n private get isCreateButtonEnabled() {\n return !this.isLoading && !this.isCreating;\n }\n private get isDeleteButtonEnabled() {\n return !this.isLoading && this.isSelectedItemAnRtEntity;\n }\n private get isEditButtonEnabled() {\n return !this.isLoading && this.isSelectedItemAnRtEntity && !this.isEditing;\n }\n\n ngAfterViewInit(): void {\n // Restore tree state after the tree has been initialized\n this.waitForTreeComponent().then((isReady) => {\n if (isReady) {\n this.restoreTreeState();\n } else {\n console.warn('⚠️ Tree component not ready, skipping state restoration');\n }\n });\n }\n\n /**\n * Wait for the tree component to be fully initialized and ready\n */\n private async waitForTreeComponent(): Promise<boolean> {\n const maxAttempts = 50; // 5 seconds max (50 * 100ms)\n let attempts = 0;\n\n while (attempts < maxAttempts) {\n if (this.treeDetail?.waitForTreeReady) {\n const isReady = await this.treeDetail.waitForTreeReady();\n if (isReady) {\n console.debug(\n '✅ Tree component chain is ready after',\n attempts * 100,\n 'ms',\n );\n return true;\n }\n }\n\n await new Promise((resolve) => setTimeout(resolve, 100));\n attempts++;\n }\n\n console.warn('⚠️ Tree component chain not ready after 5 seconds');\n return false;\n }\n\n /**\n * Restore the previously selected tree item and expand path\n */\n private async restoreTreeState(): Promise<void> {\n const savedState = this.stateService.getState();\n if (!savedState) {\n console.debug('No saved state to restore');\n return;\n }\n\n console.debug('🔄 Starting tree state restoration:', savedState);\n\n try {\n // First refresh the tree to ensure it's in a clean state\n await this.treeDetail.refreshTree();\n console.debug('🔄 Tree refreshed, starting restoration process');\n\n // Use the saved expanded keys if available, otherwise fall back to parentPath\n let ids: string[] = [];\n if (savedState.expandedKeys && savedState.expandedKeys.length > 0) {\n ids = [...savedState.expandedKeys];\n } else if (savedState.parentPath) {\n // Fallback for old saved states\n for (const pathItem of savedState.parentPath) {\n const id = this.getItemKey(pathItem);\n if (id && id !== 'undefined') {\n ids.push(id);\n }\n }\n }\n\n // Add the selected item's key\n const selectedItemKey = this.getItemKey(savedState);\n if (\n selectedItemKey &&\n selectedItemKey !== 'undefined' &&\n !ids.includes(selectedItemKey)\n ) {\n ids.push(selectedItemKey);\n }\n\n this.treeDetail.setExpandedKeys(ids);\n console.debug('🔑 Expanded keys set for restoration:', ids);\n\n // Give the tree time to expand visually\n await new Promise((resolve) => setTimeout(resolve, 500));\n\n // Create a TreeItemDataTyped from the saved state directly\n const restoredItem = this.createTreeItemFromSavedState(savedState);\n if (restoredItem) {\n console.debug('✅ Successfully restored tree selection:', restoredItem);\n // Set the selected item which will trigger the details display\n this.selectedItem = restoredItem;\n console.debug('🎯 Tree selection and details display restored');\n } else {\n console.debug(\n '❌ Could not create item from saved state, clearing state',\n );\n this.stateService.clearState();\n }\n } catch (error: unknown) {\n console.error('💥 Error restoring tree state:', error);\n this.stateService.clearState();\n }\n }\n\n protected onNodeSelected(treeItem: TreeItemDataTyped<unknown>): void {\n console.debug('Runtime Browser - Node selected:', treeItem);\n this.selectedItem = treeItem as TreeItemDataTyped<BrowserItem>;\n\n // Save the state using the expanded keys from the tree (no recursive search needed)\n this.saveStateFromExpandedKeys(this.selectedItem);\n }\n\n /**\n * Boilerplate for showing warning notification.\n *\n * @param message Message of the warning.\n */\n private _showWarningNotification(message: string) {\n this.notificationService.show({\n content: message,\n hideAfter: 3000,\n position: { horizontal: 'right', vertical: 'top' },\n animation: { type: 'fade', duration: 400 },\n type: { style: 'warning', icon: true },\n });\n }\n\n /**\n * Occurs when item has been dropped on the Runtime Browser tree.\n *\n * @param event Metadata of the drag and drop operation.\n */\n protected async onNodeDropped(event: NodeDroppedEvent<unknown>) {\n console.debug('Runtime Browser - Node dropped:', event);\n\n if (!event.destinationItem) {\n const msg = 'Moving item to the root of the tree is not supported';\n this._showWarningNotification(msg);\n console.debug(msg, event);\n return;\n }\n\n if (!event.sourceParent) {\n const msg = 'Moving item on the root of the tree is not supported';\n this._showWarningNotification(msg);\n console.debug(msg, event);\n return;\n }\n\n if (!event.sourceItem.rtId || !event.destinationItem.rtId) {\n const msg = 'Moving Construction Kit objects is not supported';\n this._showWarningNotification(msg);\n console.debug(msg, event);\n return;\n }\n\n if (\n event.sourceItem.rtId === event.destinationItem.rtId ||\n event.sourceParent.rtId === event.destinationItem.rtId\n ) {\n const msg = 'Dropped entity to same hierarchy level';\n this._showWarningNotification(msg);\n console.debug(msg, event);\n return;\n }\n\n const allowedSrcItemCkTypeIds = ['Basic/TreeNode'];\n\n if (allowedSrcItemCkTypeIds.indexOf(event.sourceItem.ckTypeId) === -1) {\n const msg = 'Moving item other than Basic/TreeNode is not supported';\n this._showWarningNotification(msg);\n console.debug(msg, event);\n return;\n }\n\n const allowedDstParentItemCkTypeIds = ['Basic/TreeNode', 'Basic/Tree'];\n\n if (\n allowedDstParentItemCkTypeIds.indexOf(event.destinationItem.ckTypeId) ===\n -1\n ) {\n const msg = 'Moving item to given parent is not supported';\n this._showWarningNotification(msg);\n console.debug(msg, event);\n return;\n }\n\n try {\n this.isLoading = true;\n this.treeDetail.setEnabledState(false);\n\n const updateSucceeded =\n await this.dataSource.updateParentChildAssociation(\n event.sourceItem.rtId,\n event.sourceParent.ckTypeId,\n event.sourceParent.rtId,\n event.destinationItem.ckTypeId,\n event.destinationItem.rtId,\n );\n\n // Update failed due to query / db error.\n if (!updateSucceeded) {\n console.debug(\n 'Cannot update association due to an error in the GraphQL request.',\n );\n return;\n }\n\n // If new destination item (upper level) is not expanded yet, expand it.\n const expandedKeys = this.treeDetail.getExpandedKeys();\n const expandKey =\n event.destinationItem.ckTypeId === 'Basic/Tree'\n ? `${event.destinationItem.ckTypeId}@${event.destinationItem.rtId}`\n : event.destinationItem.rtId;\n if (expandedKeys.indexOf(expandKey) === -1) {\n this.treeDetail.setExpandedKeys([...expandedKeys, expandKey]);\n }\n\n // Refresh tree if any entity is root node, otherwise do refresh on specified entities.\n if (\n event.refreshItems.some(\n (refItem: RtEntityDto) => refItem.ckTypeId === 'Basic/Tree',\n ) ||\n event.destinationItem.ckTypeId === 'Basic/Tree'\n ) {\n await this.treeDetail.refreshTree();\n } else {\n const entitiesToRefresh = [];\n for (const toRef of event.refreshItems) {\n entitiesToRefresh.push({\n ckTypeId: toRef.ckTypeId,\n rtId: toRef.rtId,\n isRoot: toRef.ckTypeId === 'Basic/Tree',\n });\n }\n\n await this.treeDetail.refreshRuntimeEntities(entitiesToRefresh);\n }\n\n // select item afterwards to better track drag / drop\n this.selectedItem = event.sourceItem\n .dataItem as TreeItemDataTyped<BrowserItem>;\n } catch (error: unknown) {\n console.error(\n 'Error updating tree node parent after drag-and-drop:',\n error,\n );\n } finally {\n this.treeDetail.setEnabledState(true);\n this.isLoading = false;\n }\n }\n\n /**\n * Save the state using the expanded keys from the tree component.\n * This is much more efficient than recursively searching for the path.\n */\n private saveStateFromExpandedKeys(\n selectedItem: TreeItemDataTyped<BrowserItem>,\n ): void {\n // Get the expanded keys directly from the tree component - these represent the path\n const expandedKeys = this.treeDetail?.getExpandedKeys() ?? [];\n console.debug('📍 Saving state with expanded keys:', expandedKeys);\n\n // Convert expanded keys to a simple path representation for the state service\n // The expanded keys already contain the IDs of all expanded parent nodes\n this.stateService.saveStateWithKeys(selectedItem, expandedKeys);\n }\n\n /**\n * Generate a unique key for a tree item (same logic as in TreeComponent)\n */\n private getItemKey(\n dataItem: TreeItemDataTyped<BrowserItem> | BrowserState | BrowserItem,\n ): string {\n const data = this.extractBrowserItem(dataItem);\n\n // For runtime entities\n if (data && 'rtId' in data && 'ckTypeId' in data) {\n return `${String(data.ckTypeId)}@${String(data.rtId)}`;\n }\n\n // For CK Models\n if (data && 'id' in data && !('rtId' in data) && !('ckTypeId' in data)) {\n return `model:${String(data.id)}`;\n }\n\n // For CK Types\n if (data && 'ckTypeId' in data && !('rtId' in data) && !('id' in data)) {\n return `type:${String(data.ckTypeId)}`;\n }\n\n // For special nodes\n if (data && 'isCkModelsRoot' in data && data.isCkModelsRoot) {\n return 'ck-models-root';\n }\n\n // Fallback to text\n return this.getItemText(dataItem) ?? JSON.stringify(data ?? null);\n }\n\n private extractBrowserItem(\n dataItem: TreeItemDataTyped<BrowserItem> | BrowserState | BrowserItem,\n ): BrowserItem | null {\n if (dataItem && typeof dataItem === 'object') {\n if ('item' in dataItem) {\n return (dataItem as TreeItemDataTyped<BrowserItem>).item;\n }\n if ('selectedItemData' in dataItem) {\n return (dataItem as BrowserState).selectedItemData;\n }\n }\n return dataItem as BrowserItem;\n }\n\n private getItemText(\n dataItem: TreeItemDataTyped<BrowserItem> | BrowserState | BrowserItem,\n ): string | undefined {\n if (dataItem && typeof dataItem === 'object') {\n if ('text' in dataItem && typeof dataItem.text === 'string') {\n return dataItem.text;\n }\n if (\n 'selectedItemText' in dataItem &&\n typeof dataItem.selectedItemText === 'string'\n ) {\n return dataItem.selectedItemText;\n }\n }\n return undefined;\n }\n\n /**\n * Create a TreeItemDataTyped from saved state data\n */\n private createTreeItemFromSavedState(\n savedState: BrowserState,\n ): TreeItemDataTyped<BrowserItem> | null {\n try {\n const data = savedState.selectedItemData;\n const text = savedState.selectedItemText;\n const id = savedState.selectedItemId;\n\n if (!data || !text || !id) {\n console.warn('⚠️ Incomplete saved state data:', savedState);\n return null;\n }\n\n // Create a TreeItemDataTyped with the saved data\n return new TreeItemDataTyped<BrowserItem>(\n id,\n text,\n text, // Use text as tooltip\n data,\n null as unknown as SVGIcon, // SVG icon - not critical for restoration\n false, // expandable - not critical for restoration\n );\n } catch (error: unknown) {\n console.error('💥 Error creating tree item from saved state:', error);\n return null;\n }\n }\n\n /**\n * Toolbar action: Open dialog to navigate to entity\n */\n protected async onGotoEntity(): Promise<void> {\n try {\n const messages = this.resolvedMessages();\n const entityIdentifier = await this.inputService.showInputDialog(\n messages.goToEntityTitle,\n messages.goToEntityPrompt,\n 'ckTypeId@rtId',\n messages.go,\n );\n\n if (entityIdentifier) {\n await this.navigateToEntityDetails(entityIdentifier);\n }\n } catch (error: unknown) {\n console.error('Error in goto entity dialog:', error);\n }\n }\n\n /**\n * Toolbar action: Refresh tree data\n */\n protected async onRefresh(): Promise<void> {\n console.debug('Refresh action triggered');\n try {\n const nodes = await this.dataSource.fetchRootNodes();\n console.debug('Tree refreshed with', nodes.length, 'root nodes');\n } catch (error: unknown) {\n console.error('Error refreshing tree:', error);\n }\n }\n\n /**\n * Toolbar action: Delete selected tree node\n */\n protected async onDelete(): Promise<void> {\n console.debug('Delete tree node action triggered');\n\n if (!this.selectedItem) {\n console.warn(\n 'No node selected; cannot perform delete operation on unknown node',\n );\n return;\n }\n\n try {\n this.isLoading = true;\n this.treeDetail.setEnabledState(false);\n\n if (!this.isSelectedItemAnRtEntity) {\n console.warn(\n 'Selected item is not a runtime entity, cannot delete.',\n this.selectedItem,\n );\n return;\n }\n\n const runtimeEntity = this.selectedItem.item as RtEntityDto;\n\n const parentIdPair = await this.dataSource.getRuntimeEntityParentData(\n runtimeEntity.ckTypeId,\n runtimeEntity.rtId,\n );\n\n const deleteState = await this.dataSource.deleteRtEntityAndChildren(\n this.selectedItem,\n );\n if (!deleteState) {\n console.warn(\n 'Runtime entity node deletion failed for selected object',\n this.selectedItem,\n );\n return;\n }\n\n if (parentIdPair) {\n await this.treeDetail.refreshRuntimeEntities([\n {\n ckTypeId: parentIdPair.ckTypeId,\n rtId: parentIdPair.rtId,\n isRoot: parentIdPair.ckTypeId === 'Basic/Tree',\n },\n ]);\n } else {\n // we do not have parent node, so selected node is top level item. So, we need to refresh root nodes\n await this.treeDetail.refreshTree();\n }\n\n this.selectedItem = null;\n } catch (error: unknown) {\n console.error('Error deleting tree node:', error);\n } finally {\n this.treeDetail.setEnabledState(true);\n this.isLoading = false;\n }\n }\n\n /**\n * Navigate to entity details route using the format \"ckTypeId@rtId\"\n * @param entityIdentifier - String in format \"ckTypeId@rtId\"\n * @example navigateToEntityDetails(\"Basic/TreeNode@507f1f77bcf86cd799439011\")\n */\n private async navigateToEntityDetails(\n entityIdentifier: string,\n ): Promise<void> {\n // Parse the identifier\n const parts = entityIdentifier.split('@');\n if (parts.length !== 2) {\n console.error(\n 'Invalid entity identifier format. Expected \"ckTypeId@rtId\"',\n );\n return;\n }\n\n const [ckTypeId, rtId] = parts;\n\n try {\n // Verify entity exists before navigating\n const result = await firstValueFrom(\n this.getRuntimeEntityByIdGQL.fetch({\n variables: {\n ckTypeId: ckTypeId,\n rtId: rtId,\n },\n }),\n );\n\n const entity = result.data?.runtime?.runtimeEntities?.items?.[0];\n if (!entity) {\n console.error(`Entity not found: ${entityIdentifier}`);\n return;\n }\n\n // Navigate to entity detail route using relative path (works across apps)\n if (!RtEntityIdHelper.isValidFormat(entityIdentifier)) {\n console.error(\n 'Invalid entity identifier format. Expected \"ckTypeId@rtId\"',\n );\n return;\n }\n\n const encodedId = RtEntityIdHelper.encodeFromString(entityIdentifier);\n\n await this.router.navigate(['entity', encodedId], {\n relativeTo: this.route,\n });\n\n console.debug(`Navigating to entity details: ${entityIdentifier}`);\n } catch (error: unknown) {\n console.error(`Error navigating to entity ${entityIdentifier}:`, error);\n }\n }\n\n /**\n * Main action to initiate the creation of a new node\n */\n protected async onCreate(): Promise<void> {\n // Anti-spam validation: prevent multiple clicks\n if (this.isCreating) {\n return;\n }\n\n try {\n this.isCreating = true;\n\n // Fetch available Construction Kit types from the API\n const result = await firstValueFrom(this.ckTypesGQL.fetch());\n const allTypes = (\n result.data?.constructionKit?.types?.items ?? []\n ).filter((type): type is CkTypeDto => type != null);\n const isRootLevel = !this.selectedItem;\n const filteredTypes = this.getCompatibleTreeTypes(allTypes, isRootLevel);\n\n // Transition the details panel into Create Mode\n // Pass null as parent if no item is selected (creates root-level entity)\n this.detailsPanel?.enterCreateMode(\n this.selectedItem || null,\n filteredTypes as CkTypeDto[],\n );\n } catch (err) {\n console.error('Failed to load types for creation:', err);\n } finally {\n this.isCreating = false;\n }\n }\n\n protected async onEdit(): Promise<void> {\n // Anti-spam validation: prevent multiple clicks\n if (this.isEditing) {\n return;\n }\n\n try {\n this.isEditing = true;\n\n // Fetch available Construction Kit types from the API\n const result = await firstValueFrom(this.ckTypesGQL.fetch());\n const allTypes = (\n result.data?.constructionKit?.types?.items ?? []\n ).filter((type): type is CkTypeDto => type != null);\n\n const rtEntityDto = this\n .selectedItem as TreeItemDataTyped<RtEntityDto> | null;\n const rtCkTypeId = allTypes.find(\n (type) => type!.rtCkTypeId === rtEntityDto?.item?.ckTypeId,\n )?.ckTypeId?.fullName;\n\n if (!rtCkTypeId) {\n this._showWarningNotification(\n this.resolvedMessages().missingRequiredIdentifiers,\n );\n return;\n }\n\n // Transition the details panel into Edit Mode\n this.detailsPanel?.enterEditMode(this.selectedItem, rtCkTypeId);\n } catch (err) {\n console.error('Failed to load types for editing:', err);\n } finally {\n this.isEditing = false;\n }\n }\n\n /**\n * Filters the list of types to find compatible types for entity creation.\n * For root-level creation, only allows Basic/Tree types.\n * For child creation, allows non-abstract TreeNode types.\n *\n * @param types - All available CK types\n * @param isRootLevel - If true, only Basic/Tree types are allowed\n * @returns Filtered list of compatible types\n */\n private getCompatibleTreeTypes(\n types: CkTypeDto[],\n isRootLevel = false,\n ): CkTypeDto[] {\n // For root-level creation, only allow Basic/Tree types\n if (isRootLevel) {\n return types.filter((type) => {\n const isBasicTree = type?.rtCkTypeId === 'Basic/Tree';\n return isBasicTree;\n });\n }\n\n // For child creation, allow non-abstract TreeNode types\n const filtered = types.filter((type) => {\n const isNotAbstract = type?.isAbstract === false;\n const isTreeNodeFamily = this.isTreeNodeType(type);\n\n return isNotAbstract && isTreeNodeFamily;\n });\n\n // If no TreeNode types found, fallback to all non-abstract types\n if (filtered.length === 0) {\n return types.filter((type) => type?.isAbstract === false);\n }\n\n return filtered;\n }\n\n /**\n * Checks if a specific type or its base type belongs to the TreeNode hierarchy\n */\n private isTreeNodeType(type: CkTypeDto): boolean {\n const typeFullName = type?.ckTypeId?.fullName || '';\n const baseTypeFullName = type?.baseType?.ckTypeId?.fullName || '';\n\n const getShortName = (fullName: string): string => {\n if (!fullName) {\n return '';\n }\n // Handle both dot notation (System.Entity) and slash notation (System/Entity)\n const parts = fullName.includes('/')\n ? fullName.split('/')\n : fullName.split('.');\n return parts[parts.length - 1] || '';\n };\n\n const typeName = getShortName(typeFullName);\n const baseTypeName = getShortName(baseTypeFullName);\n\n // Check if type name ends with TreeNode or is TreeNode\n const isTreeNode = typeName === 'TreeNode' || baseTypeName === 'TreeNode';\n\n // Also check if full name contains TreeNode (for cases like Basic/TreeNode)\n const containsTreeNode =\n typeFullName.includes('TreeNode') ||\n baseTypeFullName.includes('TreeNode');\n\n return isTreeNode || containsTreeNode;\n }\n\n /**\n * Handles entitySaved from the details panel: refreshes the tree, then reloads the detail view\n * when the save was an update so the user sees fresh data.\n */\n protected async onEntitySaved(event: EntitySavedEvent | void): Promise<void> {\n const payload = event ?? undefined;\n const parentInfo =\n payload?.parentRtId != null\n ? { parentRtId: payload.parentRtId }\n : undefined;\n\n await this.refreshTreeAfterCreation(parentInfo);\n\n if (payload?.isUpdate === true) {\n this.detailsPanel?.reloadCurrentEntityDetails();\n }\n }\n\n /**\n * Refresh tree data after entity creation.\n * IMPORTANT: We use refreshTree() instead of refreshRuntimeEntities() because\n * refreshRuntimeEntities() only manipulates expanded keys but doesn't force data\n * reload from the data source. This causes stale data to persist in Kendo TreeView\n */\n protected async refreshTreeAfterCreation(parentInfo?: {\n parentRtId?: string;\n }): Promise<void> {\n if (parentInfo?.parentRtId) {\n // Save expanded keys to restore after refresh\n const expandedKeys = this.treeDetail.getExpandedKeys();\n const keysToRestore = [...expandedKeys];\n\n // Refresh entire tree to clear cache and reload all data\n await this.treeDetail.refreshTree();\n\n // Wait for next microtask tick to allow Angular change detection and Kendo TreeView rendering.\n // This prevents race conditions without using arbitrary timeouts.\n await Promise.resolve();\n this.treeDetail.setExpandedKeys(keysToRestore);\n } else {\n // If parent info is not available (root-level creation or parent is not a runtime entity),\n // refresh entire tree to ensure new root-level entities are visible\n await this.treeDetail.refreshTree();\n }\n }\n}\n","import { Component } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\n\n/**\n * Simple outlet component for runtime browser routes.\n * Use as the parent component when mounting runtime browser routes as children.\n */\n@Component({\n selector: 'mm-runtime-browser-outlet',\n standalone: true,\n imports: [RouterOutlet],\n template: `<router-outlet />`,\n})\nexport class RuntimeBrowserOutletComponent {}\n","import { InjectionToken } from '@angular/core';\nimport { RuntimeBrowserMessages } from './runtime-browser.model';\n\n/**\n * Injection token for RuntimeBrowser messages.\n * Provide this at route or component level to override default English messages (e.g. for i18n).\n */\nexport const RUNTIME_BROWSER_MESSAGES = new InjectionToken<RuntimeBrowserMessages>(\n 'RUNTIME_BROWSER_MESSAGES',\n);\n","import { Component, inject } from '@angular/core';\nimport { RuntimeBrowserComponent } from './runtime-browser.component';\nimport {\n DEFAULT_RUNTIME_BROWSER_MESSAGES,\n RuntimeBrowserMessages,\n} from './runtime-browser.model';\nimport { RUNTIME_BROWSER_MESSAGES } from './runtime-browser.tokens';\n\n/**\n * Page component that wraps RuntimeBrowserComponent with optional message override.\n * Use RUNTIME_BROWSER_MESSAGES token to provide custom/translated messages at route level.\n */\n@Component({\n selector: 'mm-runtime-browser-page',\n standalone: true,\n imports: [RuntimeBrowserComponent],\n template: `<mm-runtime-browser [messages]=\"messages\" />`,\n})\nexport class RuntimeBrowserPageComponent {\n private readonly injectedMessages = inject(RUNTIME_BROWSER_MESSAGES, {\n optional: true,\n });\n\n protected readonly messages: RuntimeBrowserMessages = this.injectedMessages\n ? this.injectedMessages\n : DEFAULT_RUNTIME_BROWSER_MESSAGES;\n}\n","import type { Provider } from '@angular/core';\nimport { Route, Routes } from '@angular/router';\nimport { Roles } from '@meshmakers/shared-auth';\nimport type { SVGIcon } from '@progress/kendo-svg-icons';\nimport { EntityDetailComponent } from './entity-detail.component';\nimport { RuntimeBrowserPageComponent } from './runtime-browser-page.component';\n\n/** Options for creating runtime browser routes. */\nexport interface RuntimeBrowserRouteOptions {\n /** Base path for breadcrumb URLs (e.g. 'repository/browser', 'administration/plant-management'). */\n basePath: string;\n /** Breadcrumb label for the main browser view. Default: 'Runtime Browser'. */\n breadcrumbLabel?: string;\n /** Breadcrumb label for the entity detail view. Default: 'Entity Details'. */\n entityBreadcrumbLabel?: string;\n /** Optional SVG icon for breadcrumbs. */\n svgIcon?: SVGIcon;\n /** Optional custom page component for the main view (overrides RuntimeBrowserPageComponent). */\n pageComponent?: unknown;\n /** Optional route-level providers (e.g. for RUNTIME_BROWSER_MESSAGES). */\n providers?: Provider[];\n}\n\n/**\n * Creates routes for the runtime browser feature (main view + entity detail).\n * Use these as children of a parent route that has a router-outlet.\n *\n * @example\n * // In repository.routes.ts\n * import { storage } from '@meshmakers/octo-ui';\n * {\n * path: 'browser',\n * component: RuntimeBrowserOutletComponent,\n * children: createRuntimeBrowserRoutes({\n * basePath: 'repository/browser',\n * breadcrumbLabel: 'Runtime Browser',\n * entityBreadcrumbLabel: 'Entity Details',\n * svgIcon: storage,\n * }),\n * data: { roles: [Roles.AdminPanelManagement], breadcrumb: [{ label: 'Repository', url: 'repository' }] },\n * }\n */\nexport function createRuntimeBrowserRoutes(\n options: RuntimeBrowserRouteOptions,\n): Routes {\n const {\n basePath,\n breadcrumbLabel = 'Runtime Browser',\n entityBreadcrumbLabel = 'Entity Details',\n svgIcon,\n pageComponent,\n providers = [],\n } = options;\n\n const mainRoute: Route = {\n path: '',\n component: (pageComponent as never) ?? RuntimeBrowserPageComponent,\n data: {\n roles: [Roles.AdminPanelManagement],\n breadcrumb: [\n {\n label: breadcrumbLabel,\n ...(svgIcon && { svgIcon }),\n url: basePath,\n },\n ],\n },\n ...(providers.length > 0 && { providers }),\n };\n\n const entityRoute: Route = {\n path: 'entity/:id',\n component: EntityDetailComponent,\n data: {\n roles: [Roles.AdminPanelManagement],\n breadcrumb: [\n {\n label: breadcrumbLabel,\n ...(svgIcon && { svgIcon }),\n url: basePath,\n },\n {\n label: entityBreadcrumbLabel,\n url: `${basePath}/entity/:id`,\n },\n ],\n },\n };\n\n return [mainRoute, entityRoute];\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n Output,\n ViewChild\n} from '@angular/core';\nimport { PopupComponent } from '@progress/kendo-angular-popup';\nimport { ButtonComponent } from '@progress/kendo-angular-buttons';\nimport { SVGIconComponent } from '@progress/kendo-angular-icons';\nimport { arrowRotateCwIcon } from '@progress/kendo-svg-icons';\n\n@Component({\n selector: 'mm-tenant-switcher',\n standalone: true,\n imports: [\n PopupComponent,\n ButtonComponent,\n SVGIconComponent\n ],\n template: `\n @if (currentTenantId) {\n <div #badgeEl class=\"tenant-badge\" [class.denied]=\"isDenied\" (click)=\"onToggle()\">\n <span class=\"tenant-icon\">{{ isDenied ? '\\u26A0' : '\\u25C6' }}</span>\n <span class=\"tenant-name\">{{ currentTenantId }}</span>\n @if (isDenied) {\n <span class=\"denied-label\">NO ACCESS</span>\n }\n </div>\n\n @if (showPopup && !isDenied) {\n <kendo-popup #popupContent [anchor]=\"badgeEl\"\n (anchorViewportLeave)=\"showPopup = false\">\n <div class=\"tenant-popup\">\n <div class=\"tenant-popup-header\">\n <span>Switch Tenant</span>\n <button kendoButton fillMode=\"flat\" size=\"small\" class=\"refresh-btn\"\n [disabled]=\"isRefreshing\"\n title=\"Refresh tenant list\"\n (click)=\"onRefresh($event)\">\n <kendo-svgicon [icon]=\"refreshIcon\" size=\"small\"\n [class.spinning]=\"isRefreshing\"></kendo-svgicon>\n </button>\n </div>\n <ul class=\"tenant-list\">\n @for (tenant of allowedTenants; track tenant) {\n <li class=\"tenant-list-item\" [class.active]=\"tenant === currentTenantId\"\n (click)=\"onSelectTenant(tenant)\">\n <span class=\"tenant-list-icon\">&#9670;</span>\n <span>{{ tenant }}</span>\n </li>\n }\n </ul>\n </div>\n </kendo-popup>\n }\n }\n `,\n styles: [`\n :host {\n display: inline-flex;\n align-items: center;\n }\n\n .tenant-badge {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 14px;\n background: var(--mm-tenant-switcher-bg, var(--kendo-color-surface, transparent));\n border: 1px solid var(--mm-tenant-switcher-border, var(--kendo-color-border, #dee2e6));\n border-radius: var(--mm-tenant-switcher-radius, 4px 16px 16px 4px);\n box-shadow: var(--mm-tenant-switcher-shadow, none);\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover {\n background: var(--mm-tenant-switcher-bg-hover, var(--kendo-color-base-hover, rgba(0, 0, 0, 0.04)));\n box-shadow: var(--mm-tenant-switcher-shadow-hover, var(--mm-tenant-switcher-shadow, none));\n }\n }\n\n .tenant-icon {\n font-size: 0.7rem;\n color: var(--mm-tenant-switcher-accent, var(--kendo-color-primary, #ff6358));\n animation: var(--mm-tenant-switcher-icon-animation, none);\n }\n\n .tenant-name {\n font-family: var(--mm-tenant-switcher-font, inherit);\n font-size: 0.85rem;\n font-weight: 600;\n letter-spacing: 1px;\n color: var(--mm-tenant-switcher-accent, var(--kendo-color-primary, #ff6358));\n text-transform: uppercase;\n text-shadow: var(--mm-tenant-switcher-text-shadow, none);\n }\n\n .denied {\n background: var(--mm-tenant-switcher-denied-bg, var(--mm-tenant-switcher-bg, var(--kendo-color-surface, transparent)));\n border-color: var(--mm-tenant-switcher-denied-border, var(--kendo-color-error, #d9534f));\n box-shadow: var(--mm-tenant-switcher-denied-shadow, none);\n }\n\n .denied .tenant-icon,\n .denied .tenant-name {\n color: var(--mm-tenant-switcher-denied-accent, var(--kendo-color-error, #d9534f));\n text-shadow: var(--mm-tenant-switcher-denied-text-shadow, none);\n }\n\n .denied-label {\n font-family: var(--mm-tenant-switcher-font, inherit);\n font-size: 0.55rem;\n font-weight: 700;\n letter-spacing: 1px;\n color: var(--mm-tenant-switcher-denied-accent, var(--kendo-color-error, #d9534f));\n background: var(--mm-tenant-switcher-denied-label-bg, color-mix(in srgb, var(--kendo-color-error, #d9534f) 15%, transparent));\n padding: 2px 6px;\n border-radius: 3px;\n }\n\n .tenant-popup {\n min-width: 220px;\n padding: 8px 0;\n background: var(--kendo-color-surface, #fff);\n border: 1px solid var(--kendo-color-border, #dee2e6);\n border-radius: 4px;\n }\n\n .tenant-popup-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 16px;\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--kendo-color-subtle, #666);\n border-bottom: 1px solid var(--kendo-color-border, #dee2e6);\n margin-bottom: 4px;\n }\n\n .refresh-btn {\n padding: 2px;\n min-width: unset;\n }\n\n .spinning {\n animation: spin 0.8s linear infinite;\n }\n\n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n .tenant-list {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n .tenant-list-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 16px;\n cursor: pointer;\n font-size: 0.85rem;\n transition: background 0.15s ease;\n\n &:hover {\n background: var(--kendo-color-base-hover, rgba(0, 0, 0, 0.04));\n }\n\n &.active {\n color: var(--kendo-color-primary, #ff6358);\n font-weight: 600;\n }\n }\n\n .tenant-list-icon {\n font-size: 0.5rem;\n color: var(--kendo-color-subtle, #666);\n }\n\n .tenant-list-item.active .tenant-list-icon {\n color: var(--kendo-color-primary, #ff6358);\n }\n\n @keyframes mm-icon-pulse {\n 0%, 100% { opacity: 1; transform: scale(1); }\n 50% { opacity: 0.7; transform: scale(1.1); }\n }\n `]\n})\nexport class TenantSwitcherComponent {\n @Input() currentTenantId: string | null = null;\n @Input() allowedTenants: string[] = [];\n @Input() isDenied = false;\n\n @Output() tenantSelected = new EventEmitter<string>();\n @Output() refreshRequested = new EventEmitter<void>();\n\n protected readonly refreshIcon = arrowRotateCwIcon;\n protected isRefreshing = false;\n\n @ViewChild('badgeEl', { read: ElementRef })\n private anchor: ElementRef | null = null;\n\n @ViewChild('popupContent', { read: ElementRef })\n private popup: ElementRef | null = null;\n\n showPopup = false;\n\n @HostListener('document:keydown', ['$event'])\n onKeydown(event: KeyboardEvent): void {\n if (event.code === 'Escape') {\n this.showPopup = false;\n }\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.contains(event.target)) {\n this.showPopup = false;\n }\n }\n\n onToggle(): void {\n if (!this.isDenied) {\n this.showPopup = !this.showPopup;\n }\n }\n\n onSelectTenant(tenantId: string): void {\n if (tenantId !== this.currentTenantId) {\n this.tenantSelected.emit(tenantId);\n }\n this.showPopup = false;\n }\n\n onRefresh(event: MouseEvent): void {\n event.stopPropagation();\n if (!this.isRefreshing) {\n this.isRefreshing = true;\n this.refreshRequested.emit();\n // Reset spinning after a short delay to give visual feedback\n setTimeout(() => this.isRefreshing = false, 1500);\n }\n }\n\n private contains(target: EventTarget | null): boolean {\n return (\n (this.anchor?.nativeElement.contains(target) ?? false) ||\n (this.popup?.nativeElement.contains(target) ?? false)\n );\n }\n}\n","/*\n * Public API Surface of octo-ui\n */\nimport { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { provideAnimationsAsync } from '@angular/platform-browser/animations/async';\nimport { provideOctoServices } from '@meshmakers/octo-services';\nimport { provideMmSharedAuth } from '@meshmakers/shared-auth';\nimport { provideMmSharedUi } from '@meshmakers/shared-ui';\nimport { AttributeSortSelectorDialogService } from './lib/attribute-sort-selector-dialog';\nimport { CkTypeSelectorDialogService } from './lib/ck-type-selector-dialog';\nimport { PropertyConverterService } from './lib/property-grid';\nimport { RuntimeEntityVariableDialogService } from './lib/runtime-entity-variable-dialog';\n\nexport * from './lib/attribute-selector-dialog';\nexport * from './lib/attribute-sort-selector-dialog';\nexport * from './lib/ck-type-selector-dialog';\nexport * from './lib/ck-type-selector-input';\nexport * from './lib/data-sources/octo-graph-ql-data-source';\nexport * from './lib/data-sources/octo-graph-ql-hierarchy-data-source';\nexport * from './lib/entity-id-info';\nexport * from './lib/field-filter-editor';\nexport * from './lib/octo-loader';\nexport * from './lib/property-grid';\nexport * from './lib/runtime-browser';\nexport * from './lib/runtime-entity-variable-dialog';\nexport * from './lib/tenant-switcher';\n\n/**\n * Provides OctoUi services using modern Angular provider functions.\n * This is the recommended approach for library providers.\n */\nexport function provideOctoUi(): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideOctoServices(),\n provideMmSharedUi(),\n provideMmSharedAuth(),\n provideAnimationsAsync(),\n AttributeSortSelectorDialogService,\n PropertyConverterService,\n CkTypeSelectorDialogService,\n RuntimeEntityVariableDialogService,\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["AttributeValueTypeDto","i2","i3","i4","i5","i1","i6","Apollo","takeUntil","map","catchError","switchMap"],"mappings":"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"}
1
+ {"version":3,"file":"meshmakers-octo-ui.mjs","sources":["../../../../projects/meshmakers/octo-ui/src/lib/attribute-sort-selector-dialog/attribute-sort-selector-dialog.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/attribute-sort-selector-dialog/attribute-sort-selector-dialog.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/ck-type-selector-dialog/ck-type-selector-dialog.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/ck-type-selector-dialog/ck-type-selector-dialog.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/property-grid/models/property-grid.models.ts","../../../../projects/meshmakers/octo-ui/src/lib/property-grid/services/property-converter.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/property-grid/components/property-value-display.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/property-grid/components/property-grid.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/property-grid/index.ts","../../../../projects/meshmakers/octo-ui/src/lib/ck-type-selector-input/ck-type-selector-input.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/attribute-selector-dialog/attribute-selector-dialog.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/attribute-selector-dialog/attribute-selector-dialog.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-entity-variable-dialog/runtime-entity-variable-dialog.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-entity-variable-dialog/runtime-entity-variable-dialog.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/data-sources/octo-graph-ql-data-source.ts","../../../../projects/meshmakers/octo-ui/src/lib/data-sources/octo-graph-ql-hierarchy-data-source.ts","../../../../projects/meshmakers/octo-ui/src/lib/entity-id-info/entity-id-info.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/field-filter-editor/field-filter-editor.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/octo-loader/octo-loader.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/getBinaryInfo.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/getRuntimeEntityAssociationsById.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/data-sources/entity-associations-data-source.directive.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/runtime-browser.model.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/components/entity-detail-view.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/getRuntimeEntityById.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/data-sources/entity-detail-data-source.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/models/rt-entity-id.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/entity-detail.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/icons/custom-svg-icons.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/getRuntimeEntitiesByType.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/data-sources/ck-type-entities-data-source.directive.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/services/runtime-browser-state.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/services/type-helper.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/createEntities.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/services/attribute-coordinator.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/getCkAttributesDetailed.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/getCkRecordDetailed.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/services/attribute-recognition.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/services/attribute-mapper-utils.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/services/attribute-mapper.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/services/attribute-data.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/components/attribute-field/attribute-field.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/components/attributes-group/attributes-group.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/components/shared-editor/shared-editor.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/components/create-editor/create-editor-component.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/updateRuntimeEntities.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/components/update-editor/update-editor-component.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/components/runtime-browser-details.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/deleteEntities.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/getCkModels.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/getTreeNodes.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/getTrees.ts","../../../../projects/meshmakers/octo-ui/src/lib/graphQL/updateTreeNodes.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/data-sources/runtime-browser-data-source.service.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/runtime-browser.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/runtime-browser-outlet.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/runtime-browser.tokens.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/runtime-browser-page.component.ts","../../../../projects/meshmakers/octo-ui/src/lib/runtime-browser/runtime-browser.routes.ts","../../../../projects/meshmakers/octo-ui/src/lib/tenant-switcher/tenant-switcher.component.ts","../../../../projects/meshmakers/octo-ui/src/public-api.ts","../../../../projects/meshmakers/octo-ui/src/meshmakers-octo-ui.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, OnInit, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n AttributeItem,\n AttributeSelectorService,\n AttributeValueTypeDto,\n} from '@meshmakers/octo-services';\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { WindowModule, WindowRef } from '@progress/kendo-angular-dialog';\nimport { DropDownListModule } from '@progress/kendo-angular-dropdowns';\nimport {\n CellClickEvent,\n GridDataResult,\n GridModule,\n} from '@progress/kendo-angular-grid';\nimport { IconsModule } from '@progress/kendo-angular-icons';\nimport { InputsModule } from '@progress/kendo-angular-inputs';\nimport {\n searchIcon,\n sortAscSmallIcon,\n sortDescSmallIcon,\n} from '@progress/kendo-svg-icons';\nimport { Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\n\nexport interface AttributeSortItem {\n attributePath: string;\n attributeValueType: string;\n sortOrder: 'standard' | 'ascending' | 'descending';\n}\n\nexport interface AttributeSortSelectorDialogData {\n ckTypeId: string;\n selectedAttributes?: AttributeSortItem[];\n dialogTitle?: string;\n /** When set, controls whether navigation properties are included in the attribute list */\n includeNavigationProperties?: boolean;\n /** When true, hides the navigation property controls (if they were to be added) */\n hideNavigationControls?: boolean;\n /** When set, restricts the available attributes to only these attribute paths (filtered client-side after fetching) */\n attributePaths?: string[];\n}\n\nexport interface AttributeSortSelectorDialogResult {\n selectedAttributes: AttributeSortItem[];\n}\n\nexport interface SortOption {\n text: string;\n value: 'standard' | 'ascending' | 'descending';\n}\n\ninterface ValueTypeFilterOption {\n text: string;\n value: AttributeValueTypeDto | null;\n}\n\n@Component({\n selector: 'mm-attribute-sort-selector-dialog',\n standalone: true,\n host: { 'data-component': 'attribute-sort-selector' },\n imports: [\n CommonModule,\n FormsModule,\n GridModule,\n ButtonsModule,\n InputsModule,\n DropDownListModule,\n IconsModule,\n WindowModule,\n ],\n template: `\n <div class=\"attribute-sort-selector-container\">\n <!-- Filter Section -->\n <div class=\"filter-container\">\n <kendo-textbox\n [(ngModel)]=\"searchText\"\n (ngModelChange)=\"onSearchChange($event)\"\n placeholder=\"Search path & description...\"\n class=\"search-input\"\n >\n <ng-template kendoTextBoxSuffixTemplate>\n <button\n kendoButton\n [svgIcon]=\"searchIcon\"\n fillMode=\"clear\"\n ></button>\n </ng-template>\n </kendo-textbox>\n <kendo-dropdownlist\n [data]=\"valueTypeOptions\"\n [(ngModel)]=\"selectedValueTypeFilter\"\n (valueChange)=\"onValueTypeFilterChange($event)\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n class=\"type-filter-dropdown\"\n >\n </kendo-dropdownlist>\n </div>\n\n <!-- Main Content Area - All side by side -->\n <div class=\"lists-container\">\n <!-- Available Attributes -->\n <div class=\"list-section\">\n <h4>Available Attributes</h4>\n <kendo-grid\n [data]=\"availableGridData\"\n [scrollable]=\"'scrollable'\"\n [selectable]=\"{ mode: 'single', enabled: true }\"\n [kendoGridSelectBy]=\"'attributePath'\"\n [(selectedKeys)]=\"selectedAvailableKeys\"\n (cellClick)=\"onAvailableCellClick($event)\"\n [resizable]=\"true\"\n class=\"attribute-grid\"\n >\n <kendo-grid-column\n field=\"attributePath\"\n title=\"Attribute Path\"\n [width]=\"250\"\n ></kendo-grid-column>\n <kendo-grid-column\n field=\"attributeValueType\"\n title=\"Type\"\n [width]=\"100\"\n ></kendo-grid-column>\n <kendo-grid-column\n field=\"description\"\n title=\"Description\"\n ></kendo-grid-column>\n </kendo-grid>\n </div>\n\n <!-- Sort Options in center -->\n <div class=\"sort-options-section\">\n <h4>Sort Order</h4>\n <div class=\"sort-buttons\">\n <button\n kendoButton\n [fillMode]=\"currentSortOrder === 'standard' ? 'solid' : 'outline'\"\n [themeColor]=\"\n currentSortOrder === 'standard' ? 'primary' : 'base'\n \"\n (click)=\"setSortOrder('standard')\"\n class=\"sort-button\"\n title=\"Standard (no sort)\"\n >\n —\n </button>\n <button\n kendoButton\n [svgIcon]=\"sortAscIcon\"\n [fillMode]=\"\n currentSortOrder === 'ascending' ? 'solid' : 'outline'\n \"\n [themeColor]=\"\n currentSortOrder === 'ascending' ? 'primary' : 'base'\n \"\n (click)=\"setSortOrder('ascending')\"\n class=\"sort-button\"\n title=\"Ascending\"\n ></button>\n <button\n kendoButton\n [svgIcon]=\"sortDescIcon\"\n [fillMode]=\"\n currentSortOrder === 'descending' ? 'solid' : 'outline'\n \"\n [themeColor]=\"\n currentSortOrder === 'descending' ? 'primary' : 'base'\n \"\n (click)=\"setSortOrder('descending')\"\n class=\"sort-button\"\n title=\"Descending\"\n ></button>\n </div>\n\n <button\n kendoButton\n themeColor=\"primary\"\n [disabled]=\"selectedAvailableKeys.length === 0\"\n (click)=\"addAttributeWithSort()\"\n class=\"add-button\"\n >\n Add →\n </button>\n </div>\n\n <!-- Selected Attributes -->\n <div class=\"list-section\">\n <h4>Selected ({{ selectedAttributes.length }})</h4>\n <kendo-grid\n [data]=\"selectedGridData\"\n [scrollable]=\"'scrollable'\"\n [selectable]=\"{ mode: 'single', enabled: true }\"\n [kendoGridSelectBy]=\"'attributePath'\"\n [(selectedKeys)]=\"selectedChosenKeys\"\n (cellClick)=\"onSelectedCellClick($event)\"\n [resizable]=\"true\"\n class=\"attribute-grid\"\n >\n <kendo-grid-column\n field=\"attributePath\"\n title=\"Attribute Path\"\n [width]=\"180\"\n ></kendo-grid-column>\n <kendo-grid-column field=\"sortOrder\" title=\"Sort\" [width]=\"100\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <div class=\"sort-display\">\n <span class=\"sort-indicator\">{{\n getSortIndicator(dataItem.sortOrder)\n }}</span>\n <span>{{ getSortText(dataItem.sortOrder) }}</span>\n </div>\n </ng-template>\n </kendo-grid-column>\n <kendo-grid-column title=\"\" [width]=\"50\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <button\n kendoButton\n size=\"small\"\n fillMode=\"flat\"\n (click)=\"removeAttribute(dataItem)\"\n title=\"Remove\"\n >\n ✕\n </button>\n </ng-template>\n </kendo-grid-column>\n </kendo-grid>\n </div>\n </div>\n\n <!-- Action Bar -->\n <div class=\"action-bar\">\n <button kendoButton (click)=\"onCancel()\">Cancel</button>\n <button kendoButton themeColor=\"primary\" (click)=\"onOk()\">Apply</button>\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n height: 100%;\n }\n\n .attribute-sort-selector-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 16px 20px;\n box-sizing: border-box;\n gap: 16px;\n }\n\n .filter-container {\n display: flex;\n gap: 12px;\n flex-shrink: 0;\n }\n\n .search-input {\n flex: 1;\n }\n\n .type-filter-dropdown {\n width: 160px;\n flex-shrink: 0;\n }\n\n .lists-container {\n display: flex;\n gap: 16px;\n flex: 1;\n min-height: 0;\n }\n\n .list-section {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n }\n\n .list-section h4,\n .sort-options-section h4 {\n margin: 0 0 10px 0;\n font-size: 0.85rem;\n font-weight: 600;\n flex-shrink: 0;\n }\n\n .attribute-grid {\n border-radius: 4px;\n flex: 1;\n min-height: 200px;\n }\n\n .attribute-grid ::ng-deep .k-grid-table tbody tr {\n cursor: pointer;\n }\n\n .sort-options-section {\n width: 120px;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n padding-top: 32px;\n }\n\n .sort-buttons {\n display: flex;\n flex-direction: row;\n gap: 4px;\n }\n\n .sort-button {\n flex: 1;\n min-width: 36px;\n height: 36px;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .add-button {\n width: 100%;\n margin-top: 16px;\n }\n\n .sort-display {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .sort-indicator {\n font-size: 14px;\n font-weight: bold;\n color: var(--kendo-color-primary, #ff6358);\n }\n\n .action-bar {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n flex-shrink: 0;\n padding-top: 8px;\n border-top: 1px solid var(--kendo-color-border, #dee2e6);\n }\n `,\n ],\n})\nexport class AttributeSortSelectorDialogComponent implements OnInit {\n private readonly windowRef = inject(WindowRef);\n private readonly attributeService = inject(AttributeSelectorService);\n private searchSubject = new Subject<string>();\n\n // Dialog data\n public data!: AttributeSortSelectorDialogData;\n public ckTypeId!: string;\n public includeNavigationProperties: boolean | undefined = undefined;\n private attributePathsSet: Set<string> | null = null;\n public searchText = '';\n public currentSortOrder: 'standard' | 'ascending' | 'descending' = 'standard';\n public selectedValueTypeFilter: AttributeValueTypeDto | null = null;\n\n // Grid data\n public availableAttributes: AttributeItem[] = [];\n public selectedAttributes: AttributeSortItem[] = [];\n public availableGridData: GridDataResult = { data: [], total: 0 };\n public selectedGridData: GridDataResult = { data: [], total: 0 };\n\n // Selection tracking\n public selectedAvailableKeys: string[] = [];\n public selectedChosenKeys: string[] = [];\n\n // Double-click tracking\n private lastClickTime = 0;\n private lastClickedItem: string | null = null;\n private readonly doubleClickDelay = 300;\n\n // UI configuration\n public dialogTitle = 'Select Attributes with Sort Order';\n\n public sortOptions: SortOption[] = [\n { text: 'Standard', value: 'standard' },\n { text: 'Ascending', value: 'ascending' },\n { text: 'Descending', value: 'descending' },\n ];\n\n public valueTypeOptions: ValueTypeFilterOption[] = [\n { text: 'All Types', value: null },\n { text: 'String', value: AttributeValueTypeDto.StringDto },\n { text: 'Integer', value: AttributeValueTypeDto.IntegerDto },\n { text: 'Double', value: AttributeValueTypeDto.DoubleDto },\n { text: 'Boolean', value: AttributeValueTypeDto.BooleanDto },\n { text: 'DateTime', value: AttributeValueTypeDto.DateTimeDto },\n { text: 'DateTimeOffset', value: AttributeValueTypeDto.DateTimeOffsetDto },\n { text: 'Enum', value: AttributeValueTypeDto.EnumDto },\n { text: 'TimeSpan', value: AttributeValueTypeDto.TimeSpanDto },\n ];\n\n // Icons\n protected readonly searchIcon = searchIcon;\n protected readonly sortAscIcon = sortAscSmallIcon;\n protected readonly sortDescIcon = sortDescSmallIcon;\n\n ngOnInit(): void {\n // Get dialog data\n if (this.data) {\n this.ckTypeId = this.data.ckTypeId;\n this.dialogTitle =\n this.data.dialogTitle || 'Select Attributes with Sort Order';\n this.includeNavigationProperties = this.data.includeNavigationProperties;\n this.attributePathsSet = this.data.attributePaths ? new Set(this.data.attributePaths) : null;\n\n if (\n this.data.selectedAttributes &&\n this.data.selectedAttributes.length > 0\n ) {\n this.selectedAttributes = [...this.data.selectedAttributes];\n this.updateSelectedGrid();\n }\n }\n\n // Set up search debouncing\n this.searchSubject\n .pipe(debounceTime(300), distinctUntilChanged())\n .subscribe((searchText) => {\n this.loadAvailableAttributes(searchText);\n });\n\n // Load initial data\n this.loadAvailableAttributes();\n }\n\n private loadAvailableAttributes(searchTerm?: string): void {\n this.attributeService.getAvailableAttributes(\n this.ckTypeId, undefined, undefined, undefined,\n this.selectedValueTypeFilter || undefined,\n searchTerm || undefined,\n this.includeNavigationProperties,\n undefined\n ).subscribe(result => {\n // Filter out already selected attributes\n const selectedPaths = new Set(this.selectedAttributes.map(a => a.attributePath));\n\n // Apply client-side attribute path restriction if set\n const filteredItems = this.attributePathsSet\n ? result.items.filter(item => this.attributePathsSet!.has(item.attributePath))\n : result.items;\n\n this.availableAttributes = filteredItems.filter(item => !selectedPaths.has(item.attributePath));\n this.updateAvailableGrid();\n });\n }\n\n public onSearchChange(value: string): void {\n this.searchSubject.next(value);\n }\n\n public onValueTypeFilterChange(_value: AttributeValueTypeDto | null): void {\n this.loadAvailableAttributes(this.searchText || undefined);\n }\n\n public setSortOrder(order: 'standard' | 'ascending' | 'descending'): void {\n this.currentSortOrder = order;\n }\n\n public addAttributeWithSort(): void {\n if (this.selectedAvailableKeys.length === 0) return;\n\n const attributePath = this.selectedAvailableKeys[0];\n const attribute = this.availableAttributes.find(\n (a) => a.attributePath === attributePath,\n );\n\n if (attribute) {\n this.addAttributeToSelected(attribute);\n }\n }\n\n public onAvailableCellClick(event: CellClickEvent): void {\n const dataItem = event.dataItem as AttributeItem;\n if (!dataItem) return;\n\n const currentTime = Date.now();\n const attributePath = dataItem.attributePath;\n\n if (\n this.lastClickedItem === attributePath &&\n currentTime - this.lastClickTime <= this.doubleClickDelay\n ) {\n // Double-click detected - add attribute with current sort\n this.addAttributeToSelected(dataItem);\n this.lastClickTime = 0;\n this.lastClickedItem = null;\n } else {\n this.lastClickTime = currentTime;\n this.lastClickedItem = attributePath;\n }\n }\n\n public onSelectedCellClick(event: CellClickEvent): void {\n const dataItem = event.dataItem as AttributeSortItem;\n if (!dataItem) return;\n\n const currentTime = Date.now();\n const attributePath = dataItem.attributePath;\n\n if (\n this.lastClickedItem === attributePath &&\n currentTime - this.lastClickTime <= this.doubleClickDelay\n ) {\n // Double-click detected - remove attribute\n this.removeAttribute(dataItem);\n this.lastClickTime = 0;\n this.lastClickedItem = null;\n } else {\n this.lastClickTime = currentTime;\n this.lastClickedItem = attributePath;\n }\n }\n\n private addAttributeToSelected(attribute: AttributeItem): void {\n const sortItem: AttributeSortItem = {\n attributePath: attribute.attributePath,\n attributeValueType: attribute.attributeValueType,\n sortOrder: this.currentSortOrder,\n };\n\n this.selectedAttributes.push(sortItem);\n\n // Remove from available\n this.availableAttributes = this.availableAttributes.filter(\n (item) => item.attributePath !== attribute.attributePath,\n );\n\n // Clear selections\n this.selectedAvailableKeys = [];\n\n this.updateGrids();\n }\n\n public removeAttribute(attribute: AttributeSortItem): void {\n // Remove from selected\n this.selectedAttributes = this.selectedAttributes.filter(\n (item) => item.attributePath !== attribute.attributePath,\n );\n\n // Add back to available (convert back to AttributeItem)\n const availableItem: AttributeItem = {\n attributePath: attribute.attributePath,\n attributeValueType: attribute.attributeValueType,\n };\n\n this.availableAttributes.push(availableItem);\n this.availableAttributes.sort((a, b) =>\n a.attributePath.localeCompare(b.attributePath),\n );\n\n // Clear selections\n this.selectedChosenKeys = this.selectedChosenKeys.filter(\n (key) => key !== attribute.attributePath,\n );\n\n this.updateGrids();\n }\n\n public getSortIndicator(sortOrder: string): string {\n switch (sortOrder) {\n case 'ascending':\n return '↑';\n case 'descending':\n return '↓';\n default:\n return '';\n }\n }\n\n public getSortText(sortOrder: string): string {\n const option = this.sortOptions.find((opt) => opt.value === sortOrder);\n return option?.text || sortOrder;\n }\n\n private updateGrids(): void {\n this.updateAvailableGrid();\n this.updateSelectedGrid();\n }\n\n private updateAvailableGrid(): void {\n this.availableGridData = {\n data: this.availableAttributes,\n total: this.availableAttributes.length,\n };\n }\n\n private updateSelectedGrid(): void {\n this.selectedGridData = {\n data: this.selectedAttributes,\n total: this.selectedAttributes.length,\n };\n }\n\n public onOk(): void {\n const result: AttributeSortSelectorDialogResult = {\n selectedAttributes: this.selectedAttributes,\n };\n this.windowRef.close(result);\n }\n\n public onCancel(): void {\n this.windowRef.close();\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { WindowService, WindowRef, WindowCloseResult } from '@progress/kendo-angular-dialog';\nimport { firstValueFrom } from 'rxjs';\nimport { WindowStateService } from '@meshmakers/shared-ui';\nimport {\n AttributeSortSelectorDialogComponent,\n AttributeSortSelectorDialogData,\n AttributeSortSelectorDialogResult,\n AttributeSortItem\n} from './attribute-sort-selector-dialog.component';\n\nexport interface AttributeSortSelectorResult {\n confirmed: boolean;\n selectedAttributes: AttributeSortItem[];\n}\n\n@Injectable()\nexport class AttributeSortSelectorDialogService {\n private readonly windowService = inject(WindowService);\n private readonly windowStateService = inject(WindowStateService);\n\n /**\n * Opens the attribute sort selector dialog\n * @param ckTypeId The CkType ID to fetch attributes for\n * @param selectedAttributes Optional array of pre-selected attributes with sort orders\n * @param dialogTitle Optional custom dialog title\n * @param includeNavigationProperties Optional flag to control navigation property inclusion\n * @param hideNavigationControls Optional flag to hide the navigation property controls\n * @returns Promise that resolves with the result containing selected attributes with sort orders and confirmation status\n */\n public async openAttributeSortSelector(\n ckTypeId: string,\n selectedAttributes?: AttributeSortItem[],\n dialogTitle?: string,\n includeNavigationProperties?: boolean,\n hideNavigationControls?: boolean,\n attributePaths?: string[]\n ): Promise<AttributeSortSelectorResult> {\n const data: AttributeSortSelectorDialogData = {\n ckTypeId,\n selectedAttributes,\n dialogTitle,\n includeNavigationProperties,\n hideNavigationControls,\n attributePaths\n };\n\n const size = this.windowStateService.resolveWindowSize('attribute-sort-selector', { width: 1200, height: 750 });\n\n const windowRef: WindowRef = this.windowService.open({\n content: AttributeSortSelectorDialogComponent,\n width: size.width,\n height: size.height,\n minWidth: 1050,\n minHeight: 700,\n resizable: true,\n title: dialogTitle || 'Select Attributes with Sort Order'\n });\n\n this.windowStateService.applyModalBehavior('attribute-sort-selector', windowRef);\n\n // Pass data to the component\n const contentRef = windowRef.content as { instance?: AttributeSortSelectorDialogComponent } | undefined;\n if (contentRef?.instance) {\n contentRef.instance.data = data;\n }\n\n try {\n const result = await firstValueFrom(windowRef.result);\n\n if (result instanceof WindowCloseResult) {\n return {\n confirmed: false,\n selectedAttributes: []\n };\n }\n\n if (result && typeof result === 'object' && 'selectedAttributes' in result) {\n const dialogResult = result as AttributeSortSelectorDialogResult;\n return {\n confirmed: true,\n selectedAttributes: dialogResult.selectedAttributes || []\n };\n } else {\n return {\n confirmed: false,\n selectedAttributes: []\n };\n }\n } catch {\n return {\n confirmed: false,\n selectedAttributes: []\n };\n }\n }\n}\n","import { Component, OnInit, OnDestroy, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { WindowRef, WindowModule } from '@progress/kendo-angular-dialog';\nimport { GridModule, GridDataResult, SelectionEvent, PageChangeEvent, RowArgs, CellClickEvent } from '@progress/kendo-angular-grid';\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { InputsModule } from '@progress/kendo-angular-inputs';\nimport { DropDownsModule } from '@progress/kendo-angular-dropdowns';\nimport { IconsModule } from '@progress/kendo-angular-icons';\nimport { LoaderModule } from '@progress/kendo-angular-indicators';\nimport { searchIcon, filterClearIcon } from '@progress/kendo-svg-icons';\nimport {\n CkTypeSelectorService,\n CkTypeSelectorItem,\n CkTypeSelectorResult\n} from '@meshmakers/octo-services';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, map } from 'rxjs/operators';\n\nexport interface CkTypeSelectorDialogData {\n selectedCkTypeId?: string;\n ckModelIds?: string[];\n dialogTitle?: string;\n allowAbstract?: boolean;\n derivedFromRtCkTypeId?: string;\n}\n\nexport interface CkTypeSelectorDialogResult {\n selectedCkType: CkTypeSelectorItem;\n}\n\n@Component({\n selector: 'mm-ck-type-selector-dialog',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n GridModule,\n ButtonsModule,\n InputsModule,\n DropDownsModule,\n IconsModule,\n LoaderModule,\n WindowModule\n ],\n template: `\n <div class=\"ck-type-selector-container\">\n <div class=\"filter-container\">\n <div class=\"filter-row\">\n <div class=\"filter-item\" *ngIf=\"!derivedFromRtCkTypeId\">\n <label>Model Filter</label>\n <kendo-combobox\n [data]=\"availableModels\"\n [(ngModel)]=\"selectedModel\"\n (valueChange)=\"onModelFilterChange($event)\"\n [allowCustom]=\"false\"\n [clearButton]=\"true\"\n placeholder=\"All Models\"\n class=\"filter-input\">\n </kendo-combobox>\n </div>\n <div class=\"filter-item flex-grow\">\n <label>Type Search</label>\n <kendo-textbox\n [(ngModel)]=\"searchText\"\n (ngModelChange)=\"onSearchChange($event)\"\n placeholder=\"Search types...\"\n class=\"filter-input\">\n <ng-template kendoTextBoxSuffixTemplate>\n <button kendoButton [svgIcon]=\"searchIcon\" fillMode=\"clear\" size=\"small\"></button>\n </ng-template>\n </kendo-textbox>\n </div>\n <div class=\"filter-item filter-actions\">\n <label>&nbsp;</label>\n <button kendoButton [svgIcon]=\"filterClearIcon\" (click)=\"clearFilters()\" title=\"Clear filters\"></button>\n </div>\n </div>\n </div>\n\n <div class=\"grid-container\">\n <kendo-grid\n [data]=\"gridData\"\n [loading]=\"isLoading\"\n [selectable]=\"{ mode: 'single' }\"\n [pageable]=\"{ pageSizes: [25, 50, 100] }\"\n [pageSize]=\"pageSize\"\n [skip]=\"skip\"\n (pageChange)=\"onPageChange($event)\"\n (selectionChange)=\"onSelectionChange($event)\"\n (cellClick)=\"onCellClick($event)\"\n [kendoGridSelectBy]=\"selectItemBy\"\n [(selectedKeys)]=\"selectedKeys\"\n class=\"type-grid\">\n <kendo-grid-column field=\"rtCkTypeId\" title=\"Type\" [width]=\"300\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <span [class.abstract-type]=\"dataItem.isAbstract\" [class.final-type]=\"dataItem.isFinal\">\n {{ dataItem.rtCkTypeId }}\n </span>\n <span *ngIf=\"dataItem.isAbstract\" class=\"type-badge abstract\">abstract</span>\n <span *ngIf=\"dataItem.isFinal\" class=\"type-badge final\">final</span>\n </ng-template>\n </kendo-grid-column>\n <kendo-grid-column field=\"baseTypeRtCkTypeId\" title=\"Base Type\" [width]=\"200\">\n <ng-template kendoGridCellTemplate let-dataItem>\n {{ dataItem.baseTypeRtCkTypeId || '-' }}\n </ng-template>\n </kendo-grid-column>\n <kendo-grid-column field=\"description\" title=\"Description\">\n <ng-template kendoGridCellTemplate let-dataItem>\n {{ dataItem.description || '-' }}\n </ng-template>\n </kendo-grid-column>\n </kendo-grid>\n </div>\n\n <div class=\"selection-info\" *ngIf=\"selectedType\">\n <strong>Selected:</strong> {{ selectedType.rtCkTypeId }}\n </div>\n\n <div class=\"dialog-actions\">\n <button kendoButton (click)=\"onCancel()\">Cancel</button>\n <button kendoButton themeColor=\"primary\" [disabled]=\"!selectedType || (selectedType.isAbstract && !allowAbstract)\" (click)=\"onConfirm()\">OK</button>\n </div>\n </div>\n `,\n styles: [`\n :host {\n display: flex;\n flex-direction: column;\n height: 100%;\n }\n\n .ck-type-selector-container {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n padding: 20px;\n box-sizing: border-box;\n gap: 12px;\n }\n\n .filter-container {\n margin-bottom: 16px;\n flex-shrink: 0;\n }\n\n .filter-row {\n display: flex;\n gap: 16px;\n align-items: flex-end;\n }\n\n .filter-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .filter-item label {\n font-size: 12px;\n font-weight: 500;\n }\n\n .filter-item.flex-grow {\n flex: 1;\n }\n\n .filter-item.filter-actions {\n flex-shrink: 0;\n }\n\n .filter-input {\n min-width: 180px;\n }\n\n .grid-container {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n\n .grid-container kendo-grid,\n .grid-container .type-grid {\n flex: 1;\n min-height: 200px;\n }\n\n .type-grid {\n border-radius: 4px;\n }\n\n .type-grid ::ng-deep .k-grid-table tbody tr {\n cursor: pointer;\n }\n\n .abstract-type {\n font-style: italic;\n opacity: 0.7;\n }\n\n .final-type {\n font-weight: 600;\n }\n\n .type-badge {\n display: inline-block;\n font-size: 10px;\n padding: 1px 6px;\n border-radius: 10px;\n margin-left: 8px;\n text-transform: uppercase;\n }\n\n .type-badge.abstract {\n background-color: var(--kendo-color-warning, #ffc107);\n color: var(--kendo-color-on-warning, #000);\n opacity: 0.8;\n }\n\n .type-badge.final {\n background-color: var(--kendo-color-success, #28a745);\n color: var(--kendo-color-on-success, #fff);\n opacity: 0.8;\n }\n\n .selection-info {\n margin-top: 12px;\n padding: 8px 12px;\n background: var(--kendo-color-success-subtle, #d4edda);\n border: 1px solid var(--kendo-color-success, #28a745);\n border-radius: 4px;\n font-size: 14px;\n flex-shrink: 0;\n }\n\n .dialog-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding: 8px 20px 0 20px;\n flex-shrink: 0;\n }\n `]\n})\nexport class CkTypeSelectorDialogComponent implements OnInit, OnDestroy {\n private readonly windowRef = inject(WindowRef);\n private readonly ckTypeSelectorService = inject(CkTypeSelectorService);\n private searchSubject = new Subject<string>();\n private subscriptions = new Subscription();\n\n protected readonly searchIcon = searchIcon;\n protected readonly filterClearIcon = filterClearIcon;\n\n public dialogTitle = 'Select Construction Kit Type';\n public allowAbstract = true;\n\n public searchText = '';\n public selectedModel: string | null = null;\n public availableModels: string[] = [];\n\n public gridData: GridDataResult = { data: [], total: 0 };\n public isLoading = false;\n public pageSize = 50;\n public skip = 0;\n\n public selectedKeys: string[] = [];\n public selectedType: CkTypeSelectorItem | null = null;\n\n // Selection key function - returns fullName as unique identifier\n public selectItemBy = (context: RowArgs): string => (context.dataItem as CkTypeSelectorItem).fullName;\n\n private initialCkModelIds?: string[];\n public derivedFromRtCkTypeId?: string;\n private lastClickTime = 0;\n private lastClickRtCkTypeId: string | null = null;\n\n /** Data passed from the service */\n public data?: CkTypeSelectorDialogData;\n\n ngOnInit(): void {\n if (this.data) {\n this.dialogTitle = this.data.dialogTitle || 'Select Construction Kit Type';\n this.allowAbstract = this.data.allowAbstract ?? true;\n this.initialCkModelIds = this.data.ckModelIds;\n this.derivedFromRtCkTypeId = this.data.derivedFromRtCkTypeId;\n\n if (this.data.selectedCkTypeId) {\n this.selectedKeys = [this.data.selectedCkTypeId];\n }\n }\n\n // Set up search debouncing\n this.subscriptions.add(\n this.searchSubject.pipe(\n debounceTime(300),\n distinctUntilChanged()\n ).subscribe(() => {\n this.skip = 0;\n this.loadTypes();\n })\n );\n\n // Load initial types and extract available models\n this.loadTypes();\n if (!this.derivedFromRtCkTypeId) {\n this.loadAvailableModels();\n }\n }\n\n ngOnDestroy(): void {\n this.subscriptions.unsubscribe();\n }\n\n private loadTypes(): void {\n this.isLoading = true;\n\n const source$ = this.derivedFromRtCkTypeId\n ? this.getDerivedTypes(this.searchText || undefined)\n : this.ckTypeSelectorService.getCkTypes({\n ckModelIds: this.selectedModel ? [this.selectedModel] : this.initialCkModelIds,\n searchText: this.searchText || undefined,\n first: this.pageSize,\n skip: this.skip\n });\n\n this.subscriptions.add(\n source$.subscribe({\n next: (result: CkTypeSelectorResult) => {\n this.gridData = {\n data: result.items,\n total: result.totalCount\n };\n\n // Restore selection if exists\n if (this.selectedKeys.length > 0) {\n const selectedItem = result.items.find(\n (item: CkTypeSelectorItem) =>\n item.fullName === this.selectedKeys[0]\n );\n if (selectedItem) {\n this.selectedType = selectedItem;\n }\n }\n\n this.isLoading = false;\n },\n error: () => {\n this.isLoading = false;\n this.gridData = { data: [], total: 0 };\n }\n })\n );\n }\n\n private getDerivedTypes(searchText?: string) {\n const derivedService = this.ckTypeSelectorService as {\n getDerivedCkTypes?: (\n rtCkTypeId: string,\n options?: {\n searchText?: string;\n ignoreAbstractTypes?: boolean;\n includeSelf?: boolean;\n }\n ) => import('rxjs').Observable<CkTypeSelectorResult>;\n };\n\n if (derivedService.getDerivedCkTypes) {\n return derivedService.getDerivedCkTypes(this.derivedFromRtCkTypeId!, {\n searchText\n });\n }\n\n return this.ckTypeSelectorService\n .getCkTypes({\n searchText,\n first: 1000,\n skip: 0\n })\n .pipe(\n map(result => this.filterDerivedTypesFallback(result, this.derivedFromRtCkTypeId!))\n );\n }\n\n private filterDerivedTypesFallback(\n result: CkTypeSelectorResult,\n baseRtCkTypeId: string\n ): CkTypeSelectorResult {\n const allowed = new Set<string>([baseRtCkTypeId]);\n let changed = true;\n\n while (changed) {\n changed = false;\n for (const item of result.items) {\n if (\n item.baseTypeRtCkTypeId &&\n allowed.has(item.baseTypeRtCkTypeId) &&\n !allowed.has(item.rtCkTypeId)\n ) {\n allowed.add(item.rtCkTypeId);\n changed = true;\n }\n }\n }\n\n const items = result.items.filter(item =>\n allowed.has(item.rtCkTypeId) && (this.allowAbstract || !item.isAbstract)\n );\n\n return { items, totalCount: items.length };\n }\n\n private loadAvailableModels(): void {\n // Load all types to extract unique models\n this.subscriptions.add(\n this.ckTypeSelectorService.getCkTypes({\n first: 1000\n }).subscribe(result => {\n const modelSet = new Set<string>();\n result.items.forEach(item => {\n // Extract model from fullName (format: \"ModelName-Version/TypeName-Version\")\n const modelMatch = item.fullName.match(/^([^/]+)\\//);\n if (modelMatch) {\n modelSet.add(modelMatch[1]);\n }\n });\n this.availableModels = Array.from(modelSet).sort();\n })\n );\n }\n\n public onSearchChange(value: string): void {\n this.searchSubject.next(value);\n }\n\n public onModelFilterChange(_value: string | null): void {\n this.skip = 0;\n this.loadTypes();\n }\n\n public clearFilters(): void {\n this.searchText = '';\n this.selectedModel = null;\n this.skip = 0;\n this.loadTypes();\n }\n\n public onPageChange(event: PageChangeEvent): void {\n this.skip = event.skip;\n this.pageSize = event.take;\n this.loadTypes();\n }\n\n public onSelectionChange(event: SelectionEvent): void {\n const selectedItems = event.selectedRows;\n if (selectedItems && selectedItems.length > 0) {\n this.selectedType = selectedItems[0].dataItem as CkTypeSelectorItem;\n } else {\n this.selectedType = null;\n }\n }\n\n public onCellClick(event: CellClickEvent): void {\n const item = event.dataItem as CkTypeSelectorItem;\n const now = Date.now();\n if (item && item.rtCkTypeId === this.lastClickRtCkTypeId && (now - this.lastClickTime) < 400) {\n // Double-click detected\n if (!item.isAbstract || this.allowAbstract) {\n this.selectedType = item;\n this.onConfirm();\n }\n }\n this.lastClickTime = now;\n this.lastClickRtCkTypeId = item?.rtCkTypeId ?? null;\n }\n\n public onCancel(): void {\n this.windowRef.close();\n }\n\n public onConfirm(): void {\n if (this.selectedType) {\n const result: CkTypeSelectorDialogResult = {\n selectedCkType: this.selectedType\n };\n this.windowRef.close(result);\n }\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { WindowService, WindowCloseResult } from '@progress/kendo-angular-dialog';\nimport { firstValueFrom } from 'rxjs';\nimport { CkTypeSelectorItem } from '@meshmakers/octo-services';\nimport { WindowStateService } from '@meshmakers/shared-ui';\nimport {\n CkTypeSelectorDialogComponent,\n CkTypeSelectorDialogData,\n CkTypeSelectorDialogResult\n} from './ck-type-selector-dialog.component';\n\nexport interface CkTypeSelectorResult {\n confirmed: boolean;\n selectedCkType: CkTypeSelectorItem | null;\n}\n\n@Injectable()\nexport class CkTypeSelectorDialogService {\n private readonly windowService = inject(WindowService);\n private readonly windowStateService = inject(WindowStateService);\n\n /**\n * Opens the CkType selector dialog\n * @param options Dialog options\n * @returns Promise that resolves with the result containing selected CkType and confirmation status\n */\n public async openCkTypeSelector(options: {\n selectedCkTypeId?: string;\n ckModelIds?: string[];\n dialogTitle?: string;\n allowAbstract?: boolean;\n derivedFromRtCkTypeId?: string;\n } = {}): Promise<CkTypeSelectorResult> {\n const data: CkTypeSelectorDialogData = {\n selectedCkTypeId: options.selectedCkTypeId,\n ckModelIds: options.ckModelIds,\n dialogTitle: options.dialogTitle,\n allowAbstract: options.allowAbstract,\n derivedFromRtCkTypeId: options.derivedFromRtCkTypeId\n };\n\n const size = this.windowStateService.resolveWindowSize('ck-type-selector', { width: 900, height: 650 });\n\n const windowRef = this.windowService.open({\n content: CkTypeSelectorDialogComponent,\n width: size.width,\n height: size.height,\n minWidth: 750,\n minHeight: 550,\n resizable: true,\n title: options.dialogTitle || 'Select Construction Kit Type'\n });\n\n this.windowStateService.applyModalBehavior('ck-type-selector', windowRef);\n\n // Pass data to the component\n const contentRef = windowRef.content as { instance?: CkTypeSelectorDialogComponent } | undefined;\n if (contentRef?.instance) {\n contentRef.instance.data = data;\n }\n\n try {\n const result = await firstValueFrom(windowRef.result);\n\n if (result instanceof WindowCloseResult) {\n return {\n confirmed: false,\n selectedCkType: null\n };\n }\n\n if (result && typeof result === 'object' && 'selectedCkType' in result) {\n const dialogResult = result as CkTypeSelectorDialogResult;\n return {\n confirmed: true,\n selectedCkType: dialogResult.selectedCkType\n };\n } else {\n return {\n confirmed: false,\n selectedCkType: null\n };\n }\n } catch {\n return {\n confirmed: false,\n selectedCkType: null\n };\n }\n }\n}\n","// Note: This should eventually be imported from a shared location\n// For now, we define our own enum that matches the GraphQL generated types\nexport enum AttributeValueTypeDto {\n BinaryDto = 'BINARY',\n BinaryLinkedDto = 'BINARY_LINKED',\n BooleanDto = 'BOOLEAN',\n DateTimeDto = 'DATE_TIME',\n DateTimeOffsetDto = 'DATE_TIME_OFFSET',\n DoubleDto = 'DOUBLE',\n EnumDto = 'ENUM',\n GeospatialPointDto = 'GEOSPATIAL_POINT',\n IntDto = 'INT',\n IntegerDto = 'INTEGER',\n Integer_64Dto = 'INTEGER_64',\n IntegerArrayDto = 'INTEGER_ARRAY',\n Int_64Dto = 'INT_64',\n IntArrayDto = 'INT_ARRAY',\n RecordDto = 'RECORD',\n RecordArrayDto = 'RECORD_ARRAY',\n StringDto = 'STRING',\n StringArrayDto = 'STRING_ARRAY',\n TimeSpanDto = 'TIME_SPAN'\n}\n\n/**\n * Represents a property item in the property grid\n */\nexport interface PropertyGridItem {\n /** Unique identifier for the property */\n id: string;\n /** Property name/key */\n name: string;\n /** Display name for the property (optional, falls back to name) */\n displayName?: string;\n /** Current value of the property */\n value: unknown;\n /** Data type of the property */\n type: AttributeValueTypeDto;\n /** Description/tooltip for the property */\n description?: string;\n /** Whether the property is read-only */\n readOnly?: boolean;\n /** Category for grouping properties */\n category?: string;\n /** Whether the property is required */\n required?: boolean;\n /** Custom validation rules */\n validators?: Record<string, unknown>[];\n /** Custom editor configuration */\n editorConfig?: Record<string, unknown>;\n}\n\n/**\n * Configuration options for the property grid\n */\nexport interface PropertyGridConfig {\n /** Whether the grid is in read-only mode */\n readOnlyMode?: boolean;\n /** Custom editors for specific types */\n customEditors?: Record<string, unknown>;\n /** Whether to show type icons */\n showTypeIcons?: boolean;\n /** Height of the grid */\n height?: string;\n /** Whether to show the search box */\n showSearch?: boolean;\n}\n\n/**\n * Event data for property changes\n */\nexport interface PropertyChangeEvent {\n /** The property that changed */\n property: PropertyGridItem;\n /** The old value */\n oldValue: unknown;\n /** The new value */\n newValue: unknown;\n}\n\n/**\n * Supported display modes for complex values\n */\nexport enum PropertyDisplayMode {\n /** Simple text representation */\n Text = 'text',\n /** JSON formatted display */\n Json = 'json',\n /** Custom template display */\n Custom = 'custom'\n}\n\n/**\n * Categories for default property grouping\n */\nexport enum DefaultPropertyCategory {\n General = 'General',\n System = 'System',\n Attributes = 'Attributes',\n Associations = 'Associations',\n Metadata = 'Metadata'\n}\n\n/**\n * Event data for binary download requests\n */\nexport interface BinaryDownloadEvent {\n /** The binary ID to download */\n binaryId: string;\n /** Optional filename for the download */\n filename?: string;\n /** Optional content type */\n contentType?: string;\n /** Optional download URI if already available */\n downloadUri?: string;\n}","import { Injectable, inject } from '@angular/core';\nimport { Observable, of, forkJoin } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { PropertyGridItem, DefaultPropertyCategory, AttributeValueTypeDto } from '../models/property-grid.models';\nimport { CkTypeAttributeService, CkTypeAttributeInfo } from '@meshmakers/octo-services';\n\n/** Represents an attribute from an RtEntity */\ninterface RtAttribute {\n attributeName?: string | null;\n value?: unknown;\n}\n\n/** Represents an RtRecord with a ckRecordId and attributes */\ninterface RtRecord {\n ckRecordId?: string;\n attributes?: RtAttribute[];\n}\n\n/** Represents an RtEntity with system properties and attributes */\ninterface RtEntity {\n rtId?: string;\n ckTypeId?: string;\n rtCreationDateTime?: string;\n rtChangedDateTime?: string;\n rtWellKnownName?: string;\n attributes?: { items?: RtAttribute[] };\n}\n\n/**\n * Service for converting various data structures to PropertyGridItem format.\n * Uses Construction Kit (CK) type definitions for accurate attribute type resolution.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class PropertyConverterService {\n private readonly ckTypeAttributeService = inject(CkTypeAttributeService);\n\n /**\n * Convert OctoMesh RtEntity attributes to property grid items using CK type definitions.\n * @param attributes The attributes array from RtEntity\n * @param ckTypeId The fullName of the CK type to look up attribute types\n * @returns Observable of PropertyGridItem array\n */\n convertRtEntityAttributes(attributes: RtAttribute[] | null | undefined, ckTypeId: string): Observable<PropertyGridItem[]> {\n if (!attributes || attributes.length === 0) {\n return of([]);\n }\n\n return this.ckTypeAttributeService.getCkTypeAttributes(ckTypeId).pipe(\n switchMap(ckAttributes => {\n const ckAttributeMap = this.buildAttributeTypeMap(ckAttributes);\n return this.convertAttributesWithCkTypes(attributes, ckAttributeMap);\n })\n );\n }\n\n /**\n * Convert any JavaScript object to property grid items using reflection.\n * This method remains synchronous as there is no CK type for generic JS objects.\n */\n convertObjectToProperties(obj: Record<string, unknown> | null | undefined, category?: string): PropertyGridItem[] {\n if (!obj || typeof obj !== 'object') {\n return [];\n }\n\n return Object.keys(obj).map(key => ({\n id: `obj_${key}`,\n name: key,\n displayName: key,\n value: obj[key],\n type: this.inferAttributeType(obj[key]),\n category: category || DefaultPropertyCategory.General,\n readOnly: false,\n description: `Property: ${key}`\n }));\n }\n\n /**\n * Convert RtRecord to property grid items using CK type definitions.\n * @param record The record object containing ckRecordId and attributes\n * @returns Observable of PropertyGridItem array\n */\n convertRtRecordToProperties(record: RtRecord | null | undefined): Observable<PropertyGridItem[]> {\n if (!record || typeof record !== 'object' || !record.attributes) {\n return of([]);\n }\n\n const ckRecordId = record.ckRecordId;\n if (!ckRecordId) {\n return of([]);\n }\n\n return this.ckTypeAttributeService.getCkRecordAttributes(ckRecordId).pipe(\n switchMap(ckAttributes => {\n const ckAttributeMap = this.buildAttributeTypeMap(ckAttributes);\n const properties: PropertyGridItem[] = [];\n\n // Add ckRecordId as system property\n properties.push({\n id: 'ckRecordId',\n name: 'ckRecordId',\n displayName: 'Record ID',\n value: ckRecordId,\n type: AttributeValueTypeDto.StringDto,\n category: DefaultPropertyCategory.System,\n readOnly: true,\n description: 'Construction kit record identifier'\n });\n\n // Convert attributes with CK types (record.attributes is guaranteed non-null by the guard above)\n return this.convertAttributesWithCkTypes(record.attributes!, ckAttributeMap).pipe(\n map(attributeProperties => {\n properties.push(...attributeProperties);\n return properties;\n })\n );\n })\n );\n }\n\n /**\n * Convert OctoMesh RtEntity to comprehensive property list using CK type definitions.\n * @param entity The RtEntity object\n * @returns Observable of PropertyGridItem array\n */\n convertRtEntityToProperties(entity: RtEntity): Observable<PropertyGridItem[]> {\n const properties: PropertyGridItem[] = [];\n\n // System properties\n if (entity.rtId) {\n properties.push({\n id: 'rtId',\n name: 'rtId',\n displayName: 'Runtime ID',\n value: entity.rtId,\n type: AttributeValueTypeDto.StringDto,\n category: DefaultPropertyCategory.System,\n readOnly: true,\n description: 'Unique runtime identifier'\n });\n }\n\n if (entity.ckTypeId) {\n properties.push({\n id: 'ckTypeId',\n name: 'ckTypeId',\n displayName: 'Type ID',\n value: entity.ckTypeId,\n type: AttributeValueTypeDto.StringDto,\n category: DefaultPropertyCategory.System,\n readOnly: true,\n description: 'Construction kit type identifier'\n });\n }\n\n if (entity.rtCreationDateTime) {\n properties.push({\n id: 'rtCreationDateTime',\n name: 'rtCreationDateTime',\n displayName: 'Created',\n value: entity.rtCreationDateTime,\n type: AttributeValueTypeDto.DateTimeDto,\n category: DefaultPropertyCategory.System,\n readOnly: true,\n description: 'Creation date and time'\n });\n }\n\n if (entity.rtChangedDateTime) {\n properties.push({\n id: 'rtChangedDateTime',\n name: 'rtChangedDateTime',\n displayName: 'Modified',\n value: entity.rtChangedDateTime,\n type: AttributeValueTypeDto.DateTimeDto,\n category: DefaultPropertyCategory.System,\n readOnly: true,\n description: 'Last modification date and time'\n });\n }\n\n if (entity.rtWellKnownName) {\n properties.push({\n id: 'rtWellKnownName',\n name: 'rtWellKnownName',\n displayName: 'Well Known Name',\n value: entity.rtWellKnownName,\n type: AttributeValueTypeDto.StringDto,\n category: DefaultPropertyCategory.General,\n readOnly: false,\n description: 'Well-known name for the entity'\n });\n }\n\n // If no ckTypeId or no attributes, return system properties only\n if (!entity.ckTypeId || !entity.attributes?.items) {\n return of(properties);\n }\n\n // Load CK type attributes and convert entity attributes\n return this.convertRtEntityAttributes(entity.attributes.items, entity.ckTypeId).pipe(\n map(attributeProperties => {\n properties.push(...attributeProperties);\n return properties;\n })\n );\n }\n\n /**\n * Build a map from attribute name to attribute value type from CK definitions\n */\n private buildAttributeTypeMap(ckAttributes: CkTypeAttributeInfo[]): Map<string, string> {\n const map = new Map<string, string>();\n for (const attr of ckAttributes) {\n map.set(attr.attributeName, attr.attributeValueType);\n }\n return map;\n }\n\n /**\n * Convert attributes using CK type map for type resolution\n */\n private convertAttributesWithCkTypes(\n attributes: RtAttribute[],\n ckAttributeMap: Map<string, string>\n ): Observable<PropertyGridItem[]> {\n if (!attributes || attributes.length === 0) {\n return of([]);\n }\n\n // Check if any attributes have nested records that need async conversion\n const hasNestedRecords = attributes.some(attr =>\n attr?.value && typeof attr.value === 'object' && attr.value !== null && 'attributes' in attr.value\n );\n\n if (!hasNestedRecords) {\n // No nested records - convert synchronously\n const items = attributes.map((attr, index) => this.convertSingleAttribute(attr, index, ckAttributeMap));\n return of(items);\n }\n\n // Has nested records - need to handle async conversion\n const conversionObservables = attributes.map((attr, index) => {\n if (attr?.value && typeof attr.value === 'object' && attr.value !== null && 'attributes' in attr.value) {\n // Nested record - convert async\n return this.convertRtRecordToProperties(attr.value as RtRecord).pipe(\n map(nestedProperties => ({\n id: `attr_${index}_${attr?.attributeName || 'unknown'}`,\n name: attr?.attributeName || `attribute_${index}`,\n displayName: attr?.attributeName || `attribute_${index}`,\n value: nestedProperties,\n type: this.getAttributeType(attr?.attributeName, ckAttributeMap),\n category: DefaultPropertyCategory.Attributes,\n readOnly: false,\n description: `Attribute: ${attr?.attributeName}`\n }))\n );\n } else {\n // Regular attribute - return as observable\n return of(this.convertSingleAttribute(attr, index, ckAttributeMap));\n }\n });\n\n return forkJoin(conversionObservables);\n }\n\n /**\n * Convert a single attribute to PropertyGridItem\n */\n private convertSingleAttribute(\n attr: RtAttribute,\n index: number,\n ckAttributeMap: Map<string, string>\n ): PropertyGridItem {\n const value = this.convertRtEntityAttributeValueSync(attr?.value);\n\n return {\n id: `attr_${index}_${attr?.attributeName || 'unknown'}`,\n name: attr?.attributeName || `attribute_${index}`,\n displayName: attr?.attributeName || `attribute_${index}`,\n value: value,\n type: this.getAttributeType(attr?.attributeName, ckAttributeMap),\n category: DefaultPropertyCategory.Attributes,\n readOnly: false,\n description: `Attribute: ${attr?.attributeName}`\n };\n }\n\n /**\n * Get attribute type from CK map\n */\n private getAttributeType(attributeName: string | null | undefined, ckAttributeMap: Map<string, string>): AttributeValueTypeDto {\n if (!attributeName) {\n return AttributeValueTypeDto.StringDto;\n }\n\n const ckType = ckAttributeMap.get(attributeName);\n if (ckType) {\n return this.mapCkTypeToAttributeValueType(ckType);\n }\n\n // Fallback for attributes not found in CK (should not happen in normal cases)\n return AttributeValueTypeDto.StringDto;\n }\n\n /**\n * Map CK type string to AttributeValueTypeDto enum\n */\n private mapCkTypeToAttributeValueType(ckType: string): AttributeValueTypeDto {\n // The ckType from GraphQL should match the enum values\n const typeMap: Record<string, AttributeValueTypeDto> = {\n 'BINARY': AttributeValueTypeDto.BinaryDto,\n 'BINARY_LINKED': AttributeValueTypeDto.BinaryLinkedDto,\n 'BOOLEAN': AttributeValueTypeDto.BooleanDto,\n 'DATE_TIME': AttributeValueTypeDto.DateTimeDto,\n 'DATE_TIME_OFFSET': AttributeValueTypeDto.DateTimeOffsetDto,\n 'DOUBLE': AttributeValueTypeDto.DoubleDto,\n 'ENUM': AttributeValueTypeDto.EnumDto,\n 'GEOSPATIAL_POINT': AttributeValueTypeDto.GeospatialPointDto,\n 'INT': AttributeValueTypeDto.IntDto,\n 'INTEGER': AttributeValueTypeDto.IntegerDto,\n 'INTEGER_64': AttributeValueTypeDto.Integer_64Dto,\n 'INTEGER_ARRAY': AttributeValueTypeDto.IntegerArrayDto,\n 'INT_64': AttributeValueTypeDto.Int_64Dto,\n 'INT_ARRAY': AttributeValueTypeDto.IntArrayDto,\n 'RECORD': AttributeValueTypeDto.RecordDto,\n 'RECORD_ARRAY': AttributeValueTypeDto.RecordArrayDto,\n 'STRING': AttributeValueTypeDto.StringDto,\n 'STRING_ARRAY': AttributeValueTypeDto.StringArrayDto,\n 'TIME_SPAN': AttributeValueTypeDto.TimeSpanDto\n };\n\n return typeMap[ckType] || AttributeValueTypeDto.StringDto;\n }\n\n /**\n * Convert attribute value synchronously (for non-record values)\n */\n private convertRtEntityAttributeValueSync(value: unknown): unknown {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (Array.isArray(value)) {\n return value.map(v => this.convertRtEntityAttributeValueSync(v));\n }\n\n // For nested records, return as-is (will be handled by async conversion if needed)\n if (typeof value === 'object' && 'attributes' in value) {\n return value;\n }\n\n return value;\n }\n\n /**\n * Infer attribute type from JavaScript value.\n * Used only for convertObjectToProperties where no CK type is available.\n */\n private inferAttributeType(value: unknown): AttributeValueTypeDto {\n if (value === null || value === undefined) {\n return AttributeValueTypeDto.StringDto;\n }\n\n if (typeof value === 'boolean') {\n return AttributeValueTypeDto.BooleanDto;\n }\n\n if (typeof value === 'number') {\n return Number.isInteger(value) ? AttributeValueTypeDto.IntDto : AttributeValueTypeDto.DoubleDto;\n }\n\n if (typeof value === 'string') {\n if (this.isIsoDateString(value)) {\n return AttributeValueTypeDto.DateTimeDto;\n }\n return AttributeValueTypeDto.StringDto;\n }\n\n if (value instanceof Date) {\n return AttributeValueTypeDto.DateTimeDto;\n }\n\n if (Array.isArray(value)) {\n if (value.length > 0) {\n const firstType = this.inferAttributeType(value[0]);\n switch (firstType) {\n case AttributeValueTypeDto.StringDto:\n return AttributeValueTypeDto.StringArrayDto;\n case AttributeValueTypeDto.IntDto:\n case AttributeValueTypeDto.DoubleDto:\n return AttributeValueTypeDto.IntegerArrayDto;\n case AttributeValueTypeDto.RecordDto:\n return AttributeValueTypeDto.RecordArrayDto;\n default:\n return AttributeValueTypeDto.StringArrayDto;\n }\n }\n return AttributeValueTypeDto.StringArrayDto;\n }\n\n if (typeof value === 'object') {\n return AttributeValueTypeDto.RecordDto;\n }\n\n return AttributeValueTypeDto.StringDto;\n }\n\n /**\n * Check if string is ISO date format\n */\n private isIsoDateString(value: string): boolean {\n const isoDateRegex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z?$/;\n return isoDateRegex.test(value) && !isNaN(Date.parse(value));\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SVGIconModule } from '@progress/kendo-angular-icons';\nimport { ButtonModule } from '@progress/kendo-angular-buttons';\nimport { chevronRightIcon, chevronDownIcon, downloadIcon } from '@progress/kendo-svg-icons';\nimport { AttributeValueTypeDto, PropertyDisplayMode, BinaryDownloadEvent } from '../models/property-grid.models';\n\n/** Shape of binary linked value from OctoMesh */\ninterface BinaryLinkedValue {\n binaryId?: string;\n downloadUri?: string;\n filename?: string;\n size?: number;\n contentType?: string;\n}\n\n/**\n * Component for displaying property values with appropriate formatting\n */\n@Component({\n selector: 'mm-property-value-display',\n standalone: true,\n imports: [CommonModule, SVGIconModule, ButtonModule],\n template: `\n <div class=\"property-value-display\" [ngClass]=\"'type-' + type.toLowerCase()\">\n\n @if (isExpandableRecord()) {\n <div class=\"expandable-record\">\n <!-- Expand/Collapse Button and Summary -->\n <div class=\"record-header\" (click)=\"toggleExpansion()\">\n <kendo-svgicon\n [icon]=\"isExpanded ? chevronDownIcon : chevronRightIcon\"\n class=\"expand-icon\">\n </kendo-svgicon>\n <span class=\"record-summary\">{{ getRecordSummary() }}</span>\n <span class=\"type-indicator\" [title]=\"getTypeDescription()\">\n {{ getTypeIndicator() }}\n </span>\n </div>\n\n <!-- Expanded Content -->\n @if (isExpanded) {\n <div class=\"record-content\">\n @if (type === AttributeValueTypeDto.RecordArrayDto && Array.isArray(value)) {\n @for (item of value; track $index) {\n <div class=\"array-item\">\n <span class=\"array-index\">[{{ $index }}]</span>\n <div class=\"nested-properties\">\n @for (prop of getObjectProperties(item); track prop.key) {\n <div class=\"nested-property\">\n <span class=\"property-key\">{{ prop.key }}:</span>\n <mm-property-value-display\n [value]=\"prop.value\"\n [type]=\"getPropertyType(prop.value)\">\n </mm-property-value-display>\n </div>\n }\n </div>\n </div>\n }\n } @else {\n <div class=\"nested-properties\">\n @for (prop of getObjectProperties(value); track prop.key) {\n <div class=\"nested-property\">\n <span class=\"property-key\">{{ prop.key }}:</span>\n <mm-property-value-display\n [value]=\"prop.value\"\n [type]=\"getPropertyType(prop.value)\">\n </mm-property-value-display>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n } @else if (isBinaryLinkedWithDownload()) {\n <!-- Binary Linked with download capability -->\n <div class=\"binary-linked-display\">\n <div class=\"binary-info\">\n @if (getBinaryFilename()) {\n <span class=\"filename\">{{ getBinaryFilename() }}</span>\n }\n @if (getBinarySize()) {\n <span class=\"file-size\">({{ formatFileSize(getBinarySize()) }})</span>\n }\n @if (getBinaryContentType()) {\n <span class=\"content-type\">{{ getBinaryContentType() }}</span>\n }\n </div>\n <button\n kendoButton\n size=\"small\"\n fillMode=\"flat\"\n [svgIcon]=\"downloadIcon\"\n title=\"Download file\"\n (click)=\"onDownload()\">\n Download\n </button>\n </div>\n } @else {\n <!-- Non-expandable value display -->\n @switch (displayMode) {\n @case (PropertyDisplayMode.Json) {\n <pre class=\"json-display\">{{ getFormattedValue() }}</pre>\n }\n @case (PropertyDisplayMode.Text) {\n <span class=\"text-display\" [innerHTML]=\"getFormattedValue()\"></span>\n }\n @default {\n <span class=\"default-display\">{{ getFormattedValue() }}</span>\n }\n }\n\n @if (isComplexType() && !isExpandableRecord()) {\n <span class=\"type-indicator\" [title]=\"getTypeDescription()\">\n {{ getTypeIndicator() }}\n </span>\n }\n }\n </div>\n `,\n styles: [`\n .property-value-display {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n min-height: 20px;\n font-family: inherit;\n width: 100%;\n }\n\n .expandable-record {\n width: 100%;\n }\n\n .record-header {\n display: flex;\n align-items: center;\n gap: 6px;\n cursor: pointer;\n padding: 4px;\n border-radius: 4px;\n transition: background-color 0.2s;\n }\n\n .record-header:hover {\n background: var(--kendo-color-base-subtle);\n }\n\n .expand-icon {\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n transition: transform 0.2s;\n }\n\n .record-summary {\n flex: 1;\n font-size: 0.9em;\n }\n\n .record-content {\n margin-left: 22px;\n margin-top: 8px;\n border-left: 2px solid var(--kendo-color-border);\n padding-left: 12px;\n background: var(--kendo-color-base-subtle);\n border-radius: 0 4px 4px 0;\n }\n\n .nested-properties {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 8px;\n }\n\n .nested-property {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n min-height: 24px;\n }\n\n .property-key {\n font-weight: 500;\n color: var(--kendo-color-primary);\n min-width: 100px;\n flex-shrink: 0;\n font-size: 0.9em;\n }\n\n .array-item {\n border: 1px solid var(--kendo-color-border);\n border-radius: 4px;\n margin-bottom: 8px;\n background: transparent;\n }\n\n .array-index {\n display: inline-block;\n background: var(--kendo-color-primary);\n color: white;\n padding: 2px 8px;\n font-size: 0.8em;\n font-weight: bold;\n border-radius: 4px 0 4px 0;\n margin-bottom: 4px;\n }\n\n .json-display {\n font-family: 'Courier New', monospace;\n font-size: 12px;\n margin: 0;\n padding: 4px 8px;\n background: var(--kendo-color-base-subtle);\n border-radius: 4px;\n max-width: 300px;\n overflow: auto;\n }\n\n .text-display,\n .default-display {\n flex: 1;\n word-break: break-word;\n overflow-wrap: anywhere;\n }\n\n .type-boolean {\n .default-display {\n font-weight: 500;\n &.value-true { color: #28a745; }\n &.value-false { color: #dc3545; }\n }\n }\n\n .type-datetime,\n .type-datetimeoffset {\n .default-display {\n font-family: monospace;\n font-size: 0.9em;\n }\n }\n\n .type-int,\n .type-integer,\n .type-double {\n .default-display {\n font-family: monospace;\n text-align: right;\n }\n }\n\n .type-indicator {\n font-size: 0.75em;\n padding: 2px 6px;\n background: var(--kendo-color-primary);\n color: white;\n border-radius: 3px;\n text-transform: uppercase;\n font-weight: 500;\n flex-shrink: 0;\n }\n\n .empty-value {\n color: var(--kendo-color-subtle);\n font-style: italic;\n }\n\n .null-value {\n color: var(--kendo-color-error);\n font-style: italic;\n }\n\n .binary-linked-display {\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n }\n\n .binary-info {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n }\n\n .filename {\n font-weight: 500;\n color: var(--kendo-color-on-app-surface);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .file-size {\n font-size: 0.85em;\n color: var(--kendo-color-subtle);\n flex-shrink: 0;\n }\n\n .content-type {\n font-size: 0.75em;\n padding: 2px 6px;\n background: var(--kendo-color-base-subtle);\n border-radius: 3px;\n color: var(--kendo-color-subtle);\n flex-shrink: 0;\n }\n `]\n})\nexport class PropertyValueDisplayComponent implements OnInit {\n @Input() value: unknown;\n @Input() type: AttributeValueTypeDto = AttributeValueTypeDto.StringDto;\n @Input() displayMode: PropertyDisplayMode = PropertyDisplayMode.Text;\n\n /** Emitted when a binary download is requested */\n @Output() binaryDownload = new EventEmitter<BinaryDownloadEvent>();\n\n // Expansion state\n isExpanded = false;\n\n readonly PropertyDisplayMode = PropertyDisplayMode;\n readonly AttributeValueTypeDto = AttributeValueTypeDto;\n readonly Array = Array;\n readonly chevronRightIcon = chevronRightIcon;\n readonly chevronDownIcon = chevronDownIcon;\n readonly downloadIcon = downloadIcon;\n\n ngOnInit() {\n // Debug every property value display component creation\n console.log('PropertyValueDisplayComponent ngOnInit:', {\n type: this.type,\n value: this.value,\n valueType: typeof this.value,\n valueStringified: JSON.stringify(this.value),\n isExpandableRecord: this.isExpandableRecord()\n });\n }\n\n /**\n * Get formatted display value\n */\n getFormattedValue(): string {\n if (this.value === null) {\n return '<null>';\n }\n\n if (this.value === undefined) {\n return '<undefined>';\n }\n\n if (this.value === '') {\n return '<empty>';\n }\n\n switch (this.type) {\n case AttributeValueTypeDto.BooleanDto:\n return this.value ? '✓ True' : '✗ False';\n\n case AttributeValueTypeDto.DateTimeDto:\n case AttributeValueTypeDto.DateTimeOffsetDto:\n return this.formatDateTime(this.value);\n\n case AttributeValueTypeDto.StringArrayDto:\n case AttributeValueTypeDto.IntegerArrayDto:\n case AttributeValueTypeDto.IntArrayDto:\n return this.formatArray(this.value);\n\n case AttributeValueTypeDto.RecordDto:\n case AttributeValueTypeDto.RecordArrayDto:\n return this.displayMode === PropertyDisplayMode.Json\n ? JSON.stringify(this.value, null, 2)\n : this.formatObject(this.value);\n\n case AttributeValueTypeDto.BinaryDto:\n case AttributeValueTypeDto.BinaryLinkedDto:\n return this.formatBinary(this.value);\n\n case AttributeValueTypeDto.IntDto:\n case AttributeValueTypeDto.IntegerDto:\n case AttributeValueTypeDto.Integer_64Dto:\n case AttributeValueTypeDto.Int_64Dto:\n return this.formatNumber(this.value, 0);\n\n case AttributeValueTypeDto.DoubleDto:\n return this.formatNumber(this.value, 2);\n\n default:\n return String(this.value);\n }\n }\n\n /**\n * Check if this is an expandable record type\n */\n isExpandableRecord(): boolean {\n // Comprehensive debug logging\n console.log('PropertyValueDisplay: isExpandableRecord check:', {\n type: this.type,\n typeString: String(this.type),\n typeOf: typeof this.type,\n AttributeValueTypeDtoRecordDto: AttributeValueTypeDto.RecordDto,\n AttributeValueTypeDtoRecordArrayDto: AttributeValueTypeDto.RecordArrayDto,\n typeIsRecordDto: this.type === AttributeValueTypeDto.RecordDto,\n typeIsRecordDtoString: this.type === 'RECORD',\n typeIsRecordArrayDto: this.type === AttributeValueTypeDto.RecordArrayDto,\n value: this.value,\n valueType: typeof this.value,\n valueIsNull: this.value == null,\n valueKeys: this.value && typeof this.value === 'object' ? Object.keys(this.value) : 'not object'\n });\n\n // Check for record types\n const isRecordDto = this.type === AttributeValueTypeDto.RecordDto;\n const isRecordArrayDto = this.type === AttributeValueTypeDto.RecordArrayDto;\n const isRecordType = isRecordDto || isRecordArrayDto;\n\n // Simple check: does it have a value?\n const hasValue = this.value != null;\n\n // Simple check: is it an object or array?\n const isObjectLike = typeof this.value === 'object' && this.value != null;\n\n const result = isRecordType && hasValue && isObjectLike;\n\n console.log('PropertyValueDisplay: Expandable result:', {\n isRecordDto,\n isRecordArrayDto,\n isRecordType,\n hasValue,\n isObjectLike,\n finalResult: result\n });\n\n return result;\n }\n\n /**\n * Check if the type is complex (object/array)\n */\n isComplexType(): boolean {\n return [\n AttributeValueTypeDto.RecordDto,\n AttributeValueTypeDto.RecordArrayDto,\n AttributeValueTypeDto.StringArrayDto,\n AttributeValueTypeDto.IntegerArrayDto,\n AttributeValueTypeDto.IntArrayDto,\n AttributeValueTypeDto.BinaryDto,\n AttributeValueTypeDto.BinaryLinkedDto\n ].includes(this.type);\n }\n\n /**\n * Get type indicator text\n */\n getTypeIndicator(): string {\n switch (this.type) {\n case AttributeValueTypeDto.RecordDto:\n return 'RECORD';\n case AttributeValueTypeDto.RecordArrayDto:\n return 'ARR[RECORD]';\n case AttributeValueTypeDto.StringArrayDto:\n return 'ARR[STR]';\n case AttributeValueTypeDto.IntegerArrayDto:\n case AttributeValueTypeDto.IntArrayDto:\n return 'ARR[INT]';\n case AttributeValueTypeDto.BinaryDto:\n case AttributeValueTypeDto.BinaryLinkedDto:\n return 'BIN';\n default:\n return this.type.replace('_DTO', '').replace('DTO', '');\n }\n }\n\n /**\n * Get type description for tooltip\n */\n getTypeDescription(): string {\n switch (this.type) {\n case AttributeValueTypeDto.RecordDto:\n return 'Complex object';\n case AttributeValueTypeDto.RecordArrayDto:\n return 'Array of complex objects';\n case AttributeValueTypeDto.StringArrayDto:\n return 'Array of strings';\n case AttributeValueTypeDto.IntegerArrayDto:\n case AttributeValueTypeDto.IntArrayDto:\n return 'Array of numbers';\n case AttributeValueTypeDto.BinaryDto:\n case AttributeValueTypeDto.BinaryLinkedDto:\n return 'Binary data';\n default:\n return `Type: ${this.type}`;\n }\n }\n\n /**\n * Format date/time values\n */\n private formatDateTime(value: unknown): string {\n try {\n const date = value instanceof Date ? value : new Date(String(value));\n if (isNaN(date.getTime())) {\n return String(value);\n }\n return date.toLocaleString();\n } catch {\n return String(value);\n }\n }\n\n /**\n * Format array values\n */\n private formatArray(value: unknown): string {\n if (!Array.isArray(value)) {\n return String(value);\n }\n\n if (value.length === 0) {\n return '[]';\n }\n\n if (value.length <= 3) {\n return `[${value.join(', ')}]`;\n }\n\n return `[${value.slice(0, 3).join(', ')}, ... +${value.length - 3} more]`;\n }\n\n /**\n * Format object values\n */\n private formatObject(value: unknown): string {\n if (typeof value !== 'object' || value === null) {\n return String(value);\n }\n\n const obj = value as Record<string, unknown>;\n const keys = Object.keys(obj);\n if (keys.length === 0) {\n return '{}';\n }\n\n if (keys.length <= 2) {\n const preview = keys.map(key => `${key}: ${this.truncateValue(obj[key])}`).join(', ');\n return `{${preview}}`;\n }\n\n return `{${keys.slice(0, 2).map(key => `${key}: ${this.truncateValue(obj[key])}`).join(', ')}, ... +${keys.length - 2} more}`;\n }\n\n /**\n * Format binary data\n */\n private formatBinary(value: unknown): string {\n if (value instanceof ArrayBuffer) {\n return `<Binary: ${value.byteLength} bytes>`;\n }\n if (typeof value === 'string' && value.startsWith('data:')) {\n return '<Base64 Data>';\n }\n return '<Binary Data>';\n }\n\n /**\n * Format numeric values\n */\n private formatNumber(value: unknown, decimals: number): string {\n const num = Number(value);\n if (isNaN(num)) {\n return String(value);\n }\n return decimals > 0 ? num.toFixed(decimals) : num.toString();\n }\n\n /**\n * Truncate long values for preview\n */\n private truncateValue(value: unknown): string {\n const str = String(value);\n return str.length > 20 ? str.substring(0, 20) + '...' : str;\n }\n\n /**\n * Toggle expansion state\n */\n toggleExpansion(): void {\n this.isExpanded = !this.isExpanded;\n }\n\n /**\n * Get summary text for record header\n */\n getRecordSummary(): string {\n if (this.type === AttributeValueTypeDto.RecordArrayDto && Array.isArray(this.value)) {\n return `Array with ${this.value.length} item${this.value.length !== 1 ? 's' : ''}`;\n }\n\n if (typeof this.value === 'object' && this.value !== null) {\n\n // Handle regular objects\n const keys = Object.keys(this.value);\n return `Object with ${keys.length} propert${keys.length !== 1 ? 'ies' : 'y'}`;\n }\n\n return 'Complex object';\n }\n\n /**\n * Get properties of an object for display\n */\n getObjectProperties(obj: unknown): {key: string, value: unknown}[] {\n if (typeof obj !== 'object' || obj === null) {\n return [];\n }\n\n if (Array.isArray(obj) && obj.length > 0 && typeof obj[0] === 'object' && obj[0] !== null && 'id' in obj[0] && obj[0].id === 'ckRecordId') {\n // Handle array of records\n return obj.map((item: Record<string, unknown>) => ({\n key: String(item['name']),\n value: item['value']\n }));\n }\n\n // Handle regular objects\n const record = obj as Record<string, unknown>;\n return Object.keys(record).map(key => ({\n key,\n value: record[key]\n }));\n }\n\n /**\n * Determine the appropriate type for a nested property value\n */\n getPropertyType(value: unknown): AttributeValueTypeDto {\n if (value === null || value === undefined) {\n return AttributeValueTypeDto.StringDto;\n }\n\n if (typeof value === 'boolean') {\n return AttributeValueTypeDto.BooleanDto;\n }\n\n if (typeof value === 'number') {\n return Number.isInteger(value) ? AttributeValueTypeDto.IntegerDto : AttributeValueTypeDto.DoubleDto;\n }\n\n if (typeof value === 'string') {\n // Check if it looks like a date\n if (value.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/)) {\n return AttributeValueTypeDto.DateTimeDto;\n }\n return AttributeValueTypeDto.StringDto;\n }\n\n if (Array.isArray(value)) {\n if (value.length > 0 && typeof value[0] === 'object' && value[0] !== null && 'id' in value[0] && value[0].id === 'ckRecordId') {\n return AttributeValueTypeDto.RecordDto;\n }\n if (value.length > 0 && typeof value[0] === 'object') {\n return AttributeValueTypeDto.RecordArrayDto;\n }\n if (value.length > 0 && typeof value[0] === 'string') {\n return AttributeValueTypeDto.StringArrayDto;\n }\n if (value.length > 0 && typeof value[0] === 'number') {\n return AttributeValueTypeDto.IntegerArrayDto;\n }\n return AttributeValueTypeDto.StringArrayDto; // fallback\n }\n\n\n return AttributeValueTypeDto.StringDto;\n }\n\n // ========== Binary Linked Methods ==========\n\n /**\n * Check if this is a BINARY_LINKED type with download capability\n */\n isBinaryLinkedWithDownload(): boolean {\n if (this.type !== AttributeValueTypeDto.BinaryLinkedDto) {\n return false;\n }\n\n // Check if value has binaryId or downloadUri (LargeBinaryInfo structure)\n return !!this.value && typeof this.value === 'object' && ('binaryId' in this.value || 'downloadUri' in this.value);\n }\n\n /**\n * Get the filename from binary info\n */\n getBinaryFilename(): string | null {\n if (!this.value || typeof this.value !== 'object') {\n return null;\n }\n return (this.value as BinaryLinkedValue).filename || null;\n }\n\n /**\n * Get the file size from binary info\n */\n getBinarySize(): number | null {\n if (!this.value || typeof this.value !== 'object') {\n return null;\n }\n return (this.value as BinaryLinkedValue).size || null;\n }\n\n /**\n * Get the content type from binary info\n */\n getBinaryContentType(): string | null {\n if (!this.value || typeof this.value !== 'object') {\n return null;\n }\n return (this.value as BinaryLinkedValue).contentType || null;\n }\n\n /**\n * Format file size to human readable format\n */\n formatFileSize(bytes: number | null): string {\n if (bytes === null || bytes === undefined) {\n return '';\n }\n\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n let unitIndex = 0;\n let size = bytes;\n\n while (size >= 1024 && unitIndex < units.length - 1) {\n size /= 1024;\n unitIndex++;\n }\n\n return `${size.toFixed(unitIndex > 0 ? 1 : 0)} ${units[unitIndex]}`;\n }\n\n /**\n * Handle download button click\n */\n onDownload(): void {\n if (!this.value || typeof this.value !== 'object') {\n console.warn('No binary value available');\n return;\n }\n\n const binaryValue = this.value as BinaryLinkedValue;\n\n // If downloadUri is available, open directly\n if (binaryValue.downloadUri) {\n window.open(binaryValue.downloadUri, '_blank', 'noopener,noreferrer');\n return;\n }\n\n // Otherwise, emit event for parent to handle (needs to load downloadUri)\n if (binaryValue.binaryId) {\n const event: BinaryDownloadEvent = {\n binaryId: binaryValue.binaryId,\n filename: binaryValue.filename,\n contentType: binaryValue.contentType\n };\n this.binaryDownload.emit(event);\n } else {\n console.warn('No binaryId or downloadUri available');\n }\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { GridModule } from '@progress/kendo-angular-grid';\nimport { InputsModule } from '@progress/kendo-angular-inputs';\nimport { DropDownsModule } from '@progress/kendo-angular-dropdowns';\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { SVGIconModule } from '@progress/kendo-angular-icons';\nimport {\n SVGIcon,\n fileIcon,\n folderIcon,\n calendarIcon,\n checkboxCheckedIcon,\n listUnorderedIcon\n} from '@progress/kendo-svg-icons';\n\nimport { PropertyGridItem, PropertyGridConfig, PropertyChangeEvent, AttributeValueTypeDto, BinaryDownloadEvent } from '../models/property-grid.models';\nimport { PropertyValueDisplayComponent } from './property-value-display.component';\n\n/**\n * Generic property grid component for OctoMesh\n */\n@Component({\n selector: 'mm-property-grid',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n GridModule,\n InputsModule,\n DropDownsModule,\n ButtonsModule,\n SVGIconModule,\n PropertyValueDisplayComponent\n ],\n template: `\n <div class=\"mm-property-grid\" [style.height]=\"config.height || '400px'\">\n\n @if (config.showSearch) {\n <div class=\"search-toolbar\">\n <kendo-textbox\n [(ngModel)]=\"searchTerm\"\n placeholder=\"Search attributes...\"\n (input)=\"onSearch()\"\n [clearButton]=\"true\">\n </kendo-textbox>\n </div>\n }\n\n <kendo-grid\n [data]=\"filteredData\"\n [sortable]=\"true\"\n [resizable]=\"true\"\n [style.height]=\"gridHeight\"\n [selectable]=\"{mode: 'single'}\"\n class=\"property-grid\">\n\n <!-- Property Name Column -->\n <kendo-grid-column\n field=\"displayName\"\n title=\"Property\"\n [width]=\"200\"\n [sortable]=\"true\">\n <ng-template kendoGridCellTemplate let-dataItem=\"dataItem\">\n <div class=\"property-name-cell\">\n @if (config.showTypeIcons !== false) {\n <kendo-svgicon\n [icon]=\"getTypeIcon(dataItem.type)\"\n class=\"type-icon\">\n </kendo-svgicon>\n }\n <div class=\"property-info\">\n <span class=\"property-name\" [title]=\"dataItem.description\">\n {{ dataItem.displayName || dataItem.name }}\n </span>\n @if (dataItem.required) {\n <span class=\"required-indicator\">*</span>\n }\n @if (dataItem.readOnly) {\n <span class=\"readonly-indicator\" title=\"Read-only\">🔒</span>\n }\n </div>\n </div>\n </ng-template>\n </kendo-grid-column>\n\n <!-- Property Value Column -->\n <kendo-grid-column\n field=\"value\"\n title=\"Value\"\n [sortable]=\"false\">\n <ng-template kendoGridCellTemplate let-dataItem=\"dataItem\">\n <mm-property-value-display\n [value]=\"dataItem.value\"\n [type]=\"dataItem.type\"\n (binaryDownload)=\"onBinaryDownload($event)\">\n </mm-property-value-display>\n </ng-template>\n </kendo-grid-column>\n\n <!-- Type Column (optional) -->\n @if (showTypeColumn) {\n <kendo-grid-column\n field=\"type\"\n title=\"Type\"\n [width]=\"120\"\n [sortable]=\"true\">\n <ng-template kendoGridCellTemplate let-dataItem=\"dataItem\">\n <span class=\"type-badge\" [ngClass]=\"'type-' + dataItem.type.toLowerCase()\">\n {{ formatTypeName(dataItem.type) }}\n </span>\n </ng-template>\n </kendo-grid-column>\n }\n\n </kendo-grid>\n </div>\n `,\n styles: [`\n .mm-property-grid {\n display: flex;\n flex-direction: column;\n border: 1px solid var(--kendo-color-border);\n border-radius: 4px;\n overflow: hidden;\n }\n\n .search-toolbar {\n padding: 8px;\n border-bottom: 1px solid var(--kendo-color-border);\n background: var(--kendo-color-base-subtle);\n }\n\n .property-grid {\n flex: 1;\n border: none;\n }\n\n .property-name-cell {\n display: flex;\n align-items: center;\n gap: 8px;\n min-height: 24px;\n }\n\n .type-icon {\n width: 16px;\n height: 16px;\n opacity: 0.7;\n }\n\n .property-info {\n display: flex;\n align-items: center;\n gap: 4px;\n flex: 1;\n }\n\n .property-name {\n font-weight: 500;\n }\n\n .required-indicator {\n color: var(--kendo-color-error);\n font-weight: bold;\n }\n\n .readonly-indicator {\n font-size: 12px;\n opacity: 0.7;\n }\n\n .property-editor {\n width: 100%;\n min-width: 200px;\n }\n\n .validation-error {\n color: var(--kendo-color-error);\n font-size: 0.8em;\n margin-top: 4px;\n }\n\n .type-badge {\n font-size: 0.75em;\n padding: 2px 6px;\n border-radius: 3px;\n text-transform: uppercase;\n font-weight: 500;\n background: var(--kendo-color-base-subtle);\n color: var(--kendo-color-on-base);\n }\n\n .grid-toolbar {\n padding: 8px;\n border-top: 1px solid var(--kendo-color-border);\n background: var(--kendo-color-base-subtle);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .changes-indicator {\n margin-left: auto;\n font-size: 0.9em;\n color: var(--kendo-color-primary);\n font-style: italic;\n }\n\n `]\n})\nexport class PropertyGridComponent implements OnInit, OnChanges {\n @Input() data: PropertyGridItem[] = [];\n @Input() config: PropertyGridConfig = {};\n @Input() showTypeColumn = false;\n\n @Output() propertyChange = new EventEmitter<PropertyChangeEvent>();\n @Output() saveRequested = new EventEmitter<PropertyGridItem[]>();\n @Output() binaryDownload = new EventEmitter<BinaryDownloadEvent>();\n\n // Component state\n filteredData: PropertyGridItem[] = [];\n searchTerm = '';\n hasChanges = false;\n pendingChanges: PropertyChangeEvent[] = [];\n\n // Icons\n readonly fileIcon = fileIcon;\n readonly folderIcon = folderIcon;\n readonly calendarIcon = calendarIcon;\n readonly checkboxCheckedIcon = checkboxCheckedIcon;\n readonly listUnorderedIcon = listUnorderedIcon;\n\n // Enum reference\n readonly AttributeValueTypeDto = AttributeValueTypeDto;\n\n ngOnInit() {\n this.updateFilteredData();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['data']) {\n this.updateFilteredData();\n this.hasChanges = false;\n this.pendingChanges = [];\n }\n }\n\n get gridHeight(): string {\n const baseHeight = this.config.height || '400px';\n const searchHeight = this.config.showSearch ? 40 : 0;\n const toolbarHeight = !this.config.readOnlyMode ? 50 : 0;\n const totalOffset = searchHeight + toolbarHeight;\n\n if (baseHeight.includes('px')) {\n const px = parseInt(baseHeight) - totalOffset;\n return `${Math.max(px, 200)}px`;\n }\n return baseHeight;\n }\n\n /**\n * Update filtered data based on search term\n */\n updateFilteredData() {\n if (!this.searchTerm.trim()) {\n this.filteredData = [...this.data];\n return;\n }\n\n const term = this.searchTerm.toLowerCase();\n this.filteredData = this.data.filter(item =>\n item.name.toLowerCase().includes(term) ||\n (item.displayName?.toLowerCase().includes(term)) ||\n (item.description?.toLowerCase().includes(term)) ||\n String(item.value).toLowerCase().includes(term)\n );\n }\n\n /**\n * Handle search input\n */\n onSearch() {\n this.updateFilteredData();\n }\n\n /**\n * Get appropriate icon for property type\n */\n getTypeIcon(type: AttributeValueTypeDto): SVGIcon {\n switch (type) {\n case AttributeValueTypeDto.BooleanDto:\n return checkboxCheckedIcon;\n case AttributeValueTypeDto.IntDto:\n case AttributeValueTypeDto.IntegerDto:\n case AttributeValueTypeDto.DoubleDto:\n return fileIcon;\n case AttributeValueTypeDto.DateTimeDto:\n case AttributeValueTypeDto.DateTimeOffsetDto:\n return calendarIcon;\n case AttributeValueTypeDto.StringArrayDto:\n case AttributeValueTypeDto.IntegerArrayDto:\n return listUnorderedIcon;\n case AttributeValueTypeDto.RecordDto:\n case AttributeValueTypeDto.RecordArrayDto:\n return folderIcon;\n default:\n return fileIcon;\n }\n }\n\n /**\n * Format type name for display\n */\n formatTypeName(type: AttributeValueTypeDto): string {\n return type.replace('_DTO', '').replace('DTO', '').replace('_', ' ');\n }\n\n /**\n * Save pending changes\n */\n saveChanges() {\n if (this.pendingChanges.length > 0) {\n const updatedData = this.data.map(item => {\n const change = this.pendingChanges.find(c => c.property.id === item.id);\n return change ? { ...item, value: change.newValue } : item;\n });\n\n this.saveRequested.emit(updatedData);\n this.hasChanges = false;\n this.pendingChanges = [];\n }\n }\n\n /**\n * Discard pending changes\n */\n discardChanges() {\n this.hasChanges = false;\n this.pendingChanges = [];\n this.updateFilteredData();\n }\n\n /**\n * Handle property value change\n */\n onPropertyChange(property: PropertyGridItem, oldValue: unknown, newValue: unknown) {\n const changeEvent: PropertyChangeEvent = {\n property,\n oldValue,\n newValue\n };\n\n // Update or add to pending changes\n const existingIndex = this.pendingChanges.findIndex(c => c.property.id === property.id);\n if (existingIndex >= 0) {\n this.pendingChanges[existingIndex] = changeEvent;\n } else {\n this.pendingChanges.push(changeEvent);\n }\n\n this.hasChanges = this.pendingChanges.length > 0;\n this.propertyChange.emit(changeEvent);\n }\n\n /**\n * Handle binary download request from property value display\n */\n onBinaryDownload(event: BinaryDownloadEvent): void {\n this.binaryDownload.emit(event);\n }\n}\n","// Models\nexport * from './models/property-grid.models';\n\n// Services\nexport * from './services/property-converter.service';\n\n// Components\nexport * from './components/property-grid.component';\nexport * from './components/property-value-display.component';","import {\n Component,\n OnInit,\n OnDestroy,\n Input,\n Output,\n EventEmitter,\n forwardRef,\n ViewChild,\n inject,\n ElementRef\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n FormControl,\n ReactiveFormsModule,\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n Validator,\n AbstractControl,\n ValidationErrors,\n NG_VALIDATORS\n} from '@angular/forms';\nimport { AutoCompleteModule, AutoCompleteComponent, PopupSettings } from '@progress/kendo-angular-dropdowns';\nimport { LoaderModule } from '@progress/kendo-angular-indicators';\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { IconsModule, SVGIconModule } from '@progress/kendo-angular-icons';\nimport { searchIcon } from '@progress/kendo-svg-icons';\nimport {\n CkTypeSelectorService,\n CkTypeSelectorItem,\n CkTypeSelectorResult\n} from '@meshmakers/octo-services';\nimport { Subject, Subscription } from 'rxjs';\nimport {\n debounceTime,\n distinctUntilChanged,\n switchMap,\n tap,\n catchError,\n map\n} from 'rxjs/operators';\nimport { of } from 'rxjs';\nimport { CkTypeSelectorDialogService } from '../ck-type-selector-dialog/ck-type-selector-dialog.service';\n\n@Component({\n selector: 'mm-ck-type-selector-input',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n AutoCompleteModule,\n LoaderModule,\n ButtonsModule,\n IconsModule,\n SVGIconModule\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CkTypeSelectorInputComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => CkTypeSelectorInputComponent),\n multi: true\n }\n ],\n template: `\n <div class=\"ck-type-select-wrapper\" [class.disabled]=\"disabled\">\n <kendo-autocomplete\n #autocomplete\n [formControl]=\"searchFormControl\"\n [data]=\"filteredTypes\"\n [loading]=\"isLoading\"\n [placeholder]=\"placeholder\"\n [suggest]=\"true\"\n [clearButton]=\"true\"\n [filterable]=\"true\"\n [popupSettings]=\"popupSettings\"\n (filterChange)=\"onFilterChange($event)\"\n (valueChange)=\"onSelectionChange($event)\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus()\"\n class=\"ck-type-autocomplete\">\n\n <ng-template kendoAutoCompleteItemTemplate let-dataItem>\n <div class=\"ck-type-item\">\n {{ dataItem }}\n </div>\n </ng-template>\n\n <ng-template kendoAutoCompleteNoDataTemplate>\n <div class=\"no-data-message\">\n <span *ngIf=\"!isLoading && searchFormControl.value && searchFormControl.value.length >= minSearchLength\">\n No types found for \"{{ searchFormControl.value }}\"\n </span>\n <span *ngIf=\"!isLoading && (!searchFormControl.value || searchFormControl.value.length < minSearchLength)\">\n Type at least {{ minSearchLength }} characters to search...\n </span>\n </div>\n </ng-template>\n\n <ng-template kendoAutoCompleteFooterTemplate>\n <div class=\"advanced-search-footer\" (click)=\"openDialog($event)\">\n <kendo-svg-icon [icon]=\"searchIcon\" size=\"small\"></kendo-svg-icon>\n <span>{{ advancedSearchLabel }}</span>\n </div>\n </ng-template>\n\n </kendo-autocomplete>\n\n <button\n kendoButton\n type=\"button\"\n [svgIcon]=\"searchIcon\"\n [disabled]=\"disabled\"\n [title]=\"advancedSearchLabel\"\n class=\"dialog-button\"\n (click)=\"openDialog()\">\n </button>\n </div>\n `,\n styles: [`\n :host {\n display: block;\n width: 100%;\n }\n\n .ck-type-select-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n gap: 4px;\n }\n\n .ck-type-select-wrapper.disabled {\n opacity: 0.6;\n pointer-events: none;\n }\n\n .ck-type-autocomplete {\n flex: 1;\n min-width: 0;\n }\n\n .dialog-button {\n flex-shrink: 0;\n height: 30px;\n width: 30px;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .ck-type-item {\n padding: 4px 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .no-data-message {\n padding: 8px 12px;\n color: var(--kendo-color-subtle);\n font-style: italic;\n text-align: center;\n }\n\n .advanced-search-footer {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n cursor: pointer;\n color: var(--kendo-color-primary);\n border-top: 1px solid var(--kendo-color-border);\n background: var(--kendo-color-surface-alt);\n transition: background-color 0.2s;\n }\n\n .advanced-search-footer:hover {\n background: var(--kendo-color-base-hover);\n }\n `]\n})\nexport class CkTypeSelectorInputComponent implements OnInit, OnDestroy, ControlValueAccessor, Validator {\n @ViewChild('autocomplete', { static: true }) autocomplete!: AutoCompleteComponent;\n\n @Input() placeholder = 'Select a CK type...';\n @Input() minSearchLength = 2;\n @Input() maxResults = 50;\n @Input() debounceMs = 300;\n @Input() ckModelIds?: string[];\n @Input() allowAbstract = true;\n @Input() dialogTitle = 'Select Construction Kit Type';\n @Input() advancedSearchLabel = 'Advanced Search...';\n @Input() derivedFromRtCkTypeId?: string;\n\n private _disabled = false;\n @Input()\n get disabled(): boolean {\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = !!value;\n if (this._disabled) {\n this.searchFormControl.disable();\n } else {\n this.searchFormControl.enable();\n }\n }\n\n private _required = false;\n @Input()\n get required(): boolean {\n return this._required;\n }\n set required(value: boolean) {\n this._required = !!value;\n }\n\n @Output() ckTypeSelected = new EventEmitter<CkTypeSelectorItem>();\n @Output() ckTypeCleared = new EventEmitter<void>();\n\n public searchFormControl = new FormControl();\n public filteredTypes: string[] = [];\n public selectedCkType: CkTypeSelectorItem | null = null;\n public isLoading = false;\n private typeMap = new Map<string, CkTypeSelectorItem>();\n\n private searchSubject = new Subject<string>();\n private subscriptions = new Subscription();\n private onChange: (value: CkTypeSelectorItem | null) => void = () => { /* noop */ };\n private onTouched: () => void = () => { /* noop */ };\n\n protected readonly searchIcon = searchIcon;\n protected popupSettings: PopupSettings = { appendTo: 'root', popupClass: 'mm-ck-type-popup' };\n\n private static popupStyleInjected = false;\n private readonly ckTypeSelectorService = inject(CkTypeSelectorService);\n private readonly dialogService = inject(CkTypeSelectorDialogService, { optional: true });\n private readonly elementRef = inject(ElementRef);\n\n ngOnInit(): void {\n this.setupSearch();\n this.injectPopupStyles();\n }\n\n ngOnDestroy(): void {\n this.subscriptions.unsubscribe();\n this.searchSubject.complete();\n }\n\n // ControlValueAccessor implementation\n writeValue(value: CkTypeSelectorItem | null): void {\n if (value !== this.selectedCkType) {\n this.selectedCkType = value;\n if (value) {\n // Ensure the value is in the data list so the autocomplete can display it\n if (!this.typeMap.has(value.rtCkTypeId)) {\n this.typeMap.set(value.rtCkTypeId, value);\n this.filteredTypes = [value.rtCkTypeId];\n }\n this.searchFormControl.setValue(value.rtCkTypeId, { emitEvent: false });\n } else {\n this.searchFormControl.setValue('', { emitEvent: false });\n }\n }\n }\n\n registerOnChange(fn: (value: CkTypeSelectorItem | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n // Validator implementation\n validate(control: AbstractControl): ValidationErrors | null {\n if (this.required && !this.selectedCkType) {\n return { required: true };\n }\n\n const value = control.value;\n if (value && typeof value === 'string') {\n return { invalidCkType: true };\n }\n\n return null;\n }\n\n // Event handlers\n onFilterChange(filter: string): void {\n if (!filter || filter.length < this.minSearchLength) {\n this.filteredTypes = [];\n return;\n }\n\n this.searchSubject.next(filter);\n }\n\n onSelectionChange(value: string): void {\n if (value && typeof value === 'string') {\n const ckType = this.typeMap.get(value);\n if (ckType) {\n this.selectCkType(ckType);\n }\n }\n }\n\n onFocus(): void {\n const currentValue = this.searchFormControl.value;\n if (currentValue && currentValue.length >= this.minSearchLength && this.filteredTypes.length === 0) {\n this.searchSubject.next(currentValue);\n }\n }\n\n onBlur(): void {\n this.onTouched();\n\n if (this.filteredTypes.length === 1 && !this.selectedCkType) {\n const displayText = this.filteredTypes[0];\n const ckType = this.typeMap.get(displayText);\n if (ckType) {\n this.selectCkType(ckType);\n }\n }\n }\n\n // Public methods\n public clear(): void {\n this.selectedCkType = null;\n this.filteredTypes = [];\n this.typeMap.clear();\n this.searchFormControl.setValue('', { emitEvent: false });\n this.onChange(null);\n this.ckTypeCleared.emit();\n this.autocomplete.focus();\n }\n\n public focus(): void {\n if (this.autocomplete) {\n this.autocomplete.focus();\n }\n }\n\n public reset(): void {\n this.clear();\n }\n\n // Private methods\n private setupSearch(): void {\n this.subscriptions.add(\n this.searchSubject.pipe(\n debounceTime(this.debounceMs),\n distinctUntilChanged(),\n tap(() => {\n this.isLoading = true;\n this.filteredTypes = [];\n }),\n switchMap(filter => {\n const source$ = this.derivedFromRtCkTypeId\n ? this.getDerivedTypes(filter)\n : this.ckTypeSelectorService.getCkTypes({\n ckModelIds: this.ckModelIds,\n searchText: filter,\n first: this.maxResults\n });\n return source$.pipe(\n catchError(error => {\n console.error('CK type search error:', error);\n return of({ items: [], totalCount: 0 });\n })\n );\n })\n ).subscribe((result: CkTypeSelectorResult) => {\n this.isLoading = false;\n\n // Filter out abstract types if not allowed\n let items = result.items;\n if (!this.allowAbstract) {\n items = items.filter((item: CkTypeSelectorItem) => !item.isAbstract);\n }\n\n this.filteredTypes = items.map((item: CkTypeSelectorItem) => item.rtCkTypeId);\n this.typeMap = new Map(\n items.map((item: CkTypeSelectorItem) => [item.rtCkTypeId, item])\n );\n })\n );\n }\n\n private getDerivedTypes(filter: string) {\n const derivedService = this.ckTypeSelectorService as {\n getDerivedCkTypes?: (\n rtCkTypeId: string,\n options?: {\n searchText?: string;\n ignoreAbstractTypes?: boolean;\n includeSelf?: boolean;\n }\n ) => import('rxjs').Observable<CkTypeSelectorResult>;\n };\n\n if (derivedService.getDerivedCkTypes) {\n return derivedService.getDerivedCkTypes(this.derivedFromRtCkTypeId!, {\n searchText: filter\n });\n }\n\n return this.ckTypeSelectorService\n .getCkTypes({\n searchText: filter,\n first: this.maxResults,\n skip: 0\n })\n .pipe(\n map(result =>\n this.filterDerivedTypesFallback(result, this.derivedFromRtCkTypeId!)\n )\n );\n }\n\n private filterDerivedTypesFallback(\n result: CkTypeSelectorResult,\n baseRtCkTypeId: string\n ): CkTypeSelectorResult {\n const allowed = new Set<string>([baseRtCkTypeId]);\n let changed = true;\n\n while (changed) {\n changed = false;\n for (const item of result.items) {\n if (\n item.baseTypeRtCkTypeId &&\n allowed.has(item.baseTypeRtCkTypeId) &&\n !allowed.has(item.rtCkTypeId)\n ) {\n allowed.add(item.rtCkTypeId);\n changed = true;\n }\n }\n }\n\n const items = result.items.filter(item =>\n allowed.has(item.rtCkTypeId) && (this.allowAbstract || !item.isAbstract)\n );\n\n return { items, totalCount: items.length };\n }\n\n private injectPopupStyles(): void {\n if (CkTypeSelectorInputComponent.popupStyleInjected) return;\n const style = document.createElement('style');\n style.setAttribute('data-mm-ck-type-popup', '');\n style.textContent = `\n .mm-ck-type-popup {\n max-width: 500px !important;\n min-width: 0 !important;\n }\n .mm-ck-type-popup .k-child-animation-container {\n max-width: 500px !important;\n }\n .mm-ck-type-popup .k-list-item {\n padding: 4px 12px !important;\n min-height: 0 !important;\n font-size: 13px !important;\n line-height: 20px !important;\n }\n `;\n document.head.appendChild(style);\n CkTypeSelectorInputComponent.popupStyleInjected = true;\n }\n\n private selectCkType(ckType: CkTypeSelectorItem): void {\n this.selectedCkType = ckType;\n this.searchFormControl.setValue(ckType.rtCkTypeId, { emitEvent: false });\n this.filteredTypes = [];\n this.onChange(ckType);\n this.ckTypeSelected.emit(ckType);\n this.autocomplete.toggle(false);\n }\n\n // Dialog\n public async openDialog(event?: Event): Promise<void> {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (!this.dialogService) {\n console.warn('CkTypeSelectorDialogService not available');\n return;\n }\n\n this.autocomplete.toggle(false);\n\n const result = await this.dialogService.openCkTypeSelector({\n selectedCkTypeId: this.selectedCkType?.fullName,\n ckModelIds: this.ckModelIds,\n dialogTitle: this.dialogTitle,\n allowAbstract: this.allowAbstract,\n derivedFromRtCkTypeId: this.derivedFromRtCkTypeId\n });\n\n if (result.confirmed && result.selectedCkType) {\n this.selectCkType(result.selectedCkType);\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, OnInit, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n AttributeItem,\n AttributeSelectorService,\n AttributeValueTypeDto,\n} from '@meshmakers/octo-services';\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { WindowModule, WindowRef } from '@progress/kendo-angular-dialog';\nimport { DropDownListModule } from '@progress/kendo-angular-dropdowns';\nimport {\n CellClickEvent,\n GridDataResult,\n GridModule,\n} from '@progress/kendo-angular-grid';\nimport { IconsModule } from '@progress/kendo-angular-icons';\nimport { InputsModule } from '@progress/kendo-angular-inputs';\nimport {\n arrowDownIcon,\n arrowLeftIcon,\n arrowRightIcon,\n arrowUpIcon,\n chevronDoubleLeftIcon,\n chevronDoubleRightIcon,\n searchIcon,\n} from '@progress/kendo-svg-icons';\nimport { Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\n\nexport interface AttributeSelectorDialogData {\n rtCkTypeId: string;\n selectedAttributes?: string[];\n dialogTitle?: string;\n singleSelect?: boolean;\n includeNavigationProperties?: boolean;\n maxDepth?: number;\n /** Additional virtual attributes to include in the available list (e.g., Timestamp for stream data queries) */\n additionalAttributes?: AttributeItem[];\n /** When true, hides the navigation properties checkbox and max depth controls */\n hideNavigationControls?: boolean;\n /** When set, restricts the available attributes to only these attribute paths (filtered client-side after fetching) */\n attributePaths?: string[];\n}\n\nexport interface AttributeSelectorDialogResult {\n selectedAttributes: AttributeItem[];\n}\n\ninterface ValueTypeFilterOption {\n text: string;\n value: AttributeValueTypeDto | null;\n}\n\n@Component({\n selector: 'mm-attribute-selector-dialog',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n GridModule,\n ButtonsModule,\n InputsModule,\n DropDownListModule,\n IconsModule,\n WindowModule,\n ],\n template: `\n <div class=\"attribute-selector-container\">\n <div class=\"filter-container\">\n <kendo-textbox\n [(ngModel)]=\"searchText\"\n (ngModelChange)=\"onSearchChange($event)\"\n placeholder=\"Search path & description...\"\n class=\"search-input\"\n >\n <ng-template kendoTextBoxSuffixTemplate>\n <button\n kendoButton\n [svgIcon]=\"searchIcon\"\n fillMode=\"clear\"\n ></button>\n </ng-template>\n </kendo-textbox>\n <kendo-dropdownlist\n [data]=\"valueTypeOptions\"\n [(ngModel)]=\"selectedValueTypeFilter\"\n (valueChange)=\"onValueTypeFilterChange($event)\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n class=\"type-filter-dropdown\"\n >\n </kendo-dropdownlist>\n </div>\n\n @if (!hideNavigationControls) {\n <div class=\"options-container\">\n <input\n type=\"checkbox\"\n kendoCheckBox\n [(ngModel)]=\"includeNavigationProperties\"\n (ngModelChange)=\"onNavigationPropertiesChange()\"\n />\n <label class=\"option-label\">Include Navigation Properties</label>\n\n <kendo-numerictextbox\n [(ngModel)]=\"maxDepth\"\n [min]=\"1\"\n [max]=\"5\"\n [step]=\"1\"\n [format]=\"'n0'\"\n [placeholder]=\"'Depth'\"\n [spinners]=\"true\"\n [disabled]=\"!includeNavigationProperties\"\n (valueChange)=\"onMaxDepthChange($event)\"\n class=\"depth-input\"\n >\n </kendo-numerictextbox>\n <label class=\"option-label\">Max Depth</label>\n </div>\n }\n\n <div class=\"lists-container\" *ngIf=\"!singleSelect\">\n <div class=\"list-section\">\n <h4>Available Attributes</h4>\n <kendo-grid\n [data]=\"availableGridData\"\n [scrollable]=\"'scrollable'\"\n [selectable]=\"{ mode: 'multiple', enabled: true }\"\n [kendoGridSelectBy]=\"'attributePath'\"\n [(selectedKeys)]=\"selectedAvailableKeys\"\n (cellClick)=\"onAvailableCellClick($event)\"\n [resizable]=\"true\"\n class=\"attribute-grid\"\n >\n <kendo-grid-column\n field=\"attributePath\"\n title=\"Attribute Path\"\n [width]=\"250\"\n ></kendo-grid-column>\n <kendo-grid-column\n field=\"attributeValueType\"\n title=\"Type\"\n [width]=\"100\"\n ></kendo-grid-column>\n <kendo-grid-column\n field=\"description\"\n title=\"Description\"\n ></kendo-grid-column>\n </kendo-grid>\n </div>\n\n <div class=\"action-buttons\">\n <button\n kendoButton\n [svgIcon]=\"arrowRightIcon\"\n [disabled]=\"selectedAvailableKeys.length === 0\"\n (click)=\"addSelected()\"\n title=\"Add selected\"\n ></button>\n <button\n kendoButton\n [svgIcon]=\"arrowLeftIcon\"\n [disabled]=\"selectedChosenKeys.length === 0\"\n (click)=\"removeSelected()\"\n title=\"Remove selected\"\n ></button>\n <div class=\"separator\"></div>\n <button\n kendoButton\n [svgIcon]=\"chevronDoubleRightIcon\"\n [disabled]=\"availableAttributes.length === 0\"\n (click)=\"addAll()\"\n title=\"Add all\"\n ></button>\n <button\n kendoButton\n [svgIcon]=\"chevronDoubleLeftIcon\"\n [disabled]=\"selectedAttributes.length === 0\"\n (click)=\"removeAll()\"\n title=\"Remove all\"\n ></button>\n </div>\n\n <div class=\"list-section\">\n <h4>Selected Attributes ({{ selectedAttributes.length }})</h4>\n <kendo-grid\n [data]=\"selectedGridData\"\n [scrollable]=\"'scrollable'\"\n [selectable]=\"{ mode: 'single', enabled: true }\"\n [kendoGridSelectBy]=\"'attributePath'\"\n [(selectedKeys)]=\"selectedChosenKeys\"\n (cellClick)=\"onSelectedCellClick($event)\"\n [resizable]=\"true\"\n class=\"attribute-grid\"\n >\n <kendo-grid-column\n field=\"attributePath\"\n title=\"Attribute Path\"\n [width]=\"200\"\n >\n <ng-template\n kendoGridCellTemplate\n let-dataItem\n let-rowIndex=\"rowIndex\"\n >\n <span class=\"order-number\">{{ rowIndex + 1 }}.</span>\n {{ dataItem.attributePath }}\n </ng-template>\n </kendo-grid-column>\n <kendo-grid-column\n field=\"attributeValueType\"\n title=\"Type\"\n [width]=\"100\"\n ></kendo-grid-column>\n </kendo-grid>\n </div>\n\n <div class=\"order-buttons\">\n <button\n kendoButton\n [svgIcon]=\"arrowUpIcon\"\n [disabled]=\"!canMoveUp()\"\n (click)=\"moveUp()\"\n title=\"Move up\"\n ></button>\n <button\n kendoButton\n [svgIcon]=\"arrowDownIcon\"\n [disabled]=\"!canMoveDown()\"\n (click)=\"moveDown()\"\n title=\"Move down\"\n ></button>\n </div>\n </div>\n\n <div class=\"single-select-container\" *ngIf=\"singleSelect\">\n <kendo-grid\n [data]=\"availableGridData\"\n [scrollable]=\"'scrollable'\"\n [selectable]=\"{ mode: 'single', enabled: true }\"\n [kendoGridSelectBy]=\"'attributePath'\"\n [(selectedKeys)]=\"selectedSingleKey\"\n (cellClick)=\"onSingleSelectCellClick($event)\"\n [resizable]=\"true\"\n class=\"attribute-grid\"\n >\n <kendo-grid-column\n field=\"attributePath\"\n title=\"Attribute Path\"\n [width]=\"250\"\n ></kendo-grid-column>\n <kendo-grid-column\n field=\"attributeValueType\"\n title=\"Type\"\n [width]=\"100\"\n ></kendo-grid-column>\n <kendo-grid-column\n field=\"description\"\n title=\"Description\"\n ></kendo-grid-column>\n </kendo-grid>\n </div>\n\n <div class=\"action-bar\">\n <button kendoButton (click)=\"onCancel()\">Cancel</button>\n <button\n kendoButton\n themeColor=\"primary\"\n [disabled]=\"singleSelect && selectedSingleKey.length === 0\"\n (click)=\"onConfirm()\"\n >\n OK\n </button>\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n height: 100%;\n }\n\n .attribute-selector-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 16px 20px;\n box-sizing: border-box;\n gap: 16px;\n }\n\n .filter-container {\n display: flex;\n gap: 12px;\n flex-shrink: 0;\n }\n\n .search-input {\n flex: 1;\n }\n\n .type-filter-dropdown {\n width: 160px;\n flex-shrink: 0;\n }\n\n .options-container {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.85rem;\n flex-shrink: 0;\n }\n\n .option-label {\n cursor: pointer;\n }\n\n .depth-input {\n width: 90px;\n }\n\n .lists-container {\n display: flex;\n gap: 16px;\n flex: 1;\n min-height: 0;\n }\n\n .list-section {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n }\n\n .list-section h4 {\n margin: 0 0 10px 0;\n font-size: 0.85rem;\n font-weight: 600;\n flex-shrink: 0;\n }\n\n .attribute-grid {\n border-radius: 4px;\n flex: 1;\n min-height: 200px;\n }\n\n .attribute-grid ::ng-deep .k-grid-table tbody tr {\n cursor: pointer;\n }\n\n .action-buttons {\n display: flex;\n flex-direction: column;\n gap: 8px;\n justify-content: center;\n padding: 0 8px;\n padding-top: 32px;\n }\n\n .separator {\n height: 1px;\n background-color: var(--kendo-color-border, #dee2e6);\n margin: 8px 0;\n }\n\n .order-buttons {\n display: flex;\n flex-direction: column;\n gap: 8px;\n justify-content: center;\n padding: 0 8px;\n padding-top: 32px;\n }\n\n .order-number {\n color: var(--kendo-color-primary, #ff6358);\n font-weight: 600;\n margin-right: 8px;\n min-width: 24px;\n display: inline-block;\n }\n\n .single-select-container {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n\n .single-select-container .attribute-grid {\n flex: 1;\n }\n\n .action-bar {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n flex-shrink: 0;\n padding-top: 8px;\n border-top: 1px solid var(--kendo-color-border, #dee2e6);\n }\n `,\n ],\n})\nexport class AttributeSelectorDialogComponent implements OnInit {\n private readonly windowRef = inject(WindowRef);\n private readonly attributeService = inject(AttributeSelectorService);\n private searchSubject = new Subject<string>();\n\n protected readonly arrowRightIcon = arrowRightIcon;\n protected readonly arrowLeftIcon = arrowLeftIcon;\n protected readonly chevronDoubleRightIcon = chevronDoubleRightIcon;\n protected readonly chevronDoubleLeftIcon = chevronDoubleLeftIcon;\n protected readonly searchIcon = searchIcon;\n protected readonly arrowUpIcon = arrowUpIcon;\n protected readonly arrowDownIcon = arrowDownIcon;\n\n private _data!: AttributeSelectorDialogData;\n public get data(): AttributeSelectorDialogData {\n return this._data;\n }\n public set data(value: AttributeSelectorDialogData) {\n this._data = value;\n if (value) {\n this.initializeFromData(value);\n }\n }\n\n public dialogTitle = 'Select Attributes';\n public rtCkTypeId!: string;\n public singleSelect = false;\n private additionalAttributes: AttributeItem[] = [];\n public searchText = '';\n public selectedSingleKey: string[] = [];\n public selectedValueTypeFilter: AttributeValueTypeDto | null = null;\n public includeNavigationProperties = true;\n public maxDepth: number | null = null;\n public hideNavigationControls = false;\n private attributePathsSet: Set<string> | null = null;\n\n public availableAttributes: AttributeItem[] = [];\n public selectedAttributes: AttributeItem[] = [];\n\n public availableGridData: GridDataResult = { data: [], total: 0 };\n public selectedGridData: GridDataResult = { data: [], total: 0 };\n\n public selectedAvailableKeys: string[] = [];\n public selectedChosenKeys: string[] = [];\n\n public valueTypeOptions: ValueTypeFilterOption[] = [\n { text: 'All Types', value: null },\n { text: 'String', value: AttributeValueTypeDto.StringDto },\n { text: 'Integer', value: AttributeValueTypeDto.IntegerDto },\n { text: 'Double', value: AttributeValueTypeDto.DoubleDto },\n { text: 'Boolean', value: AttributeValueTypeDto.BooleanDto },\n { text: 'DateTime', value: AttributeValueTypeDto.DateTimeDto },\n { text: 'DateTimeOffset', value: AttributeValueTypeDto.DateTimeOffsetDto },\n { text: 'Enum', value: AttributeValueTypeDto.EnumDto },\n { text: 'TimeSpan', value: AttributeValueTypeDto.TimeSpanDto },\n ];\n\n // Double-click tracking\n private lastClickTime = 0;\n private lastClickedItem: string | null = null;\n private readonly doubleClickDelay = 300; // milliseconds\n\n ngOnInit(): void {\n // Set up search debouncing (always, regardless of data timing)\n this.searchSubject\n .pipe(debounceTime(300), distinctUntilChanged())\n .subscribe((searchText) => {\n this.loadAvailableAttributes(searchText);\n });\n }\n\n private initializeFromData(data: AttributeSelectorDialogData): void {\n this.rtCkTypeId = data.rtCkTypeId;\n this.dialogTitle = data.dialogTitle || 'Select Attributes';\n this.singleSelect = data.singleSelect ?? false;\n this.includeNavigationProperties = data.includeNavigationProperties ?? true;\n this.maxDepth = data.maxDepth ?? null;\n this.additionalAttributes = data.additionalAttributes ?? [];\n this.hideNavigationControls = data.hideNavigationControls ?? false;\n this.attributePathsSet = data.attributePaths\n ? new Set(data.attributePaths)\n : null;\n\n if (data.selectedAttributes && data.selectedAttributes.length > 0) {\n if (this.singleSelect) {\n this.selectedSingleKey = [data.selectedAttributes[0]];\n } else {\n this.loadInitialSelectedAttributes(data.selectedAttributes);\n }\n }\n\n // Load initial attributes\n this.loadAvailableAttributes();\n }\n\n private loadAvailableAttributes(searchTerm?: string): void {\n this.attributeService\n .getAvailableAttributes(\n this.rtCkTypeId,\n undefined,\n undefined,\n undefined,\n this.selectedValueTypeFilter || undefined,\n searchTerm || undefined,\n this.includeNavigationProperties,\n this.maxDepth ?? undefined,\n )\n .subscribe((result) => {\n // Filter out already selected attributes\n const selectedPaths = new Set(\n this.selectedAttributes.map((a) => a.attributePath),\n );\n\n // Apply client-side attribute path restriction if set (additionalAttributes bypass this filter intentionally)\n const filteredItems = this.attributePathsSet\n ? result.items.filter((item) =>\n this.attributePathsSet!.has(item.attributePath),\n )\n : result.items;\n\n // Include additional virtual attributes (e.g., Timestamp for stream data), filtered by search/type\n const filteredAdditional = this.additionalAttributes.filter((attr) => {\n if (selectedPaths.has(attr.attributePath)) return false;\n if (\n searchTerm &&\n !attr.attributePath.toLowerCase().includes(searchTerm.toLowerCase())\n )\n return false;\n if (\n this.selectedValueTypeFilter &&\n attr.attributeValueType !== this.selectedValueTypeFilter\n )\n return false;\n return true;\n });\n\n this.availableAttributes = [\n ...filteredAdditional,\n ...filteredItems.filter(\n (item) => !selectedPaths.has(item.attributePath),\n ),\n ];\n this.updateAvailableGrid();\n });\n }\n\n private loadInitialSelectedAttributes(attributePaths: string[]): void {\n // Load all attributes to get the details for selected ones\n this.attributeService\n .getAvailableAttributes(\n this.rtCkTypeId,\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n this.includeNavigationProperties,\n this.maxDepth ?? undefined,\n )\n .subscribe((result) => {\n // Create a map for quick lookup, including additional virtual attributes\n const attributeMap = new Map(\n result.items.map((item) => [item.attributePath, item]),\n );\n for (const attr of this.additionalAttributes) {\n attributeMap.set(attr.attributePath, attr);\n }\n\n // Preserve the order from attributePaths\n this.selectedAttributes = attributePaths\n .map((path) => attributeMap.get(path))\n .filter((item): item is AttributeItem => item !== undefined);\n\n this.updateSelectedGrid();\n\n // Filter out selected from available, and apply attributePathsSet restriction\n const selectedPaths = new Set(\n this.selectedAttributes.map((a) => a.attributePath),\n );\n const filteredItems = this.attributePathsSet\n ? result.items.filter((item) =>\n this.attributePathsSet!.has(item.attributePath),\n )\n : result.items;\n this.availableAttributes = [\n ...this.additionalAttributes.filter(\n (attr) => !selectedPaths.has(attr.attributePath),\n ),\n ...filteredItems.filter(\n (item) => !selectedPaths.has(item.attributePath),\n ),\n ];\n this.updateAvailableGrid();\n });\n }\n\n public onSearchChange(value: string): void {\n this.searchSubject.next(value);\n }\n\n public onValueTypeFilterChange(_value: AttributeValueTypeDto | null): void {\n this.loadAvailableAttributes(this.searchText || undefined);\n }\n\n public onNavigationPropertiesChange(): void {\n if (!this.includeNavigationProperties) {\n this.maxDepth = null;\n }\n this.loadAvailableAttributes(this.searchText || undefined);\n }\n\n public onMaxDepthChange(value: number | null): void {\n this.maxDepth = value;\n this.loadAvailableAttributes(this.searchText || undefined);\n }\n\n public addSelected(): void {\n const itemsToAdd = this.availableAttributes.filter((item) =>\n this.selectedAvailableKeys.includes(item.attributePath),\n );\n\n this.selectedAttributes.push(...itemsToAdd);\n this.availableAttributes = this.availableAttributes.filter(\n (item) => !this.selectedAvailableKeys.includes(item.attributePath),\n );\n\n this.selectedAvailableKeys = [];\n this.updateGrids();\n }\n\n public removeSelected(): void {\n const itemsToRemove = this.selectedAttributes.filter((item) =>\n this.selectedChosenKeys.includes(item.attributePath),\n );\n\n this.availableAttributes.push(...itemsToRemove);\n this.selectedAttributes = this.selectedAttributes.filter(\n (item) => !this.selectedChosenKeys.includes(item.attributePath),\n );\n\n this.selectedChosenKeys = [];\n this.sortAvailableAttributes();\n this.updateGrids();\n }\n\n public addAll(): void {\n this.selectedAttributes.push(...this.availableAttributes);\n this.availableAttributes = [];\n this.selectedAvailableKeys = [];\n this.updateGrids();\n }\n\n public removeAll(): void {\n this.availableAttributes.push(...this.selectedAttributes);\n this.selectedAttributes = [];\n this.selectedChosenKeys = [];\n this.sortAvailableAttributes();\n this.updateGrids();\n }\n\n private sortAvailableAttributes(): void {\n this.availableAttributes.sort((a, b) =>\n a.attributePath.localeCompare(b.attributePath),\n );\n }\n\n public canMoveUp(): boolean {\n if (this.selectedChosenKeys.length !== 1) return false;\n const index = this.selectedAttributes.findIndex(\n (a) => a.attributePath === this.selectedChosenKeys[0],\n );\n return index > 0;\n }\n\n public canMoveDown(): boolean {\n if (this.selectedChosenKeys.length !== 1) return false;\n const index = this.selectedAttributes.findIndex(\n (a) => a.attributePath === this.selectedChosenKeys[0],\n );\n return index >= 0 && index < this.selectedAttributes.length - 1;\n }\n\n public moveUp(): void {\n if (!this.canMoveUp()) return;\n const index = this.selectedAttributes.findIndex(\n (a) => a.attributePath === this.selectedChosenKeys[0],\n );\n [this.selectedAttributes[index - 1], this.selectedAttributes[index]] = [\n this.selectedAttributes[index],\n this.selectedAttributes[index - 1],\n ];\n this.updateSelectedGrid();\n }\n\n public moveDown(): void {\n if (!this.canMoveDown()) return;\n const index = this.selectedAttributes.findIndex(\n (a) => a.attributePath === this.selectedChosenKeys[0],\n );\n [this.selectedAttributes[index], this.selectedAttributes[index + 1]] = [\n this.selectedAttributes[index + 1],\n this.selectedAttributes[index],\n ];\n this.updateSelectedGrid();\n }\n\n private updateGrids(): void {\n this.updateAvailableGrid();\n this.updateSelectedGrid();\n }\n\n private updateAvailableGrid(): void {\n this.availableGridData = {\n data: this.availableAttributes,\n total: this.availableAttributes.length,\n };\n }\n\n private updateSelectedGrid(): void {\n this.selectedGridData = {\n data: this.selectedAttributes,\n total: this.selectedAttributes.length,\n };\n }\n\n public onCancel(): void {\n this.windowRef.close();\n }\n\n public onConfirm(): void {\n if (this.singleSelect) {\n const selected = this.availableAttributes.find(\n (a) => a.attributePath === this.selectedSingleKey[0],\n );\n const result: AttributeSelectorDialogResult = {\n selectedAttributes: selected ? [selected] : [],\n };\n this.windowRef.close(result);\n } else {\n const result: AttributeSelectorDialogResult = {\n selectedAttributes: this.selectedAttributes,\n };\n this.windowRef.close(result);\n }\n }\n\n /**\n * Handle cell click on available attributes grid to detect double-click\n */\n public onAvailableCellClick(event: CellClickEvent): void {\n const dataItem = event.dataItem as AttributeItem;\n if (!dataItem) return;\n\n const currentTime = Date.now();\n const attributePath = dataItem.attributePath;\n\n if (\n this.lastClickedItem === attributePath &&\n currentTime - this.lastClickTime <= this.doubleClickDelay\n ) {\n // Double-click detected - move attribute to selected\n this.moveAttributeToSelected(dataItem);\n // Reset to prevent triple-click\n this.lastClickTime = 0;\n this.lastClickedItem = null;\n } else {\n // Single click - just update tracking\n this.lastClickTime = currentTime;\n this.lastClickedItem = attributePath;\n }\n }\n\n /**\n * Handle cell click on selected attributes grid to detect double-click\n */\n public onSelectedCellClick(event: CellClickEvent): void {\n const dataItem = event.dataItem as AttributeItem;\n if (!dataItem) return;\n\n const currentTime = Date.now();\n const attributePath = dataItem.attributePath;\n\n if (\n this.lastClickedItem === attributePath &&\n currentTime - this.lastClickTime <= this.doubleClickDelay\n ) {\n // Double-click detected - move attribute to available\n this.moveAttributeToAvailable(dataItem);\n // Reset to prevent triple-click\n this.lastClickTime = 0;\n this.lastClickedItem = null;\n } else {\n // Single click - just update tracking\n this.lastClickTime = currentTime;\n this.lastClickedItem = attributePath;\n }\n }\n\n /**\n * Handle cell click on single-select grid to detect double-click (confirm immediately)\n */\n public onSingleSelectCellClick(event: CellClickEvent): void {\n const dataItem = event.dataItem as AttributeItem;\n if (!dataItem) return;\n\n const currentTime = Date.now();\n const attributePath = dataItem.attributePath;\n\n if (\n this.lastClickedItem === attributePath &&\n currentTime - this.lastClickTime <= this.doubleClickDelay\n ) {\n // Double-click detected - confirm immediately\n this.selectedSingleKey = [attributePath];\n this.onConfirm();\n this.lastClickTime = 0;\n this.lastClickedItem = null;\n } else {\n this.lastClickTime = currentTime;\n this.lastClickedItem = attributePath;\n }\n }\n\n /**\n * Move a single attribute from available to selected\n */\n private moveAttributeToSelected(attribute: AttributeItem): void {\n // Remove from available\n this.availableAttributes = this.availableAttributes.filter(\n (item) => item.attributePath !== attribute.attributePath,\n );\n\n // Add to selected\n this.selectedAttributes.push(attribute);\n\n // Clear selections\n this.selectedAvailableKeys = this.selectedAvailableKeys.filter(\n (key) => key !== attribute.attributePath,\n );\n\n this.updateGrids();\n }\n\n /**\n * Move a single attribute from selected to available\n */\n private moveAttributeToAvailable(attribute: AttributeItem): void {\n // Remove from selected\n this.selectedAttributes = this.selectedAttributes.filter(\n (item) => item.attributePath !== attribute.attributePath,\n );\n\n // Add to available\n this.availableAttributes.push(attribute);\n\n // Clear selections\n this.selectedChosenKeys = this.selectedChosenKeys.filter(\n (key) => key !== attribute.attributePath,\n );\n\n // Sort available attributes\n this.sortAvailableAttributes();\n this.updateGrids();\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { WindowService, WindowRef, WindowCloseResult } from '@progress/kendo-angular-dialog';\nimport { firstValueFrom } from 'rxjs';\nimport { WindowStateService } from '@meshmakers/shared-ui';\nimport {\n AttributeSelectorDialogComponent,\n AttributeSelectorDialogData,\n AttributeSelectorDialogResult\n} from './attribute-selector-dialog.component';\nimport { AttributeItem } from '@meshmakers/octo-services';\n\nexport interface AttributeSelectorResult {\n confirmed: boolean;\n selectedAttributes: AttributeItem[];\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AttributeSelectorDialogService {\n private readonly windowService = inject(WindowService);\n private readonly windowStateService = inject(WindowStateService);\n\n /**\n * Opens the attribute selector dialog\n * @param rtCkTypeId The RtCkType ID to fetch attributes for\n * @param selectedAttributes Optional array of pre-selected attribute paths\n * @param dialogTitle Optional custom dialog title\n * @param singleSelect Optional flag for single-select mode\n * @param additionalAttributes Optional virtual attributes to include (e.g., Timestamp for stream data)\n * @param includeNavigationProperties Optional flag to control navigation property inclusion\n * @param maxDepth Optional max depth for navigation properties\n * @param hideNavigationControls Optional flag to hide the navigation property controls in the dialog\n * @returns Promise that resolves with the result containing selected attributes and confirmation status\n */\n public async openAttributeSelector(\n rtCkTypeId: string,\n selectedAttributes?: string[],\n dialogTitle?: string,\n singleSelect?: boolean,\n additionalAttributes?: AttributeItem[],\n includeNavigationProperties?: boolean,\n maxDepth?: number,\n hideNavigationControls?: boolean,\n attributePaths?: string[]\n ): Promise<AttributeSelectorResult> {\n const data: AttributeSelectorDialogData = {\n rtCkTypeId,\n selectedAttributes,\n dialogTitle,\n singleSelect,\n additionalAttributes,\n includeNavigationProperties,\n maxDepth,\n hideNavigationControls,\n attributePaths\n };\n\n const dialogKey = singleSelect ? 'attribute-selector-single' : 'attribute-selector';\n const defaultWidth = singleSelect ? 550 : 1000;\n const defaultHeight = singleSelect ? 650 : 700;\n const size = this.windowStateService.resolveWindowSize(dialogKey, { width: defaultWidth, height: defaultHeight });\n\n const windowRef: WindowRef = this.windowService.open({\n content: AttributeSelectorDialogComponent,\n width: size.width,\n height: size.height,\n minWidth: singleSelect ? 450 : 850,\n minHeight: singleSelect ? 550 : 650,\n resizable: true,\n title: dialogTitle || 'Select Attributes'\n });\n\n this.windowStateService.applyModalBehavior(dialogKey, windowRef);\n\n // Pass data to the component\n const contentRef = windowRef.content as { instance?: AttributeSelectorDialogComponent } | undefined;\n if (contentRef?.instance) {\n contentRef.instance.data = data;\n }\n\n try {\n const result = await firstValueFrom(windowRef.result);\n\n if (result instanceof WindowCloseResult) {\n return {\n confirmed: false,\n selectedAttributes: []\n };\n }\n\n if (result && typeof result === 'object' && 'selectedAttributes' in result) {\n const dialogResult = result as AttributeSelectorDialogResult;\n return {\n confirmed: true,\n selectedAttributes: dialogResult.selectedAttributes\n };\n } else {\n return {\n confirmed: false,\n selectedAttributes: []\n };\n }\n } catch {\n return {\n confirmed: false,\n selectedAttributes: []\n };\n }\n }\n}\n","import { Component, inject, signal, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { WindowRef } from '@progress/kendo-angular-dialog';\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { InputsModule } from '@progress/kendo-angular-inputs';\nimport { GridModule } from '@progress/kendo-angular-grid';\nimport { IconsModule } from '@progress/kendo-angular-icons';\nimport { pencilIcon, trashIcon } from '@progress/kendo-svg-icons';\nimport {\n GetEntitiesByCkTypeDtoGQL,\n RuntimeEntitySelectDataSource,\n RuntimeEntityDialogDataSource,\n RuntimeEntityItem,\n AttributeItem\n} from '@meshmakers/octo-services';\nimport { EntitySelectInputComponent } from '@meshmakers/shared-ui';\nimport { CkTypeSelectorInputComponent } from '../ck-type-selector-input';\nimport { AttributeSelectorDialogService } from '../attribute-selector-dialog';\nimport {\n RuntimeEntityVariableDialogData,\n RuntimeEntityVariableDialogResult,\n RuntimeEntityVariableMapping\n} from './runtime-entity-variable-dialog.models';\n\ninterface CkTypeSelectorItem {\n fullName: string;\n rtCkTypeId: string;\n baseTypeFullName?: string;\n baseTypeRtCkTypeId?: string;\n isAbstract: boolean;\n isFinal: boolean;\n description?: string;\n}\n\n@Component({\n selector: 'mm-runtime-entity-variable-dialog',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n ButtonsModule,\n InputsModule,\n GridModule,\n IconsModule,\n CkTypeSelectorInputComponent,\n EntitySelectInputComponent\n ],\n template: `\n <div class=\"dialog-content\">\n <div class=\"form-row\">\n <label class=\"form-label\">CK Type</label>\n <mm-ck-type-selector-input\n [placeholder]=\"'Select CK Type...'\"\n [minSearchLength]=\"2\"\n (ckTypeSelected)=\"onCkTypeSelected($event)\"\n (ckTypeCleared)=\"onCkTypeCleared()\">\n </mm-ck-type-selector-input>\n </div>\n\n <div class=\"form-row\">\n <label class=\"form-label\">Entity</label>\n <mm-entity-select-input\n [dataSource]=\"entityDataSource()!\"\n [dialogDataSource]=\"entityDialogDataSource()!\"\n [placeholder]=\"'Select Entity...'\"\n [disabled]=\"!selectedCkType()\"\n [minSearchLength]=\"1\"\n dialogTitle=\"Select Entity\"\n (entitySelected)=\"onEntitySelected($event)\"\n (entityCleared)=\"onEntityCleared()\">\n </mm-entity-select-input>\n </div>\n\n <div class=\"form-row\">\n <label class=\"form-label\">Attributes</label>\n <button\n kendoButton\n (click)=\"openAttributeSelector()\"\n [disabled]=\"!selectedCkType()\"\n themeColor=\"primary\"\n fillMode=\"outline\">\n Select Attributes...\n </button>\n </div>\n\n @if (variableMappings().length > 0) {\n <div class=\"mappings-grid\">\n <div class=\"grid-header\">\n <span class=\"col-name\">Variable Name</span>\n <span class=\"col-path\">Attribute Path</span>\n <span class=\"col-type\">Type</span>\n <span class=\"col-actions\"></span>\n </div>\n @for (mapping of variableMappings(); track mapping.attributePath; let i = $index) {\n <div class=\"grid-row\">\n <div class=\"col-name\">\n <kendo-textbox\n [value]=\"mapping.name\"\n (valueChange)=\"onNameChange(i, $event)\"\n [style.width.%]=\"100\">\n </kendo-textbox>\n @if (getNameError(mapping.name, i); as error) {\n <span class=\"error-text\">{{ error }}</span>\n }\n </div>\n <div class=\"col-path\">{{ mapping.attributePath }}</div>\n <div class=\"col-type\">{{ mapping.attributeValueType }}</div>\n <div class=\"col-actions\">\n <button\n kendoButton\n (click)=\"removeMapping(i)\"\n [svgIcon]=\"trashIcon\"\n fillMode=\"flat\"\n themeColor=\"error\"\n title=\"Remove\">\n </button>\n </div>\n </div>\n }\n </div>\n }\n\n <div class=\"dialog-actions\">\n <button kendoButton (click)=\"onCancel()\" fillMode=\"outline\">Cancel</button>\n <button kendoButton (click)=\"onOk()\" themeColor=\"primary\" [disabled]=\"!isValid()\">OK</button>\n </div>\n </div>\n `,\n styles: [`\n .dialog-content {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px 20px;\n }\n\n .form-row {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .form-label {\n font-size: 12px;\n font-weight: 600;\n color: var(--kendo-color-subtle, #666);\n }\n\n .mappings-grid {\n border: 1px solid var(--kendo-color-border, #e0e0e0);\n border-radius: 4px;\n background: var(--kendo-color-surface-alt, #fafafa);\n }\n\n .grid-header {\n display: grid;\n grid-template-columns: 1fr 1fr 100px 40px;\n gap: 0.5rem;\n padding: 0.5rem 0.75rem;\n background: var(--kendo-color-surface, #f5f5f5);\n border-bottom: 1px solid var(--kendo-color-border, #e0e0e0);\n font-size: 12px;\n font-weight: 600;\n color: var(--kendo-color-subtle, #666);\n }\n\n .grid-row {\n display: grid;\n grid-template-columns: 1fr 1fr 100px 40px;\n gap: 0.5rem;\n padding: 0.5rem 0.75rem;\n align-items: start;\n border-bottom: 1px solid var(--kendo-color-border, #e0e0e0);\n\n &:last-child {\n border-bottom: none;\n }\n }\n\n .col-name {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .col-path, .col-type {\n font-size: 13px;\n padding-top: 6px;\n color: var(--kendo-color-on-app-surface, #424242);\n }\n\n .col-actions {\n display: flex;\n justify-content: center;\n padding-top: 2px;\n }\n\n .error-text {\n font-size: 11px;\n color: var(--kendo-color-error, #f44336);\n }\n\n .dialog-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--kendo-color-border, #e0e0e0);\n }\n `]\n})\nexport class RuntimeEntityVariableDialogComponent {\n private readonly windowRef = inject(WindowRef);\n private readonly getEntitiesByCkTypeGQL = inject(GetEntitiesByCkTypeDtoGQL);\n private readonly attributeSelectorDialogService = inject(AttributeSelectorDialogService);\n\n protected readonly pencilIcon = pencilIcon;\n protected readonly trashIcon = trashIcon;\n\n /** Data passed to the dialog (set by service) */\n data: RuntimeEntityVariableDialogData = {};\n\n // Signals\n readonly selectedCkType = signal<CkTypeSelectorItem | null>(null);\n readonly selectedEntity = signal<RuntimeEntityItem | null>(null);\n readonly variableMappings = signal<RuntimeEntityVariableMapping[]>([]);\n\n readonly entityDataSource = computed(() => {\n const ckType = this.selectedCkType();\n if (!ckType) return null;\n return new RuntimeEntitySelectDataSource(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);\n });\n\n readonly entityDialogDataSource = computed(() => {\n const ckType = this.selectedCkType();\n if (!ckType) return null;\n return new RuntimeEntityDialogDataSource(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);\n });\n\n private readonly VALID_NAME_REGEX = /^[a-zA-Z_][a-zA-Z0-9_]*$/;\n\n onCkTypeSelected(ckType: CkTypeSelectorItem): void {\n this.selectedCkType.set(ckType);\n this.selectedEntity.set(null);\n // Don't clear mappings — keep them if user is just switching type\n }\n\n onCkTypeCleared(): void {\n this.selectedCkType.set(null);\n this.selectedEntity.set(null);\n }\n\n onEntitySelected(entity: RuntimeEntityItem): void {\n this.selectedEntity.set(entity);\n }\n\n onEntityCleared(): void {\n this.selectedEntity.set(null);\n }\n\n async openAttributeSelector(): Promise<void> {\n const ckType = this.selectedCkType();\n if (!ckType) return;\n\n const existingPaths = this.variableMappings().map(m => m.attributePath);\n\n const result = await this.attributeSelectorDialogService.openAttributeSelector(\n ckType.rtCkTypeId,\n existingPaths,\n 'Select Attributes'\n );\n\n if (result.confirmed && result.selectedAttributes.length > 0) {\n this.addAttributeMappings(result.selectedAttributes);\n }\n }\n\n onNameChange(index: number, name: string): void {\n const sanitized = name.replace(/[^a-zA-Z0-9_]/g, '');\n const mappings = [...this.variableMappings()];\n mappings[index] = { ...mappings[index], name: sanitized };\n this.variableMappings.set(mappings);\n }\n\n removeMapping(index: number): void {\n const mappings = this.variableMappings().filter((_, i) => i !== index);\n this.variableMappings.set(mappings);\n }\n\n getNameError(name: string, index: number): string | null {\n if (!name) return 'Name required';\n if (!this.VALID_NAME_REGEX.test(name)) return 'Invalid name';\n if (this.isDuplicateName(name, index)) return 'Duplicate';\n return null;\n }\n\n isValid(): boolean {\n const entity = this.selectedEntity();\n const mappings = this.variableMappings();\n if (!entity || mappings.length === 0) return false;\n\n return mappings.every((m, i) =>\n m.name &&\n this.VALID_NAME_REGEX.test(m.name) &&\n !this.isDuplicateName(m.name, i)\n );\n }\n\n onOk(): void {\n const ckType = this.selectedCkType();\n const entity = this.selectedEntity();\n if (!ckType || !entity) return;\n\n const result: RuntimeEntityVariableDialogResult = {\n entityCkTypeId: ckType.rtCkTypeId,\n entityRtId: entity.rtId,\n entityDisplayName: entity.displayName,\n variables: this.variableMappings()\n };\n\n this.windowRef.close(result);\n }\n\n onCancel(): void {\n this.windowRef.close();\n }\n\n private addAttributeMappings(attributes: AttributeItem[]): void {\n const existingMappings = this.variableMappings();\n const existingPaths = new Set(existingMappings.map(m => m.attributePath));\n const allNames = new Set([\n ...existingMappings.map(m => m.name),\n ...(this.data.existingVariableNames ?? [])\n ]);\n\n const newMappings: RuntimeEntityVariableMapping[] = [];\n for (const attr of attributes) {\n if (existingPaths.has(attr.attributePath)) continue;\n\n let name = this.attributePathToVariableName(attr.attributePath);\n let counter = 1;\n while (allNames.has(name)) {\n name = `${this.attributePathToVariableName(attr.attributePath)}${counter}`;\n counter++;\n }\n allNames.add(name);\n\n newMappings.push({\n name,\n attributePath: attr.attributePath,\n attributeValueType: attr.attributeValueType\n });\n }\n\n this.variableMappings.set([...existingMappings, ...newMappings]);\n }\n\n private attributePathToVariableName(attributePath: string): string {\n const parts = attributePath.split('.');\n return parts\n .map((part, index) =>\n index === 0 ? part : part.charAt(0).toUpperCase() + part.slice(1)\n )\n .join('');\n }\n\n private isDuplicateName(name: string, currentIndex: number): boolean {\n const mappings = this.variableMappings();\n const existingNames = this.data.existingVariableNames ?? [];\n\n // Check within dialog mappings\n if (mappings.some((m, i) => i !== currentIndex && m.name === name)) return true;\n // Check against existing external variable names\n if (existingNames.includes(name)) return true;\n\n return false;\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { WindowService, WindowCloseResult } from '@progress/kendo-angular-dialog';\nimport { firstValueFrom } from 'rxjs';\nimport { WindowStateService } from '@meshmakers/shared-ui';\nimport { RuntimeEntityVariableDialogComponent } from './runtime-entity-variable-dialog.component';\nimport {\n RuntimeEntityVariableDialogData,\n RuntimeEntityVariableDialogResult\n} from './runtime-entity-variable-dialog.models';\n\nexport interface RuntimeEntityVariableResult {\n confirmed: boolean;\n result?: RuntimeEntityVariableDialogResult;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RuntimeEntityVariableDialogService {\n private readonly windowService = inject(WindowService);\n private readonly windowStateService = inject(WindowStateService);\n\n /**\n * Opens the runtime entity variable dialog.\n * @param data Optional pre-populated data for editing\n * @returns Promise with confirmation status and dialog result\n */\n public async openRuntimeEntityVariableDialog(\n data?: RuntimeEntityVariableDialogData\n ): Promise<RuntimeEntityVariableResult> {\n const size = this.windowStateService.resolveWindowSize('runtime-entity-variable', { width: 800, height: 600 });\n\n const windowRef = this.windowService.open({\n content: RuntimeEntityVariableDialogComponent,\n width: size.width,\n height: size.height,\n minWidth: 650,\n minHeight: 500,\n resizable: true,\n title: 'Runtime Entity Variables'\n });\n\n this.windowStateService.applyModalBehavior('runtime-entity-variable', windowRef);\n\n const contentRef = windowRef.content as { instance?: RuntimeEntityVariableDialogComponent } | undefined;\n if (contentRef?.instance && data) {\n contentRef.instance.data = data;\n }\n\n try {\n const result = await firstValueFrom(windowRef.result);\n\n if (result instanceof WindowCloseResult) {\n return { confirmed: false };\n }\n\n if (result && typeof result === 'object' && 'variables' in result) {\n return {\n confirmed: true,\n result: result as RuntimeEntityVariableDialogResult\n };\n }\n\n return { confirmed: false };\n } catch {\n return { confirmed: false };\n }\n }\n}\n","import {\n FieldFilterDto,\n FieldFilterOperatorsDto,\n SearchFilterDto,\n SearchFilterTypesDto, SortDto, SortOrdersDto\n} from '@meshmakers/octo-services';\nimport {DataSourceTyped, ListViewComponent} from '@meshmakers/shared-ui';\nimport {FilterOperator, isCompositeFilterDescriptor} from '@progress/kendo-data-query';\nimport {State} from '@progress/kendo-data-query/dist/npm/state';\n\n// noinspection JSUnusedGlobalSymbols\nexport abstract class OctoGraphQlDataSource<TDto> extends DataSourceTyped<TDto | null> {\n\n private _searchFilterAttributePaths: string[] = [];\n\n // noinspection JSUnusedGlobalSymbols\n protected constructor(listViewComponent: ListViewComponent) {\n super(listViewComponent);\n }\n\n protected get searchFilterAttributePaths(): string[] {\n return this._searchFilterAttributePaths;\n }\n protected set searchFilterAttributePaths(value: string[]) {\n this._searchFilterAttributePaths = value;\n }\n\n // noinspection JSUnusedGlobalSymbols\n protected getFieldFilterDefinitions(state: State) {\n let fieldFilters: FieldFilterDto[] | null = null;\n if (state.filter?.filters) {\n fieldFilters = state.filter.filters.map((f) => {\n\n if (isCompositeFilterDescriptor(f)) {\n throw new Error('Composite filter descriptor not supported');\n }\n\n const {operator, value} = OctoGraphQlDataSource.getOperatorAndValue(f.operator as FilterOperator, f.value);\n\n return {\n attributePath: f.field,\n operator: operator,\n comparisonValue: value\n } as FieldFilterDto;\n });\n }\n return fieldFilters;\n }\n\n // noinspection JSUnusedGlobalSymbols\n protected getSearchFilterDefinitions(textSearchValue: string | null): SearchFilterDto | null {\n let searchFilterDto: SearchFilterDto | null = null;\n if (textSearchValue) {\n searchFilterDto = {\n type: SearchFilterTypesDto.AttributeFilterDto,\n attributePaths: this.searchFilterAttributePaths,\n searchTerm: textSearchValue,\n };\n }\n return searchFilterDto;\n }\n\n // noinspection JSUnusedGlobalSymbols\n protected getSortDefinitions(state: State): SortDto[] | null {\n let sort: SortDto[] | null = null;\n if (state.sort) {\n sort = new Array<SortDto>()\n state.sort.forEach((s) => {\n\n switch (s.dir) {\n case 'asc':\n sort?.push({\n attributePath: s.field,\n sortOrder: SortOrdersDto.AscendingDto\n });\n break;\n case 'desc':\n sort?.push({\n attributePath: s.field,\n sortOrder: SortOrdersDto.DescendingDto,\n });\n break;\n default:\n sort?.push({\n attributePath: s.field,\n sortOrder: SortOrdersDto.DefaultDto,\n });\n break;\n }\n\n });\n }\n return sort;\n }\n\n private static getOperatorAndValue(operator: FilterOperator, value: unknown): {\n operator: FieldFilterOperatorsDto,\n value: unknown\n } {\n\n switch (operator) {\n case 'eq':\n return {operator: FieldFilterOperatorsDto.EqualsDto, value: value};\n case 'neq':\n return {operator: FieldFilterOperatorsDto.NotEqualsDto, value: value};\n case 'lt':\n return {operator: FieldFilterOperatorsDto.LessThanDto, value: value};\n case 'lte':\n return {operator: FieldFilterOperatorsDto.LessEqualThanDto, value: value};\n case 'gt':\n return {operator: FieldFilterOperatorsDto.GreaterThanDto, value: value};\n case 'gte':\n return {operator: FieldFilterOperatorsDto.GreaterEqualThanDto, value: value};\n case 'contains':\n return {operator: FieldFilterOperatorsDto.LikeDto, value: value};\n case 'doesnotcontain':\n return {operator: FieldFilterOperatorsDto.MatchRegExDto, value: `^(?!.*${value}).*$`};\n case 'startswith':\n return {operator: FieldFilterOperatorsDto.MatchRegExDto, value: value + '.*'};\n case 'endswith':\n return {operator: FieldFilterOperatorsDto.MatchRegExDto, value: '.*' + value};\n case 'isnull':\n return {operator: FieldFilterOperatorsDto.EqualsDto, value: null};\n case 'isnotnull':\n return {operator: FieldFilterOperatorsDto.NotEqualsDto, value: null};\n case 'isempty':\n return {operator: FieldFilterOperatorsDto.EqualsDto, value: \"\"};\n case 'isnotempty':\n return {operator: FieldFilterOperatorsDto.NotEqualsDto, value: \"\"};\n default:\n throw new Error('The filter operator is not supported');\n }\n }\n}\n","import {TreeItemDataTyped} from \"@meshmakers/shared-services\";\nimport {HierarchyDataSourceBase} from \"@meshmakers/shared-ui\";\n\nexport abstract class OctoGraphQlHierarchyDataSource<TQueryDto> extends HierarchyDataSourceBase<TQueryDto> {\n public abstract override fetchChildren(item: TreeItemDataTyped<TQueryDto>): Promise<TreeItemDataTyped<TQueryDto>[]>;\n\n public abstract override fetchRootNodes(): Promise<TreeItemDataTyped<TQueryDto>[]>;\n}\n","import {Component, Input, inject} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ButtonsModule} from '@progress/kendo-angular-buttons';\nimport {SVGIconModule} from '@progress/kendo-angular-icons';\nimport {copyIcon} from '@progress/kendo-svg-icons';\nimport {NotificationDisplayService} from '@meshmakers/shared-ui';\n\ninterface CopyOption {\n label: string;\n value: string;\n displayText: string;\n}\n\n/**\n * A reusable component for displaying and copying entity identifiers.\n * Provides a dropdown button with options to copy:\n * - RtId: The runtime ObjectId\n * - CkTypeId: The full versioned Construction Kit type ID\n * - RtCkTypeId: The runtime CK type ID (unversioned)\n * - RtEntityId: Combined format {RtCkTypeId}@{RtId}\n *\n * @example\n * ```html\n * <mm-entity-id-info\n * [rtId]=\"entity.rtId\"\n * [rtCkTypeId]=\"entity.ckTypeId\"\n * [ckTypeId]=\"entity.constructionKitType?.ckTypeId?.fullName\">\n * </mm-entity-id-info>\n * ```\n */\n@Component({\n selector: 'mm-entity-id-info',\n standalone: true,\n imports: [\n CommonModule,\n ButtonsModule,\n SVGIconModule\n ],\n template: `\n <kendo-dropdownbutton\n [data]=\"copyOptions\"\n [svgIcon]=\"copyIcon\"\n look=\"flat\"\n size=\"small\"\n title=\"Copy Entity ID to clipboard\"\n (itemClick)=\"copyToClipboard($event)\">\n <ng-template kendoDropDownButtonItemTemplate let-item>\n <div class=\"copy-item\">\n <span class=\"copy-label\">{{ item.label }}</span>\n <span class=\"copy-value\">{{ item.displayText }}</span>\n </div>\n </ng-template>\n Copy ID\n </kendo-dropdownbutton>\n `,\n styles: [`\n :host {\n display: inline-block;\n }\n\n kendo-dropdownbutton {\n ::ng-deep {\n .k-button {\n color: var(--kendo-color-primary, #64ceb9) !important;\n border: 1px solid var(--kendo-color-border, rgba(100, 206, 185, 0.3)) !important;\n\n &:hover {\n background: var(--kendo-color-base-hover, rgba(100, 206, 185, 0.15)) !important;\n border-color: var(--kendo-color-primary, rgba(100, 206, 185, 0.5)) !important;\n }\n }\n\n .k-popup {\n min-width: 350px;\n }\n\n .k-menu-item {\n padding: 0 !important;\n }\n }\n }\n\n .copy-item {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 8px 12px;\n width: 100%;\n }\n\n .copy-label {\n font-size: 0.7rem;\n font-weight: 600;\n color: var(--kendo-color-primary, #64ceb9);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .copy-value {\n font-family: 'Roboto Mono', monospace;\n font-size: 0.75rem;\n color: var(--kendo-color-subtle, #9292a6);\n word-break: break-all;\n }\n `]\n})\nexport class EntityIdInfoComponent {\n private readonly notificationService = inject(NotificationDisplayService);\n\n protected readonly copyIcon = copyIcon;\n\n /** The RtId (ObjectId) of the entity */\n @Input({ required: true }) rtId!: string;\n\n /** The RtCkTypeId - runtime CK type ID (e.g., System.Communication/MeshAdapter) */\n @Input({ required: true }) rtCkTypeId!: string;\n\n /** The CkTypeId - full versioned Construction Kit type ID (e.g., System.Communication-2.0.3/MeshAdapter-1) */\n @Input() ckTypeId?: string;\n\n protected get copyOptions(): CopyOption[] {\n const fullCkTypeId = this.ckTypeId || this.rtCkTypeId;\n const rtEntityId = `${this.rtCkTypeId}@${this.rtId}`;\n\n return [\n {\n label: 'RtId',\n value: this.rtId,\n displayText: this.truncateValue(this.rtId, 24)\n },\n {\n label: 'CkTypeId',\n value: fullCkTypeId,\n displayText: this.truncateValue(fullCkTypeId, 40)\n },\n {\n label: 'RtCkTypeId',\n value: this.rtCkTypeId,\n displayText: this.truncateValue(this.rtCkTypeId, 40)\n },\n {\n label: 'RtEntityId',\n value: rtEntityId,\n displayText: this.truncateValue(rtEntityId, 40)\n }\n ];\n }\n\n private truncateValue(value: string, maxLength: number): string {\n if (value.length <= maxLength) return value;\n return value.substring(0, maxLength - 3) + '...';\n }\n\n protected async copyToClipboard(option: CopyOption): Promise<void> {\n try {\n await navigator.clipboard.writeText(option.value);\n this.notificationService.showSuccess(`${option.label} copied`, 2000);\n } catch (error) {\n console.error('Failed to copy to clipboard:', error);\n this.notificationService.showError('Failed to copy to clipboard');\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n inject,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { DateInputsModule } from '@progress/kendo-angular-dateinputs';\nimport { DropDownsModule } from '@progress/kendo-angular-dropdowns';\nimport { GridModule } from '@progress/kendo-angular-grid';\nimport { IconsModule } from '@progress/kendo-angular-icons';\nimport { InputsModule } from '@progress/kendo-angular-inputs';\nimport { IntlModule } from '@progress/kendo-angular-intl';\nimport { PopupModule } from '@progress/kendo-angular-popup';\n// Note: Kendo locale data (de/en) should be loaded via polyfills in the consuming application\nimport {\n AttributeItem,\n AttributeSelectorService,\n AttributeValueTypeDto,\n FieldFilterDto,\n FieldFilterOperatorsDto,\n} from '@meshmakers/octo-services';\nimport {\n dollarIcon,\n minusIcon,\n plusIcon,\n trashIcon,\n} from '@progress/kendo-svg-icons';\nimport { firstValueFrom } from 'rxjs';\n\n/**\n * Variable definition for use in filter values.\n * Generic interface that can be provided by any consumer (e.g., MeshBoard).\n */\nexport interface FilterVariable {\n /** Variable name (without $ prefix) */\n name: string;\n /** Display label for UI */\n label?: string;\n /** Variable data type */\n type?: 'string' | 'number' | 'boolean' | 'date' | 'datetime';\n}\n\nexport interface FieldFilterItem extends FieldFilterDto {\n id: number;\n /** If true, comparisonValue contains a variable reference (e.g., $myVar) */\n useVariable?: boolean;\n}\n\ntype InputType = 'text' | 'number' | 'boolean' | 'datetime';\n\n@Component({\n selector: 'mm-field-filter-editor',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n GridModule,\n ButtonsModule,\n DropDownsModule,\n InputsModule,\n DateInputsModule,\n IconsModule,\n PopupModule,\n IntlModule,\n ],\n template: `\n <div class=\"field-filter-editor\">\n @if (ckTypeId && !hideNavigationProperties) {\n <div class=\"attribute-options\">\n <label class=\"inline-checkbox\">\n <input\n type=\"checkbox\"\n kendoCheckBox\n [(ngModel)]=\"includeNavigationProperties\"\n (ngModelChange)=\"onNavigationPropertiesChange()\"\n />\n Include Navigation Properties\n </label>\n <label class=\"inline-field\">\n Max Depth\n <kendo-numerictextbox\n [(ngModel)]=\"maxDepth\"\n [min]=\"1\"\n [max]=\"5\"\n [step]=\"1\"\n [format]=\"'n0'\"\n [spinners]=\"true\"\n [disabled]=\"!includeNavigationProperties\"\n (valueChange)=\"onMaxDepthChange($event)\"\n class=\"depth-input\"\n >\n </kendo-numerictextbox>\n </label>\n @if (isLoadingAttributes) {\n <span class=\"loading-hint\">Loading...</span>\n }\n </div>\n }\n <div class=\"toolbar\">\n <button\n kendoButton\n [svgIcon]=\"plusIcon\"\n themeColor=\"primary\"\n (click)=\"addFilter()\"\n title=\"Add filter\"\n >\n Add Filter\n </button>\n <button\n kendoButton\n [svgIcon]=\"trashIcon\"\n themeColor=\"error\"\n (click)=\"removeSelected()\"\n [disabled]=\"selectedKeys.length === 0\"\n title=\"Remove selected filters\"\n >\n Remove Selected\n </button>\n </div>\n\n <kendo-grid\n [data]=\"filters\"\n [selectable]=\"{ mode: 'multiple', enabled: true }\"\n [kendoGridSelectBy]=\"'id'\"\n [(selectedKeys)]=\"selectedKeys\"\n class=\"filter-grid\"\n >\n <kendo-grid-column title=\"\" [width]=\"50\" [class]=\"'checkbox-column'\">\n <ng-template kendoGridHeaderTemplate>\n <input\n type=\"checkbox\"\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isIndeterminate()\"\n (change)=\"toggleSelectAll($event)\"\n />\n </ng-template>\n <ng-template kendoGridCellTemplate let-dataItem>\n <input\n type=\"checkbox\"\n [checked]=\"isSelected(dataItem)\"\n (change)=\"toggleSelection(dataItem)\"\n />\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column\n field=\"attributePath\"\n title=\"Attribute Path\"\n [width]=\"280\"\n >\n <ng-template kendoGridCellTemplate let-dataItem>\n @if (availableAttributes.length > 0) {\n <kendo-combobox\n [data]=\"filteredAttributeList\"\n [(ngModel)]=\"dataItem.attributePath\"\n (valueChange)=\"onAttributeChange(dataItem, $event)\"\n [textField]=\"'attributePath'\"\n [valueField]=\"'attributePath'\"\n [valuePrimitive]=\"true\"\n [allowCustom]=\"true\"\n [filterable]=\"true\"\n (filterChange)=\"onAttributeFilterChange($event)\"\n [listHeight]=\"300\"\n [popupSettings]=\"{ appendTo: 'root', animate: true }\"\n class=\"attribute-dropdown\"\n >\n <ng-template kendoComboBoxItemTemplate let-item>\n <div class=\"attribute-item\">\n <span class=\"attribute-path\">{{ item.attributePath }}</span>\n <span class=\"attribute-type\">{{\n item.attributeValueType\n }}</span>\n </div>\n </ng-template>\n </kendo-combobox>\n } @else {\n <kendo-textbox\n [(ngModel)]=\"dataItem.attributePath\"\n (valueChange)=\"onFilterChange()\"\n placeholder=\"Enter attribute path\"\n class=\"attribute-input\"\n >\n </kendo-textbox>\n }\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column field=\"operator\" title=\"Operator\" [width]=\"180\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <kendo-dropdownlist\n [data]=\"operators\"\n [(ngModel)]=\"dataItem.operator\"\n (valueChange)=\"onOperatorChange(dataItem)\"\n [textField]=\"'label'\"\n [valueField]=\"'value'\"\n [valuePrimitive]=\"true\"\n [listHeight]=\"300\"\n [popupSettings]=\"{ appendTo: 'root', animate: true }\"\n class=\"operator-dropdown\"\n >\n </kendo-dropdownlist>\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column field=\"comparisonValue\" title=\"Value\" [width]=\"280\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <div class=\"value-cell\">\n @if (dataItem.useVariable && enableVariables) {\n <!-- Variable mode: show variable dropdown -->\n <kendo-dropdownlist\n [data]=\"availableVariables\"\n [value]=\"getSelectedVariable(dataItem)\"\n (valueChange)=\"onVariableSelected(dataItem, $event)\"\n [textField]=\"'label'\"\n [valueField]=\"'name'\"\n [valuePrimitive]=\"false\"\n [popupSettings]=\"{ appendTo: 'root', animate: true }\"\n placeholder=\"Select variable...\"\n class=\"value-input variable-dropdown\"\n >\n <ng-template kendoDropDownListItemTemplate let-item>\n <div class=\"variable-item\">\n <span class=\"variable-name\">{{\n formatVariableDisplay(item.name)\n }}</span>\n @if (item.label && item.label !== item.name) {\n <span class=\"variable-label\">{{ item.label }}</span>\n }\n </div>\n </ng-template>\n <ng-template kendoDropDownListValueTemplate let-item>\n @if (item) {\n <span class=\"variable-value\">{{\n formatVariableDisplay(item.name)\n }}</span>\n } @else {\n <span class=\"variable-placeholder\"\n >Select variable...</span\n >\n }\n </ng-template>\n </kendo-dropdownlist>\n } @else {\n <!-- Literal value mode: show type-specific input -->\n @switch (getInputType(dataItem)) {\n @case ('boolean') {\n @if (isArrayOperator(dataItem.operator)) {\n <kendo-textbox\n [value]=\"getDisplayValue(dataItem)\"\n (valueChange)=\"\n onComparisonValueChange(dataItem, $event)\n \"\n placeholder=\"true, false\"\n class=\"value-input\"\n >\n </kendo-textbox>\n } @else {\n <kendo-dropdownlist\n [data]=\"booleanOptions\"\n [value]=\"getBooleanValue(dataItem)\"\n (valueChange)=\"onBooleanValueChange(dataItem, $event)\"\n [popupSettings]=\"{ appendTo: 'root', animate: true }\"\n class=\"value-input\"\n >\n </kendo-dropdownlist>\n }\n }\n @case ('number') {\n @if (isArrayOperator(dataItem.operator)) {\n <kendo-textbox\n [value]=\"getDisplayValue(dataItem)\"\n (valueChange)=\"\n onComparisonValueChange(dataItem, $event)\n \"\n placeholder=\"1, 2, 3\"\n class=\"value-input\"\n >\n </kendo-textbox>\n } @else {\n <kendo-numerictextbox\n [value]=\"getNumericValue(dataItem)\"\n (valueChange)=\"onNumericValueChange(dataItem, $event)\"\n [decimals]=\"getDecimals(dataItem)\"\n [format]=\"getNumberFormat(dataItem)\"\n class=\"value-input\"\n >\n </kendo-numerictextbox>\n }\n }\n @case ('datetime') {\n @if (isArrayOperator(dataItem.operator)) {\n <kendo-textbox\n [value]=\"getDisplayValue(dataItem)\"\n (valueChange)=\"\n onComparisonValueChange(dataItem, $event)\n \"\n placeholder=\"2024-01-15, 2024-02-20\"\n class=\"value-input\"\n >\n </kendo-textbox>\n } @else {\n <kendo-datetimepicker\n [value]=\"getDateTimeValue(dataItem)\"\n (valueChange)=\"onDateTimeValueChange(dataItem, $event)\"\n [popupSettings]=\"{ appendTo: 'root', animate: true }\"\n class=\"value-input\"\n >\n </kendo-datetimepicker>\n }\n }\n @default {\n <kendo-textbox\n [value]=\"getDisplayValue(dataItem)\"\n (valueChange)=\"onComparisonValueChange(dataItem, $event)\"\n (blur)=\"onComparisonValueBlur(dataItem)\"\n [placeholder]=\"getValuePlaceholder(dataItem)\"\n class=\"value-input\"\n >\n </kendo-textbox>\n }\n }\n }\n <!-- Variable toggle button -->\n @if (enableVariables && availableVariables.length > 0) {\n <button\n kendoButton\n [svgIcon]=\"dollarIcon\"\n fillMode=\"flat\"\n [themeColor]=\"dataItem.useVariable ? 'primary' : 'base'\"\n (click)=\"toggleVariableMode(dataItem)\"\n [title]=\"\n dataItem.useVariable\n ? 'Switch to literal value'\n : 'Use variable'\n \"\n class=\"variable-toggle\"\n ></button>\n }\n </div>\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column title=\"\" [width]=\"60\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <button\n kendoButton\n [svgIcon]=\"minusIcon\"\n fillMode=\"flat\"\n themeColor=\"error\"\n (click)=\"removeFilter(dataItem)\"\n title=\"Remove this filter\"\n ></button>\n </ng-template>\n </kendo-grid-column>\n </kendo-grid>\n\n @if (filters.length === 0) {\n <div class=\"empty-state\">\n <p>No filters defined. Click \"Add Filter\" to create a new filter.</p>\n </div>\n }\n </div>\n `,\n styles: [\n `\n .field-filter-editor {\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .attribute-options {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85rem;\n }\n\n .inline-checkbox {\n display: flex;\n align-items: center;\n gap: 6px;\n cursor: pointer;\n font-weight: normal;\n }\n\n .inline-field {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: normal;\n }\n\n .depth-input {\n width: 80px;\n }\n\n .loading-hint {\n font-size: 0.8rem;\n color: var(--kendo-color-subtle, #6c757d);\n }\n\n .toolbar {\n display: flex;\n gap: 10px;\n margin-bottom: 5px;\n }\n\n .filter-grid {\n border: 1px solid #d5d5d5;\n }\n\n .filter-grid ::ng-deep .k-grid-header .k-header {\n font-weight: 600;\n }\n\n .checkbox-column {\n text-align: center;\n }\n\n .attribute-dropdown,\n .operator-dropdown,\n .attribute-input {\n width: 100%;\n }\n\n .value-input {\n width: 100%;\n }\n\n .attribute-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n }\n\n .attribute-path {\n flex: 1;\n }\n\n .attribute-type {\n font-size: 11px;\n color: #888;\n margin-left: 8px;\n padding: 2px 6px;\n background: #f0f0f0;\n border-radius: 3px;\n }\n\n .empty-state {\n padding: 40px;\n text-align: center;\n border: 1px dashed;\n border-radius: 8px;\n font-family: 'Montserrat', sans-serif;\n font-size: 0.9rem;\n }\n\n .empty-state p {\n margin: 0;\n }\n\n .value-cell {\n display: flex;\n gap: 4px;\n align-items: center;\n }\n\n .value-cell .value-input {\n flex: 1;\n }\n\n .variable-toggle {\n flex-shrink: 0;\n }\n\n .variable-item {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .variable-name {\n font-family: monospace;\n font-weight: 500;\n }\n\n .variable-label {\n font-size: 11px;\n color: var(--kendo-color-subtle, #888);\n }\n\n .variable-value {\n font-family: monospace;\n color: var(--kendo-color-primary, #0d6efd);\n }\n\n .variable-placeholder {\n color: var(--kendo-color-subtle, #888);\n }\n\n .variable-dropdown ::ng-deep .k-input-value-text {\n font-family: monospace;\n }\n `,\n ],\n})\nexport class FieldFilterEditorComponent implements OnChanges {\n private readonly attributeService = inject(AttributeSelectorService, {\n optional: true,\n });\n\n protected readonly plusIcon = plusIcon;\n protected readonly minusIcon = minusIcon;\n protected readonly trashIcon = trashIcon;\n protected readonly dollarIcon = dollarIcon;\n\n private readonly arrayOperators = [\n FieldFilterOperatorsDto.InDto,\n FieldFilterOperatorsDto.NotInDto,\n ];\n\n public readonly operators: {\n label: string;\n value: FieldFilterOperatorsDto;\n }[] = [\n { label: 'Equals', value: FieldFilterOperatorsDto.EqualsDto },\n { label: 'Not Equals', value: FieldFilterOperatorsDto.NotEqualsDto },\n { label: 'Greater Than', value: FieldFilterOperatorsDto.GreaterThanDto },\n {\n label: 'Greater Equal',\n value: FieldFilterOperatorsDto.GreaterEqualThanDto,\n },\n { label: 'Less Than', value: FieldFilterOperatorsDto.LessThanDto },\n { label: 'Less Equal', value: FieldFilterOperatorsDto.LessEqualThanDto },\n { label: 'Like', value: FieldFilterOperatorsDto.LikeDto },\n { label: 'In', value: FieldFilterOperatorsDto.InDto },\n { label: 'Not In', value: FieldFilterOperatorsDto.NotInDto },\n { label: 'Any Equals', value: FieldFilterOperatorsDto.AnyEqDto },\n { label: 'Any Like', value: FieldFilterOperatorsDto.AnyLikeDto },\n { label: 'Match RegEx', value: FieldFilterOperatorsDto.MatchRegExDto },\n ];\n\n public readonly booleanOptions = ['true', 'false'];\n\n @Input() public availableAttributes: AttributeItem[] = [];\n\n /**\n * Optional CK type ID for self-loading attributes.\n * When set, the component loads available attributes itself and shows\n * navigation property controls (checkbox + max depth).\n * When not set, the component uses the externally provided availableAttributes input.\n */\n @Input() public ckTypeId?: string;\n\n /**\n * When true, hides the \"Include Navigation Properties\" checkbox and Max Depth controls,\n * and forces attribute loading without navigation properties.\n * Used for stream data queries which don't support navigation properties.\n */\n @Input() public hideNavigationProperties = false;\n\n /**\n * When set, restricts the available attributes to only these attribute paths (filtered client-side after fetching).\n * Used for stream data queries to show only stream-data-enabled attributes.\n */\n @Input() public attributePaths?: string[];\n\n /** Enable variable mode - allows using variables instead of literal values */\n @Input() public enableVariables = false;\n\n /** Available variables for selection when enableVariables is true */\n @Input() public availableVariables: FilterVariable[] = [];\n\n /** Controls for self-loading mode (when ckTypeId is set) */\n public includeNavigationProperties = true;\n public maxDepth: number | null = null;\n public isLoadingAttributes = false;\n\n private _filters: FieldFilterItem[] = [];\n private nextId = 1;\n public filteredAttributeList: AttributeItem[] = [];\n private attributeTypeMap = new Map<string, AttributeValueTypeDto>();\n\n @Input()\n public get filters(): FieldFilterItem[] {\n return this._filters;\n }\n public set filters(value: FieldFilterItem[]) {\n this._filters = value;\n this.filtersChange.emit(this._filters);\n }\n\n @Output() public filtersChange = new EventEmitter<FieldFilterItem[]>();\n\n public selectedKeys: number[] = [];\n\n ngOnChanges(changes?: SimpleChanges): void {\n // When hideNavigationProperties changes to true, reset nav props\n if (\n changes?.['hideNavigationProperties'] &&\n this.hideNavigationProperties\n ) {\n this.includeNavigationProperties = false;\n this.maxDepth = null;\n }\n\n // Reload attributes when ckTypeId, hideNavigationProperties, or attributePaths changes\n if ((changes?.['ckTypeId'] || changes?.['hideNavigationProperties'] || changes?.['attributePaths']) && this.ckTypeId) {\n this.loadAttributesFromCkType();\n }\n\n this.filteredAttributeList = [...this.availableAttributes];\n this.buildAttributeTypeMap();\n // Ensure useVariable flag is set correctly for filters with variable values\n this.detectVariableFilters();\n }\n\n /**\n * Detects filters that contain variable references and sets useVariable flag.\n * This ensures proper display when filters are loaded from saved configuration.\n */\n private detectVariableFilters(): void {\n for (const filter of this._filters) {\n // Always check if the value is a variable reference and update the flag\n const isVariable = this.isVariableValue(filter.comparisonValue);\n if (isVariable && !filter.useVariable) {\n filter.useVariable = true;\n }\n }\n }\n\n private buildAttributeTypeMap(): void {\n this.attributeTypeMap.clear();\n for (const attr of this.availableAttributes) {\n this.attributeTypeMap.set(\n attr.attributePath,\n attr.attributeValueType as AttributeValueTypeDto,\n );\n }\n }\n\n // ============================================================================\n // Self-loading attribute methods (when ckTypeId is set)\n // ============================================================================\n\n public onNavigationPropertiesChange(): void {\n if (!this.includeNavigationProperties) {\n this.maxDepth = null;\n }\n this.loadAttributesFromCkType();\n }\n\n public onMaxDepthChange(value: number | null): void {\n this.maxDepth = value;\n this.loadAttributesFromCkType();\n }\n\n private async loadAttributesFromCkType(): Promise<void> {\n if (!this.ckTypeId || !this.attributeService) return;\n\n this.isLoadingAttributes = true;\n const includeNavProps = this.hideNavigationProperties\n ? false\n : this.includeNavigationProperties;\n try {\n const result = await firstValueFrom(\n this.attributeService.getAvailableAttributes(\n this.ckTypeId,\n undefined, // filter\n 1000, // first\n undefined, // after\n undefined, // attributeValueType\n undefined, // searchTerm\n includeNavProps,\n this.maxDepth ?? undefined,\n ),\n );\n // Apply client-side attribute path restriction if set\n const allowedPathsSet = this.attributePaths ? new Set(this.attributePaths) : null;\n this.availableAttributes = allowedPathsSet\n ? result.items.filter(item => allowedPathsSet.has(item.attributePath))\n : result.items;\n this.filteredAttributeList = [...this.availableAttributes];\n this.buildAttributeTypeMap();\n } catch (error) {\n console.error('Error loading filter attributes:', error);\n this.availableAttributes = [];\n this.filteredAttributeList = [];\n } finally {\n this.isLoadingAttributes = false;\n }\n }\n\n private filterAvailableAttributes(items: AttributeItem[]): AttributeItem[] {\n let filtered = items;\n if (!this.includeNavigationProperties) {\n filtered = filtered.filter(\n (item) => this.getAttributeDepth(item.attributePath) === 0,\n );\n }\n if (this.maxDepth != null) {\n filtered = filtered.filter(\n (item) => this.getAttributeDepth(item.attributePath) <= this.maxDepth!,\n );\n }\n return filtered;\n }\n\n private getAttributeDepth(attributePath: string): number {\n if (!attributePath) return 0;\n return attributePath.split('.').length - 1;\n }\n\n public addFilter(): void {\n const newFilter: FieldFilterItem = {\n id: this.nextId++,\n attributePath: '',\n operator: FieldFilterOperatorsDto.EqualsDto,\n comparisonValue: '',\n };\n this._filters = [...this._filters, newFilter];\n this.filtersChange.emit(this._filters);\n }\n\n public removeFilter(filter: FieldFilterItem): void {\n this._filters = this._filters.filter((f) => f.id !== filter.id);\n this.selectedKeys = this.selectedKeys.filter((k) => k !== filter.id);\n this.filtersChange.emit(this._filters);\n }\n\n public removeSelected(): void {\n this._filters = this._filters.filter(\n (f) => !this.selectedKeys.includes(f.id),\n );\n this.selectedKeys = [];\n this.filtersChange.emit(this._filters);\n }\n\n public onFilterChange(): void {\n this.filtersChange.emit(this._filters);\n }\n\n public onAttributeChange(\n filter: FieldFilterItem,\n attributePath: string,\n ): void {\n filter.attributePath = attributePath;\n // Reset comparison value when attribute changes\n filter.comparisonValue = '';\n this.onFilterChange();\n }\n\n public onOperatorChange(filter: FieldFilterItem): void {\n if (!filter.comparisonValue) {\n this.onFilterChange();\n return;\n }\n\n const currentValue = String(filter.comparisonValue);\n\n if (this.isArrayOperator(filter.operator)) {\n const valuesToProcess = this.extractArrayContent(currentValue);\n const cleanedValues = this.parseAndCleanArrayValues(valuesToProcess);\n filter.comparisonValue = `[${cleanedValues.join(', ')}]`;\n } else {\n const scalarValue = this.extractArrayContent(currentValue);\n if (scalarValue.includes(',')) {\n filter.comparisonValue = scalarValue.split(',')[0].trim();\n } else {\n filter.comparisonValue = scalarValue.trim();\n }\n }\n\n this.onFilterChange();\n }\n\n public onComparisonValueChange(\n filter: FieldFilterItem,\n inputValue: string | null,\n ): void {\n if (inputValue === null) {\n filter.comparisonValue = '';\n return;\n }\n\n if (this.isArrayOperator(filter.operator)) {\n const cleanedValues = this.parseAndCleanArrayValues(inputValue);\n filter.comparisonValue = `[${cleanedValues.join(', ')}]`;\n } else {\n filter.comparisonValue = this.extractArrayContent(inputValue);\n }\n\n this.onFilterChange();\n }\n\n public onComparisonValueBlur(filter: FieldFilterItem): void {\n if (!filter.comparisonValue) return;\n\n const value = String(filter.comparisonValue);\n\n if (this.isArrayOperator(filter.operator)) {\n const cleanedValues = this.parseAndCleanArrayValues(value);\n filter.comparisonValue = `[${cleanedValues.join(', ')}]`;\n } else {\n filter.comparisonValue = this.extractArrayContent(value).trim();\n }\n\n this.onFilterChange();\n }\n\n public onBooleanValueChange(filter: FieldFilterItem, value: string): void {\n filter.comparisonValue = value;\n this.onFilterChange();\n }\n\n public onNumericValueChange(\n filter: FieldFilterItem,\n value: number | null,\n ): void {\n filter.comparisonValue = value !== null ? String(value) : '';\n this.onFilterChange();\n }\n\n public onDateTimeValueChange(\n filter: FieldFilterItem,\n value: Date | null,\n ): void {\n filter.comparisonValue = value !== null ? value.toISOString() : '';\n this.onFilterChange();\n }\n\n public getDisplayValue(filter: FieldFilterItem): string {\n if (!filter.comparisonValue) {\n return '';\n }\n\n const value = String(filter.comparisonValue);\n\n if (this.isArrayOperator(filter.operator) && this.isArrayValue(value)) {\n return this.extractArrayContent(value);\n }\n\n return value;\n }\n\n public getBooleanValue(filter: FieldFilterItem): string {\n const value = filter.comparisonValue;\n if (value === 'true' || value === true) return 'true';\n if (value === 'false' || value === false) return 'false';\n return '';\n }\n\n public getNumericValue(filter: FieldFilterItem): number {\n const value = filter.comparisonValue;\n if (value === null || value === undefined || value === '') return 0;\n const num = Number(value);\n return isNaN(num) ? 0 : num;\n }\n\n public getDateTimeValue(filter: FieldFilterItem): Date | null {\n const value = filter.comparisonValue;\n if (!value) return null;\n const date = new Date(String(value));\n return isNaN(date.getTime()) ? null : date;\n }\n\n public getInputType(filter: FieldFilterItem): InputType {\n const attrType = this.attributeTypeMap.get(filter.attributePath);\n if (!attrType) return 'text';\n\n // Normalize to uppercase for case-insensitive comparison\n const normalizedType = String(attrType).toUpperCase();\n\n // Boolean types\n if (normalizedType === 'BOOLEAN') {\n return 'boolean';\n }\n\n // Numeric types\n if (\n normalizedType === 'INT' ||\n normalizedType === 'INTEGER' ||\n normalizedType === 'INT_64' ||\n normalizedType === 'INTEGER_64' ||\n normalizedType === 'DOUBLE'\n ) {\n return 'number';\n }\n\n // DateTime types\n if (\n normalizedType === 'DATE_TIME' ||\n normalizedType === 'DATE_TIME_OFFSET' ||\n normalizedType === 'DATETIME' ||\n normalizedType === 'DATETIMEOFFSET'\n ) {\n return 'datetime';\n }\n\n return 'text';\n }\n\n public getDecimals(filter: FieldFilterItem): number {\n const attrType = this.attributeTypeMap.get(filter.attributePath);\n return attrType === AttributeValueTypeDto.DoubleDto ? 4 : 0;\n }\n\n public getNumberFormat(filter: FieldFilterItem): string {\n const attrType = this.attributeTypeMap.get(filter.attributePath);\n return attrType === AttributeValueTypeDto.DoubleDto ? 'n4' : 'n0';\n }\n\n public getValuePlaceholder(filter: FieldFilterItem): string {\n if (this.isArrayOperator(filter.operator)) {\n return 'Values: A,B,C or \"value,with,comma\"';\n }\n return 'Enter value';\n }\n\n public isArrayOperator(operator: FieldFilterOperatorsDto): boolean {\n return this.arrayOperators.includes(operator);\n }\n\n public isSelected(filter: FieldFilterItem): boolean {\n return this.selectedKeys.includes(filter.id);\n }\n\n public toggleSelection(filter: FieldFilterItem): void {\n if (this.isSelected(filter)) {\n this.selectedKeys = this.selectedKeys.filter((k) => k !== filter.id);\n } else {\n this.selectedKeys = [...this.selectedKeys, filter.id];\n }\n }\n\n public isAllSelected(): boolean {\n return (\n this._filters.length > 0 &&\n this.selectedKeys.length === this._filters.length\n );\n }\n\n public isIndeterminate(): boolean {\n return (\n this.selectedKeys.length > 0 &&\n this.selectedKeys.length < this._filters.length\n );\n }\n\n public toggleSelectAll(event: Event): void {\n const checkbox = event.target as HTMLInputElement;\n if (checkbox.checked) {\n this.selectedKeys = this._filters.map((f) => f.id);\n } else {\n this.selectedKeys = [];\n }\n }\n\n public onAttributeFilterChange(filter: string): void {\n this.filteredAttributeList = this.availableAttributes.filter((attr) =>\n attr.attributePath.toLowerCase().includes(filter.toLowerCase()),\n );\n }\n\n // ============================================================================\n // Variable Mode Methods\n // ============================================================================\n\n /**\n * Toggles between literal value and variable mode for a filter.\n */\n public toggleVariableMode(filter: FieldFilterItem): void {\n filter.useVariable = !filter.useVariable;\n // Clear the value when switching modes\n filter.comparisonValue = '';\n this.onFilterChange();\n }\n\n /**\n * Gets the selected variable object for a filter that uses variable mode.\n */\n public getSelectedVariable(filter: FieldFilterItem): FilterVariable | null {\n if (!filter.comparisonValue) return null;\n\n const varName = this.extractVariableName(String(filter.comparisonValue));\n if (!varName) return null;\n\n return this.availableVariables.find((v) => v.name === varName) || null;\n }\n\n /**\n * Handles variable selection from the dropdown.\n */\n public onVariableSelected(\n filter: FieldFilterItem,\n variable: FilterVariable | null,\n ): void {\n if (variable) {\n // Store as ${variableName} format\n filter.comparisonValue = `\\${${variable.name}}`;\n } else {\n filter.comparisonValue = '';\n }\n this.onFilterChange();\n }\n\n /**\n * Extracts variable name from ${variableName} or $variableName format.\n */\n private extractVariableName(value: string): string | null {\n // Match ${varName} format\n const bracketMatch = value.match(/^\\$\\{([^}]+)\\}$/);\n if (bracketMatch) {\n return bracketMatch[1];\n }\n\n // Match $varName format (without braces)\n const simpleMatch = value.match(/^\\$([a-zA-Z_][a-zA-Z0-9_]*)$/);\n if (simpleMatch) {\n return simpleMatch[1];\n }\n\n return null;\n }\n\n /**\n * Checks if a filter value is a variable reference.\n */\n public isVariableValue(value: unknown): boolean {\n if (!value || typeof value !== 'string') return false;\n return (\n /^\\$\\{[^}]+\\}$/.test(value) || /^\\$[a-zA-Z_][a-zA-Z0-9_]*$/.test(value)\n );\n }\n\n /**\n * Formats a variable name for display (e.g., \"myVar\" -> \"${myVar}\").\n */\n public formatVariableDisplay(name: string): string {\n return '$' + '{' + name + '}';\n }\n\n public getFieldFilters(): FieldFilterDto[] {\n return this._filters\n .filter((f) => f.attributePath && f.attributePath.trim() !== '')\n .map((f) => ({\n attributePath: f.attributePath,\n operator: f.operator,\n comparisonValue: f.comparisonValue,\n }));\n }\n\n public setFieldFilters(filters: FieldFilterDto[]): void {\n this._filters = filters.map((f) => ({\n ...f,\n id: this.nextId++,\n // Detect if the value is a variable reference\n useVariable: this.isVariableValue(f.comparisonValue),\n }));\n this.filtersChange.emit(this._filters);\n }\n\n public clear(): void {\n this._filters = [];\n this.selectedKeys = [];\n this.filtersChange.emit(this._filters);\n }\n\n private isArrayValue(value: string): boolean {\n return value.trim().startsWith('[') && value.trim().endsWith(']');\n }\n\n private extractArrayContent(value: string): string {\n const trimmed = value.trim();\n if (this.isArrayValue(trimmed)) {\n return trimmed.slice(1, -1);\n }\n return trimmed;\n }\n\n private parseAndCleanArrayValues(inputValue: string): string[] {\n const values: string[] = [];\n let current = '';\n let inQuotes = false;\n let quoteChar = '';\n\n for (const char of inputValue) {\n if (!inQuotes && (char === '\"' || char === \"'\")) {\n inQuotes = true;\n quoteChar = char;\n current += char;\n } else if (inQuotes && char === quoteChar) {\n inQuotes = false;\n current += char;\n quoteChar = '';\n } else if (!inQuotes && char === ',') {\n const trimmed = current.trim();\n if (trimmed.length > 0) {\n values.push(trimmed);\n }\n current = '';\n } else {\n current += char;\n }\n }\n\n const trimmed = current.trim();\n if (trimmed.length > 0) {\n values.push(trimmed);\n }\n\n return values;\n }\n}\n","import {Component, Input} from '@angular/core';\n\n/**\n * Animated OctoMesh logo loader component.\n * Displays the OctoMesh octopus SVG with wiggling tentacles\n * and orbiting data blocks representing data loading.\n *\n * Uses `--kendo-color-primary` for theme-independent coloring.\n * Override the color via CSS `color` property on the host element.\n *\n * @example\n * ```html\n * <mm-octo-loader [size]=\"'medium'\"></mm-octo-loader>\n * <mm-octo-loader [size]=\"'small'\"></mm-octo-loader>\n * ```\n */\n@Component({\n selector: 'mm-octo-loader',\n standalone: true,\n template: `\n <div class=\"octo-loader\" [class.octo-loader--small]=\"size === 'small'\" [class.octo-loader--medium]=\"size === 'medium'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"-22 -8 112 118\" class=\"octo-loader__svg\" overflow=\"visible\">\n <!-- Orbit track -->\n <circle class=\"octo-orbit\" cx=\"34\" cy=\"48\" r=\"52\" fill=\"none\" stroke-width=\"2.5\" stroke-dasharray=\"5 9\" opacity=\"0.5\">\n <animateTransform attributeName=\"transform\" type=\"rotate\"\n from=\"0 34 48\" to=\"360 34 48\" dur=\"12s\" repeatCount=\"indefinite\"/>\n </circle>\n\n <!-- Orbiting data blocks -->\n <g>\n <animateTransform attributeName=\"transform\" type=\"rotate\"\n from=\"0 34 48\" to=\"360 34 48\" dur=\"3s\" repeatCount=\"indefinite\"/>\n <rect class=\"octo-data\" x=\"28\" y=\"-9\" width=\"12\" height=\"8\" rx=\"1.5\" opacity=\"0.95\"/>\n </g>\n <g>\n <animateTransform attributeName=\"transform\" type=\"rotate\"\n from=\"120 34 48\" to=\"480 34 48\" dur=\"3s\" repeatCount=\"indefinite\"/>\n <rect class=\"octo-data\" x=\"28\" y=\"-9\" width=\"12\" height=\"8\" rx=\"1.5\" opacity=\"0.75\"/>\n </g>\n <g>\n <animateTransform attributeName=\"transform\" type=\"rotate\"\n from=\"240 34 48\" to=\"600 34 48\" dur=\"3s\" repeatCount=\"indefinite\"/>\n <rect class=\"octo-data\" x=\"28\" y=\"-9\" width=\"12\" height=\"8\" rx=\"1.5\" opacity=\"0.5\"/>\n </g>\n\n <!-- Octo character -->\n <g>\n <!-- Body -->\n <polygon fill=\"currentColor\"\n points=\"63.04 52.74 63.04 43.04 63.04 38.19 63.04 28.49 67.89 0 43.64 4.24 34.01 4.24 14.61 4.24 0 4.24 0 18.79 0 28.49 0 40.61 0 52.74 14.55 52.74 14.55 52.13 14.55 47.89 4.85 47.89 4.85 43.04 4.85 36.37 4.85 23.64 4.85 17.58 4.85 9.09 19.4 9.09 33.94 9.09 43.64 9.09 62.01 6.02 58.19 28.49 58.19 33.34 58.19 38.19 58.19 43.04 58.19 47.89 48.49 47.89 48.49 52.13 48.49 52.74\"/>\n <!-- Eyes -->\n <rect fill=\"currentColor\" x=\"18.79\" y=\"19.4\" width=\"4.85\" height=\"13.94\"/>\n <rect fill=\"currentColor\" x=\"38.79\" y=\"19.4\" width=\"4.85\" height=\"13.94\"/>\n <!-- Left outer arm -->\n <g class=\"octo-arm octo-arm--ol\">\n <polygon fill=\"currentColor\"\n points=\"0 52.74 9.7 52.74 9.7 72.13 4.85 72.13 4.85 67.28 0 67.28 0 72.13 0 76.98 4.85 76.98 14.55 76.98 14.55 72.13 14.55 52.74\"/>\n </g>\n <!-- Left inner leg -->\n <g class=\"octo-leg octo-leg--left\">\n <polygon fill=\"currentColor\"\n points=\"19.4 91.53 14.55 91.53 14.55 81.83 9.7 81.83 9.7 91.53 9.7 96.38 14.55 96.38 19.4 96.38 24.25 96.38 24.25 91.53 24.25 52.74 19.4 52.74 19.4 91.53\"/>\n </g>\n <!-- Center leg -->\n <g class=\"octo-leg octo-leg--center\">\n <rect fill=\"currentColor\" x=\"29.1\" y=\"52.74\" width=\"4.85\" height=\"33.94\"/>\n </g>\n <!-- Right inner leg -->\n <g class=\"octo-leg octo-leg--right\">\n <polygon fill=\"currentColor\"\n points=\"48.49 91.53 43.64 91.53 43.64 52.74 38.79 52.74 38.79 91.53 38.79 96.38 43.64 96.38 48.49 96.38 53.34 96.38 53.34 91.53 53.34 81.83 48.49 81.83 48.49 91.53\"/>\n </g>\n <!-- Right outer arm -->\n <g class=\"octo-arm octo-arm--or\">\n <polygon fill=\"currentColor\"\n points=\"48.49 52.74 48.49 72.13 48.49 76.98 58.19 76.98 63.04 76.98 63.04 67.28 58.19 67.28 58.19 72.13 53.34 72.13 53.34 52.74 63.04 52.74\"/>\n </g>\n </g>\n\n <!-- Data flow: orbit → left arm → body → left arm → orbit -->\n <rect class=\"octo-data\" x=\"-7\" y=\"-4\" width=\"14\" height=\"8\" rx=\"1.5\" opacity=\"0\">\n <animateMotion path=\"M -10,88 L 7,76 L 7,54 L 7,76 L -10,88\" dur=\"3s\" repeatCount=\"indefinite\"/>\n <animate attributeName=\"opacity\" values=\"0.3;0.8;0.9;0.8;0.3\" keyTimes=\"0;0.25;0.5;0.75;1\" dur=\"3s\" repeatCount=\"indefinite\"/>\n </rect>\n <rect class=\"octo-data\" x=\"-7\" y=\"-4\" width=\"14\" height=\"8\" rx=\"1.5\" opacity=\"0\">\n <animateMotion path=\"M -10,88 L 7,76 L 7,54 L 7,76 L -10,88\" dur=\"3s\" begin=\"-1s\" repeatCount=\"indefinite\"/>\n <animate attributeName=\"opacity\" values=\"0.3;0.8;0.9;0.8;0.3\" keyTimes=\"0;0.25;0.5;0.75;1\" dur=\"3s\" begin=\"-1s\" repeatCount=\"indefinite\"/>\n </rect>\n <rect class=\"octo-data\" x=\"-7\" y=\"-4\" width=\"14\" height=\"8\" rx=\"1.5\" opacity=\"0\">\n <animateMotion path=\"M -10,88 L 7,76 L 7,54 L 7,76 L -10,88\" dur=\"3s\" begin=\"-2s\" repeatCount=\"indefinite\"/>\n <animate attributeName=\"opacity\" values=\"0.3;0.8;0.9;0.8;0.3\" keyTimes=\"0;0.25;0.5;0.75;1\" dur=\"3s\" begin=\"-2s\" repeatCount=\"indefinite\"/>\n </rect>\n\n <!-- Data flow: orbit → right arm → body → right arm → orbit -->\n <rect class=\"octo-data\" x=\"-7\" y=\"-4\" width=\"14\" height=\"8\" rx=\"1.5\" opacity=\"0\">\n <animateMotion path=\"M 73,88 L 56,76 L 56,54 L 56,76 L 73,88\" dur=\"3s\" begin=\"-0.5s\" repeatCount=\"indefinite\"/>\n <animate attributeName=\"opacity\" values=\"0.3;0.8;0.9;0.8;0.3\" keyTimes=\"0;0.25;0.5;0.75;1\" dur=\"3s\" begin=\"-0.5s\" repeatCount=\"indefinite\"/>\n </rect>\n <rect class=\"octo-data\" x=\"-7\" y=\"-4\" width=\"14\" height=\"8\" rx=\"1.5\" opacity=\"0\">\n <animateMotion path=\"M 73,88 L 56,76 L 56,54 L 56,76 L 73,88\" dur=\"3s\" begin=\"-1.5s\" repeatCount=\"indefinite\"/>\n <animate attributeName=\"opacity\" values=\"0.3;0.8;0.9;0.8;0.3\" keyTimes=\"0;0.25;0.5;0.75;1\" dur=\"3s\" begin=\"-1.5s\" repeatCount=\"indefinite\"/>\n </rect>\n <rect class=\"octo-data\" x=\"-7\" y=\"-4\" width=\"14\" height=\"8\" rx=\"1.5\" opacity=\"0\">\n <animateMotion path=\"M 73,88 L 56,76 L 56,54 L 56,76 L 73,88\" dur=\"3s\" begin=\"-2.5s\" repeatCount=\"indefinite\"/>\n <animate attributeName=\"opacity\" values=\"0.3;0.8;0.9;0.8;0.3\" keyTimes=\"0;0.25;0.5;0.75;1\" dur=\"3s\" begin=\"-2.5s\" repeatCount=\"indefinite\"/>\n </rect>\n </svg>\n </div>\n `,\n styles: [`\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--kendo-color-primary, #64ceb9);\n }\n\n .octo-loader {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n\n .octo-loader--small .octo-loader__svg {\n width: 24px;\n height: 24px;\n }\n\n .octo-loader--medium .octo-loader__svg {\n width: 48px;\n height: 48px;\n }\n\n /* Outer arms wiggle */\n .octo-arm--ol {\n transform-origin: 7px 52.74px;\n animation: octo-wiggle-outer 1.2s ease-in-out infinite;\n }\n\n .octo-arm--or {\n transform-origin: 56px 52.74px;\n animation: octo-wiggle-outer 1.2s ease-in-out infinite;\n animation-delay: -0.6s;\n }\n\n /* Inner legs wiggle */\n .octo-leg--left {\n transform-origin: 21.8px 52.74px;\n animation: octo-wiggle-inner 1s ease-in-out infinite;\n }\n\n .octo-leg--center {\n transform-origin: 31.5px 52.74px;\n animation: octo-wiggle-inner 1s ease-in-out infinite reverse;\n animation-delay: -0.33s;\n }\n\n .octo-leg--right {\n transform-origin: 46px 52.74px;\n animation: octo-wiggle-inner 1s ease-in-out infinite;\n animation-delay: -0.66s;\n }\n\n @keyframes octo-wiggle-inner {\n 0%, 100% { transform: rotate(-5deg); }\n 50% { transform: rotate(5deg); }\n }\n\n @keyframes octo-wiggle-outer {\n 0%, 100% { transform: rotate(-4deg); }\n 50% { transform: rotate(4deg); }\n }\n\n .octo-orbit {\n stroke: var(--neo-cyan, #00a8dc);\n }\n\n .octo-data {\n fill: var(--neo-cyan, #00a8dc);\n }\n `]\n})\nexport class OctoLoaderComponent {\n @Input() size: 'small' | 'medium' = 'medium';\n}\n","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type GetBinaryInfoQueryVariablesDto = Types.Exact<{\n rtId: Types.Scalars['OctoObjectId']['input'];\n}>;\n\n\nexport type GetBinaryInfoQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', systemReportingFileSystemItem?: { __typename?: 'SystemReportingFileSystemItemConnection', items?: Array<{ __typename?: 'SystemReportingFileSystemItem', rtId: any, ckTypeId: any, name: string, content: { __typename?: 'LargeBinaryInfo', binaryId: any, size: any, contentType: string, filename: string, downloadUri: any } } | null> | null } | null } | null };\n\nexport const GetBinaryInfoDocumentDto = gql`\n query getBinaryInfo($rtId: OctoObjectId!) {\n runtime {\n systemReportingFileSystemItem(rtId: $rtId) {\n items {\n rtId\n ckTypeId\n name\n content {\n binaryId\n size\n contentType\n filename\n downloadUri\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class GetBinaryInfoDtoGQL extends Apollo.Query<GetBinaryInfoQueryDto, GetBinaryInfoQueryVariablesDto> {\n document = GetBinaryInfoDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type GetRuntimeEntityAssociationsByIdQueryVariablesDto = Types.Exact<{\n rtId: Types.Scalars['OctoObjectId']['input'];\n ckTypeId: Types.Scalars['String']['input'];\n direction: Types.GraphDirectionDto;\n after?: Types.InputMaybe<Types.Scalars['String']['input']>;\n first?: Types.InputMaybe<Types.Scalars['Int']['input']>;\n roleId?: Types.InputMaybe<Types.Scalars['String']['input']>;\n relatedRtCkId?: Types.InputMaybe<Types.Scalars['RtCkTypeId']['input']>;\n relatedRtId?: Types.InputMaybe<Types.Scalars['OctoObjectId']['input']>;\n}>;\n\n\nexport type GetRuntimeEntityAssociationsByIdQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', items?: Array<{ __typename?: 'RtEntity', rtId: any, ckTypeId: any, associations?: { __typename?: 'RtEntityGenericAssociation', definitions?: { __typename?: 'RtAssociationDtoConnection', totalCount?: number | null, items?: Array<{ __typename?: 'RtAssociation', targetRtId: any, targetCkTypeId: any, originRtId: any, originCkTypeId: any, ckAssociationRoleId: any } | null> | null } | null } | null } | null> | null } | null } | null };\n\nexport const GetRuntimeEntityAssociationsByIdDocumentDto = gql`\n query getRuntimeEntityAssociationsById($rtId: OctoObjectId!, $ckTypeId: String!, $direction: GraphDirection!, $after: String, $first: Int, $roleId: String, $relatedRtCkId: RtCkTypeId, $relatedRtId: OctoObjectId) {\n runtime {\n runtimeEntities(ckId: $ckTypeId, rtId: $rtId) {\n items {\n rtId\n ckTypeId\n associations {\n definitions(\n direction: $direction\n roleId: $roleId\n relatedRtCkId: $relatedRtCkId\n relatedRtId: $relatedRtId\n after: $after\n first: $first\n ) {\n totalCount\n items {\n targetRtId\n targetCkTypeId\n originRtId\n originCkTypeId\n ckAssociationRoleId\n }\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class GetRuntimeEntityAssociationsByIdDtoGQL extends Apollo.Query<GetRuntimeEntityAssociationsByIdQueryDto, GetRuntimeEntityAssociationsByIdQueryVariablesDto> {\n document = GetRuntimeEntityAssociationsByIdDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import { Directive, forwardRef, inject } from '@angular/core';\nimport { GraphDirectionDto, GraphQL } from '@meshmakers/octo-services';\nimport {\n DataSourceBase,\n FetchDataOptions,\n FetchResultTyped,\n ListViewComponent,\n} from '@meshmakers/shared-ui';\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { OctoGraphQlDataSource } from '../../data-sources/octo-graph-ql-data-source';\nimport { GetRuntimeEntityAssociationsByIdDtoGQL } from '../../graphQL/getRuntimeEntityAssociationsById';\n\nexport interface AssociationDisplayItem {\n targetRtId: string;\n targetCkTypeId: string;\n originRtId: string;\n originCkTypeId: string;\n ckAssociationRoleId: string;\n direction: 'Inbound' | 'Outbound';\n relatedRtId: string;\n relatedCkTypeId: string;\n}\n\n@Directive({\n selector: '[mmEntityAssociationsDataSource]',\n exportAs: 'mmEntityAssociationsDataSource',\n standalone: true,\n providers: [\n {\n provide: DataSourceBase,\n useExisting: forwardRef(() => EntityAssociationsDataSourceDirective),\n },\n ],\n})\nexport class EntityAssociationsDataSourceDirective extends OctoGraphQlDataSource<AssociationDisplayItem> {\n private readonly getAssociationsGQL = inject(\n GetRuntimeEntityAssociationsByIdDtoGQL,\n );\n\n private rtId: string | null = null;\n private ckTypeId: string | null = null;\n private direction: GraphDirectionDto = GraphDirectionDto.AnyDto;\n private roleId: string | null = null;\n private relatedRtCkId: string | null = null;\n private relatedRtId: string | null = null;\n\n constructor() {\n const listViewComponent = inject(ListViewComponent);\n super(listViewComponent);\n }\n\n public setEntityId(rtId: string, ckTypeId: string): void {\n this.rtId = rtId;\n this.ckTypeId = ckTypeId;\n }\n\n public setDirection(direction: GraphDirectionDto): void {\n this.direction = direction;\n this.fetchAgain();\n }\n\n public setRoleId(roleId: string | null): void {\n this.roleId = roleId;\n this.fetchAgain();\n }\n\n public setRelatedRtCkId(relatedRtCkId: string | null): void {\n this.relatedRtCkId = relatedRtCkId;\n this.fetchAgain();\n }\n\n public setRelatedRtId(relatedRtId: string | null): void {\n this.relatedRtId = relatedRtId;\n this.fetchAgain();\n }\n\n public refresh(): void {\n this.fetchAgain();\n }\n\n public fetchData(\n queryOptions: FetchDataOptions,\n ): Observable<FetchResultTyped<AssociationDisplayItem> | null> {\n if (!this.rtId || !this.ckTypeId) {\n return of(new FetchResultTyped<AssociationDisplayItem>([], 0));\n }\n\n const variables = {\n rtId: this.rtId,\n ckTypeId: this.ckTypeId,\n direction: this.direction,\n roleId: this.roleId,\n relatedRtCkId: this.relatedRtCkId,\n relatedRtId: this.relatedRtId,\n first: queryOptions.state.take,\n after: GraphQL.offsetToCursor(queryOptions.state.skip ?? 0),\n };\n\n return this.getAssociationsGQL\n .fetch({\n variables: variables,\n fetchPolicy: queryOptions.forceRefresh ? 'network-only' : 'cache-first',\n })\n .pipe(\n map((result) => {\n const entity = result.data?.runtime?.runtimeEntities?.items?.[0];\n const items = entity?.associations?.definitions?.items ?? [];\n const totalCount = entity?.associations?.definitions?.totalCount ?? 0;\n\n const transformedItems = items\n .filter((item): item is NonNullable<typeof item> => item != null)\n .map((item) => {\n const isOutbound = item.originRtId === this.rtId;\n return {\n targetRtId: item.targetRtId,\n targetCkTypeId: item.targetCkTypeId,\n originRtId: item.originRtId,\n originCkTypeId: item.originCkTypeId,\n ckAssociationRoleId: item.ckAssociationRoleId,\n direction: isOutbound ? 'Outbound' : 'Inbound',\n relatedRtId: isOutbound ? item.targetRtId : item.originRtId,\n relatedCkTypeId: isOutbound\n ? item.targetCkTypeId\n : item.originCkTypeId,\n } as AssociationDisplayItem;\n });\n\n return new FetchResultTyped<AssociationDisplayItem>(\n transformedItems,\n totalCount,\n );\n }),\n );\n }\n}\n","/**\n * Translatable messages for the RuntimeBrowser components.\n * Pass translated strings to override the English defaults.\n */\nexport interface RuntimeBrowserMessages {\n title: string;\n badgeLabel: string;\n titlePrefix: string;\n ready: string;\n selectItem: string;\n noPropertiesAvailable: string;\n constructionKitModel: string;\n constructionKitModels: string;\n fullName: string;\n semanticName: string;\n modelName: string;\n version: string;\n state: string;\n selectTypeFromTree: string;\n browseModelsAndTypes: string;\n type: string;\n abstract: string;\n final: string;\n base: string;\n runtimeEntities: string;\n runtimeId: string;\n typeId: string;\n entityIdentifier: string;\n wellKnownName: string;\n entityInformation: string;\n loadingEntityDetails: string;\n retry: string;\n attributes: string;\n associations: string;\n direction: string;\n role: string;\n relatedType: string;\n relatedEntity: string;\n all: string;\n inbound: string;\n outbound: string;\n allRoles: string;\n allTypes: string;\n entityId: string;\n viewDetails: string;\n copyToClipboard: string;\n copyEntityIdentifierToClipboard: string;\n goToEntity: string;\n refresh: string;\n create: string;\n edit: string;\n delete: string;\n createEntity: string;\n updateEntity: string;\n name: string;\n runtimeCkTypeId: string;\n targetLocation: string;\n rootLevel: string;\n entityType: string;\n selectType: string;\n selectTypePrompt: string;\n save: string;\n cancel: string;\n longitude: string;\n latitude: string;\n resetToInitialValue: string;\n attributesFor: string;\n couldNotLoadEntityDetails: string;\n failedToLoadEntityDetails: string;\n copiedToClipboard: string;\n failedToCopyToClipboard: string;\n downloadNotAvailable: string;\n failedToLoadDownloadInfo: string;\n missingRequiredIdentifiers: string;\n failedToCreateEntity: string;\n failedToUpdateEntity: string;\n goToEntityTitle: string;\n goToEntityPrompt: string;\n go: string;\n created: string;\n modified: string;\n}\n\n/**\n * Default English messages for the RuntimeBrowser components.\n */\nexport const DEFAULT_RUNTIME_BROWSER_MESSAGES: RuntimeBrowserMessages = {\n title: 'Runtime Browser',\n badgeLabel: 'Entities & Data',\n titlePrefix: 'REPOSITORY',\n ready: 'READY',\n selectItem: 'Select an item from the tree to view its details',\n noPropertiesAvailable: 'No properties available for this entity',\n constructionKitModel: 'Construction Kit Model',\n constructionKitModels: 'Construction Kit Models',\n fullName: 'Full Name',\n semanticName: 'Semantic Name',\n modelName: 'Model Name',\n version: 'Version',\n state: 'State',\n selectTypeFromTree: 'Select a type from the tree to view its details.',\n browseModelsAndTypes:\n 'Browse available construction kit models and their types.',\n type: 'Type',\n abstract: 'Abstract',\n final: 'Final',\n base: 'Base',\n runtimeEntities: 'Runtime Entities',\n runtimeId: 'Runtime ID',\n typeId: 'Type ID',\n entityIdentifier: 'Entity Identifier',\n wellKnownName: 'Well Known Name',\n entityInformation: 'Entity Information',\n loadingEntityDetails: 'Loading entity details...',\n retry: 'Retry',\n attributes: 'Attributes',\n associations: 'Associations',\n direction: 'Direction',\n role: 'Role',\n relatedType: 'Related Type',\n relatedEntity: 'Related Entity',\n all: 'All',\n inbound: 'Inbound',\n outbound: 'Outbound',\n allRoles: 'All roles',\n allTypes: 'All types',\n entityId: 'Entity ID',\n viewDetails: 'View Details',\n copyToClipboard: 'Copy to clipboard',\n copyEntityIdentifierToClipboard: 'Copy entity identifier to clipboard',\n goToEntity: 'Goto Entity',\n refresh: 'Refresh',\n create: 'Create',\n edit: 'Edit',\n delete: 'Delete',\n createEntity: 'Create Entity',\n updateEntity: 'Update Entity',\n name: 'Name',\n runtimeCkTypeId: 'Runtime CK Type ID',\n targetLocation: 'Target Location',\n rootLevel: 'Root Level',\n entityType: 'Entity Type',\n selectType: 'Select Type...',\n selectTypePrompt:\n 'Please select an Entity Type to configure attributes.',\n save: 'Save',\n cancel: 'Cancel',\n longitude: 'Longitude (X)',\n latitude: 'Latitude (Y)',\n resetToInitialValue: 'Reset to initial value',\n attributesFor: 'Attributes for',\n couldNotLoadEntityDetails: 'Could not load entity details',\n failedToLoadEntityDetails: 'Failed to load entity details',\n copiedToClipboard: 'copied to clipboard',\n failedToCopyToClipboard: 'Failed to copy to clipboard',\n downloadNotAvailable: 'Download not available for this file',\n failedToLoadDownloadInfo: 'Failed to load download information',\n missingRequiredIdentifiers:\n 'Missing required identifiers to create an entity.',\n failedToCreateEntity: 'Failed to create entity. Please try again.',\n failedToUpdateEntity: 'Failed to update entity. Please try again.',\n goToEntityTitle: 'Go to Entity',\n goToEntityPrompt: 'Enter entity identifier in format \"ckTypeId@rtId\":',\n go: 'Go',\n created: 'Created',\n modified: 'Modified',\n};\n","import { CommonModule } from \"@angular/common\";\nimport {\n Component,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n} from \"@angular/core\";\nimport { CommandItemExecuteEventArgs } from \"@meshmakers/shared-services\";\nimport { ListViewComponent } from \"@meshmakers/shared-ui\";\nimport { ButtonModule } from \"@progress/kendo-angular-buttons\";\nimport { DropDownListModule } from \"@progress/kendo-angular-dropdowns\";\nimport { SVGIconModule } from \"@progress/kendo-angular-icons\";\nimport { TextBoxModule } from \"@progress/kendo-angular-inputs\";\nimport {\n CardModule,\n SelectEvent,\n TabStripModule,\n} from \"@progress/kendo-angular-layout\";\nimport { NotificationService } from \"@progress/kendo-angular-notification\";\nimport {\n copyIcon,\n eyeIcon,\n gearIcon,\n infoCircleIcon,\n} from \"@progress/kendo-svg-icons\";\nimport { firstValueFrom, Subject } from \"rxjs\";\nimport { debounceTime, distinctUntilChanged, takeUntil } from \"rxjs/operators\";\nimport { GetBinaryInfoDtoGQL } from \"../../graphQL/getBinaryInfo\";\nimport { GraphDirectionDto, RtEntityDto } from \"../../graphQL/globalTypes\";\nimport {\n BinaryDownloadEvent,\n PropertyChangeEvent,\n PropertyConverterService,\n PropertyGridComponent,\n PropertyGridConfig,\n PropertyGridItem,\n} from \"../../property-grid\";\nimport {\n AssociationDisplayItem,\n EntityAssociationsDataSourceDirective,\n} from \"../data-sources/entity-associations-data-source.directive\";\nimport {\n DEFAULT_RUNTIME_BROWSER_MESSAGES,\n RuntimeBrowserMessages,\n} from \"../runtime-browser.model\";\n\ninterface DirectionOption {\n text: string;\n value: GraphDirectionDto;\n}\n\n@Component({\n selector: \"mm-entity-detail-view\",\n standalone: true,\n imports: [\n CommonModule,\n TabStripModule,\n ButtonModule,\n SVGIconModule,\n CardModule,\n DropDownListModule,\n TextBoxModule,\n PropertyGridComponent,\n ListViewComponent,\n EntityAssociationsDataSourceDirective,\n ],\n template: `\n @if (loading) {\n <div class=\"loading-state\">\n <p>{{ _messages.loadingEntityDetails }}</p>\n </div>\n }\n\n @if (error) {\n <div class=\"error-state\">\n <p class=\"error-message\">{{ error }}</p>\n <button kendoButton (click)=\"retry.emit()\">\n {{ _messages.retry }}\n </button>\n </div>\n }\n\n @if (entity && !loading) {\n <div class=\"entity-content\">\n <!-- Basic Info Card -->\n <kendo-card class=\"basic-info-card\" width=\"100%\">\n <kendo-card-header>\n <h3>\n <kendo-svgicon [icon]=\"infoCircleIcon\"></kendo-svgicon>\n {{ _messages.entityInformation }}\n </h3>\n </kendo-card-header>\n <kendo-card-body>\n <div class=\"basic-info-grid\">\n <div class=\"info-item with-action\">\n <label>{{ _messages.runtimeId }}:</label>\n <div class=\"value-with-action\">\n <span class=\"value\">{{ entity.rtId }}</span>\n <button\n kendoButton\n fillMode=\"flat\"\n size=\"small\"\n [svgIcon]=\"copyIcon\"\n [title]=\"_messages.copyToClipboard\"\n (click)=\"copyToClipboard(entity.rtId, _messages.runtimeId)\"\n ></button>\n </div>\n </div>\n <div class=\"info-item with-action\">\n <label>{{ _messages.typeId }}:</label>\n <div class=\"value-with-action\">\n <span class=\"value\">{{ entity.ckTypeId }}</span>\n <button\n kendoButton\n fillMode=\"flat\"\n size=\"small\"\n [svgIcon]=\"copyIcon\"\n [title]=\"_messages.copyToClipboard\"\n (click)=\"copyToClipboard(entity.ckTypeId, _messages.typeId)\"\n ></button>\n </div>\n </div>\n <div class=\"info-item with-action\">\n <label>{{ _messages.entityIdentifier }}:</label>\n <div class=\"value-with-action\">\n <span class=\"value\">{{ getEntityIdentifier() }}</span>\n <button\n kendoButton\n fillMode=\"flat\"\n size=\"small\"\n [svgIcon]=\"copyIcon\"\n [title]=\"_messages.copyEntityIdentifierToClipboard\"\n (click)=\"\n copyToClipboard(\n getEntityIdentifier(),\n _messages.entityIdentifier\n )\n \"\n ></button>\n </div>\n </div>\n @if (entity.rtWellKnownName) {\n <div class=\"info-item\">\n <label>{{ _messages.wellKnownName }}:</label>\n <span class=\"value\">{{ entity.rtWellKnownName }}</span>\n </div>\n }\n </div>\n </kendo-card-body>\n </kendo-card>\n\n <!-- Tab Strip for Detailed Information -->\n <kendo-tabstrip class=\"entity-tabs\" (tabSelect)=\"onTabSelect($event)\">\n <kendo-tabstrip-tab\n [title]=\"_messages.attributes + ' (' + getPropertyCount() + ')'\"\n [selected]=\"true\"\n >\n <ng-template kendoTabContent>\n <div class=\"tab-content properties-tab\">\n @if (!hasProperties()) {\n <div class=\"empty-state\">\n <kendo-svgicon [icon]=\"propertiesIcon\"></kendo-svgicon>\n <p>{{ _messages.noPropertiesAvailable }}</p>\n </div>\n }\n\n @if (hasProperties()) {\n <mm-property-grid\n [data]=\"propertyGridItems\"\n [config]=\"propertyGridConfig\"\n [showTypeColumn]=\"true\"\n (propertyChange)=\"propertyChange.emit($event)\"\n (binaryDownload)=\"onBinaryDownload($event)\"\n >\n </mm-property-grid>\n }\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n\n <kendo-tabstrip-tab\n [title]=\"\n _messages.associations + ' (' + getAssociationCount() + ')'\n \"\n >\n <ng-template kendoTabContent>\n <div class=\"tab-content associations-tab\">\n <div class=\"associations-toolbar\">\n <div class=\"filter-group\">\n <label>{{ _messages.direction }}:</label>\n <kendo-dropdownlist\n [data]=\"directionOptions\"\n [value]=\"selectedDirection\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n (valueChange)=\"onDirectionChange($event)\"\n >\n </kendo-dropdownlist>\n </div>\n <div class=\"filter-group\">\n <label>{{ _messages.role }}:</label>\n <kendo-textbox\n [value]=\"selectedRoleId ?? ''\"\n [clearButton]=\"true\"\n [placeholder]=\"_messages.allRoles\"\n (valueChange)=\"onRoleIdChange($event)\"\n >\n </kendo-textbox>\n </div>\n <div class=\"filter-group\">\n <label>{{ _messages.relatedType }}:</label>\n <kendo-textbox\n [value]=\"selectedRelatedRtCkId ?? ''\"\n [clearButton]=\"true\"\n [placeholder]=\"_messages.allTypes\"\n (valueChange)=\"onRelatedRtCkIdChange($event)\"\n >\n </kendo-textbox>\n </div>\n <div class=\"filter-group\">\n <label>{{ _messages.relatedEntity }}:</label>\n <kendo-textbox\n [value]=\"selectedRelatedRtId ?? ''\"\n [clearButton]=\"true\"\n [placeholder]=\"_messages.entityId\"\n (valueChange)=\"onRelatedRtIdChange($event)\"\n >\n </kendo-textbox>\n </div>\n </div>\n\n <mm-list-view\n mmEntityAssociationsDataSource\n #associationsDir=\"mmEntityAssociationsDataSource\"\n [sortable]=\"true\"\n [pageable]=\"{ buttonCount: 3, pageSizes: [10, 20, 50] }\"\n [pageSize]=\"20\"\n [selectable]=\"{ mode: 'single', enabled: true }\"\n [columns]=\"[\n {\n field: 'ckAssociationRoleId',\n displayName: _messages.role,\n dataType: 'text',\n },\n {\n field: 'direction',\n displayName: _messages.direction,\n dataType: 'text',\n },\n {\n field: 'relatedRtId',\n displayName: _messages.relatedEntity,\n dataType: 'text',\n },\n {\n field: 'relatedCkTypeId',\n displayName: _messages.relatedType,\n dataType: 'text',\n },\n ]\"\n [actionCommandItems]=\"[\n {\n id: 'view',\n type: 'link',\n text: _messages.viewDetails,\n svgIcon: detailsIcon,\n onClick: onViewAssociationDetails,\n },\n ]\"\n >\n </mm-list-view>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n </kendo-tabstrip>\n </div>\n }\n `,\n styleUrls: [\"./entity-detail-view.component.scss\"],\n})\nexport class EntityDetailViewComponent implements OnChanges, OnDestroy {\n @Input() entity: RtEntityDto | null = null;\n @Input() loading = false;\n @Input() error: string | null = null;\n @Input() showHeader = true;\n @Input() set messages(value: Partial<RuntimeBrowserMessages>) {\n this._messages = { ...DEFAULT_RUNTIME_BROWSER_MESSAGES, ...value };\n }\n\n @Output() retry = new EventEmitter<void>();\n @Output() propertyChange = new EventEmitter<PropertyChangeEvent>();\n @Output() navigateToEntity = new EventEmitter<{\n rtId: string;\n ckTypeId: string;\n }>();\n\n @ViewChild(\"associationsDir\", { static: false })\n associationsDataSource?: EntityAssociationsDataSourceDirective;\n\n private readonly notificationService = inject(NotificationService);\n private readonly propertyConverter = inject(PropertyConverterService);\n private readonly getBinaryInfoGQL = inject(GetBinaryInfoDtoGQL);\n protected _messages: RuntimeBrowserMessages = {\n ...DEFAULT_RUNTIME_BROWSER_MESSAGES,\n };\n\n protected readonly infoCircleIcon = infoCircleIcon;\n protected readonly propertiesIcon = gearIcon;\n protected readonly copyIcon = copyIcon;\n protected readonly detailsIcon = eyeIcon;\n\n propertyGridItems: PropertyGridItem[] = [];\n propertyGridConfig: PropertyGridConfig = {\n readOnlyMode: false,\n showTypeIcons: true,\n height: \"500px\",\n showSearch: true,\n };\n\n // Direction filter - use getter for current messages\n protected get directionOptions(): DirectionOption[] {\n return [\n {\n text: this._messages.all,\n value: GraphDirectionDto.AnyDto,\n },\n {\n text: this._messages.inbound,\n value: GraphDirectionDto.InboundDto,\n },\n {\n text: this._messages.outbound,\n value: GraphDirectionDto.OutboundDto,\n },\n ];\n }\n protected selectedDirection: GraphDirectionDto = GraphDirectionDto.AnyDto;\n\n // Role filter\n protected selectedRoleId: string | null = null;\n\n // Related Type filter\n protected selectedRelatedRtCkId: string | null = null;\n\n // Related Entity filter\n protected selectedRelatedRtId: string | null = null;\n\n // Debounced filter subjects\n private readonly destroy$ = new Subject<void>();\n private readonly roleIdFilter$ = new Subject<string | null>();\n private readonly relatedRtCkIdFilter$ = new Subject<string | null>();\n private readonly relatedRtIdFilter$ = new Subject<string | null>();\n\n constructor() {\n this.roleIdFilter$\n .pipe(debounceTime(500), distinctUntilChanged(), takeUntil(this.destroy$))\n .subscribe((roleId) => {\n if (\n this.associationsDataSource &&\n this.entity?.rtId &&\n this.entity?.ckTypeId\n ) {\n this.associationsDataSource.setRoleId(roleId);\n }\n });\n\n this.relatedRtCkIdFilter$\n .pipe(debounceTime(500), distinctUntilChanged(), takeUntil(this.destroy$))\n .subscribe((relatedRtCkId) => {\n if (\n this.associationsDataSource &&\n this.entity?.rtId &&\n this.entity?.ckTypeId\n ) {\n this.associationsDataSource.setRelatedRtCkId(relatedRtCkId);\n }\n });\n\n this.relatedRtIdFilter$\n .pipe(debounceTime(500), distinctUntilChanged(), takeUntil(this.destroy$))\n .subscribe((relatedRtId) => {\n if (\n this.associationsDataSource &&\n this.entity?.rtId &&\n this.entity?.ckTypeId\n ) {\n this.associationsDataSource.setRelatedRtId(relatedRtId);\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"entity\"] && this.entity) {\n this.updatePropertyGrid();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private updatePropertyGrid(): void {\n if (!this.entity) {\n this.propertyGridItems = [];\n return;\n }\n\n // Convert entity to property grid items using the converter service\n const mappedEntity = this.toPropertyEntity(this.entity);\n this.propertyConverter.convertRtEntityToProperties(mappedEntity).subscribe({\n next: (items: PropertyGridItem[]) => {\n this.propertyGridItems = items;\n },\n error: (err: unknown) => {\n console.error(\"Error converting entity to properties:\", err);\n this.propertyGridItems = [];\n },\n });\n }\n\n private toPropertyEntity(entity: RtEntityDto): {\n rtId?: string;\n ckTypeId?: string;\n rtCreationDateTime?: string;\n rtChangedDateTime?: string;\n rtWellKnownName?: string;\n attributes?: {\n items?: { attributeName?: string | null; value?: unknown }[];\n };\n } {\n const attributeItems = (entity.attributes?.items ?? []).filter(\n (item): item is { attributeName?: string | null; value?: unknown } =>\n item != null,\n );\n return {\n rtId: entity.rtId,\n ckTypeId: entity.ckTypeId,\n rtCreationDateTime: this.normalizeDateValue(entity.rtCreationDateTime),\n rtChangedDateTime: this.normalizeDateValue(entity.rtChangedDateTime),\n rtWellKnownName: entity.rtWellKnownName ?? undefined,\n attributes:\n attributeItems.length > 0 ? { items: attributeItems } : undefined,\n };\n }\n\n private normalizeDateValue(value: unknown): string | undefined {\n if (typeof value === \"string\") {\n return value;\n }\n if (value instanceof Date) {\n const time = value.getTime();\n return isNaN(time) ? undefined : value.toISOString();\n }\n return undefined;\n }\n\n protected onTabSelect(event: SelectEvent): void {\n // Tab 0 = Attributes, Tab 1 = Associations\n if (event.index === 1) {\n this.loadAssociations();\n }\n }\n\n private loadAssociations(): void {\n // Use setTimeout to ensure ViewChild is initialized\n setTimeout(() => {\n if (this.associationsDataSource && this.entity) {\n this.associationsDataSource.setEntityId(\n this.entity.rtId,\n this.entity.ckTypeId,\n );\n this.associationsDataSource.setDirection(this.selectedDirection);\n }\n }, 0);\n }\n\n protected onDirectionChange(direction: GraphDirectionDto): void {\n this.selectedDirection = direction;\n if (\n this.associationsDataSource &&\n this.entity?.rtId &&\n this.entity?.ckTypeId\n ) {\n this.associationsDataSource.setDirection(direction);\n }\n }\n\n protected onRoleIdChange(roleId: string | null): void {\n this.selectedRoleId = roleId || null;\n this.roleIdFilter$.next(this.selectedRoleId);\n }\n\n protected onRelatedRtCkIdChange(relatedRtCkId: string | null): void {\n this.selectedRelatedRtCkId = relatedRtCkId || null;\n this.relatedRtCkIdFilter$.next(this.selectedRelatedRtCkId);\n }\n\n protected onRelatedRtIdChange(relatedRtId: string | null): void {\n this.selectedRelatedRtId = relatedRtId || null;\n this.relatedRtIdFilter$.next(this.selectedRelatedRtId);\n }\n\n protected onViewAssociationDetails = async (\n eventArgs: CommandItemExecuteEventArgs,\n ): Promise<void> => {\n const assoc = eventArgs.data as AssociationDisplayItem;\n if (assoc?.relatedRtId && assoc?.relatedCkTypeId) {\n this.navigateToEntity.emit({\n rtId: assoc.relatedRtId,\n ckTypeId: assoc.relatedCkTypeId,\n });\n }\n };\n\n getEntityIdentifier(): string {\n if (!this.entity?.ckTypeId || !this.entity?.rtId) {\n return \"Unknown\";\n }\n return `${this.entity.ckTypeId}@${this.entity.rtId}`;\n }\n\n hasProperties(): boolean {\n return this.propertyGridItems.length > 0;\n }\n\n getPropertyCount(): number {\n return this.propertyGridItems.length;\n }\n\n getAssociationCount(): number {\n return this.entity?.associations?.definitions?.totalCount ?? 0;\n }\n\n protected copyToClipboard(\n value: string | null | undefined,\n label: string,\n ): void {\n if (!value) return;\n\n navigator.clipboard\n .writeText(value)\n .then(() => {\n this.notificationService.show({\n content: `${label} ${this._messages.copiedToClipboard}`,\n type: { style: \"success\", icon: true },\n position: { horizontal: \"right\", vertical: \"top\" },\n hideAfter: 2000,\n animation: { type: \"fade\", duration: 400 },\n });\n })\n .catch((err) => {\n console.error(\"Failed to copy:\", err);\n this.notificationService.show({\n content: this._messages.failedToCopyToClipboard,\n type: { style: \"error\", icon: true },\n position: { horizontal: \"right\", vertical: \"top\" },\n hideAfter: 3000,\n animation: { type: \"fade\", duration: 400 },\n });\n });\n }\n\n /**\n * Handle binary download request from property grid.\n * Loads the full binary info including downloadUri and opens the download.\n */\n protected async onBinaryDownload(_event: BinaryDownloadEvent): Promise<void> {\n if (!this.entity?.rtId) {\n console.warn(\"Cannot download: no entity rtId available\");\n return;\n }\n\n try {\n // Load binary info with downloadUri using the entity's rtId\n const result = await firstValueFrom(\n this.getBinaryInfoGQL.fetch({\n variables: { rtId: this.entity.rtId },\n }),\n );\n\n const item =\n result.data?.runtime?.systemReportingFileSystemItem?.items?.[0];\n if (item?.content?.downloadUri) {\n // Open download in new tab\n window.open(item.content.downloadUri, \"_blank\", \"noopener,noreferrer\");\n } else {\n console.warn(\"No downloadUri found for binary\");\n this.notificationService.show({\n content: this._messages.downloadNotAvailable,\n type: { style: \"warning\", icon: true },\n position: { horizontal: \"right\", vertical: \"top\" },\n hideAfter: 3000,\n animation: { type: \"fade\", duration: 400 },\n });\n }\n } catch (error) {\n console.error(\"Failed to load binary info:\", error);\n this.notificationService.show({\n content: this._messages.failedToLoadDownloadInfo,\n type: { style: \"error\", icon: true },\n position: { horizontal: \"right\", vertical: \"top\" },\n hideAfter: 3000,\n animation: { type: \"fade\", duration: 400 },\n });\n }\n }\n}\n\n","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type GetRuntimeEntityByIdQueryVariablesDto = Types.Exact<{\n rtId: Types.Scalars['OctoObjectId']['input'];\n ckTypeId: Types.Scalars['String']['input'];\n}>;\n\n\nexport type GetRuntimeEntityByIdQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', items?: Array<{ __typename?: 'RtEntity', rtId: any, ckTypeId: any, rtWellKnownName?: string | null, rtCreationDateTime?: any | null, rtChangedDateTime?: any | null, attributes?: { __typename?: 'RtEntityAttributeDtoConnection', items?: Array<{ __typename?: 'RtEntityAttribute', attributeName?: string | null, value?: any | null } | null> | null } | null, associations?: { __typename?: 'RtEntityGenericAssociation', definitions?: { __typename?: 'RtAssociationDtoConnection', totalCount?: number | null } | null } | null } | null> | null } | null } | null };\n\nexport const GetRuntimeEntityByIdDocumentDto = gql`\n query getRuntimeEntityById($rtId: OctoObjectId!, $ckTypeId: String!) {\n runtime {\n runtimeEntities(ckId: $ckTypeId, rtId: $rtId) {\n items {\n rtId\n ckTypeId\n rtWellKnownName\n rtCreationDateTime\n rtChangedDateTime\n attributes(resolveEnumValuesToNames: true) {\n items {\n attributeName\n value\n }\n }\n associations {\n definitions(direction: ANY, first: 0) {\n totalCount\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class GetRuntimeEntityByIdDtoGQL extends Apollo.Query<GetRuntimeEntityByIdQueryDto, GetRuntimeEntityByIdQueryVariablesDto> {\n document = GetRuntimeEntityByIdDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import { Injectable, inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { GetRuntimeEntityByIdDtoGQL } from '../../graphQL/getRuntimeEntityById';\nimport { RtEntityDto } from '../../graphQL/globalTypes';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EntityDetailDataSource {\n private readonly getRuntimeEntityByIdGQL = inject(GetRuntimeEntityByIdDtoGQL);\n\n /**\n * Fetches detailed entity information including attributes and associations\n */\n async fetchEntityDetails(\n rtId: string,\n ckTypeId: string,\n ): Promise<RtEntityDto | null> {\n try {\n const result = await firstValueFrom(\n this.getRuntimeEntityByIdGQL\n .fetch({\n variables: {\n rtId,\n ckTypeId,\n },\n })\n .pipe(\n map(\n (response) => response.data?.runtime?.runtimeEntities?.items?.[0],\n ),\n ),\n );\n\n return (result as RtEntityDto) || null;\n } catch (error) {\n console.error('Failed to fetch entity details:', error);\n throw error;\n }\n }\n\n /**\n * Fetches entity with expanded associations for deeper navigation\n */\n async fetchEntityWithAssociations(\n rtId: string,\n ckTypeId: string,\n ): Promise<RtEntityDto | null> {\n try {\n // For now, use the same query - can be extended later for more detailed association data\n return this.fetchEntityDetails(rtId, ckTypeId);\n } catch (error) {\n console.error('Failed to fetch entity with associations:', error);\n throw error;\n }\n }\n}\n","export interface RtEntityId {\n rtId: string;\n ckTypeId: string;\n}\n\nexport class RtEntityIdHelper {\n /**\n * Encodes ckTypeId@rtId into a URL-safe Base64 string for routing\n */\n static encode(rtId: string, ckTypeId: string): string {\n return btoa(`${ckTypeId}@${rtId}`).replace(/[+/=]/g, (match) => {\n switch (match) {\n case '+':\n return '-';\n case '/':\n return '_';\n case '=':\n return '';\n default:\n return match;\n }\n });\n }\n\n /**\n * Encodes a ckTypeId@rtId string directly into a URL-safe Base64 string\n */\n static encodeFromString(entityIdentifier: string): string {\n return btoa(entityIdentifier).replace(/[+/=]/g, (match) => {\n switch (match) {\n case '+':\n return '-';\n case '/':\n return '_';\n case '=':\n return '';\n default:\n return match;\n }\n });\n }\n\n /**\n * Decodes URL parameter back to RtEntityId\n */\n static decode(encoded: string): RtEntityId {\n // Restore base64 padding and special characters\n const padded = encoded.padEnd(\n encoded.length + ((4 - (encoded.length % 4)) % 4),\n '=',\n );\n const restored = padded.replace(/-/g, '+').replace(/_/g, '/');\n\n try {\n const decoded = atob(restored);\n const parts = decoded.split('@');\n\n if (parts.length !== 2) {\n throw new Error(\n 'Invalid entity identifier format. Expected \"ckTypeId@rtId\"',\n );\n }\n\n const [ckTypeId, rtId] = parts;\n\n if (!rtId || !ckTypeId) {\n throw new Error(\n 'Invalid encoded entity ID format - missing rtId or ckTypeId',\n );\n }\n\n return { rtId, ckTypeId };\n } catch (error) {\n throw new Error(`Failed to decode entity ID: ${error}`);\n }\n }\n\n /**\n * Validates if a string is in the correct ckTypeId@rtId format\n */\n static isValidFormat(entityIdentifier: string): boolean {\n const parts = entityIdentifier.split('@');\n return (\n parts.length === 2 && parts[0].trim() !== '' && parts[1].trim() !== ''\n );\n }\n}\n","import { CommonModule, Location } from '@angular/common';\nimport { Component, OnDestroy, OnInit, inject } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ButtonModule } from '@progress/kendo-angular-buttons';\nimport { SVGIconModule } from '@progress/kendo-angular-icons';\nimport { arrowLeftIcon } from '@progress/kendo-svg-icons';\nimport { Subject, takeUntil } from 'rxjs';\nimport { RtEntityDto } from '../graphQL/globalTypes';\nimport { EntityDetailViewComponent } from './components/entity-detail-view.component';\nimport { EntityDetailDataSource } from './data-sources/entity-detail-data-source.service';\nimport { RtEntityId, RtEntityIdHelper } from './models/rt-entity-id';\n\n@Component({\n selector: 'mm-entity-detail',\n imports: [\n CommonModule,\n ButtonModule,\n SVGIconModule,\n EntityDetailViewComponent,\n ],\n template: `\n <div class=\"entity-detail\">\n <div class=\"entity-detail-header\">\n <button\n kendoButton\n size=\"small\"\n [svgIcon]=\"arrowLeftIcon\"\n (click)=\"navigateBack()\"\n >\n Back\n </button>\n\n @if (entity) {\n <div class=\"header-info\">\n <div class=\"entity-title\">\n <h2>{{ getEntityDisplayName() }}</h2>\n <p class=\"entity-type\">{{ entity.ckTypeId }}</p>\n </div>\n </div>\n }\n </div>\n\n <mm-entity-detail-view\n [entity]=\"entity\"\n [loading]=\"loading\"\n [error]=\"error\"\n (retry)=\"loadEntity()\"\n (propertyChange)=\"onPropertyChange($event)\"\n (navigateToEntity)=\"navigateToEntity($event.rtId, $event.ckTypeId)\"\n >\n </mm-entity-detail-view>\n </div>\n `,\n styleUrls: ['./entity-detail.component.scss'],\n})\nexport class EntityDetailComponent implements OnInit, OnDestroy {\n private readonly location = inject(Location);\n private readonly route = inject(ActivatedRoute);\n private readonly router = inject(Router);\n private readonly dataSource = inject(EntityDetailDataSource);\n private readonly destroy$ = new Subject<void>();\n\n protected readonly arrowLeftIcon = arrowLeftIcon;\n\n entity: RtEntityDto | null = null;\n loading = false;\n error: string | null = null;\n entityId: RtEntityId | null = null;\n\n async ngOnInit(): Promise<void> {\n this.route.params\n .pipe(takeUntil(this.destroy$))\n .subscribe(async (params) => {\n const encodedId = params['id'];\n if (encodedId) {\n try {\n this.entityId = RtEntityIdHelper.decode(encodedId);\n await this.loadEntity();\n } catch (error) {\n this.error = 'Invalid entity ID format';\n console.error('Failed to decode entity ID:', error);\n }\n }\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async loadEntity(): Promise<void> {\n if (!this.entityId) {\n return;\n }\n\n this.loading = true;\n this.error = null;\n\n try {\n this.entity = await this.dataSource.fetchEntityDetails(\n this.entityId.rtId,\n this.entityId.ckTypeId,\n );\n if (!this.entity) {\n this.error = 'Entity not found';\n }\n } catch (error) {\n console.error('Failed to load entity:', error);\n this.error = 'Failed to load entity details';\n } finally {\n this.loading = false;\n }\n }\n\n navigateBack(): void {\n this.location.back();\n }\n\n async navigateToEntity(rtId: string, ckTypeId: string): Promise<void> {\n if (!rtId || !ckTypeId || rtId === 'Unknown' || ckTypeId === 'Unknown')\n return;\n\n const encodedId = RtEntityIdHelper.encode(rtId, ckTypeId);\n // Navigate to another entity detail page\n const currentUrl = this.router.url;\n const newEntityUrl = currentUrl.replace(\n /\\/browser\\/entity\\/[^/]+$/,\n `/browser/entity/${encodedId}`,\n );\n await this.router.navigateByUrl(newEntityUrl);\n }\n\n getEntityDisplayName(): string {\n if (!this.entity) return 'Unknown Entity';\n\n const nameAttr = this.entity.attributes?.items?.find(\n (attr) =>\n attr?.attributeName === 'name' || attr?.attributeName === 'displayName',\n );\n\n if (nameAttr?.value && typeof nameAttr.value === 'string') {\n return nameAttr.value;\n }\n\n return (\n this.entity.rtWellKnownName || this.entity.ckTypeId || 'Unknown Entity'\n );\n }\n\n /**\n * Handle property value changes from the property grid\n */\n onPropertyChange(event: unknown): void {\n console.debug('Property changed:', event);\n // TODO: Implement property change handling\n // This could be used to track modifications and enable save functionality\n }\n}\n","export const botService = {\n name: 'bot-service',\n content: '<path d=\"M432.3,458.1c-7.1,6.7-15.7,9.9-24.8,9.9-101.1.2-202.3.4-303.4,0-16.9,0-29.5-9.4-36.3-25.1-2.4-5.6-4.2-12-4.3-18.1-.4-34.3-.2-68.7-.2-103v-5.3c-14.1-1-22-9.7-22-23.7s.3-23.7,0-35.5c-.5-16.2,5.8-24.5,22.1-27.8,0-22.3-.2-44.6,0-66.9.2-14,7.9-24,18.8-31.8,7.6-5.4,16.1-6.8,25.3-6.7,40.2.2,80.3,0,120.5,0h5.3v-25.7c0-1.2-1-2.7-1.9-3.7-8.4-9.5-10.1-20.7-6.8-32.4,3.4-12.3,12.7-19.8,24.9-22,19.7-3.5,38.5,11.3,38.2,31.1-.2,9.2-2.8,16.8-8.5,23.6-.8.9-1.6,2.2-1.6,3.3,0,8.5,0,16.9,0,25.7h5.3c42.5,0,85-.2,127.5,0,13.6,0,23.5,7.7,31.2,18.2,5.7,7.7,7.3,16.6,7.1,26.2-.4,20.3,0,40.6,0,61.2,7.6,1.2,14.8,3.1,18.5,10.5,1.7,3.5,3.3,7.5,3.4,11.3.4,14.2,0,28.3.2,42.5.2,10.7-9.2,23.3-22.1,22.1v5.4c0,35.3.3,70.7-.2,106-.2,12.2-6,22.5-15.8,30.6M211.8,380.1h128.5v-37.8c0-2.8-3.4-4.6-6.3-3.4-.9.4-1.9.7-2.8.5-1.9-.3-3.7-1.2-5.5-1.2h-150.9c-1.4,0-2.9.1-4.2.2v41.8h41.2M315.8,289.2c9.2,7.5,21.6,6.3,30.2-1.2,8.3-7.2,12.9-16.2,14.5-27.2,2.5-17.9-1-33.7-15.6-45.3-8.5-6.8-18.6-7.6-28-1.4-12.6,8.3-17.6,21.1-18.4,35.2-.9,15.6,4,29.5,17.3,39.9M152.3,269.6c1.7,3.6,2.8,7.6,5.2,10.7,14,18.7,33.5,18.5,46.2,0,7.2-10.5,9.7-22.1,7.9-35-1.6-11-5.4-20.6-13.7-28.1-13.2-11.8-26.5-8.3-36.7,2-8.6,8.7-12.1,20.2-11.7,32.5.2,5.8,1.5,11.6,2.8,17.9Z\"/>',\n viewBox: '0 0 512 512'\n}\n\nexport const dashboard = {\n name: 'dashboard',\n content: '<path d=\"M520-600v-240h320v240H520ZM120-440v-400h320v400H120Zm400 320v-400h320v400H520Zm-400 0v-240h320v240H120Zm80-400h160v-240H200v240Zm400 320h160v-240H600v240Zm0-480h160v-80H600v80ZM200-200h160v-80H200v80Zm160-320Zm240-160Zm0 240ZM360-280Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const tenancy = {\n name: 'tenancy',\n content: '<path d=\"M160-120q-50 0-85-35t-35-85q0-50 35-85t85-35q9 0 17.5 1.5T194-355l162-223q-17-21-26.5-47t-9.5-55q0-66 47-113t113-47q66 0 113 47t47 113q0 29-10 55t-27 47l163 223q8-2 16.5-3.5T800-360q50 0 85 35t35 85q0 50-35 85t-85 35q-50 0-85-35t-35-85q0-19 5.5-36.5T701-308L539-531q-5 2-9.5 3t-9.5 3v172q35 12 57.5 43t22.5 70q0 50-35 85t-85 35q-50 0-85-35t-35-85q0-39 22.5-69.5T440-353v-172q-5-2-9.5-3t-9.5-3L259-308q10 14 15.5 31.5T280-240q0 50-35 85t-85 35Zm0-80q17 0 28.5-11.5T200-240q0-17-11.5-28.5T160-280q-17 0-28.5 11.5T120-240q0 17 11.5 28.5T160-200Zm320-480Zm0 480q17 0 28.5-11.5T520-240q0-17-11.5-28.5T480-280q-17 0-28.5 11.5T440-240q0 17 11.5 28.5T480-200Zm320 0q17 0 28.5-11.5T840-240q0-17-11.5-28.5T800-280q-17 0-28.5 11.5T760-240q0 17 11.5 28.5T800-200Zm-640-40Zm320 0Zm320 0ZM480-600q33 0 56.5-23.5T560-680q0-33-23.5-56.5T480-760q-33 0-56.5 23.5T400-680q0 33 23.5 56.5T480-600Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const code = {\n name: 'code',\n content: '<path d=\"M320-240 80-480l240-240 57 57-184 184 183 183-56 56Zm320 0-57-57 184-184-183-183 56-56 240 240-240 240Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const identityService = {\n name: 'identity-service',\n content: ' <path d=\"M24.4,0h0v3.4h0v44h0v3.7h0c12.7-6.7,21.3-18.1,21.3-28.5V6.4L24.4,0Z\"/>\\n' +\n ' <path d=\"M24.4,22.7c-.6,0-1.1.5-1.1,1-.2,4.1-1.1,8.4-2.6,12.2-1.4,3.8-3.4,7-5.7,9.7-.4.5-.4,1.2.1,1.6.2.2.5.3.7.3s.6-.1.8-.4c2.6-2.9,4.6-6.4,6.2-10.4.6-1.7,1.1-3.4,1.6-5.2v-8.9h0Z\"/>\\n' +\n ' <path d=\"M24.4,48.1c-.3.4-.5.9-.8,1.3-.2.2-.2.5-.2.8,0,.3.2.5.5.7.2,0,.3.2.5.2v-3h0Z\"/>\\n' +\n ' <path d=\"M20.6,28.2c.1-.7.2-1.4.4-2.3.2-1,.4-1.9.7-2.7.3-.7.6-1.3.9-1.8.4-.6,1-.9,1.6-1,0,0,.1,0,.2,0v-2.3c-.2,0-.4,0-.6,0-1.2.2-2.3.9-3.1,1.9-.5.6-.9,1.4-1.2,2.3-.3.9-.6,1.9-.8,3-.2.9-.3,1.6-.4,2.4-.2,1.3-.3,2.5-.9,4.1-.6,1.6-1.3,3.3-2.3,5.2-1.3,2.5-2.5,4.3-3,4.9-.4.5-.3,1.2.2,1.6.2.2.5.3.8.2s.6-.2.8-.4c.7-.8,2.1-2.9,3.3-5.2,1-2,1.9-3.8,2.5-5.5.6-1.8.8-3.1,1-4.5h0Z\"/>\\n' +\n ' <path d=\"M24.4,37.2c-1.8,4.5-3.9,8.9-5.2,10.6-.4.5-.3,1.2.2,1.6.2.2.4.2.7.2s.7-.2.9-.4c.9-1.2,2.2-3.5,3.5-6.3v-5.7h0Z\"/>\\n' +\n ' <path d=\"M24.4,13.8c-.9,0-1.9.1-2.8.4-1.6.5-3,1.4-4.2,2.7-1.5,1.7-2.6,4-3,6.9,0,0,0,.1,0,.1h0c-.2,2.7-1,6.2-1.9,9.3-.9,2.8-1.8,4.7-2.5,5.3-.2.2-.4.5-.4.8,0,.3,0,.6.2.8.2.2.5.4.8.4.3,0,.6,0,.8-.2,1.4-1.2,2.6-4.5,3.2-6.4,1-3.2,1.8-6.9,2-9.7.4-2.4,1.2-4.3,2.5-5.7.9-1,1.9-1.7,3.2-2.1.7-.2,1.4-.3,2.1-.3v-2.2h0Z\"/>\\n' +\n ' <path d=\"M24.4,9.4c-1.8,0-3.6.3-5.2,1.1-2,.9-3.8,2.2-5.3,4-2,2.4-3.3,5.6-3.8,8.8-.3,2.3-.7,4.3-1.1,5.8-.5,2-1.2,3.3-1.9,3.9-.2.2-.4.5-.4.8,0,.3,0,.6.2.8.2.2.5.4.9.4s.5,0,.7-.3c1.1-.9,2-2.6,2.6-5.1.5-1.7.8-3.8,1.2-6.2.4-2.8,1.5-5.6,3.3-7.7,1.2-1.5,2.8-2.7,4.4-3.4,1.4-.6,2.9-.9,4.4-.9v-2.2h0Z\"/>\\n' +\n ' <path d=\"M16.1,7.1c-.4.1-9.5,3.3-10.6,16.4,0,.3,0,.6.3.8.2.2.5.4.8.4h.1c.3,0,.5-.1.7-.3.2-.2.4-.5.4-.8,1-11.7,8.7-14.4,9.1-14.5.3-.1.5-.3.6-.6.1-.3.1-.6,0-.8-.2-.6-.8-.9-1.4-.7h0Z\"/>\\n' +\n ' <path d=\"M24.4,5.2c-2.5,0-4.2.4-4.4.5-.6.1-1,.8-.8,1.3.1.6.8,1,1.3.8.1,0,1.7-.4,3.8-.4v-2.2h0Z\"/>\\n' +\n ' <path d=\"M24.4,0c-2.1,0-4.2.4-6.3,1.1-6,1.9-10,5.9-10.2,6.1-.2.2-.3.5-.3.8s.1.6.3.8c.2.2.5.3.8.3s.6-.1.8-.3c.2-.1,3.8-3.7,9.3-5.5,1.9-.6,3.8-1,5.7-1V0Z\"/>',\n viewBox: '0 0 52 52'\n}\n\nexport const storage = {\n name: 'storage',\n content: '<path d=\"M120-160v-160h720v160H120Zm80-40h80v-80h-80v80Zm-80-440v-160h720v160H120Zm80-40h80v-80h-80v80Zm-80 280v-160h720v160H120Zm80-40h80v-80h-80v80Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const publicIcon = {\n name: 'public',\n content: '<path d=\"M480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm-40-82v-78q-33 0-56.5-23.5T360-320v-40L168-552q-3 18-5.5 36t-2.5 36q0 121 79.5 212T440-162Zm276-102q41-45 62.5-100.5T800-480q0-98-54.5-179T600-776v16q0 33-23.5 56.5T520-680h-80v80q0 17-11.5 28.5T400-560h-80v80h240q17 0 28.5 11.5T600-440v120h40q26 0 47 15.5t29 40.5Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const power = {\n name: 'power',\n content: '<path d=\"M460-200h40v-74l140-140v-186H320v186l140 140v74Zm-80 80v-120L240-380v-220q0-33 23.5-56.5T320-680h40l-40 40v-200h80v160h160v-160h80v200l-40-40h40q33 0 56.5 23.5T720-600v220L580-240v120H380Zm100-280Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const team_dashboard = {\n name: 'team-dashboard',\n content: '<path d=\"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm200-80v-240H200v240h200Zm80 0h280v-240H480v240ZM200-520h560v-240H200v240Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const swagger_asset = {\n name: 'swagger-asset',\n content:\n ' <path id=\"path1\" d=\"M82.1,9.3c-36.8,0-66.8,28.1-66.8,62.7s30,62.7,66.8,62.7,66.8-28.1,66.8-62.7S118.9,9.3,82.1,9.3ZM82.1,15.3c33.4,0,60.4,25.4,60.4,56.7s-27.1,56.7-60.4,56.7-60.4-25.4-60.4-56.7S48.7,15.3,82.1,15.3ZM61.9,39.9h-2.4c-5.5.3-8.7,2.7-9.7,7.7-.6,3.5-.5,7-.8,10.5,0,1.8-.3,3.6-.6,5.4-.7,3.2-2.2,4.2-5.7,4.3-.5,0-.9,0-1.4.2v7.6c6.3.3,7.1,2.4,7.6,8.5.2,2.2,0,4.5,0,6.7s.4,4.2.9,6.3c1.4,5.6,7.3,7.5,14.3,6.4v-6.7h-3.1c-2.4,0-3.3-.6-3.5-2.8-.3-2.8-.2-5.6-.4-8.5-.4-5.2-1-10.4-6.4-13.7,2.8-1.9,4.8-4.2,5.5-7.3.5-2.1.7-4.3.9-6.5s0-4.4,0-6.5c.3-3.5.6-4.9,5-4.8.7,0,1.3,0,2,0v-6.8h-2.5.3ZM104.1,40c-1.5,0-3,0-4.5.3v6.7h3.5c1.8,0,3.2.7,3.4,2.6.2,1.7.2,3.5.4,5.3.4,3.5.6,7,1.2,10.5.6,2.8,2.6,5,5.2,6.7-4.6,2.9-5.9,7-6.1,11.6,0,3.2-.2,6.3-.4,9.5-.2,2.9-1.2,3.8-4.3,3.9-.9,0-1.7,0-2.7,0v6.8c1.8,0,3.5,0,5.2,0,5.2-.3,8.3-2.7,9.4-7.4.4-2.6.7-5.2.8-7.9.2-2.4.2-4.8.4-7.2.4-3.7,2.2-5.3,6.2-5.5.4,0,.7,0,1.1-.2v-7.6c-.7,0-1.1,0-1.6-.2-3,0-4.5-1.1-5.2-3.7-.5-1.7-.7-3.4-.9-5.2-.2-3.2-.2-6.5-.4-9.7-.4-6.2-4.4-9.2-10.5-9.3h-.2ZM65.8,67.6c-2.6,0-4.7,2-4.7,4.4s1.8,4.2,4.3,4.4h.3c2.5,0,4.7-1.7,4.9-4.1v-.2c0-2.4-2-4.4-4.6-4.5h-.2ZM82,67.6c-2.5,0-4.6,1.7-4.6,4.1v.4c0,2.6,1.9,4.3,4.8,4.3s4.6-1.7,4.6-4.5-1.9-4.4-4.8-4.3h0ZM98.5,67.6c-2.6,0-4.8,1.9-4.9,4.4,0,2.5,2.1,4.4,4.7,4.4h0c2.4.4,4.7-1.8,4.9-4.3,0-2.4-2.2-4.5-4.8-4.5h.1Z\"/>\\n' +\n ' <g>\\n' +\n ' <path d=\"M86.8,181c0-7.3,0-14.7,0-22.1,2.6,1.3,5.1,2.5,8,3.1,3.6.8,7.2,1.9,10.8,2.6,2.5.5,5,.6,7.5.9,3,.3,6.1.6,9.1.8,1.4.1,2.8.2,4.2.2,4.4,0,8.7.1,13.1.2,6.4,0,12.7-.2,19.1-.9,2.5-.2,5-.4,7.4-.7,2.8-.4,5.5-1,8.2-1.6,4.2-1,8.4-2,12.3-4,1-.5,2.1-.9,3.2-1.3,0,6.3,0,12.6,0,18.9-.2.2-.4.4-.4.5-.1,2.1-1.4,3.7-3.2,4.9-3,2-6.3,3.4-10,4.5-6.3,1.9-12.9,2.8-19.5,3.5-3.7.4-7.4.8-11.1.8-5.7,0-11.4,0-17.1-.2-3.9-.1-7.7-.5-11.6-.8-2.2-.2-4.4-.2-6.5-.7-4.8-1-9.5-2.2-14.2-3.5-3.4-1-6.4-2.6-8.8-5.1,0-.1-.4-.1-.5-.1h0Z\"/>\\n' +\n ' <path d=\"M86.8,154.1c0-6.6,0-13.1,0-19.7,2.4.9,4.6,1.9,6.9,2.8,7,2.6,14.5,3.6,22,4.3,3.8.4,7.5.7,11.3.8,4.7.1,9.3,0,14,0,5.9,0,11.9-.3,17.7-.9,2.9-.3,5.8-.4,8.7-.9,3.7-.7,7.3-1.5,10.9-2.5,3-.8,6.1-1.6,8.8-3.1.8-.4,1.8-.7,2.6-1.1,0,6.3,0,12.7,0,19.1-.8.6-1.5,1.3-2.4,1.7-2.9,1.3-5.6,2.8-8.7,3.8-7.5,2.3-15.2,3.4-23,4-3.8.3-7.7.5-11.5.6-4.8,0-9.5,0-14.3-.2-4.7-.2-9.3-.5-14-.8-1.4,0-2.9,0-4.3-.3-3.8-.7-7.7-1.4-11.4-2.3-3.7-.9-7.4-1.9-10.5-3.9-.8-.5-1.8-.9-2.8-1.3h0Z\"/>\\n' +\n ' <path d=\"M86.8,129.6c0-6.6,0-13.1,0-19.7,2.1.8,4,1.7,6.1,2.5,5,1.7,10,3.2,15.4,3.6,4.9.4,9.8,1.2,14.7,1.6,4.4.3,8.8.4,13.1.4,3.2,0,6.3-.1,9.5-.2,2.2,0,4.4-.1,6.6-.2,1.3,0,2.5-.1,3.8-.3,2.4-.2,4.7-.5,7-.8,2.5-.3,5.1-.5,7.6-1,3.2-.7,6.3-1.5,9.3-2.4,2.5-.8,4.8-1.8,7.2-2.7.9-.3,1.8-.7,2.6-1.1,0,6.3,0,12.7,0,19.1-1.1.7-2,1.3-3,1.9-2.2,1.3-4.6,2.5-7.2,3.2-5.6,1.7-11.2,3.2-17.1,3.6-5.7.3-11.3,1.1-16.9,1.4-5.7.2-11.4,0-17.1-.1-4.7-.2-9.4-.7-14.1-1-3.6-.2-7.1-.7-10.6-1.5-4.8-1.2-9.6-2.2-13.9-4.6-1-.5-2-1-3-1.5h0Z\"/>\\n' +\n ' <path d=\"M86.8,105.3c0-1.7,0-3.4,0-5.1.6-.6,1.2-1.2,1.9-1.7,3.2-2.3,6.9-3.9,10.9-4.8,3.4-.8,6.9-1.6,10.3-2.4,0,0,.1-.3.2-.4,18.2,0,36.4,0,54.6,0,.1.2.2.3.4.4,2.4.5,4.9.9,7.3,1.5,4.1,1.1,8.3,2,11.9,4.3,2.5,1.6,4.8,3.2,5,6.2,0,0,.3.1.5.2,0,0,0,.2,0,.3-1.9,1.1-3.6,2.2-5.5,3.3-3.2,1.7-6.8,2.5-10.3,3.4-2.6.7-5.3,1.2-8,1.6-2.3.4-4.7.5-7.1.7-4.3.4-8.6.8-12.9,1-4.2.2-8.4,0-12.6,0s-3.4,0-5.1,0c-4.3-.3-8.6-.7-12.9-1-2.5-.2-5.1-.4-7.6-.9-4.4-.9-8.9-2-13.2-3.3-2.3-.7-4.3-2.1-6.5-3.1-.4-.2-.9-.3-1.3-.4Z\"/>\\n' +\n ' <path d=\"M86.8,129.7c1,.4,2,.8,3,1.4,4.3,2.4,9.1,3.4,13.9,4.6,3.5.8,7,1.3,10.6,1.5,4.7.3,9.4.8,14.1,1,5.7.2,11.4.4,17.1.1,5.7-.2,11.3-1,16.9-1.4,6-.3,11.5-1.9,17.1-3.6,2.6-.8,4.9-1.9,7.2-3.2,1-.6,2-1.2,3-1.8,0,1.8,0,3.5,0,5.3-.9.5-1.8.7-2.6,1.2-2.7,1.5-5.7,2.3-8.8,3.1-3.6.9-7.2,1.8-10.9,2.5-2.9.5-5.8.6-8.7.9-5.9.6-11.8.9-17.7.9-4.7,0-9.3,0-14,0-3.8-.1-7.5-.5-11.3-.8-7.5-.7-15-1.7-22-4.3-2.3-.8-4.6-1.9-6.9-2.9,0-1.5,0-3,0-4.6h0Z\"/>\\n' +\n ' <path d=\"M86.8,105.4c.4,0,.9,0,1.3.3,2.2,1,4.2,2.4,6.5,3.1,4.3,1.3,8.8,2.3,13.2,3.3,2.5.5,5.1.7,7.6.9,4.3.4,8.6.7,12.9,1,1.7.1,3.4,0,5.1,0,4.2,0,8.4.1,12.6,0,4.3-.2,8.6-.6,12.9-1,2.4-.2,4.7-.3,7.1-.7,2.7-.4,5.4-1,8-1.6,3.5-.9,7.1-1.7,10.3-3.4,1.9-1,3.6-2.2,5.5-3.2,0,1.8,0,3.5,0,5.2-.9.5-1.8.8-2.6,1.2-2.4.9-4.7,2-7.2,2.7-3.1.9-6.2,1.7-9.3,2.4-2.5.5-5.1.7-7.6,1-2.3.3-4.7.5-7,.8-1.3.1-2.5.2-3.8.3-2.2,0-4.4.2-6.6.2-3.2,0-6.3.2-9.5.2-4.4,0-8.8-.1-13.1-.4-4.9-.4-9.8-1.2-14.7-1.6-5.4-.4-10.4-1.9-15.4-3.6-2-.7-4-1.7-6.1-2.6,0-1.4,0-2.9,0-4.4h0Z\"/>\\n' +\n ' <path d=\"M86.8,154.2c.9.3,1.9.7,2.8,1.2,3.2,2.1,6.9,3,10.5,3.9,3.8,1,7.6,1.6,11.4,2.3,1.4.3,2.9.2,4.3.3,4.7.3,9.3.7,14,.8,4.7.2,9.5.2,14.3.2,3.8,0,7.7-.3,11.5-.6,7.8-.6,15.5-1.6,23-4,3.1-1,5.8-2.5,8.7-3.8.9-.4,1.5-1.1,2.4-1.6,0,1.8,0,3.5,0,5.2-1.1.5-2.1.9-3.2,1.4-3.8,1.9-8.1,3-12.3,4-2.7.7-5.5,1.2-8.2,1.6-2.5.4-5,.5-7.4.7-6.3.6-12.7,1-19.1.9-4.4,0-8.7-.1-13.1-.2-1.4,0-2.8-.1-4.2-.2-3-.3-6.1-.5-9.1-.8-2.5-.3-5.1-.4-7.5-.9-3.7-.7-7.2-1.8-10.8-2.6-2.9-.7-5.4-1.9-8-3.2,0-1.5,0-3,0-4.6h0Z\"/>\\n' +\n ' <path d=\"M86.8,181.1c.2,0,.4,0,.5,0,2.4,2.5,5.4,4.1,8.8,5.1,4.7,1.4,9.5,2.5,14.2,3.5,2.1.5,4.3.5,6.5.7,3.9.3,7.7.7,11.6.8,5.7.2,11.4.3,17.1.2,3.7,0,7.4-.4,11.1-.8,6.6-.7,13.1-1.6,19.5-3.5,3.6-1.1,7-2.5,10-4.5,1.8-1.2,3-2.8,3.2-4.9,0-.2.2-.3.4-.4,0,4.9,0,9.8,0,14.7h-102.9v-10.9h0Z\"/>\\n' +\n ' <path d=\"M189.8,103.5c-.2,0-.5,0-.5,0-.2-3-2.5-4.6-5-6.2-3.6-2.3-7.8-3.2-11.9-4.3-2.4-.7-4.8-1-7.3-1.5-.1,0-.2-.2-.3-.4,8.3,0,16.5,0,24.8,0v12.6Z\"/>\\n' +\n ' <path d=\"M110.1,90.9c0,.1,0,.4,0,.4-3.4.8-6.9,1.6-10.3,2.4-4,.9-7.7,2.5-10.9,4.8-.7.5-1.2,1.1-1.9,1.6,0-3.1,0-6.1,0-9.2h23.2Z\"/>\\n' +\n ' </g>',\n viewBox: '0 0 192 192'\n}\n\nexport const swagger_bot = {\n name: 'swagger-bot',\n content:\n ' <sodipodi:namedview id=\"namedview1\" bordercolor=\"#eeeeee\" borderopacity=\"1\" inkscape:current-layer=\"Ebene_1\" inkscape:cx=\"83.119467\" inkscape:cy=\"87.592263\" inkscape:deskcolor=\"#505050\" inkscape:pagecheckerboard=\"0\" inkscape:pageopacity=\"0\" inkscape:showpageshadow=\"0\" inkscape:window-height=\"1092\" inkscape:window-maximized=\"1\" inkscape:window-width=\"1792\" inkscape:window-x=\"0\" inkscape:window-y=\"822\" inkscape:zoom=\"1.3414427\" pagecolor=\"#505050\"/>\\n' +\n ' <path d=\"M82.1,9.3c-36.8,0-66.8,28.1-66.8,62.7s30,62.7,66.8,62.7,66.8-28.1,66.8-62.7S118.9,9.3,82.1,9.3ZM82.1,15.3c33.4,0,60.4,25.4,60.4,56.7s-27.1,56.7-60.4,56.7-60.4-25.4-60.4-56.7S48.7,15.3,82.1,15.3ZM61.9,39.9h-2.4c-5.5.3-8.7,2.7-9.7,7.7-.6,3.5-.5,7-.8,10.5,0,1.8-.3,3.6-.6,5.4-.7,3.2-2.2,4.2-5.7,4.3-.5,0-.9,0-1.4.2v7.6c6.3.3,7.1,2.4,7.6,8.5.2,2.2,0,4.5,0,6.7s.4,4.2.9,6.3c1.4,5.6,7.3,7.5,14.3,6.4v-6.7h-3.1c-2.4,0-3.3-.6-3.5-2.8-.3-2.8-.2-5.6-.4-8.5-.4-5.2-1-10.4-6.4-13.7,2.8-1.9,4.8-4.2,5.5-7.3.5-2.1.7-4.3.9-6.5s0-4.4,0-6.5c.3-3.5.6-4.9,5-4.8.7,0,1.3,0,2,0v-6.8h-2.5.3ZM104.1,40c-1.5,0-3,0-4.5.3v6.7h3.5c1.8,0,3.2.7,3.4,2.6.2,1.7.2,3.5.4,5.3.4,3.5.6,7,1.2,10.5.6,2.8,2.6,5,5.2,6.7-4.6,2.9-5.9,7-6.1,11.6,0,3.2-.2,6.3-.4,9.5-.2,2.9-1.2,3.8-4.3,3.9-.9,0-1.7,0-2.7,0v6.8c1.8,0,3.5,0,5.2,0,5.2-.3,8.3-2.7,9.4-7.4.4-2.6.7-5.2.8-7.9.2-2.4.2-4.8.4-7.2.4-3.7,2.2-5.3,6.2-5.5.4,0,.7,0,1.1-.2v-7.6c-.7,0-1.1,0-1.6-.2-3,0-4.5-1.1-5.2-3.7-.5-1.7-.7-3.4-.9-5.2-.2-3.2-.2-6.5-.4-9.7-.4-6.2-4.4-9.2-10.5-9.3h-.2ZM65.8,67.6c-2.6,0-4.7,2-4.7,4.4s1.8,4.2,4.3,4.4h.3c2.5,0,4.7-1.7,4.9-4.1v-.2c0-2.4-2-4.4-4.6-4.5h-.2ZM82,67.6c-2.5,0-4.6,1.7-4.6,4.1v.4c0,2.6,1.9,4.3,4.8,4.3s4.6-1.7,4.6-4.5-1.9-4.4-4.8-4.3h0ZM98.5,67.6c-2.6,0-4.8,1.9-4.9,4.4,0,2.5,2.1,4.4,4.7,4.4h0c2.4.4,4.7-1.8,4.9-4.3,0-2.4-2.2-4.5-4.8-4.5h.1Z\"/>\\n' +\n ' <path d=\"M175.1,180.6c-1.5,1.4-3.2,2.1-5.1,2.1-20.8,0-41.5,0-62.3,0-3.5,0-6.1-2-7.4-5.3-.5-1.2-.9-2.5-.9-3.8,0-7.3,0-14.5,0-21.8v-1.1c-2.9-.2-4.5-2-4.5-5,0-2.5,0-5,0-7.5,0-3.4,1.2-5.2,4.5-5.9,0-4.7,0-9.4,0-14.1,0-3,1.6-5.1,3.9-6.7,1.6-1.1,3.3-1.4,5.2-1.4,8.2,0,16.5,0,24.7,0h1.1c0-1.9,0-3.7,0-5.4,0-.3-.2-.6-.4-.8-1.7-2-2.1-4.4-1.4-6.9.7-2.6,2.6-4.2,5.1-4.6,4-.7,7.9,2.4,7.8,6.6,0,1.9-.6,3.5-1.8,5-.2.2-.3.5-.3.7,0,1.8,0,3.6,0,5.4h1.1c8.7,0,17.4,0,26.2,0,2.8,0,4.8,1.6,6.4,3.8,1.2,1.6,1.5,3.5,1.5,5.5,0,4.3,0,8.6,0,12.9,1.6.2,3,.7,3.8,2.2.4.7.7,1.6.7,2.4,0,3,0,6,0,9,0,2.3-1.9,4.9-4.5,4.7v1.1c0,7.5,0,14.9,0,22.4,0,2.6-1.2,4.8-3.2,6.5M129.8,164.1h26.4c0-.9,0-1.6,0-2.4,0-1.9,0-3.7,0-5.6,0-.6-.7-1-1.3-.7-.2,0-.4.1-.6.1-.4,0-.8-.3-1.1-.3-10.3,0-20.7,0-31,0-.3,0-.6,0-.9,0v8.8h8.5M151.2,144.9c1.9,1.6,4.4,1.3,6.2-.3,1.7-1.5,2.7-3.4,3-5.8.5-3.8-.2-7.1-3.2-9.6-1.7-1.4-3.8-1.6-5.7-.3-2.6,1.8-3.6,4.5-3.8,7.4-.2,3.3.8,6.2,3.5,8.4M117.6,140.7c.3.8.6,1.6,1.1,2.3,2.9,4,6.9,3.9,9.5,0,1.5-2.2,2-4.7,1.6-7.4-.3-2.3-1.1-4.4-2.8-5.9-2.7-2.5-5.5-1.8-7.5.4-1.8,1.8-2.5,4.3-2.4,6.9,0,1.2.3,2.4.6,3.8Z\"/>\\n' +\n ' <path d=\"M129.7,164.1h-8.4v-8.8c.3,0,.6,0,.9,0,10.3,0,20.7,0,31,0,.4,0,.7.2,1.1.3.2,0,.4,0,.6-.1.6-.3,1.3.1,1.3.7,0,1.9,0,3.7,0,5.6,0,.8,0,1.5,0,2.4h-26.5Z\"/>\\n' +\n ' <path d=\"M151.1,144.9c-2.7-2.2-3.7-5.1-3.5-8.4.2-3,1.2-5.7,3.8-7.4,1.9-1.3,4-1.1,5.7.3,3,2.5,3.7,5.8,3.2,9.6-.3,2.3-1.3,4.2-3,5.8-1.8,1.6-4.3,1.8-6.3.3Z\"/>\\n' +\n ' <path d=\"M117.5,140.7c-.2-1.3-.5-2.5-.5-3.7,0-2.6.6-5,2.4-6.9,2.1-2.2,4.8-2.9,7.5-.4,1.7,1.6,2.5,3.6,2.8,5.9.4,2.7-.1,5.2-1.6,7.4-2.6,3.9-6.6,4-9.5,0-.5-.7-.7-1.5-1.1-2.3Z\"/>',\n viewBox: '0 0 192 192'\n}\n\nexport const swagger_identity = {\n name: 'swagger-identity',\n content:\n ' <path d=\"M82.1,9.3c-36.8,0-66.8,28.1-66.8,62.7s30,62.7,66.8,62.7,66.8-28.1,66.8-62.7S118.9,9.3,82.1,9.3ZM82.1,15.3c33.4,0,60.4,25.4,60.4,56.7s-27.1,56.7-60.4,56.7-60.4-25.4-60.4-56.7S48.7,15.3,82.1,15.3ZM61.9,39.9h-2.4c-5.5.3-8.7,2.7-9.7,7.7-.6,3.5-.5,7-.8,10.5,0,1.8-.3,3.6-.6,5.4-.7,3.2-2.2,4.2-5.7,4.3-.5,0-.9,0-1.4.2v7.6c6.3.3,7.1,2.4,7.6,8.5.2,2.2,0,4.5,0,6.7s.4,4.2.9,6.3c1.4,5.6,7.3,7.5,14.3,6.4v-6.7h-3.1c-2.4,0-3.3-.6-3.5-2.8-.3-2.8-.2-5.6-.4-8.5-.4-5.2-1-10.4-6.4-13.7,2.8-1.9,4.8-4.2,5.5-7.3.5-2.1.7-4.3.9-6.5s0-4.4,0-6.5c.3-3.5.6-4.9,5-4.8.7,0,1.3,0,2,0v-6.8h-2.5.3ZM104.1,40c-1.5,0-3,0-4.5.3v6.7h3.5c1.8,0,3.2.7,3.4,2.6.2,1.7.2,3.5.4,5.3.4,3.5.6,7,1.2,10.5.6,2.8,2.6,5,5.2,6.7-4.6,2.9-5.9,7-6.1,11.6,0,3.2-.2,6.3-.4,9.5-.2,2.9-1.2,3.8-4.3,3.9-.9,0-1.7,0-2.7,0v6.8c1.8,0,3.5,0,5.2,0,5.2-.3,8.3-2.7,9.4-7.4.4-2.6.7-5.2.8-7.9.2-2.4.2-4.8.4-7.2.4-3.7,2.2-5.3,6.2-5.5.4,0,.7,0,1.1-.2v-7.6c-.7,0-1.1,0-1.6-.2-3,0-4.5-1.1-5.2-3.7-.5-1.7-.7-3.4-.9-5.2-.2-3.2-.2-6.5-.4-9.7-.4-6.2-4.4-9.2-10.5-9.3h-.2ZM65.8,67.6c-2.6,0-4.7,2-4.7,4.4s1.8,4.2,4.3,4.4h.3c2.5,0,4.7-1.7,4.9-4.1v-.2c0-2.4-2-4.4-4.6-4.5h-.2ZM82,67.6c-2.5,0-4.6,1.7-4.6,4.1v.4c0,2.6,1.9,4.3,4.8,4.3s4.6-1.7,4.6-4.5-1.9-4.4-4.8-4.3h0ZM98.5,67.6c-2.6,0-4.8,1.9-4.9,4.4,0,2.5,2.1,4.4,4.7,4.4h0c2.4.4,4.7-1.8,4.9-4.3,0-2.4-2.2-4.5-4.8-4.5h.1Z\"/>\\n' +\n ' <path d=\"M129.7,164.1h-8.4v-8.8c.3,0,.6,0,.9,0,10.3,0,20.7,0,31,0,.4,0,.7.2,1.1.3.2,0,.4,0,.6-.1.6-.3,1.3.1,1.3.7,0,1.9,0,3.7,0,5.6,0,.8,0,1.5,0,2.4h-26.5Z\"/>\\n' +\n ' <path d=\"M151.1,144.9c-2.7-2.2-3.7-5.1-3.5-8.4.2-3,1.2-5.7,3.8-7.4,1.9-1.3,4-1.1,5.7.3,3,2.5,3.7,5.8,3.2,9.6-.3,2.3-1.3,4.2-3,5.8-1.8,1.6-4.3,1.8-6.3.3Z\"/>\\n' +\n ' <path d=\"M117.5,140.7c-.2-1.3-.5-2.5-.5-3.7,0-2.6.6-5,2.4-6.9,2.1-2.2,4.8-2.9,7.5-.4,1.7,1.6,2.5,3.6,2.8,5.9.4,2.7-.1,5.2-1.6,7.4-2.6,3.9-6.6,4-9.5,0-.5-.7-.7-1.5-1.1-2.3Z\"/>\\n' +\n ' <path d=\"M134.9,76.4h0v7.5h0v97.5h0v8.2h0c32.3-14.8,54.2-40.1,54.2-63.1v-35.9l-54.2-14.2Z\"/>\\n' +\n ' <path d=\"M134.9,126.7c-1.5,0-2.8,1.1-2.8,2.2-.5,9.1-2.8,18.6-6.6,27-3.6,8.4-8.7,15.5-14.5,21.5-1,1.1-1,2.7.3,3.5.5.4,1.3.7,1.8.7s1.5-.2,2-.9c6.6-6.4,11.7-14.2,15.8-23,1.5-3.8,2.8-7.5,4.1-11.5v-19.7h0v.2Z\"/>\\n' +\n ' <path d=\"M134.9,183c-.8.9-1.3,2-2,2.9-.5.4-.5,1.1-.5,1.8s.5,1.1,1.3,1.6c.5,0,.8.4,1.3.4v-6.6h0Z\"/>\\n' +\n ' <path d=\"M125.2,138.9c.3-1.6.5-3.1,1-5.1.5-2.2,1-4.2,1.8-6,.8-1.6,1.5-2.9,2.3-4,1-1.3,2.5-2,4.1-2.2h.5v-5.1h-1.5c-3.1.4-5.9,2-7.9,4.2-1.3,1.3-2.3,3.1-3.1,5.1-.8,2-1.5,4.2-2,6.6-.5,2-.8,3.5-1,5.3-.5,2.9-.8,5.5-2.3,9.1s-3.3,7.3-5.9,11.5c-3.3,5.5-6.4,9.5-7.6,10.9-1,1.1-.8,2.7.5,3.5.5.4,1.3.7,2,.4s1.5-.4,2-.9c1.8-1.8,5.3-6.4,8.4-11.5,2.5-4.4,4.8-8.4,6.4-12.2,1.5-4,2-6.9,2.5-10h0l-.3.2Z\"/>\\n' +\n ' <path d=\"M134.9,158.8c-4.6,10-9.9,19.7-13.2,23.5-1,1.1-.8,2.7.5,3.5.5.4,1,.4,1.8.4s1.8-.4,2.3-.9c2.3-2.7,5.6-7.8,8.9-14v-12.6h-.3Z\"/>\\n' +\n ' <path d=\"M134.9,107c-2.3,0-4.8.2-7.1.9-4.1,1.1-7.6,3.1-10.7,6-3.8,3.8-6.6,8.9-7.6,15.3v.2h0c-.5,6-2.5,13.7-4.8,20.6-2.3,6.2-4.6,10.4-6.4,11.7-.5.4-1,1.1-1,1.8s0,1.3.5,1.8,1.3.9,2,.9,1.5,0,2-.4c3.6-2.7,6.6-10,8.1-14.2,2.5-7.1,4.6-15.3,5.1-21.5,1-5.3,3.1-9.5,6.4-12.6,2.3-2.2,4.8-3.8,8.1-4.7,1.8-.4,3.6-.7,5.3-.7v-4.9h0v-.2Z\"/>\\n' +\n ' <path d=\"M134.9,97.3c-4.6,0-9.2.7-13.2,2.4-5.1,2-9.7,4.9-13.5,8.9-5.1,5.3-8.4,12.4-9.7,19.5-.8,5.1-1.8,9.5-2.8,12.8-1.3,4.4-3.1,7.3-4.8,8.6-.5.4-1,1.1-1,1.8s0,1.3.5,1.8,1.3.9,2.3.9,1.3,0,1.8-.7c2.8-2,5.1-5.8,6.6-11.3,1.3-3.8,2-8.4,3.1-13.7,1-6.2,3.8-12.4,8.4-17.1,3.1-3.3,7.1-6,11.2-7.5,3.6-1.3,7.4-2,11.2-2v-4.9h0v.4Z\"/>\\n' +\n ' <path d=\"M113.8,92.2c-1,.2-24.2,7.3-27,36.3,0,.7,0,1.3.8,1.8.5.4,1.3.9,2,.9h.3c.8,0,1.3-.2,1.8-.7.5-.4,1-1.1,1-1.8,2.5-25.9,22.1-31.9,23.2-32.1.8-.2,1.3-.7,1.5-1.3s.3-1.3,0-1.8c-.5-1.3-2-2-3.6-1.6h0v.2Z\"/>\\n' +\n ' <path d=\"M134.9,88c-6.4,0-10.7.9-11.2,1.1-1.5.2-2.5,1.8-2,2.9.3,1.3,2,2.2,3.3,1.8.3,0,4.3-.9,9.7-.9v-4.9h.3Z\"/>\\n' +\n ' <path d=\"M134.9,76.4c-5.3,0-10.7.9-16,2.4-15.3,4.2-25.4,13.1-26,13.5s-.8,1.1-.8,1.8.3,1.3.8,1.8c.5.4,1.3.7,2,.7s1.5-.2,2-.7c.5-.2,9.7-8.2,23.7-12.2,4.8-1.3,9.7-2.2,14.5-2.2v-5.1h-.3Z\"/>',\n viewBox: '0 0 192 192'\n}\n\nexport const swagger_communication = {\n name: 'swagger-communication',\n content:\n ' <path stroke=\"2px\" d=\"M70.8,1.4C34,1.4,4,29.5,4,64.1s30,62.7,66.8,62.7,66.8-28.1,66.8-62.7S107.7,1.4,70.8,1.4ZM70.8,7.4c33.4,0,60.4,25.4,60.4,56.7s-27.1,56.7-60.4,56.7S10.4,95.4,10.4,64.1,37.5,7.4,70.8,7.4ZM50.6,32.1c-.8,0-1.6,0-2.4,0-5.5.3-8.7,2.7-9.7,7.7-.6,3.5-.5,7-.8,10.5,0,1.8-.3,3.6-.6,5.4-.7,3.2-2.2,4.2-5.7,4.3-.5,0-.9.1-1.4.2v7.6c6.3.3,7.1,2.4,7.6,8.5.2,2.2,0,4.5,0,6.7,0,2.1.4,4.2.9,6.3,1.4,5.6,7.3,7.5,14.3,6.4v-6.7c-1.1,0-2.1,0-3.1,0-2.4,0-3.3-.6-3.5-2.8-.3-2.8-.2-5.6-.4-8.5-.4-5.2-1-10.4-6.4-13.7,2.8-1.9,4.8-4.2,5.5-7.3.5-2.1.7-4.3.9-6.5.2-2.2-.1-4.4,0-6.5.3-3.5.6-4.9,5-4.8.7,0,1.3,0,2-.1v-6.8c-.9,0-1.7,0-2.5,0h0ZM92.9,32.1c-1.5,0-3,0-4.5.3v6.7c1.4,0,2.4,0,3.5,0,1.8,0,3.2.7,3.4,2.6.2,1.7.2,3.5.4,5.3.4,3.5.6,7,1.2,10.5.6,2.8,2.6,5,5.2,6.7-4.6,2.9-5.9,7-6.1,11.6-.1,3.2-.2,6.3-.4,9.5-.2,2.9-1.2,3.8-4.3,3.9-.9,0-1.7,0-2.7.1v6.8c1.8,0,3.5.1,5.2,0,5.2-.3,8.3-2.7,9.4-7.4.4-2.6.7-5.2.8-7.9.2-2.4.2-4.8.4-7.2.4-3.7,2.2-5.3,6.2-5.5.4,0,.7-.1,1.1-.2v-7.6c-.7,0-1.1-.1-1.6-.2-3-.1-4.5-1.1-5.2-3.7-.5-1.7-.7-3.4-.9-5.2-.2-3.2-.2-6.5-.4-9.7-.4-6.2-4.4-9.2-10.5-9.3h0ZM54.5,59.7c-2.6,0-4.7,2-4.7,4.4s1.8,4.2,4.3,4.4h.3c2.5.1,4.7-1.7,4.9-4.1v-.2c0-2.4-2-4.4-4.6-4.5h-.1ZM70.8,59.7c-2.5,0-4.6,1.7-4.6,4.1,0,.1,0,.3,0,.4,0,2.6,1.9,4.3,4.8,4.3s4.6-1.7,4.6-4.5c0-2.6-1.9-4.4-4.8-4.3h0ZM87.2,59.7c-2.6,0-4.8,1.9-4.9,4.4,0,2.5,2.1,4.4,4.7,4.4h0c2.4.4,4.7-1.8,4.9-4.3.1-2.4-2.2-4.5-4.8-4.5h0Z\"/>\\n' +\n ' <path d=\"M134.5,176h6.2v-10.4l21.7-19.7v-26.2h-49.6v26.2l21.7,19.7v10.4ZM122,187.3v-16.9l-21.8-19.7v-31c0-3.1,1.2-5.8,3.7-8,2.4-2.2,5.4-3.3,8.8-3.3h6.2l-6.2,5.6v-28.2h12.5v22.6h24.9v-22.6h12.5v28.2l-6.2-5.6h6.2c3.4,0,6.4,1.1,8.8,3.3,2.4,2.2,3.7,4.9,3.7,8v31l-21.8,19.7v16.9h-31.2Z\"/>\\n',\n viewBox: '0 0 192 192'\n}\n\nexport const swagger = {\n name: \"swagger\",\n content: '<path id=\"path1\" class=\"st0\" d=\"M96,0C43.1,0,0,43,0,96s43.1,96,96,96,96-43,96-96S148.9,0,96,0ZM96,9.2c48,0,86.8,38.9,86.8,86.8s-38.9,86.8-86.8,86.8S9.2,143.9,9.2,96,48,9.2,96,9.2ZM67,46.9h-3.4c-7.9.5-12.5,4.1-13.9,11.8-.9,5.4-.7,10.7-1.1,16.1,0,2.8-.4,5.5-.9,8.3-1,4.9-3.2,6.4-8.2,6.6-.7,0-1.3,0-2,.3v11.6c9.1.5,10.2,3.7,10.9,13,.3,3.4,0,6.9,0,10.3s.6,6.4,1.3,9.6c2,8.6,10.5,11.5,20.6,9.8v-10.3h-4.5c-3.4,0-4.7-.9-5-4.3-.4-4.3-.3-8.6-.6-13-.6-8-1.4-15.9-9.2-21,4-2.9,6.9-6.4,7.9-11.2.7-3.2,1-6.6,1.3-10s0-6.7,0-10c.4-5.4.9-7.5,7.2-7.3h2.9v-10.4h-3.6.4ZM127.6,47c-2.2,0-4.3,0-6.5.5v10.3h5c2.6,0,4.6,1.1,4.9,4,.3,2.6.3,5.4.6,8.1.6,5.4.9,10.7,1.7,16.1.9,4.3,3.7,7.7,7.5,10.3-6.6,4.4-8.5,10.7-8.8,17.8,0,4.9-.3,9.6-.6,14.5-.3,4.4-1.7,5.8-6.2,6h-3.9v10.4h7.5c7.5-.5,11.9-4.1,13.5-11.3.6-4,1-8,1.1-12.1.3-3.7.3-7.3.6-11,.6-5.7,3.2-8.1,8.9-8.4.6,0,1,0,1.6-.3v-11.6c-1,0-1.6,0-2.3-.3-4.3,0-6.5-1.7-7.5-5.7-.7-2.6-1-5.2-1.3-8-.3-4.9-.3-10-.6-14.9-.6-9.5-6.3-14.1-15.1-14.2,0,0-.3,0-.3,0ZM72.6,89.3c-3.7,0-6.8,3.1-6.8,6.7s2.6,6.4,6.2,6.7h.4c3.6,0,6.8-2.6,7-6.3v-.3c0-3.7-2.9-6.7-6.6-6.9,0,0-.3,0-.3,0ZM95.9,89.3c-3.6,0-6.6,2.6-6.6,6.3v.6c0,4,2.7,6.6,6.9,6.6s6.6-2.6,6.6-6.9-2.7-6.7-6.9-6.6h0ZM119.6,89.3c-3.7,0-6.9,2.9-7,6.7,0,3.8,3,6.7,6.8,6.7h0c3.4.6,6.8-2.8,7-6.6,0-3.7-3.2-6.9-6.9-6.9h.1Z\"/>',\n viewBox: '0 0 192 192'\n}\n\nexport const user_diagnostics = {\n name: 'user-diagnostics',\n content: ' <path class=\"st0\" d=\"M48.4,163.2h95.2v-19.2H48.4v19.2ZM48.4,134.4h95.2v-19.2H48.4v19.2ZM96,98.9c13.1-9.6,24.3-18.1,33.6-25.6,9.3-7.4,14-15.2,14-23.4s-2.6-10.7-7.7-14.9c-5.2-4.2-11.3-6.2-18.4-6.2s-8.2.7-12,2c-3.9,1.4-7,3.2-9.4,5.6-2.4-2.4-5.5-4.3-9.4-5.6-3.9-1.4-7.9-2-12-2-7.1,0-13.3,2.1-18.4,6.2-5.2,4.2-7.7,9.1-7.7,14.9,0,8.2,4.5,15.8,13.5,23,9,7.2,20.4,15.8,34,25.9ZM167.4,192H24.6c-6.5,0-12.1-1.9-16.8-5.6-4.7-3.8-7-8.3-7-13.6V19.2c0-5.3,2.3-9.8,7-13.6C12.5,1.9,18.1,0,24.6,0h142.7c6.5,0,12.1,1.9,16.8,5.6s7,8.3,7,13.6v153.6c0,5.3-2.3,9.8-7,13.6s-10.3,5.6-16.8,5.6ZM24.6,172.8h142.7V19.2H24.6v153.6ZM24.6,172.8V19.2v153.6Z\"/>',\n viewBox: '0 0 192 192'\n}\n\nexport const work = {\n name: 'work',\n content: '<path d=\"M160-120q-33 0-56.5-23.5T80-200v-440q0-33 23.5-56.5T160-720h160v-80q0-33 23.5-56.5T400-880h160q33 0 56.5 23.5T640-800v80h160q33 0 56.5 23.5T880-640v440q0 33-23.5 56.5T800-120H160Zm0-80h640v-440H160v440Zm240-520h160v-80H400v80ZM160-200v-440 440Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const more_time = {\n name: 'more-time',\n content: '<path d=\"M440-120q-75 0-140.5-28T185-225q-49-49-77-114.5T80-480q0-75 28-140.5T185-735q49-49 114.5-77T440-840q21 0 40.5 2.5T520-830v82q-20-6-39.5-9t-40.5-3q-118 0-199 81t-81 199q0 118 81 199t199 81q118 0 199-81t81-199q0-11-1-20t-3-20h82q2 11 2 20v20q0 75-28 140.5T695-225q-49 49-114.5 77T440-120Zm112-192L400-464v-216h80v184l128 128-56 56Zm168-288v-120H600v-80h120v-120h80v120h120v80H800v120h-80Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const manage_accounts = {\n name: 'manage-accounts',\n content: '<path d=\"M400-480q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 66-47 113t-113 47ZM80-160v-112q0-33 17-62t47-44q51-26 115-44t141-18h14q6 0 12 2-8 18-13.5 37.5T404-360h-4q-71 0-127.5 18T180-306q-9 5-14.5 14t-5.5 20v32h252q6 21 16 41.5t22 38.5H80Zm560 40-12-60q-12-5-22.5-10.5T584-204l-58 18-40-68 46-40q-2-14-2-26t2-26l-46-40 40-68 58 18q11-8 21.5-13.5T628-460l12-60h80l12 60q12 5 22.5 11t21.5 15l58-20 40 70-46 40q2 12 2 25t-2 25l46 40-40 68-58-18q-11 8-21.5 13.5T732-180l-12 60h-80Zm40-120q33 0 56.5-23.5T760-320q0-33-23.5-56.5T680-400q-33 0-56.5 23.5T600-320q0 33 23.5 56.5T680-240ZM400-560q33 0 56.5-23.5T480-640q0-33-23.5-56.5T400-720q-33 0-56.5 23.5T320-640q0 33 23.5 56.5T400-560Zm0-80Zm12 400Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const group = {\n name: 'group',\n content: '<path d=\"M40-160v-112q0-34 17.5-62.5T104-378q62-31 126-46.5T360-440q66 0 130 15.5T616-378q29 15 46.5 43.5T680-272v112H40Zm720 0v-120q0-44-24.5-84.5T666-434q51 6 96 20.5t84 35.5q36 20 55 44.5t19 53.5v120H760ZM360-480q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 66-47 113t-113 47Zm400-160q0 66-47 113t-113 47q-11 0-28-2.5t-28-5.5q27-32 41.5-71t14.5-81q0-42-14.5-81T544-792q14-5 28-6.5t28-1.5q66 0 113 47t47 113ZM120-240h480v-32q0-11-5.5-20T580-306q-54-27-109-40.5T360-360q-56 0-111 13.5T140-306q-9 5-14.5 14t-5.5 20v32Zm240-320q33 0 56.5-23.5T440-640q0-33-23.5-56.5T360-720q-33 0-56.5 23.5T280-640q0 33 23.5 56.5T360-560Zm0 320Zm0-400Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const app_registration = {\n name: 'app-registration',\n content: '<path d=\"M240-160q-33 0-56.5-23.5T160-240q0-33 23.5-56.5T240-320q33 0 56.5 23.5T320-240q0 33-23.5 56.5T240-160Zm0-240q-33 0-56.5-23.5T160-480q0-33 23.5-56.5T240-560q33 0 56.5 23.5T320-480q0 33-23.5 56.5T240-400Zm0-240q-33 0-56.5-23.5T160-720q0-33 23.5-56.5T240-800q33 0 56.5 23.5T320-720q0 33-23.5 56.5T240-640Zm240 0q-33 0-56.5-23.5T400-720q0-33 23.5-56.5T480-800q33 0 56.5 23.5T560-720q0 33-23.5 56.5T480-640Zm240 0q-33 0-56.5-23.5T640-720q0-33 23.5-56.5T720-800q33 0 56.5 23.5T800-720q0 33-23.5 56.5T720-640ZM480-400q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Zm40 240v-123l221-220q9-9 20-13t22-4q12 0 23 4.5t20 13.5l37 37q8 9 12.5 20t4.5 22q0 11-4 22.5T863-380L643-160H520Zm300-263-37-37 37 37ZM580-220h38l121-122-18-19-19-18-122 121v38Zm141-141-19-18 37 37-18-19Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const settings = {\n name: 'settings',\n content: '<path d=\"m370-80-16-128q-13-5-24.5-12T307-235l-119 50L78-375l103-78q-1-7-1-13.5v-27q0-6.5 1-13.5L78-585l110-190 119 50q11-8 23-15t24-12l16-128h220l16 128q13 5 24.5 12t22.5 15l119-50 110 190-103 78q1 7 1 13.5v27q0 6.5-2 13.5l103 78-110 190-118-50q-11 8-23 15t-24 12L590-80H370Zm70-80h79l14-106q31-8 57.5-23.5T639-327l99 41 39-68-86-65q5-14 7-29.5t2-31.5q0-16-2-31.5t-7-29.5l86-65-39-68-99 42q-22-23-48.5-38.5T533-694l-13-106h-79l-14 106q-31 8-57.5 23.5T321-633l-99-41-39 68 86 64q-5 15-7 30t-2 32q0 16 2 31t7 30l-86 65 39 68 99-42q22 23 48.5 38.5T427-266l13 106Zm42-180q58 0 99-41t41-99q0-58-41-99t-99-41q-59 0-99.5 41T342-480q0 58 40.5 99t99.5 41Zm-2-140Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const account_tree = {\n name: 'account-tree',\n content: '<path d=\"M600-120v-120H440v-400h-80v120H80v-320h280v120h240v-120h280v320H600v-120h-80v320h80v-120h280v320H600ZM160-760v160-160Zm520 400v160-160Zm0-400v160-160Zm0 160h120v-160H680v160Zm0 400h120v-160H680v160ZM160-600h120v-160H160v160Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const analytics = {\n name: 'analytics',\n content: '<path d=\"M280-280h80v-200h-80v200Zm320 0h80v-400h-80v400Zm-160 0h80v-120h-80v120Zm0-200h80v-80h-80v80ZM200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm0-560v560-560Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const travel_explore = {\n name: 'travel-explore',\n content: '<path d=\"M480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q146 0 255.5 91.5T872-559h-82q-19-73-68.5-130.5T600-776v16q0 33-23.5 56.5T520-680h-80v80q0 17-11.5 28.5T400-560h-80v80h80v120h-40L168-552q-3 18-5.5 36t-2.5 36q0 131 92 225t228 95v80Zm364-20L716-228q-21 12-45 20t-51 8q-75 0-127.5-52.5T440-380q0-75 52.5-127.5T620-560q75 0 127.5 52.5T800-380q0 27-8 51t-20 45l128 128-56 56ZM620-280q42 0 71-29t29-71q0-42-29-71t-71-29q-42 0-71 29t-29 71q0 42 29 71t71 29Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const page_info = {\n name: 'page_info',\n content: '<path d=\"M710-150q-63 0-106.5-43.5T560-300q0-63 43.5-106.5T710-450q63 0 106.5 43.5T860-300q0 63-43.5 106.5T710-150Zm0-80q29 0 49.5-20.5T780-300q0-29-20.5-49.5T710-370q-29 0-49.5 20.5T640-300q0 29 20.5 49.5T710-230Zm-550-30v-80h320v80H160Zm90-250q-63 0-106.5-43.5T100-660q0-63 43.5-106.5T250-810q63 0 106.5 43.5T400-660q0 63-43.5 106.5T250-510Zm0-80q29 0 49.5-20.5T320-660q0-29-20.5-49.5T250-730q-29 0-49.5 20.5T180-660q0 29 20.5 49.5T250-590Zm230-30v-80h320v80H480Zm230 320ZM250-660Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const query_builder = {\n name: 'query-builder',\n content: ' <path d=\"M255.8,42.7c-117.8,0-213.1,95.6-213.1,213.3s95.4,213.3,213.1,213.3,213.5-95.6,213.5-213.3S373.8,42.7,255.8,42.7ZM256,426.7c-94.3,0-170.7-76.4-170.7-170.7s76.4-170.7,170.7-170.7,170.7,76.4,170.7,170.7-76.4,170.7-170.7,170.7Z\"/>\\n' +\n ' <path d=\"M266.7,149.3h-32v128l112,67.2,16-26.2-96-57v-112Z\"/>',\n viewBox: '0 0 512 512'\n}\n\nexport const event_list = {\n name: 'event-list',\n content: '<path d=\"M640-120q-33 0-56.5-23.5T560-200v-160q0-33 23.5-56.5T640-440h160q33 0 56.5 23.5T880-360v160q0 33-23.5 56.5T800-120H640Zm0-80h160v-160H640v160ZM80-240v-80h360v80H80Zm560-280q-33 0-56.5-23.5T560-600v-160q0-33 23.5-56.5T640-840h160q33 0 56.5 23.5T880-760v160q0 33-23.5 56.5T800-520H640Zm0-80h160v-160H640v160ZM80-640v-80h360v80H80Zm640 360Zm0-400Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const graphic_eq = {\n name: 'graphic-eq',\n content: '<path d=\"M280-240v-480h80v480h-80ZM440-80v-800h80v800h-80ZM120-400v-160h80v160h-80Zm480 160v-480h80v480h-80Zm160-160v-160h80v160h-80Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const pool = {\n name: 'pool',\n content: '<path d=\"M80-120v-80q38 0 57-20t75-20q56 0 77 20t57 20q36 0 57-20t77-20q56 0 77 20t57 20q36 0 57-20t77-20q56 0 75 20t57 20v80q-59 0-77.5-20T748-160q-36 0-57 20t-77 20q-56 0-77-20t-57-20q-36 0-57 20t-77 20q-56 0-77-20t-57-20q-36 0-54.5 20T80-120Zm0-180v-80q38 0 57-20t75-20q56 0 77.5 20t56.5 20q36 0 57-20t77-20q56 0 77 20t57 20q36 0 57-20t77-20q56 0 75 20t57 20v80q-59 0-77.5-20T748-340q-36 0-55.5 20T614-300q-57 0-77.5-20T480-340q-38 0-56.5 20T346-300q-59 0-78.5-20T212-340q-36 0-54.5 20T80-300Zm196-204 133-133-40-40q-33-33-70-48t-91-15v-100q75 0 124 16.5t96 63.5l256 256q-17 11-33 17.5t-37 6.5q-36 0-57-20t-77-20q-56 0-77 20t-57 20q-21 0-37-6.5T276-504Zm392-336q42 0 71 29.5t29 70.5q0 42-29 71t-71 29q-42 0-71-29t-29-71q0-41 29-70.5t71-29.5Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const component_exchange = {\n name: 'component-exchange',\n content: '<path d=\"m196-120-6-51-8-4q-4-2-11-7l-48 20-44-76 41-31v-21l-41-32 44-76 48 20q5-3 9.5-6t9.5-5l6-51h88l6 51 4 2 4 2q2 1 5 3l6 4 48-20 44 76-41 31v22l219-127-45 79 12 9-158 92-31 54-48-20q-5 3-9.5 6t-9.5 5l-6 51h-88Zm44-220q-25 0-42.5 17.5T180-280q0 25 17.5 42.5T240-220q25 0 42.5-17.5T300-280q0-25-17.5-42.5T240-340Zm156-220-6-51q-2-2-5-3t-5-3v220l-15-26-45 19v-204l-40-70 40-31v-21l-41-32 44-76 48 20q5-3 9.5-6t9.5-5l6-51h88l6 51 8 4q4 2 11 7l48-20 44 76-41 31v21l41 32-44 76-48-20q-5 3-9.5 6t-9.5 5l-6 51h-88Zm44-220q-25 0-42.5 17.5T380-720q0 25 17.5 42.5T440-660q25 0 42.5-17.5T500-720q0-25-17.5-42.5T440-780Zm236 660-6-51-8-4q-4-2-11-7l-48 20-44-76 41-31v-21l-41-31 44-77 48 20q3-2 4-2.5l15-7.5-216-152h48l4-36 195 136h63l6 51 4 2 4 2q2 1 5 3l6 4 48-20 44 76-41 31v21l41 32-44 76-48-20q-5 3-9.5 6t-9.5 5l-6 51h-88Zm44-220q-25 0-42.5 17.5T660-280q0 25 17.5 42.5T720-220q25 0 42.5-17.5T780-280q0-25-17.5-42.5T720-340Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const schedule_send = {\n name: 'schedule-send',\n content: '<path d=\"M120-160v-640l572 240h-12q-35 0-66 8t-60 22L200-680v140l240 60-240 60v140l216-92q-8 23-12 45.5t-4 46.5v2L120-160Zm560 80q-83 0-141.5-58.5T480-280q0-83 58.5-141.5T680-480q83 0 141.5 58.5T880-280q0 83-58.5 141.5T680-80Zm66-106 28-28-74-74v-112h-40v128l86 86ZM200-372v-308 400-92Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const text_snippet = {\n name: 'text-snippet',\n content: '<path d=\"M200-200h560v-367L567-760H200v560Zm0 80q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h400l240 240v400q0 33-23.5 56.5T760-120H200Zm80-160h400v-80H280v80Zm0-160h400v-80H280v80Zm0-160h280v-80H280v80Zm-80 400v-560 560Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const notifications = {\n name: 'notifications',\n content: '<path d=\"M160-200v-80h80v-280q0-83 50-147.5T420-792v-28q0-25 17.5-42.5T480-880q25 0 42.5 17.5T540-820v28q80 20 130 84.5T720-560v280h80v80H160Zm320-300Zm0 420q-33 0-56.5-23.5T400-160h160q0 33-23.5 56.5T480-80ZM320-280h320v-280q0-66-47-113t-113-47q-66 0-113 47t-47 113v280Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const webhook = {\n name: 'webhook',\n content: '<path d=\"M280-120q-83 0-141.5-58.5T80-320q0-73 45.5-127.5T240-516v83q-35 12-57.5 43T160-320q0 50 35 85t85 35q50 0 85-35t35-85v-40h235q8-9 19.5-14.5T680-380q25 0 42.5 17.5T740-320q0 25-17.5 42.5T680-260q-14 0-25.5-5.5T635-280H476q-14 69-68.5 114.5T280-120Zm400 0q-56 0-101.5-27.5T507-220h107q14 10 31 15t35 5q50 0 85-35t35-85q0-50-35-85t-85-35q-20 0-37 5.5T611-418L489-621q-21-4-35-20t-14-39q0-25 17.5-42.5T500-740q25 0 42.5 17.5T560-680v8.5q0 3.5-2 8.5l87 146q8-2 17-2.5t18-.5q83 0 141.5 58.5T880-320q0 83-58.5 141.5T680-120ZM280-260q-25 0-42.5-17.5T220-320q0-22 14-38t34-21l94-156q-29-27-45.5-64.5T300-680q0-83 58.5-141.5T500-880q83 0 141.5 58.5T700-680h-80q0-50-35-85t-85-35q-50 0-85 35t-35 85q0 43 26 75.5t66 41.5L337-338q2 5 2.5 9t.5 9q0 25-17.5 42.5T280-260Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const pages = {\n name: 'pages',\n content: '<path d=\"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm0-560v560-560Zm163 450 117-71 117 71-31-133 104-90-137-11-53-126-53 126-137 11 104 90-31 133Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const insert_link = {\n name: 'insert-link',\n content: '<path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z\"/>',\n viewBox: '0 0 24 24'\n}\n\nexport const add = {\n name: 'add',\n content: '<path d=\"M440-440H200v-80h240v-240h80v240h240v80H520v240h-80v-240Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const customer = {\n name: 'customer',\n content: '<g id=\"info\"/><g id=\"icons\"><g id=\"user\"><ellipse cx=\"12\" cy=\"8\" rx=\"5\" ry=\"6\"/><path d=\"M21.8,19.1c-0.9-1.8-2.6-3.3-4.8-4.2c-0.6-0.2-1.3-0.2-1.8,0.1c-1,0.6-2,0.9-3.2,0.9s-2.2-0.3-3.2-0.9 C8.3,14.8,7.6,14.7,7,15c-2.2,0.9-3.9,2.4-4.8,4.2C1.5,20.5,2.6,22,4.1,22h15.8C21.4,22,22.5,20.5,21.8,19.1z\"/></g></g>',\n viewBox: '0 0 24 24'\n}\n\nexport const computer = {\n name: 'computer',\n content: '<path d=\"M40-120v-80h880v80H40Zm120-120q-33 0-56.5-23.5T80-320v-440q0-33 23.5-56.5T160-840h640q33 0 56.5 23.5T880-760v440q0 33-23.5 56.5T800-240H160Zm0-80h640v-440H160v440Zm0 0v-440 440Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\n// Demo menu icons\nexport const checklist = {\n name: 'checklist',\n content: '<path d=\"M222-200 80-342l56-56 85 85 170-170 56 57-225 226Zm0-320L80-662l56-56 85 85 170-170 56 57-225 226Zm298 240v-80h360v80H520Zm0-320v-80h360v80H520Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const sort = {\n name: 'sort',\n content: '<path d=\"M120-240v-80h240v80H120Zm0-200v-80h480v80H120Zm0-200v-80h720v80H120Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const person_search = {\n name: 'person_search',\n content: '<path d=\"M440-480q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 66-47 113t-113 47Zm0-80q33 0 56.5-23.5T520-640q0-33-23.5-56.5T440-720q-33 0-56.5 23.5T360-640q0 33 23.5 56.5T440-560ZM884-20 756-148q-21 12-45 20t-51 8q-75 0-127.5-52.5T480-300q0-75 52.5-127.5T660-480q75 0 127.5 52.5T840-300q0 27-8 51t-20 45L940-76l-56 56ZM660-200q42 0 71-29t29-71q0-42-29-71t-71-29q-42 0-71 29t-29 71q0 42 29 71t71 29Zm-540 80v-94q0-35 17.5-63.5T184-330q50-27 107-43.5T400-390q-10 20-16.5 41.5T375-300q-75 0-127.5 52.5T195-120H120Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const category = {\n name: 'category',\n content: '<path d=\"m260-520 220-360 220 360H260ZM700-80q-75 0-127.5-52.5T520-260q0-75 52.5-127.5T700-440q75 0 127.5 52.5T880-260q0 75-52.5 127.5T700-80Zm-580-20v-320h320v320H120Zm580-60q42 0 71-29t29-71q0-42-29-71t-71-29q-42 0-71 29t-29 71q0 42 29 71t71 29Zm-500-20h160v-160H200v160Zm202-420h156l-78-126-78 126Zm78 0ZM360-340Zm340 80Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const chat = {\n name: 'chat',\n content: '<path d=\"M240-400h320v-80H240v80Zm0-120h480v-80H240v80Zm0-120h480v-80H240v80ZM80-80v-720q0-33 23.5-56.5T160-880h640q33 0 56.5 23.5T880-800v480q0 33-23.5 56.5T800-240H240L80-80Zm126-240h594v-480H160v525l46-45Zm-46 0v-480 480Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const playlist_add_check = {\n name: 'playlist_add_check',\n content: '<path d=\"M80-400v-80h400v80H80Zm0-160v-80h560v80H80Zm0-160v-80h560v80H80Zm560 560L480-320l56-56 104 103 208-208 56 57-264 264Z\"/>',\n viewBox: '0 -960 960 960'\n}\n\nexport const article = {\n name: 'article',\n content: '<path d=\"M280-280h280v-80H280v80Zm0-160h400v-80H280v80Zm0-160h400v-80H280v80Zm-80 480q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm0-560v560-560Z\"/>',\n viewBox: '0 -960 960 960'\n}\n","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type GetRuntimeEntitiesByTypeQueryVariablesDto = Types.Exact<{\n ckTypeId: Types.Scalars['String']['input'];\n after?: Types.InputMaybe<Types.Scalars['String']['input']>;\n first?: Types.InputMaybe<Types.Scalars['Int']['input']>;\n searchFilter?: Types.InputMaybe<Types.SearchFilterDto>;\n fieldFilters?: Types.InputMaybe<Array<Types.InputMaybe<Types.FieldFilterDto>> | Types.InputMaybe<Types.FieldFilterDto>>;\n sort?: Types.InputMaybe<Array<Types.InputMaybe<Types.SortDto>> | Types.InputMaybe<Types.SortDto>>;\n}>;\n\n\nexport type GetRuntimeEntitiesByTypeQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', totalCount?: number | null, pageInfo: { __typename?: 'PageInfo', endCursor?: string | null, hasNextPage: boolean }, items?: Array<{ __typename?: 'RtEntity', rtId: any, ckTypeId: any, rtWellKnownName?: string | null, rtCreationDateTime?: any | null, rtChangedDateTime?: any | null } | null> | null } | null } | null };\n\nexport const GetRuntimeEntitiesByTypeDocumentDto = gql`\n query getRuntimeEntitiesByType($ckTypeId: String!, $after: String, $first: Int, $searchFilter: SearchFilter, $fieldFilters: [FieldFilter], $sort: [Sort]) {\n runtime {\n runtimeEntities(\n ckId: $ckTypeId\n after: $after\n first: $first\n searchFilter: $searchFilter\n fieldFilter: $fieldFilters\n sortOrder: $sort\n ) {\n totalCount\n pageInfo {\n endCursor\n hasNextPage\n }\n items {\n rtId\n ckTypeId\n rtWellKnownName\n rtCreationDateTime\n rtChangedDateTime\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class GetRuntimeEntitiesByTypeDtoGQL extends Apollo.Query<GetRuntimeEntitiesByTypeQueryDto, GetRuntimeEntitiesByTypeQueryVariablesDto> {\n document = GetRuntimeEntitiesByTypeDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import { Directive, forwardRef, inject } from '@angular/core';\nimport { GraphQL, RtEntityDto } from '@meshmakers/octo-services';\nimport {\n DataSourceBase,\n FetchDataOptions,\n FetchResultTyped,\n ListViewComponent,\n} from '@meshmakers/shared-ui';\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { OctoGraphQlDataSource } from '../../data-sources/octo-graph-ql-data-source';\nimport { GetRuntimeEntitiesByTypeDtoGQL } from '../../graphQL/getRuntimeEntitiesByType';\n\n@Directive({\n selector: '[mmCkTypeEntitiesDataSource]',\n exportAs: 'mmCkTypeEntitiesDataSource',\n standalone: true,\n providers: [\n {\n provide: DataSourceBase,\n useExisting: forwardRef(() => CkTypeEntitiesDataSourceDirective),\n },\n ],\n})\nexport class CkTypeEntitiesDataSourceDirective extends OctoGraphQlDataSource<RtEntityDto> {\n private readonly getRuntimeEntitiesGQL = inject(\n GetRuntimeEntitiesByTypeDtoGQL,\n );\n private ckTypeId: string | null = null;\n\n constructor() {\n const listViewComponent = inject(ListViewComponent);\n super(listViewComponent);\n console.debug('CkTypeEntitiesDataSource: Constructor called');\n }\n\n public setRtCkTypeId(ckTypeId: string): void {\n console.debug('CkTypeEntitiesDataSource: Setting CK Type ID:', ckTypeId);\n this.ckTypeId = ckTypeId;\n // Trigger a refresh to tell the ListViewComponent to fetch data again\n this.fetchAgain();\n }\n\n public fetchData(\n queryOptions: FetchDataOptions,\n ): Observable<FetchResultTyped<RtEntityDto> | null> {\n console.debug(\n 'CkTypeEntitiesDataSource: fetchData called with ckTypeId:',\n this.ckTypeId,\n );\n\n if (!this.ckTypeId) {\n // Return empty result if no type ID is set\n console.debug(\n 'CkTypeEntitiesDataSource: No CK Type ID set, returning empty result',\n );\n return of(new FetchResultTyped<RtEntityDto>([], 0));\n }\n\n const sort = this.getSortDefinitions(queryOptions.state);\n const fieldFilters = this.getFieldFilterDefinitions(queryOptions.state);\n\n const variables = {\n ckTypeId: this.ckTypeId,\n first: queryOptions.state.take,\n after: GraphQL.offsetToCursor(queryOptions.state.skip ?? 0),\n sort: sort,\n fieldFilters: fieldFilters,\n };\n\n console.debug(\n 'CkTypeEntitiesDataSource: Making GraphQL request with variables:',\n variables,\n );\n\n return this.getRuntimeEntitiesGQL\n .fetch({\n variables: variables,\n fetchPolicy: queryOptions.forceRefresh ? 'network-only' : 'cache-first',\n })\n .pipe(\n map((result) => {\n console.debug('CkTypeEntitiesDataSource: GraphQL response:', result);\n const items = result.data?.runtime?.runtimeEntities?.items ?? [];\n const totalCount =\n result.data?.runtime?.runtimeEntities?.totalCount ?? 0;\n\n // Transform and filter out null items\n const transformedItems = items\n .filter((item): item is NonNullable<typeof item> => item != null)\n .map((item) => ({\n rtId: item.rtId || '',\n ckTypeId: item.ckTypeId || this.ckTypeId || '',\n rtWellKnownName: item.rtWellKnownName || null,\n rtCreationDateTime: item.rtCreationDateTime || null,\n rtChangedDateTime: item.rtChangedDateTime || null,\n })) as RtEntityDto[];\n\n console.debug(\n 'CkTypeEntitiesDataSource: Returning',\n transformedItems.length,\n 'items',\n );\n\n return new FetchResultTyped<RtEntityDto>(\n transformedItems,\n totalCount,\n );\n }),\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TreeItemDataTyped } from '@meshmakers/shared-services';\nimport { CkModelDto, CkTypeDto, RtEntityDto } from '../../graphQL/globalTypes';\n\n// Extended type to handle both Runtime Entities and CK Models/Types\ntype BrowserItem =\n | RtEntityDto\n | CkModelDto\n | CkTypeDto\n | { isCkModelsRoot?: boolean; ckModelId?: string };\n\nexport interface BrowserState {\n selectedItemId: string;\n selectedItemText: string;\n selectedItemData: BrowserItem;\n parentPath: TreeItemDataTyped<BrowserItem>[]; // Full path from root to parent (deprecated)\n expandedKeys: string[]; // IDs of expanded nodes (parent path)\n timestamp: number;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RuntimeBrowserStateService {\n private currentState: BrowserState | null = null;\n\n /**\n * Save the current browser state including selected item information and parent path\n * @deprecated Use saveStateWithKeys instead for better performance\n */\n public saveState(\n selectedItem: TreeItemDataTyped<BrowserItem> | null,\n parentPath?: TreeItemDataTyped<BrowserItem>[],\n ): void {\n if (!selectedItem) {\n this.currentState = null;\n return;\n }\n\n this.currentState = {\n selectedItemId: this.getItemId(selectedItem),\n selectedItemText: selectedItem.text,\n selectedItemData: selectedItem.item,\n parentPath: parentPath || [],\n expandedKeys: [],\n timestamp: Date.now(),\n };\n\n console.debug('Runtime Browser State saved:', this.currentState);\n console.debug(\n 'Parent path saved:',\n (parentPath || []).map((p) => p.text),\n );\n }\n\n /**\n * Save the current browser state using expanded keys from the tree.\n * This is more efficient as it doesn't require recursive tree traversal.\n */\n public saveStateWithKeys(\n selectedItem: TreeItemDataTyped<BrowserItem> | null,\n expandedKeys: string[],\n ): void {\n if (!selectedItem) {\n this.currentState = null;\n return;\n }\n\n this.currentState = {\n selectedItemId: this.getItemId(selectedItem),\n selectedItemText: selectedItem.text,\n selectedItemData: selectedItem.item,\n parentPath: [], // Not used with this method\n expandedKeys: expandedKeys,\n timestamp: Date.now(),\n };\n\n console.debug(\n 'Runtime Browser State saved with keys:',\n this.currentState.selectedItemId,\n );\n console.debug('Expanded keys saved:', expandedKeys);\n }\n\n /**\n * Get the saved browser state\n */\n public getState(): BrowserState | null {\n // Only return state if it's less than 5 minutes old\n if (\n this.currentState &&\n Date.now() - this.currentState.timestamp < 300000\n ) {\n return this.currentState;\n }\n\n // Clear expired state\n if (this.currentState) {\n this.currentState = null;\n }\n\n return null;\n }\n\n /**\n * Clear the saved state\n */\n public clearState(): void {\n this.currentState = null;\n }\n\n /**\n * Check if the given item matches the saved state\n */\n public isItemMatching(item: TreeItemDataTyped<BrowserItem>): boolean {\n const state = this.getState();\n if (!state) return false;\n\n return this.getItemId(item) === state.selectedItemId;\n }\n\n /**\n * Get unique identifier for a tree item\n */\n private getItemId(item: TreeItemDataTyped<BrowserItem>): string {\n const itemData = item.item;\n\n // Runtime entity\n if ('rtId' in itemData && 'ckTypeId' in itemData) {\n return `${String(itemData.ckTypeId)}@${String(itemData.rtId)}`;\n }\n\n // CK Model\n if (\n 'id' in itemData &&\n !('rtId' in itemData) &&\n !('ckTypeId' in itemData)\n ) {\n return `ck-model:${String(itemData.id)}`;\n }\n\n // CK Type\n if (\n 'ckTypeId' in itemData &&\n !('rtId' in itemData) &&\n !('id' in itemData)\n ) {\n return `ck-type:${String(itemData.ckTypeId)}`;\n }\n\n // CK Models root\n if ('isCkModelsRoot' in itemData && itemData.isCkModelsRoot) {\n return 'ck-models-root';\n }\n\n return item.text || 'unknown';\n }\n}\n","import { Injectable } from '@angular/core';\nimport { RtEntityDto } from '@meshmakers/octo-services';\n\n/**\n * Performs helpful Octomesh Types operations, like checks, comparisons etc.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class TypeHelperService {\n /**\n * Checks if given item is runtime entity.\n *\n * @param item Item to check.\n * @returns True for runtime entity, false otherwise.\n */\n public isRuntimeEntity(item: unknown): item is RtEntityDto {\n return !!(item\n && (item as RtEntityDto).rtId\n && (item as RtEntityDto).ckTypeId);\n }\n}\n","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type CreateEntitiesMutationVariablesDto = Types.Exact<{\n entities: Array<Types.InputMaybe<Types.RtEntityInputDto>> | Types.InputMaybe<Types.RtEntityInputDto>;\n}>;\n\n\nexport type CreateEntitiesMutationDto = { __typename?: 'OctoMutation', runtime?: { __typename?: 'Runtime', runtimeEntities?: { __typename?: 'RtEntityMutations', create?: Array<{ __typename?: 'RtEntity', rtId: any } | null> | null } | null } | null };\n\nexport const CreateEntitiesDocumentDto = gql`\n mutation CreateEntities($entities: [RtEntityInput]!) {\n runtime {\n runtimeEntities {\n create(entities: $entities) {\n rtId\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class CreateEntitiesDtoGQL extends Apollo.Mutation<CreateEntitiesMutationDto, CreateEntitiesMutationVariablesDto> {\n document = CreateEntitiesDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import { computed, Injectable, signal } from \"@angular/core\";\n\n/**\n * Coordinates loading state across attributes-group (and nested RECORD/RECORD_ARRAY).\n * Used by create-editor and update-editor to enable Save only when structure is ready and form is valid/dirty.\n * Singleton: call reset() when entering create or edit mode so stale state from the other mode does not affect the Save button.\n */\n@Injectable({ providedIn: \"root\" })\nexport class AttributeCoordinatorService {\n private loadingCount = signal(0);\n private structureReady = signal(false);\n\n /** True when all attribute resources have finished loading and the form structure has been built. */\n isFullyLoaded = computed(\n () => this.loadingCount() === 0 && this.structureReady(),\n );\n\n /** Clears loading state. Call when entering create or edit mode so the coordinator does not keep state from the previous mode. */\n reset(): void {\n this.loadingCount.set(0);\n this.structureReady.set(false);\n }\n\n startLoading() {\n this.structureReady.set(false);\n this.loadingCount.update((c) => c + 1);\n }\n\n stopLoading() {\n this.loadingCount.update((c) => Math.max(0, c - 1));\n }\n\n markStructureAsReady() {\n this.structureReady.set(true);\n }\n}\n","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type GetCkAttributesDetailedQueryVariablesDto = Types.Exact<{\n ckId: Types.Scalars['String']['input'];\n}>;\n\n\nexport type GetCkAttributesDetailedQueryDto = { __typename?: 'OctoQuery', constructionKit?: { __typename?: 'ConstructionKitQuery', types?: { __typename?: 'CkTypeDtoConnection', items?: Array<{ __typename?: 'CkType', ckTypeId: { __typename?: 'CkTypeId', fullName: string }, attributes?: { __typename?: 'CkTypeAttributeDtoConnection', items?: Array<{ __typename?: 'CkTypeAttribute', attributeName: string, attributeValueType: Types.AttributeValueTypeDto, isOptional: boolean, autoCompleteValues?: Array<string | null> | null, ckAttributeId: { __typename?: 'CkAttributeId', fullName: string }, attribute?: { __typename?: 'CkAttribute', defaultValues?: Array<any | null> | null, ckRecord?: { __typename?: 'CkRecord', ckRecordId: { __typename?: 'CkRecordId', fullName: string } } | null, ckEnum?: { __typename?: 'CkEnum', ckEnumId: { __typename?: 'CkEnumId', fullName: string }, values: Array<{ __typename?: 'CkEnumValue', key?: number | null, name?: string | null } | null> } | null } | null } | null> | null } | null } | null> | null } | null } | null };\n\nexport const GetCkAttributesDetailedDocumentDto = gql`\n query getCkAttributesDetailed($ckId: String!) {\n constructionKit {\n types(ckId: $ckId) {\n items {\n ckTypeId {\n fullName\n }\n attributes {\n items {\n attributeName\n attributeValueType\n isOptional\n autoCompleteValues\n ckAttributeId {\n fullName\n }\n attribute {\n ckRecord {\n ckRecordId {\n fullName\n }\n }\n ckEnum {\n ckEnumId {\n fullName\n }\n values {\n key\n name\n }\n }\n defaultValues\n }\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class GetCkAttributesDetailedDtoGQL extends Apollo.Query<GetCkAttributesDetailedQueryDto, GetCkAttributesDetailedQueryVariablesDto> {\n document = GetCkAttributesDetailedDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type GetCkRecordDetailedQueryVariablesDto = Types.Exact<{\n ckId?: Types.InputMaybe<Types.Scalars['String']['input']>;\n}>;\n\n\nexport type GetCkRecordDetailedQueryDto = { __typename?: 'OctoQuery', constructionKit?: { __typename?: 'ConstructionKitQuery', records?: { __typename?: 'CkRecordDtoConnection', totalCount?: number | null, items?: Array<{ __typename?: 'CkRecord', isAbstract: boolean, ckRecordId: { __typename?: 'CkRecordId', fullName: string }, attributes?: { __typename?: 'CkTypeAttributeDtoConnection', items?: Array<{ __typename?: 'CkTypeAttribute', isOptional: boolean, attributeName: string, attributeValueType: Types.AttributeValueTypeDto, ckAttributeId: { __typename?: 'CkAttributeId', fullName: string }, attribute?: { __typename?: 'CkAttribute', defaultValues?: Array<any | null> | null, ckRecord?: { __typename?: 'CkRecord', ckRecordId: { __typename?: 'CkRecordId', fullName: string } } | null, ckEnum?: { __typename?: 'CkEnum', ckEnumId: { __typename?: 'CkEnumId', fullName: string }, values: Array<{ __typename?: 'CkEnumValue', key?: number | null, name?: string | null } | null> } | null } | null } | null> | null } | null } | null> | null } | null } | null };\n\nexport const GetCkRecordDetailedDocumentDto = gql`\n query getCkRecordDetailed($ckId: String) {\n constructionKit {\n records(ckId: $ckId) {\n totalCount\n items {\n ckRecordId {\n fullName\n }\n isAbstract\n attributes {\n items {\n ckAttributeId {\n fullName\n }\n isOptional\n attributeName\n attributeValueType\n attribute {\n ckRecord {\n ckRecordId {\n fullName\n }\n }\n ckEnum {\n ckEnumId {\n fullName\n }\n values {\n key\n name\n }\n }\n defaultValues\n }\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class GetCkRecordDetailedDtoGQL extends Apollo.Query<GetCkRecordDetailedQueryDto, GetCkRecordDetailedQueryVariablesDto> {\n document = GetCkRecordDetailedDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import { Injectable } from \"@angular/core\";\n\n@Injectable({ providedIn: \"root\" })\nexport class AttributeRecognitionService {\n isString(attributeValueType: string): boolean {\n return attributeValueType === \"STRING\";\n }\n\n isNumber(attributeValueType: string): boolean {\n return [\"INT\", \"INTEGER\", \"INTEGER_64\", \"DOUBLE\", \"NUMBER\", \"LONG\"].includes(\n attributeValueType,\n );\n }\n\n isEnum(attributeValueType: string): boolean {\n return attributeValueType === \"ENUM\";\n }\n\n isRecord(attributeValueType: string): boolean {\n return attributeValueType === \"RECORD\";\n }\n\n isArray(attributeValueType: string): boolean {\n return (\n attributeValueType.endsWith(\"_ARRAY\") &&\n attributeValueType !== \"RECORD_ARRAY\"\n );\n }\n\n isDate(attributeValueType: string): boolean {\n return [\"DATE\", \"DATE_TIME\", \"DATE_TIME_OFFSET\"].includes(\n attributeValueType,\n );\n }\n\n isTime(attributeValueType: string): boolean {\n return [\"TIME_SPAN\"].includes(attributeValueType);\n }\n\n isGeoSpatialPoint(attributeValueType: string): boolean {\n return [\"GEOSPATIAL_POINT\"].includes(attributeValueType);\n }\n\n isBinary(attributeValueType: string): boolean {\n return [\"BINARY\", \"BINARY_LINKED\"].includes(attributeValueType);\n }\n\n isRecordArray(attributeValueType: string): boolean {\n return attributeValueType === \"RECORD_ARRAY\";\n }\n\n isBoolean(attributeValueType: string): boolean {\n return attributeValueType === \"BOOLEAN\";\n }\n\n isIntArray(attributeValueType: string): boolean {\n return [\"INT_ARRAY\", \"INTEGER_ARRAY\"].includes(attributeValueType);\n }\n\n isStringArray(attributeValueType: string): boolean {\n return attributeValueType === \"STRING_ARRAY\";\n }\n}\n","/**\n * Shared utilities for attribute mapping (AttributeMapperService).\n * Provides convertGeospatialPointToGeoJSON, fileToByteArray, getFileFromValue, base64ToByteArray.\n */\n\nfunction isRecordValue(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Converts a GeoJSON-like point control ({ longitude, latitude } or { type, longitude, latitude })\n * to GraphQL-friendly GeoJSON Point shape.\n */\nexport function convertGeospatialPointToGeoJSON(point: unknown): unknown {\n if (!isRecordValue(point)) {\n return point;\n }\n if (\"longitude\" in point && \"latitude\" in point) {\n return {\n type: \"Point\",\n coordinates: [point[\"longitude\"], point[\"latitude\"]],\n };\n }\n if (point[\"type\"] === \"Point\" && \"longitude\" in point && \"latitude\" in point) {\n return {\n type: \"Point\",\n coordinates: [point[\"longitude\"], point[\"latitude\"]],\n };\n }\n return point;\n}\n\n/**\n * Converts a File into a byte array (number[]).\n */\nexport async function fileToByteArray(file: File): Promise<number[]> {\n const arrayBuffer = await file.arrayBuffer();\n return Array.from(new Uint8Array(arrayBuffer));\n}\n\n/**\n * Normalizes File values from different control shapes (File or [File]).\n */\nexport function getFileFromValue(value: unknown): File | null {\n if (Array.isArray(value) && value.length > 0 && value[0] instanceof File) {\n return value[0];\n }\n if (value instanceof File) {\n return value;\n }\n return null;\n}\n\n/**\n * Converts a base64 string into a byte array (number[]).\n */\nexport function base64ToByteArray(base64: string): number[] {\n const binaryString = atob(base64);\n return Array.from(binaryString, (char) => char.charCodeAt(0));\n}\n","import { inject, Injectable } from \"@angular/core\";\nimport { defer, from, Observable } from \"rxjs\";\nimport { Attribute } from \"../models/attribute\";\nimport {\n AttributeEnumOption,\n CkAttributeMetadata,\n} from \"../models/attribute-metadata\";\nimport { AttributeRecognitionService } from \"./attribute-recognition.service\";\nimport {\n base64ToByteArray,\n convertGeospatialPointToGeoJSON,\n fileToByteArray,\n getFileFromValue,\n} from \"./attribute-mapper-utils\";\n\nexport interface RtEntityAttributeInput {\n attributeName: string;\n value: unknown;\n}\n\n/** Property set on synthetic BINARY_LINKED File objects (reference/mockup without content). Used by UI to show a preview indicator. */\nexport const BINARY_LINKED_REFERENCE_FLAG = \"__isBinaryLinkedReference\";\n\n/** Property set on BINARY File objects restored from base64 (content is real; filename is a placeholder). Used by UI to show a reference hint. */\nexport const BINARY_REFERENCE_FLAG = \"__isBinaryFromBase64\";\n\n/**\n * Maps between form model and GraphQL API: builds form attribute definitions from CK metadata and initial/default\n * values, and maps form values to create/update mutation payloads (including RECORD, BINARY, GEOSPATIAL_POINT, etc.).\n */\n@Injectable({\n providedIn: \"root\",\n})\nexport class AttributeMapperService {\n private recognition = inject(AttributeRecognitionService);\n private isRecordValue(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n }\n private isCkAttributeMetadata(\n attr: CkAttributeMetadata | Attribute,\n ): attr is CkAttributeMetadata {\n return \"attribute\" in attr || \"ckAttributeId\" in attr;\n }\n\n // ─── Form ← API: attribute definition + initial/default value ─────────────────────\n\n /**\n * Builds a form attribute definition with a configured control.\n * Value priority: 1. Initial (entity data), 2. Default (CK defaultValues), 3. Empty (placeholder).\n */\n mapToFormAttribute(\n attr: CkAttributeMetadata,\n rawInitialValue?: unknown,\n ): Attribute {\n const attributeName = attr?.attributeName ?? \"\";\n const type = attr?.attributeValueType ?? \"\";\n\n let parsedValue: unknown;\n const hasInitial = rawInitialValue !== undefined && rawInitialValue !== null;\n if (hasInitial) {\n parsedValue = this.parseInitialValue(type, rawInitialValue, attr);\n } else {\n const rawDefault = attr?.attribute?.defaultValues?.[0];\n if (rawDefault !== undefined && rawDefault !== null) {\n parsedValue = this.parseDefaultValue(type, rawDefault, attr);\n } else {\n parsedValue = this.getDefaultPlaceholder(type);\n }\n }\n\n const attribute: Attribute = {\n id: this.getId(attr),\n attributeName: attributeName,\n attributeValueType: type,\n isOptional: attr?.isOptional ?? false,\n enumOptions: this.getEnumOptions(attr),\n value: parsedValue,\n };\n\n return attribute;\n }\n\n /**\n * Converts a raw initial value (from entity) to form value for an existing attribute definition.\n * Use this when attributes were already mapped (e.g. from data service) and only the value needs to be parsed.\n * Avoids rebuilding the full attribute and duplicate mapping overhead.\n */\n getFormValueFromRawInitial(\n attrMetadata: Attribute,\n rawInitialValue: unknown,\n ): unknown {\n return this.parseInitialValue(\n attrMetadata.attributeValueType,\n rawInitialValue,\n attrMetadata,\n );\n }\n\n // ─── Form → GraphQL: mutation payload (create / update) ────────────────────────────\n\n /**\n * Maps form values to GraphQL format (Observable). Use this in editors for better composition,\n * cancellation and optional retry/timeout. Emits once with the mapped attributes array.\n */\n mapFormValueToGraphQLAttributes$(\n formValue: unknown,\n attributesMetadata?: Attribute[],\n ): Observable<RtEntityAttributeInput[]> {\n return defer(() =>\n from(this.mapFormValueToGraphQLAttributes(formValue, attributesMetadata)),\n );\n }\n\n /**\n * Maps form values to GraphQL format for createEntities / updateRuntimeEntities.\n * Record and RecordArray are passed as nested objects/arrays. BINARY_LINKED is included only when value is a File.\n */\n async mapFormValueToGraphQLAttributes(\n formValue: unknown,\n attributesMetadata?: Attribute[],\n ): Promise<RtEntityAttributeInput[]> {\n const result: RtEntityAttributeInput[] = [];\n\n if (!this.isRecordValue(formValue)) {\n return result;\n }\n\n const metadataMap = new Map<string, Attribute>();\n if (attributesMetadata) {\n attributesMetadata.forEach((attr) => {\n metadataMap.set(attr.attributeName, attr);\n });\n }\n\n for (const [key, value] of Object.entries(formValue)) {\n if (!key) {\n continue;\n }\n const metadata = metadataMap.get(key);\n\n if (metadata?.attributeValueType === \"BINARY_LINKED\") {\n const processedValue = await this.processAttributeValue(\n value,\n metadata?.attributeValueType,\n );\n if (processedValue instanceof File) {\n // Skip synthetic reference/preview files — they are placeholders created by\n // parseBinaryLinkedForForm and must not be re-uploaded (would overwrite real data with zeros).\n if (\n (processedValue as unknown as Record<string, unknown>)[\n BINARY_LINKED_REFERENCE_FLAG\n ]\n ) {\n continue;\n }\n result.push({ attributeName: key, value: processedValue });\n } else {\n // Value was cleared (null / empty array) — send null so the backend removes the linked binary.\n result.push({ attributeName: key, value: null });\n }\n continue;\n }\n\n if (value === null || value === undefined) {\n if (metadata?.isOptional) {\n result.push({ attributeName: key, value: null });\n }\n continue;\n }\n\n if (\n metadata?.attributeValueType === \"BINARY\" &&\n this.isOptionalEmptyBinary(metadata, value)\n ) {\n result.push({ attributeName: key, value: null });\n continue;\n }\n\n // Skip empty RECORD (empty object) and RECORD_ARRAY (empty array) unless optional (then send null)\n if (\n metadata?.attributeValueType === \"RECORD\" &&\n this.isValueEmpty(value)\n ) {\n if (metadata?.isOptional) {\n result.push({ attributeName: key, value: null });\n }\n continue;\n }\n if (\n metadata?.attributeValueType === \"RECORD_ARRAY\" &&\n Array.isArray(value) &&\n value.length === 0\n ) {\n if (metadata?.isOptional) {\n result.push({ attributeName: key, value: null });\n }\n continue;\n }\n\n if (metadata?.isOptional && this.isOptionalEmptyScalarOrArray(value, metadata)) {\n result.push({ attributeName: key, value: null });\n continue;\n }\n\n const processedValue = await this.processAttributeValue(\n value,\n metadata?.attributeValueType,\n );\n\n result.push({\n attributeName: key,\n value: processedValue,\n });\n }\n\n return result;\n }\n\n /** Processes a single attribute value for mutation payload (type-specific conversion). */\n private async processAttributeValue(\n value: unknown,\n attributeType?: string,\n ): Promise<unknown> {\n switch (attributeType) {\n case \"RECORD\":\n return value;\n\n case \"RECORD_ARRAY\":\n return value;\n\n case \"GEOSPATIAL_POINT\":\n return convertGeospatialPointToGeoJSON(value);\n\n case \"TIME_SPAN\":\n return this.convertTimeSpanToSeconds(value);\n\n case \"BINARY\": {\n // MeshMakers expects byte[] (array of numbers). Accept File, ArrayBuffer, base64 string, or byte[].\n return await this.convertBinaryToByteArray(value);\n }\n\n case \"BINARY_LINKED\": {\n // MeshMakers: prefer File for multipart, but also accept base64 or byte[]\n if (value instanceof File) {\n return value;\n }\n if (Array.isArray(value) && value[0] instanceof File) {\n return value[0];\n }\n if (typeof value === \"string\") {\n // base64 string\n return base64ToByteArray(value);\n }\n if (value instanceof ArrayBuffer) {\n return this.arrayBufferToByteArray(value);\n }\n if (Array.isArray(value) && typeof value[0] === \"number\") {\n return value;\n }\n return null;\n }\n case \"INTEGER_ARRAY\":\n return this.normalizePrimitiveArray(value, \"number\");\n case \"STRING_ARRAY\":\n return this.normalizePrimitiveArray(value, \"string\");\n case \"DATE_TIME\":\n case \"DATE_TIME_OFFSET\":\n if (value instanceof Date) {\n if (isNaN(value.getTime())) {\n return null;\n }\n return value.toISOString();\n }\n return value;\n\n default:\n return value;\n }\n }\n\n // ─── Scalar / array normalization ────────────────────────────────────────────────\n\n /** Normalizes form value for INTEGER_ARRAY/STRING_ARRAY: primitives[] or { key }[] → primitive[] for GraphQL. */\n private normalizePrimitiveArray(\n value: unknown,\n mode: \"number\" | \"string\",\n ): number[] | string[] | null {\n if (!Array.isArray(value) || value.length === 0) return null;\n if (mode === \"number\") {\n return value.map((v) => {\n if (this.isRecordValue(v) && \"key\" in v) {\n return Number(v[\"key\"]);\n }\n return Number(v);\n });\n }\n return value.map((v) => {\n if (this.isRecordValue(v) && \"key\" in v) {\n return String(v[\"key\"]);\n }\n return String(v);\n });\n }\n\n private arrayBufferToByteArray(buffer: ArrayBuffer): number[] {\n return Array.from(new Uint8Array(buffer));\n }\n\n // ─── Geo / time / binary helpers ──────────────────────────────────────────────────\n\n /** Normalizes API/GeoJSON value to form shape { longitude, latitude } for edit mode. */\n private normalizeGeospatialPointForForm(value: unknown): {\n longitude: number | null;\n latitude: number | null;\n } {\n if (value == null) return { longitude: null, latitude: null };\n if (typeof value === \"string\") {\n try {\n value = JSON.parse(value) as unknown;\n } catch {\n return { longitude: null, latitude: null };\n }\n }\n if (!this.isRecordValue(value)) {\n return { longitude: null, latitude: null };\n }\n if (\"longitude\" in value && \"latitude\" in value) {\n return {\n longitude:\n value[\"longitude\"] != null ? Number(value[\"longitude\"]) : null,\n latitude:\n value[\"latitude\"] != null ? Number(value[\"latitude\"]) : null,\n };\n }\n if (\n Array.isArray(value[\"coordinates\"]) &&\n value[\"coordinates\"].length >= 2\n ) {\n return {\n longitude: Number(value[\"coordinates\"][0]),\n latitude: Number(value[\"coordinates\"][1]),\n };\n }\n return { longitude: null, latitude: null };\n }\n\n /**\n * Converts a TimeSpan control value to seconds.\n */\n private convertTimeSpanToSeconds(value: unknown): number {\n if (value instanceof Date) {\n const hours = value.getHours();\n const minutes = value.getMinutes();\n const seconds = value.getSeconds();\n return hours * 3600 + minutes * 60 + seconds;\n }\n if (typeof value === \"number\") {\n return value;\n }\n return 0;\n }\n\n // --- BINARY helpers for MeshMakers ---\n\n /**\n * Decodes a base64 string into a File with real content, size and optional name/type.\n * Returns null if decoding fails (e.g. invalid base64).\n * Note: A base64 string carries only the raw bytes; it does not contain filename or other metadata.\n * The filename (and contentType) must be supplied by the caller when known (e.g. from a BINARY_LINKED payload); for plain BINARY we use a default name.\n */\n private base64ToFile(\n base64: string,\n filename = \"file.bin\",\n contentType = \"application/octet-stream\",\n ): File | null {\n try {\n const bytes = base64ToByteArray(base64);\n const uint8 = new Uint8Array(bytes);\n const blob = new Blob([uint8], { type: contentType });\n return new File([blob], filename, { type: contentType });\n } catch {\n return null;\n }\n }\n\n /**\n * Converts supported binary representations into byte arrays.\n */\n private async convertBinaryToByteArray(\n value: unknown,\n ): Promise<number[] | unknown> {\n if (\n Array.isArray(value) &&\n (value.length === 0 || typeof value[0] === \"number\")\n ) {\n return value as number[];\n }\n\n const fileValue = getFileFromValue(value);\n if (fileValue) {\n try {\n return await fileToByteArray(fileValue);\n } catch (e) {\n console.error(\"Error converting File to byte array:\", e);\n return value;\n }\n }\n\n if (typeof value === \"string\") {\n try {\n return base64ToByteArray(value);\n } catch (e) {\n console.error(\"Error converting Base64 to byte array:\", e);\n return value;\n }\n }\n\n return value;\n }\n\n // ─── Type recognition (single responsibility: attribute type checks) ─────────────\n\n private isEnum(attr: Pick<Attribute, \"attributeValueType\"> | CkAttributeMetadata): boolean {\n return attr.attributeValueType === \"ENUM\";\n }\n\n /**\n * Checks whether the attribute is a record type.\n */\n private isRecord(attr: Pick<Attribute, \"attributeValueType\"> | CkAttributeMetadata): boolean {\n return attr.attributeValueType === \"RECORD\";\n }\n\n /**\n * Checks whether the attribute is a record array type.\n */\n private isRecordArray(\n attr: Pick<Attribute, \"attributeValueType\"> | CkAttributeMetadata,\n ): boolean {\n return attr.attributeValueType === \"RECORD_ARRAY\";\n }\n\n /**\n * Checks whether the attribute is a geospatial point type.\n */\n private isGeospatialPoint(\n attr: Pick<Attribute, \"attributeValueType\"> | CkAttributeMetadata,\n ): boolean {\n return attr.attributeValueType === \"GEOSPATIAL_POINT\";\n }\n\n /** True when optional scalar/array is \"cleared\" (send null to remove value). */\n private isOptionalEmptyScalarOrArray(\n value: unknown,\n metadata: Attribute,\n ): boolean {\n if (value === \"\" || value == null) return true;\n const t = metadata?.attributeValueType;\n if (this.recognition.isArray(t) && Array.isArray(value) && value.length === 0)\n return true;\n return false;\n }\n\n private isOptionalEmptyBinary(metadata: Attribute, value: unknown): boolean {\n if (!metadata?.isOptional) return false;\n if (value == null) return true;\n if (Array.isArray(value) && value.length === 0) return true;\n if (Array.isArray(value) && value.length === 1 && value[0] instanceof File)\n return false;\n return false;\n }\n\n /**\n * Checks if a RECORD value is empty (empty object or object with all empty values).\n */\n private isValueEmpty(value: unknown): boolean {\n if (!this.isRecordValue(value)) {\n return true;\n }\n\n const keys = Object.keys(value);\n if (keys.length === 0) {\n return true;\n }\n\n // Check if all values are empty\n return keys.every((key) => {\n const val = value[key];\n return (\n val === null ||\n val === undefined ||\n val === \"\" ||\n (this.isRecordValue(val) && Object.keys(val).length === 0) ||\n (Array.isArray(val) && val.length === 0)\n );\n });\n }\n\n // ─── API → Form: parsing initial / default values ──────────────────────────────────\n\n /** Parses raw API value into form-friendly value for a given attribute type. */\n private parseInitialValue(\n type: string,\n value: unknown,\n attrMetadata: CkAttributeMetadata | Attribute,\n ): unknown {\n // If value is null/undefined, return a safe placeholder for the type\n // 1. If no value, provide a safe default (Empty State)\n if (value === undefined || value === null) {\n return this.getDefaultPlaceholder(type);\n }\n\n // 2. Handle RECORD (single attribute group)\n if (this.recognition.isRecord(type)) {\n // OctoMesh typically returns this in the 'attributes' field\n // If value is already an array, return it. If object with attributes field, extract it.\n if (Array.isArray(value)) return value;\n if (this.isRecordValue(value)) {\n const attrs = value[\"attributes\"];\n return Array.isArray(attrs) ? attrs : [];\n }\n return [];\n }\n\n // 3. Handle RECORD_ARRAY (list of attribute groups)\n if (this.recognition.isRecordArray(type)) {\n // Expect an array of records. Map each record to its list of attributes.\n if (Array.isArray(value)) {\n return value.map((item) => {\n if (Array.isArray(item)) return item; // Already parsed\n if (this.isRecordValue(item)) {\n const attrs = item[\"attributes\"];\n return Array.isArray(attrs) ? attrs : [];\n }\n return [];\n });\n }\n return [];\n }\n\n // 4. Handle ENUM (key for displaying names)\n if (this.recognition.isEnum(type)) {\n const options = this.getEnumOptions(attrMetadata);\n const found = options.find(\n (opt) => opt.name === value || opt.key === value,\n );\n return found ? found.key : value;\n }\n\n if (this.recognition.isArray(type)) {\n return this.parseArrayType(type, value);\n }\n\n if (this.recognition.isTime(type)) {\n return this.parseTimeSpanForForm(value);\n }\n if (this.recognition.isDate(type)) {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n value instanceof Date\n ) {\n const date = new Date(value);\n return isNaN(date.getTime()) ? null : date;\n }\n return null;\n }\n\n if (this.recognition.isGeoSpatialPoint(type)) {\n return this.normalizeGeospatialPointForForm(value);\n }\n\n if (type === \"BINARY\") {\n return this.parseBinaryForForm(value);\n }\n if (type === \"BINARY_LINKED\") {\n return this.parseBinaryLinkedForForm(value);\n }\n\n return value;\n }\n\n /**\n * Parses API TimeSpan string (e.g. \"44682.00:00:00\" = days.hh:mm:ss) to a Date for Kendo TimePicker.\n * TimePicker shows time of day; we use totalSeconds % 86400 so duration is shown as time.\n */\n private parseTimeSpanForForm(value: unknown): Date | null {\n if (value == null) return null;\n if (value instanceof Date) return isNaN(value.getTime()) ? null : value;\n if (typeof value === \"number\") {\n const d = new Date(0);\n d.setUTCHours(0, 0, 0, 0);\n d.setUTCSeconds(value % 86400);\n return d;\n }\n const str = String(value).trim();\n if (!str) return null;\n const totalSeconds = this.parseTimeSpanStringToSeconds(str);\n if (totalSeconds === null) return null;\n const d = new Date(0);\n d.setUTCHours(0, 0, 0, 0);\n d.setUTCSeconds(totalSeconds % 86400);\n return d;\n }\n\n /**\n * Parses .NET-style TimeSpan string \"days.hh:mm:ss\" or \"hh:mm:ss\" to total seconds.\n * When a dot is present, the segment before the dot is always days (e.g. \"44682.00:00:00\" = 44682 days).\n */\n private parseTimeSpanStringToSeconds(s: string): number | null {\n const parts = s.split(\".\");\n let timePart = parts[0] ?? \"\";\n let days = 0;\n if (parts.length >= 2) {\n const firstNum = parseInt(parts[0], 10);\n if (!Number.isNaN(firstNum)) {\n days = firstNum;\n }\n timePart = parts[1] ?? \"00:00:00\";\n }\n const timeMatch = timePart.match(\n /^(\\d+):(\\d+):(\\d+)(?:\\.(\\d+))?$/,\n );\n if (!timeMatch) {\n const asNumber = parseFloat(s);\n if (!Number.isNaN(asNumber)) return Math.floor(asNumber);\n return null;\n }\n const hours = parseInt(timeMatch[1], 10) || 0;\n const minutes = parseInt(timeMatch[2], 10) || 0;\n const seconds = parseInt(timeMatch[3], 10) || 0;\n return days * 86400 + hours * 3600 + minutes * 60 + seconds;\n }\n\n /**\n * For edit mode: BINARY value is base64 string; decode to a real File with content and size for kendo-fileselect.\n * Base64 alone does not carry filename metadata, so we use a default name \"file.bin\".\n * Returns File[] because FileSelect expects a collection of File instances (see Kendo model binding).\n */\n private parseBinaryForForm(value: unknown): File[] {\n if (value == null) return [];\n if (value instanceof File) return [value];\n if (Array.isArray(value) && value[0] instanceof File) return value;\n if (typeof value === \"string\") {\n const file = this.base64ToFile(\n value,\n \"file.bin\",\n \"application/octet-stream\",\n );\n if (file) {\n (file as unknown as Record<string, unknown>)[BINARY_REFERENCE_FLAG] =\n true;\n return [file];\n }\n return [];\n }\n return [];\n }\n\n /**\n * For edit mode: BINARY_LINKED value is { contentType, binaryId, filename, size } and optionally base64 content.\n * If content is provided (contentBase64 / data / base64), decode to a real File with name, size and content for kendo-fileselect.\n * Otherwise create a synthetic File with correct name, size and type so the UI can display metadata (reference to existing file).\n * Returns File[] because FileSelect expects a collection of File instances (see Kendo model binding).\n */\n private parseBinaryLinkedForForm(value: unknown): File[] {\n if (!this.isRecordValue(value)) return [];\n if (value instanceof File) return [value];\n const filename =\n (typeof value[\"filename\"] === \"string\"\n ? value[\"filename\"]\n : typeof value[\"fileName\"] === \"string\"\n ? value[\"fileName\"]\n : null) ?? \"document.bin\";\n const contentType =\n (typeof value[\"contentType\"] === \"string\"\n ? value[\"contentType\"]\n : null) ?? \"application/octet-stream\";\n const base64 =\n typeof value[\"contentBase64\"] === \"string\"\n ? value[\"contentBase64\"]\n : typeof value[\"data\"] === \"string\"\n ? value[\"data\"]\n : typeof value[\"base64\"] === \"string\"\n ? value[\"base64\"]\n : null;\n if (base64) {\n const file = this.base64ToFile(base64, filename, contentType);\n if (file) return [file];\n }\n const size =\n typeof value[\"size\"] === \"number\" ? Math.max(0, value[\"size\"]) : 0;\n const blob =\n size > 0\n ? new Blob([new ArrayBuffer(size)], { type: contentType })\n : new Blob([], { type: contentType });\n const file = new File([blob], filename, { type: contentType });\n (file as unknown as Record<string, unknown>)[\n BINARY_LINKED_REFERENCE_FLAG\n ] = true;\n return [file];\n }\n\n private getDefaultPlaceholder(type: string): unknown {\n if (this.recognition.isRecordArray(type)) return [];\n if (this.recognition.isRecord(type)) return []; // Empty attribute array for new record\n if (this.recognition.isArray(type)) return [];\n if (this.recognition.isGeoSpatialPoint(type))\n return { longitude: null, latitude: null };\n if (type === \"BINARY\" || type === \"BINARY_LINKED\") return []; // FileSelect expects File[]\n return null;\n }\n\n /**\n * Parses CK attribute defaultValues[0] into form-friendly shape. Used when no initial value exists.\n */\n private parseDefaultValue(\n type: string,\n rawDefault: unknown,\n attrMetadata: CkAttributeMetadata | Attribute,\n ): unknown {\n if (rawDefault === undefined || rawDefault === null) {\n return this.getDefaultPlaceholder(type);\n }\n if (this.recognition.isEnum(type)) {\n const options = this.getEnumOptions(attrMetadata);\n const key =\n typeof rawDefault === \"number\" ? rawDefault : Number(rawDefault);\n const found = options.find((opt) => opt.key === key);\n return found ? found.key : key;\n }\n if (this.recognition.isNumber(type)) {\n return typeof rawDefault === \"number\" ? rawDefault : Number(rawDefault);\n }\n if (this.recognition.isString(type)) {\n return String(rawDefault);\n }\n if (this.recognition.isBoolean(type)) {\n return rawDefault === true || rawDefault === \"true\" || rawDefault === 1;\n }\n if (this.recognition.isDate(type)) {\n if (\n typeof rawDefault === \"string\" ||\n typeof rawDefault === \"number\" ||\n rawDefault instanceof Date\n ) {\n const date = new Date(rawDefault);\n return isNaN(date.getTime()) ? null : date;\n }\n return null;\n }\n if (this.recognition.isTime(type)) {\n if (typeof rawDefault === \"number\") {\n const d = new Date(0);\n d.setUTCHours(0, 0, 0, 0);\n d.setSeconds(rawDefault);\n return d;\n }\n if (\n typeof rawDefault === \"string\" ||\n typeof rawDefault === \"number\" ||\n rawDefault instanceof Date\n ) {\n const date = new Date(rawDefault);\n return isNaN(date.getTime()) ? null : date;\n }\n return null;\n }\n if (this.recognition.isArray(type)) {\n const arr = Array.isArray(rawDefault) ? rawDefault : [rawDefault];\n if (this.recognition.isStringArray(type)) {\n return arr.map((v) => String(v));\n }\n if (this.recognition.isIntArray(type)) {\n return arr.map((v) => Number(v));\n }\n return arr;\n }\n if (this.recognition.isGeoSpatialPoint(type)) {\n return this.normalizeGeospatialPointForForm(rawDefault);\n }\n return rawDefault;\n }\n\n /** Returns primitive arrays for Kendo MultiSelect (valuePrimitive: true). */\n private parseArrayType(type: string, value: unknown): string[] | number[] {\n if (this.recognition.isStringArray(type)) {\n const source =\n this.isRecordValue(value) && \"_v\" in value ? value[\"_v\"] : value;\n if (!Array.isArray(source)) return [];\n return source.map((v) =>\n this.isRecordValue(v) && \"key\" in v ? String(v[\"key\"]) : String(v),\n );\n }\n if (this.recognition.isIntArray(type)) {\n const source =\n this.isRecordValue(value) && \"_v\" in value ? value[\"_v\"] : value; // Handle _v wrapper format from upstream\n if (!Array.isArray(source)) return [];\n return source.map((v) =>\n this.isRecordValue(v) && \"key\" in v ? Number(v[\"key\"]) : Number(v),\n );\n }\n return [];\n }\n\n private getId(attr: CkAttributeMetadata | Attribute): Attribute[\"id\"] {\n if (!this.isCkAttributeMetadata(attr)) {\n return attr.id;\n }\n if (this.isEnum(attr)) {\n return {\n ckId: attr.attribute?.ckEnum?.ckEnumId?.fullName ?? \"\",\n\n rtId: null,\n };\n } else if (this.isRecord(attr) || this.isRecordArray(attr)) {\n return {\n ckId: attr.attribute?.ckRecord?.ckRecordId?.fullName ?? \"\",\n\n rtId: null,\n };\n } else {\n return {\n ckId: attr.ckAttributeId?.fullName ?? \"\",\n\n rtId: null,\n };\n }\n }\n private getEnumOptions(\n attr: CkAttributeMetadata | Attribute,\n ): AttributeEnumOption[] {\n if (attr?.enumOptions) {\n return attr.enumOptions;\n }\n if (this.isCkAttributeMetadata(attr) && attr.attribute?.ckEnum) {\n return (\n attr.attribute.ckEnum.values?.map((v: AttributeEnumOption | null) => ({\n key: v?.key ?? null,\n name: v?.name ?? null,\n })) ?? []\n );\n }\n return [];\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Observable, catchError, map, of } from 'rxjs';\nimport { GetCkAttributesDetailedDtoGQL } from '../../graphQL/getCkAttributesDetailed';\nimport { GetCkRecordDetailedDtoGQL } from '../../graphQL/getCkRecordDetailed';\nimport { GetRuntimeEntityByIdDtoGQL } from '../../graphQL/getRuntimeEntityById';\nimport { RtEntityValuesResponse } from '../components/attributes-group/attributes-group.component';\nimport { Attribute } from '../models/attribute';\nimport { CkAttributeMetadata } from '../models/attribute-metadata';\nimport { AttributeMapperService } from './attribute-mapper.service';\n\n/**\n * Single responsibility: fetch attribute definitions (CK types/records) and runtime entity values for the repository browser.\n * Used by attributes-group (rxResource), create-editor and update-editor (firstValueFrom for mutations).\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AttributeDataService {\n private mapper = inject(AttributeMapperService);\n private readonly getCkAttributesDetailedGQL = inject(\n GetCkAttributesDetailedDtoGQL,\n );\n private readonly getCkRecordDetailedGQL = inject(GetCkRecordDetailedDtoGQL);\n private readonly getRtEntityAttributesGQL = inject(\n GetRuntimeEntityByIdDtoGQL,\n );\n\n /** Observable of attribute list for a CK type or record. Sorted: required first, optional last. */\n getAttributesDefinition$(\n ckTypeId: string,\n isRecord = false,\n ): Observable<Attribute[]> {\n if (!ckTypeId) return of([]);\n\n const stream$ = isRecord\n ? this.fetchCkRecordAttributes(ckTypeId)\n : this.fetchCkAttributes(ckTypeId);\n\n return stream$.pipe(\n map((items) =>\n this.sortAttributesByOptional(\n items.map((meta) => this.mapper.mapToFormAttribute(meta, undefined)),\n ),\n ),\n catchError((err) => {\n console.error('Service error:', err);\n return of([]);\n }),\n );\n }\n\n /** Observable of initial attribute values for an existing entity (edit mode). */\n getRtEntityValues$(\n rtId: string,\n ckTypeId: string,\n ): Observable<RtEntityValuesResponse> {\n if (!rtId || !ckTypeId) {\n return of({ initial: [] });\n }\n\n return this.fetchRtEntityAttributes(rtId, ckTypeId).pipe(\n map((attributes) => ({\n initial: attributes,\n })),\n );\n }\n\n private sortAttributesByOptional(attributes: Attribute[]): Attribute[] {\n return [...attributes].sort((a, b) => {\n if (a.isOptional === b.isOptional) return 0;\n return a.isOptional ? 1 : -1;\n });\n }\n\n private fetchCkAttributes(\n ckTypeId: string,\n ): Observable<CkAttributeMetadata[]> {\n return this.getCkAttributesDetailedGQL\n .fetch({ variables: { ckId: ckTypeId } })\n .pipe(\n map(\n (res) =>\n (\n res.data?.constructionKit?.types?.items?.[0]?.attributes?.items ??\n []\n ).filter(\n (item): item is NonNullable<typeof item> => item != null,\n ) as CkAttributeMetadata[],\n ),\n );\n }\n\n private fetchCkRecordAttributes(\n ckRecordId: string,\n ): Observable<CkAttributeMetadata[]> {\n return this.getCkRecordDetailedGQL\n .fetch({ variables: { ckId: ckRecordId } })\n .pipe(\n map(\n (res) =>\n (\n res.data?.constructionKit?.records?.items?.[0]?.attributes\n ?.items ?? []\n ).filter(\n (item): item is NonNullable<typeof item> => item != null,\n ) as CkAttributeMetadata[],\n ),\n );\n }\n\n /** Fetches runtime entity attribute items by rtId and ckTypeId; returns empty array when absent. */\n private fetchRtEntityAttributes(\n rtId: string,\n ckTypeId: string,\n ): Observable<RtEntityValuesResponse['initial']> {\n return this.getRtEntityAttributesGQL\n .fetch({ variables: { rtId: rtId, ckTypeId: ckTypeId } })\n .pipe(\n map((res) => {\n const items =\n res.data?.runtime?.runtimeEntities?.items?.[0]?.attributes?.items ??\n [];\n return items\n .filter(\n (\n item,\n ): item is {\n attributeName?: string | null;\n value?: unknown | null;\n } => !!item?.attributeName,\n )\n .map((item) => ({\n attributeName: item.attributeName ?? '',\n value: item.value ?? null,\n }));\n }),\n );\n }\n}\n","import { Component, input, output } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { AbstractControl, ReactiveFormsModule } from \"@angular/forms\";\nimport { KENDO_LABEL } from \"@progress/kendo-angular-label\";\nimport { KENDO_BUTTONS } from \"@progress/kendo-angular-buttons\";\nimport { arrowRotateCcwIcon, SVGIcon } from \"@progress/kendo-svg-icons\";\nimport { Attribute } from \"../../models/attribute\";\n\n/**\n * Wraps a single form control with label, optional UNDO button, and error message.\n * Used by attributes-group for every scalar/geo/binary field. Baseline value for UNDO comes from parent.\n */\n@Component({\n selector: \"mm-attribute-field\",\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, KENDO_LABEL, KENDO_BUTTONS],\n template: `\n <div class=\"k-form-field\">\n <kendo-label\n [for]=\"fieldId()\"\n [text]=\"overrideLabelText() || attribute().attributeName\"\n [optional]=\"attribute().isOptional\"\n ></kendo-label>\n\n <div class=\"k-form-field-wrap\">\n <div class=\"field-input-container\">\n <div class=\"input-wrapper\">\n <ng-content></ng-content>\n </div>\n\n @if (showUndoButton()) {\n <button\n kendoButton\n [size]=\"undoButtonSize()\"\n [svgIcon]=\"undoIcon\"\n (click)=\"handleUndo()\"\n type=\"button\"\n class=\"undo-button\"\n ></button>\n }\n </div>\n\n @if (hasHint()) {\n <div class=\"k-form-hint\">{{ hintText() }}</div>\n }\n\n @if (hasError()) {\n <div class=\"k-form-error\">{{ errorMessage() }}</div>\n }\n </div>\n </div>\n `,\n styleUrls: [\"./attribute-field.component.scss\"],\n})\nexport class AttributeFieldComponent {\n // ─── Required inputs (from parent attributes-group) ───────────────────────────────\n attribute = input.required<Attribute>();\n control = input.required<AbstractControl>();\n\n // ─── Optional inputs (display & behaviour) ──────────────────────────────────────────\n /** Value to restore on UNDO. If not set, UNDO resets to null. */\n baselineValue = input<unknown>();\n fieldId = input<string>(\"\");\n overrideLabelText = input<string>();\n showUndoButton = input(true);\n undoButtonSize = input<\"small\" | \"medium\" | \"large\">(\"medium\");\n errorMessage = input<string>(\"This field is required or invalid.\");\n hintText = input<string>();\n\n undo = output<void>();\n protected readonly undoIcon: SVGIcon = arrowRotateCcwIcon;\n\n // ─── Template helpers (null-safe for control) ──────────────────────────────────────\n hasError(): boolean {\n const ctrl = this.control();\n if (ctrl == null) return false;\n return ctrl.invalid && (ctrl.dirty || ctrl.touched);\n }\n\n handleUndo(): void {\n const ctrl = this.control();\n if (ctrl == null) return;\n const baseline = this.baselineValue();\n ctrl.reset(baseline !== undefined ? baseline : null);\n this.undo.emit();\n }\n\n hasHint(): boolean {\n return this.hintText() != null && this.hintText() !== \"\";\n }\n}\n","import {\n Component,\n inject,\n forwardRef,\n computed,\n input,\n effect,\n} from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport {\n FormArray,\n FormGroup,\n ReactiveFormsModule,\n AbstractControl,\n FormControl,\n Validators,\n} from \"@angular/forms\";\nimport { AttributeFieldComponent } from \"../attribute-field/attribute-field.component\";\nimport { rxResource } from \"@angular/core/rxjs-interop\";\nimport { finalize } from \"rxjs\";\nimport { Attribute } from \"../../models/attribute\";\nimport { AttributeDataService } from \"../../services/attribute-data.service\";\nimport { AttributeCoordinatorService } from \"../../services/attribute-coordinator.service\";\nimport { AttributeRecognitionService } from \"../../services/attribute-recognition.service\";\nimport { KENDO_LAYOUT, SelectEvent } from \"@progress/kendo-angular-layout\";\nimport { KENDO_DATEINPUTS } from \"@progress/kendo-angular-dateinputs\";\nimport { KENDO_BUTTONS } from \"@progress/kendo-angular-buttons\";\nimport { KENDO_INPUTS } from \"@progress/kendo-angular-inputs\";\nimport { KENDO_LABEL } from \"@progress/kendo-angular-label\";\nimport { KENDO_DROPDOWNS } from \"@progress/kendo-angular-dropdowns\";\nimport { KENDO_UPLOADS } from \"@progress/kendo-angular-upload\";\nimport {\n BINARY_LINKED_REFERENCE_FLAG,\n BINARY_REFERENCE_FLAG,\n AttributeMapperService,\n} from \"../../services/attribute-mapper.service\";\n\n/**\n * Attributes group: dynamic form for a CK type or record.\n * Loads definitions via rxResource, syncs initial values in an effect, supports RECORD/RECORD_ARRAY/scalars/geo/binary.\n */\n@Component({\n selector: \"mm-attributes-group\",\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n KENDO_LAYOUT,\n KENDO_INPUTS,\n KENDO_LABEL,\n KENDO_BUTTONS,\n KENDO_DROPDOWNS,\n KENDO_DATEINPUTS,\n KENDO_UPLOADS,\n AttributeFieldComponent,\n forwardRef(() => AttributesGroupComponent),\n ],\n template: `\n <div class=\"attributes-form-container\" [formGroup]=\"parentFormGroup()\">\n <kendo-card [style.margin-bottom.px]=\"10\">\n <kendo-card-header>\n <div class=\"header-title\">\n <strong>{{ isRecord() ? 'Record' : 'Attributes' }}:</strong>\n {{ ckId() }}\n </div>\n </kendo-card-header>\n\n <kendo-card-body>\n @if (attributesResource.isLoading()) {\n <div class=\"k-i-loading\"></div>\n }\n\n @for (attr of attributes(); track attr.attributeName) {\n @if (recognition.isRecordArray(attr.attributeValueType)) {\n <kendo-expansionpanel>\n <ng-template kendoExpansionPanelTitleDirective>\n <div class=\"header-content\">\n <kendo-label\n [text]=\"attr.attributeName\"\n [optional]=\"attr.isOptional\"\n ></kendo-label>\n </div>\n </ng-template>\n\n <div class=\"record-array-content\">\n @if (attr.isOptional) {\n <div class=\"record-actions-info\">\n <p class=\"record-actions-description\">\n Add records to this array. Remove to delete the selected\n record. Empty arrays are not saved.\n </p>\n </div>\n }\n\n <kendo-tabstrip\n (tabSelect)=\"onTabSelect($event, attr.attributeName)\"\n >\n @for (item of getArrayControls(attr); track $index) {\n <kendo-tabstrip-tab\n [title]=\"attr.attributeName + ' ' + ($index + 1)\"\n [selected]=\"\n $index === getSelectedIndex(attr.attributeName)\n \"\n >\n <ng-template kendoTabContent>\n <div\n class=\"tab-content-wrapper\"\n style=\"padding-top: 10px;\"\n >\n <mm-attributes-group\n [ckId]=\"attr.id.ckId\"\n [isRecord]=\"true\"\n [parentFormGroup]=\"asFormGroup(item)\"\n [initialValues]=\"getRawInitialValue(attr.attributeName, $index)\"\n />\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n }\n </kendo-tabstrip>\n\n <div\n class=\"record-array-actions\"\n style=\"margin-top: 10px; display: flex; gap: 8px;\"\n >\n <button kendoButton size=\"small\" (click)=\"addRecord(attr)\">\n Add\n </button>\n <button\n kendoButton\n size=\"small\"\n themeColor=\"error\"\n fillMode=\"flat\"\n [disabled]=\"!canRemoveRecord(attr)\"\n (click)=\"removeRecord(attr)\"\n >\n Remove\n </button>\n </div>\n </div>\n </kendo-expansionpanel>\n } @else if (recognition.isRecord(attr.attributeValueType)) {\n <kendo-expansionpanel>\n <ng-template kendoExpansionPanelTitleDirective>\n <div class=\"header-content\">\n <kendo-label\n [text]=\"attr.attributeName\"\n [optional]=\"attr.isOptional\"\n ></kendo-label>\n </div>\n </ng-template>\n\n @if (attr.isOptional) {\n <div class=\"record-actions-info\">\n <p class=\"record-actions-description\">\n Load attributes to edit this optional record. Unload to\n remove all data and clear validation.\n </p>\n </div>\n }\n\n @if ((!attr.isOptional || isRecordLoaded(attr.attributeName)) && parentFormGroup().contains(attr.attributeName)) {\n <div style=\"margin-bottom: 10px;\">\n <mm-attributes-group\n [ckId]=\"attr.id.ckId\"\n [isRecord]=\"true\"\n [parentFormGroup]=\"\n asFormGroup(parentFormGroup().get(attr.attributeName)!)\n \"\n [initialValues]=\"getRawInitialValue(attr.attributeName)\"\n />\n </div>\n }\n\n @if (attr.isOptional) {\n <div class=\"record-actions\" style=\"display: flex; gap: 8px;\">\n <button\n kendoButton\n size=\"small\"\n [disabled]=\"isRecordLoaded(attr.attributeName)\"\n (click)=\"loadRecord(attr)\"\n >\n Load\n </button>\n <button\n kendoButton\n size=\"small\"\n themeColor=\"error\"\n fillMode=\"flat\"\n [disabled]=\"!isRecordLoaded(attr.attributeName)\"\n (click)=\"unloadRecord(attr)\"\n >\n Unload\n </button>\n </div>\n }\n </kendo-expansionpanel>\n } @else if (\n recognition.isGeoSpatialPoint(attr.attributeValueType)\n ) {\n <kendo-expansionpanel [expanded]=\"true\">\n <ng-template kendoExpansionPanelTitleDirective>\n <div class=\"header-content\">\n <kendo-label\n [text]=\"attr.attributeName\"\n [optional]=\"attr.isOptional\"\n ></kendo-label>\n </div>\n </ng-template>\n\n @if (parentFormGroup().contains(attr.attributeName)) {\n <div\n [formGroupName]=\"attr.attributeName\"\n class=\"geospatial-grid\"\n >\n <mm-attribute-field\n [hintText]=\"'The longitude of the point on the Earth surface (-180 to 180 degrees).'\"\n [attribute]=\"attr\"\n [overrideLabelText]=\"'Longitude (X)'\"\n [control]=\"\n parentFormGroup().get(attr.attributeName + '.longitude')!\n \"\n [baselineValue]=\"getBaselineValue(attr.attributeName + '.longitude')\"\n [fieldId]=\"attr.attributeName + '_lon'\"\n >\n <kendo-numerictextbox\n [focusableId]=\"attr.attributeName + '_lon'\"\n formControlName=\"longitude\"\n [format]=\"'n6'\"\n [step]=\"0.000001\"\n [min]=\"-180\"\n [max]=\"180\"\n ></kendo-numerictextbox>\n </mm-attribute-field>\n\n <mm-attribute-field\n [hintText]=\"'The latitude of the point on the Earth surface (-90 to 90 degrees).'\"\n [attribute]=\"attr\"\n [overrideLabelText]=\"'Latitude (Y)'\"\n [control]=\"\n parentFormGroup().get(attr.attributeName + '.latitude')!\n \"\n [baselineValue]=\"getBaselineValue(attr.attributeName + '.latitude')\"\n [fieldId]=\"attr.attributeName + '_lat'\"\n >\n <kendo-numerictextbox\n [focusableId]=\"attr.attributeName + '_lat'\"\n formControlName=\"latitude\"\n [format]=\"'n6'\"\n [step]=\"0.000001\"\n [min]=\"-90\"\n [max]=\"90\"\n ></kendo-numerictextbox>\n </mm-attribute-field>\n </div>\n }\n </kendo-expansionpanel>\n } @else if (parentFormGroup().contains(attr.attributeName)) {\n <mm-attribute-field\n [attribute]=\"attr\"\n [control]=\"parentFormGroup().get(attr.attributeName)!\"\n [baselineValue]=\"getBaselineValue(attr.attributeName)\"\n [fieldId]=\"attr.attributeName\"\n >\n @if (recognition.isNumber(attr.attributeValueType)) {\n <kendo-numerictextbox\n [focusableId]=\"attr.attributeName\"\n [formControlName]=\"attr.attributeName\"\n />\n } @else if (recognition.isDate(attr.attributeValueType)) {\n <kendo-datetimepicker\n [focusableId]=\"attr.attributeName\"\n [formControlName]=\"attr.attributeName\"\n />\n } @else if (recognition.isTime(attr.attributeValueType)) {\n <kendo-timepicker\n [focusableId]=\"attr.attributeName\"\n [formControlName]=\"attr.attributeName\"\n />\n } @else if (recognition.isBoolean(attr.attributeValueType)) {\n <kendo-switch\n [attr.id]=\"attr.attributeName\"\n [formControlName]=\"attr.attributeName\"\n />\n } @else if (attr.attributeValueType === \"BINARY\") {\n <div class=\"binary-linked-wrap\">\n <kendo-fileselect\n [multiple]=\"false\"\n [focusableId]=\"attr.attributeName\"\n [formControlName]=\"attr.attributeName\"\n [restrictions]=\"binaryRestrictions\"\n />\n @if (isBinaryReferenceFile(attr.attributeName)) {\n <span class=\"binary-linked-reference-hint\" [title]=\"binaryReferenceTooltip\">\n {{ binaryReferenceLabel }}\n </span>\n }\n </div>\n } @else if (attr.attributeValueType === \"BINARY_LINKED\") {\n <div class=\"binary-linked-wrap\">\n <kendo-fileselect\n [multiple]=\"false\"\n [focusableId]=\"attr.attributeName\"\n [formControlName]=\"attr.attributeName\"\n />\n @if (isReferencePreviewFile(attr.attributeName)) {\n <span class=\"binary-linked-reference-hint\" [title]=\"referencePreviewTooltip\">\n {{ referencePreviewLabel }}\n </span>\n }\n </div>\n } @else if (recognition.isEnum(attr.attributeValueType)) {\n <kendo-dropdownlist\n [attr.id]=\"attr.attributeName\"\n [formControlName]=\"attr.attributeName\"\n [data]=\"attr.enumOptions || []\"\n textField=\"name\"\n valueField=\"key\"\n [valuePrimitive]=\"true\"\n />\n } @else if (recognition.isArray(attr.attributeValueType)) {\n <kendo-multiselect\n [attr.id]=\"attr.attributeName\"\n [formControlName]=\"attr.attributeName\"\n [data]=\"getArrayDisplayData(attr.attributeName)\"\n [allowCustom]=\"true\"\n textField=\"name\"\n valueField=\"key\"\n [valuePrimitive]=\"true\"\n />\n } @else {\n <kendo-textbox\n [focusableId]=\"attr.attributeName\"\n [formControlName]=\"attr.attributeName\"\n />\n }\n </mm-attribute-field>\n }\n }\n </kendo-card-body>\n </kendo-card>\n </div>\n `,\n styleUrls: [\"./attributes-group.component.scss\"],\n})\n/**\n * Renders a dynamic form group for a CK type or record: loads attribute definitions,\n * syncs initial/entity values into the form, and supports RECORD (Load/Unload),\n * RECORD_ARRAY (Add/Remove), scalars, geo, binary. Used recursively for nested records.\n */\nexport class AttributesGroupComponent {\n // ─── Injected services ───────────────────────────────────────────────────────────\n private coordinator = inject(AttributeCoordinatorService);\n private dataService = inject(AttributeDataService);\n protected recognition = inject(AttributeRecognitionService);\n private mapper = inject(AttributeMapperService);\n private isRecordValue(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n }\n\n // ─── Inputs (public API for parent / template) ─────────────────────────────────────\n ckId = input.required<string>();\n parentFormGroup = input.required<FormGroup>();\n isRecord = input<boolean>(false);\n initialValues = input<RawInitialValue[]>();\n\n // ─── Derived state & resource ────────────────────────────────────────────────────\n protected attributes = computed(() => this.attributesResource.value() ?? []);\n private selectedIndices = new Map<string, number>();\n private loadedRecords = new Map<string, boolean>();\n private baselineValues = new Map<string, unknown>();\n protected readonly binaryRestrictions = { maxFileSize: 16 * 1024 * 1024 };\n\n /** Label and tooltip for BINARY when value was restored from base64 (content is real; file name is a placeholder). */\n protected readonly binaryReferenceLabel =\n \"Preview (restored from stored data)\";\n protected readonly binaryReferenceTooltip =\n \"Content and size are from stored data. File name is a placeholder because the original name is not stored.\";\n\n /** Label and tooltip for BINARY_LINKED when value is a reference/mockup (no content, metadata only). */\n protected readonly referencePreviewLabel = \"Preview (reference file)\";\n protected readonly referencePreviewTooltip =\n \"Shows metadata of an existing file in the system; content is not loaded. Replace with a file to change.\";\n\n /** True when the control value is a BINARY file restored from base64 (reference: real content, placeholder name). */\n protected isBinaryReferenceFile(attrName: string): boolean {\n const control = this.parentFormGroup()?.get(attrName);\n const value = control?.value;\n if (!Array.isArray(value) || value.length !== 1 || !(value[0] instanceof File))\n return false;\n return (\n (value[0] as unknown as Record<string, unknown>)[\n BINARY_REFERENCE_FLAG\n ] === true\n );\n }\n\n /** True when the control value is a synthetic BINARY_LINKED file (reference preview without content). */\n protected isReferencePreviewFile(attrName: string): boolean {\n const control = this.parentFormGroup()?.get(attrName);\n const value = control?.value;\n if (!Array.isArray(value) || value.length !== 1 || !(value[0] instanceof File))\n return false;\n return (\n (value[0] as unknown as Record<string, unknown>)[\n BINARY_LINKED_REFERENCE_FLAG\n ] === true\n );\n }\n\n protected attributesResource = rxResource({\n params: () => ({ id: this.ckId(), isRec: this.isRecord() }),\n stream: ({ params }) => {\n this.coordinator.startLoading();\n return this.dataService\n .getAttributesDefinition$(params.id, params.isRec)\n .pipe(finalize(() => this.coordinator.stopLoading()));\n },\n });\n\n // ─── Form sync: effect builds/patches controls from attributes + initial values ────\n constructor() {\n effect(() => {\n const attrs = this.attributes();\n const form = this.parentFormGroup();\n // Use stable empty to avoid new [] reference on every run (prevents infinite detection loop)\n const rawInitial = this.initialValues() ?? EMPTY_INITIAL_VALUES;\n\n if (attrs.length > 0) {\n attrs.forEach((attrMetadata) => {\n const rawValue = rawInitial.find(\n (val) => val.attributeName === attrMetadata.attributeName,\n )?.value;\n\n // Use parsed initial when entity data exists; otherwise use attribute.value from resource (already has Default or Empty from mapper)\n const hasInitialFromEntity = rawValue !== undefined && rawValue !== null;\n const finalValue = hasInitialFromEntity\n ? this.mapper.getFormValueFromRawInitial(attrMetadata, rawValue)\n : attrMetadata.value;\n\n if (!form.contains(attrMetadata.attributeName)) {\n this.initializeControl(form, attrMetadata, finalValue);\n } else {\n const control = form.get(attrMetadata.attributeName);\n if (control) {\n const isInitialEmpty =\n rawInitial === EMPTY_INITIAL_VALUES ||\n this.isDefaultEmptyValue(finalValue, attrMetadata.attributeValueType);\n const hasUserData = !this.isControlValueEmpty(\n control,\n attrMetadata.attributeValueType,\n );\n if (isInitialEmpty && hasUserData) {\n return;\n }\n // Only patch from initialValues when control has not been edited (preserves tab state when switching RECORD_ARRAY tabs)\n if (control.pristine && !control.touched) {\n const current = control.value;\n const changed =\n JSON.stringify(current) !== JSON.stringify(finalValue);\n if (changed) {\n control.patchValue(finalValue, { emitEvent: false });\n this.setBaselineForAttr(attrMetadata, finalValue);\n }\n }\n }\n }\n });\n\n this.coordinator.markStructureAsReady();\n }\n });\n }\n\n // ─── Form structure: create control per attribute type, set baseline for UNDO ───────\n private initializeControl(\n form: FormGroup,\n attr: Attribute,\n initialValue: unknown,\n ) {\n let control: AbstractControl;\n\n if (this.recognition.isRecordArray(attr.attributeValueType)) {\n const initialArray = Array.isArray(initialValue) ? initialValue : [];\n const formArray = new FormArray<FormGroup>(\n [],\n attr.isOptional ? [] : [Validators.required],\n );\n\n // For each \"record\" in the array create a form group\n initialArray.forEach(() => {\n formArray.push(new FormGroup({}));\n });\n control = formArray;\n } else if (this.recognition.isRecord(attr.attributeValueType)) {\n control = new FormGroup({}, attr.isOptional ? [] : [Validators.required]);\n } else if (this.recognition.isGeoSpatialPoint(attr.attributeValueType)) {\n const longitudeValidators = [Validators.min(-180), Validators.max(180)];\n const latitudeValidators = [Validators.min(-90), Validators.max(90)];\n if (!attr.isOptional) {\n longitudeValidators.unshift(Validators.required);\n latitudeValidators.unshift(Validators.required);\n }\n const geoValue = this.isRecordValue(initialValue) ? initialValue : {};\n const geoGroup = new FormGroup({\n longitude: new FormControl(\n geoValue[\"longitude\"] ?? null,\n longitudeValidators,\n ),\n latitude: new FormControl(\n geoValue[\"latitude\"] ?? null,\n latitudeValidators,\n ),\n });\n form.addControl(attr.attributeName, geoGroup);\n this.setBaselineForAttr(attr, initialValue);\n return;\n } else {\n // Plain text/numeric/etc. field\n control = new FormControl(\n initialValue,\n attr.isOptional ? [] : [Validators.required],\n );\n }\n\n form.addControl(attr.attributeName, control);\n this.setBaselineForAttr(attr, initialValue);\n\n if (!(control instanceof FormArray || control instanceof FormGroup)) {\n control.patchValue(initialValue, { emitEvent: false });\n }\n }\n\n private setBaselineForAttr(attr: Attribute, value: unknown): void {\n const key = attr.attributeName;\n if (this.recognition.isGeoSpatialPoint(attr.attributeValueType)) {\n const v = this.isRecordValue(value) ? value : {};\n this.baselineValues.set(\n key + \".longitude\",\n this.cloneForBaseline(v[\"longitude\"] ?? null),\n );\n this.baselineValues.set(\n key + \".latitude\",\n this.cloneForBaseline(v[\"latitude\"] ?? null),\n );\n } else if (\n !this.recognition.isRecord(attr.attributeValueType) &&\n !this.recognition.isRecordArray(attr.attributeValueType)\n ) {\n this.baselineValues.set(key, this.cloneForBaseline(value));\n }\n }\n\n private cloneForBaseline(v: unknown): unknown {\n if (v === null || v === undefined) return v;\n if (v instanceof Date) return new Date(v.getTime());\n if (typeof v === \"object\" && v instanceof File) return v;\n if (Array.isArray(v)) return v.map((x) => this.cloneForBaseline(x));\n if (this.isRecordValue(v)) {\n const out: Record<string, unknown> = {};\n for (const k of Object.keys(v))\n out[k] = this.cloneForBaseline(v[k]);\n return out;\n }\n return v;\n }\n\n getBaselineValue(controlKey: string): unknown {\n return this.baselineValues.has(controlKey)\n ? this.baselineValues.get(controlKey)\n : undefined;\n }\n\n asFormGroup(control: AbstractControl): FormGroup {\n return control as FormGroup;\n }\n\n // ─── Value / empty checks (for effect: when to patch vs skip) ──────────────────────\n private isDefaultEmptyValue(value: unknown, type: string): boolean {\n if (value === null || value === undefined) return true;\n if (this.recognition.isRecordArray(type) || this.recognition.isRecord(type))\n return Array.isArray(value)\n ? value.length === 0\n : !this.isRecordValue(value) || Object.keys(value).length === 0;\n if (this.recognition.isGeoSpatialPoint(type)) {\n const v = this.isRecordValue(value) ? value : {};\n return v[\"longitude\"] == null && v[\"latitude\"] == null;\n }\n if (this.recognition.isArray(type)) return Array.isArray(value) && value.length === 0;\n return false;\n }\n\n private isControlValueEmpty(control: AbstractControl, type: string): boolean {\n const value = control.value;\n if (value === null || value === undefined || value === \"\") return true;\n if (this.recognition.isRecordArray(type) || this.recognition.isRecord(type)) {\n if (Array.isArray(value)) return value.length === 0;\n const obj = value && typeof value === \"object\" ? value : {};\n return Object.keys(obj).length === 0;\n }\n if (this.recognition.isGeoSpatialPoint(type)) {\n const v = value as { longitude?: number | null; latitude?: number | null };\n return v?.longitude == null && v?.latitude == null;\n }\n if (this.recognition.isArray(type))\n return !Array.isArray(value) || value.length === 0;\n return false;\n }\n\n // ─── RECORD (single optional group): Load / Unload ─────────────────────────────────\n isRecordLoaded(name: string): boolean {\n // Respect explicit user choice (Load/Unload): once set, don't override from initial data\n if (this.loadedRecords.has(name)) {\n return this.loadedRecords.get(name)!;\n }\n // Auto-load if initial value is present (record is filled)\n const initial = this.getRawInitialValue(name);\n if (initial && Array.isArray(initial) && initial.length > 0) {\n this.loadedRecords.set(name, true);\n return true;\n }\n return false;\n }\n\n loadRecord(attr: Attribute): void {\n if (!attr.isOptional || this.isRecordLoaded(attr.attributeName)) return;\n if (!this.parentFormGroup().contains(attr.attributeName)) {\n this.parentFormGroup().addControl(attr.attributeName, new FormGroup({}));\n }\n this.loadedRecords.set(attr.attributeName, true);\n }\n\n unloadRecord(attr: Attribute): void {\n if (!this.isRecordLoaded(attr.attributeName)) return;\n\n const group = this.parentFormGroup().get(attr.attributeName) as FormGroup;\n if (group) {\n Object.keys(group.controls).forEach((key) => group.removeControl(key));\n group.reset();\n }\n\n this.loadedRecords.set(attr.attributeName, false);\n }\n\n // ─── RECORD_ARRAY: tabs, Add / Remove, selected index ─────────────────────────────\n getArrayControls(attr: Attribute): FormGroup[] {\n const control = this.parentFormGroup().get(attr.attributeName);\n return control instanceof FormArray\n ? (control.controls as FormGroup[])\n : [];\n }\n\n getSelectedIndex(name: string): number {\n return this.selectedIndices.get(name) ?? 0;\n }\n\n setSelectedIndex(name: string, index: number): void {\n this.selectedIndices.set(name, index);\n }\n\n onTabSelect(event: SelectEvent, name: string): void {\n this.setSelectedIndex(name, event.index);\n }\n\n /** Builds display data for Kendo MultiSelect when value is primitive[] (valuePrimitive: true). */\n getArrayDisplayData(attributeName: string): { name: string; key: string | number }[] {\n const value = this.parentFormGroup().get(attributeName)?.value;\n if (!Array.isArray(value)) return [];\n return value.map((v: string | number) => ({\n name: String(v),\n key: v,\n }));\n }\n\n addRecord(attr: Attribute): void {\n let array = this.parentFormGroup().get(attr.attributeName) as FormArray;\n if (!array) {\n array = new FormArray<FormGroup>(\n [],\n attr.isOptional ? [] : [Validators.required],\n );\n this.parentFormGroup().addControl(attr.attributeName, array);\n }\n array.push(new FormGroup({}));\n this.setSelectedIndex(attr.attributeName, array.length - 1);\n }\n\n canRemoveRecord(attr: Attribute): boolean {\n const array = this.parentFormGroup().get(attr.attributeName) as FormArray;\n if (!array || array.length === 0) return false;\n const index = this.getSelectedIndex(attr.attributeName);\n return index >= 0 && index < array.length;\n }\n\n removeRecord(attr: Attribute): void {\n if (!this.canRemoveRecord(attr)) return;\n\n const array = this.parentFormGroup().get(attr.attributeName) as FormArray;\n let index = this.getSelectedIndex(attr.attributeName);\n\n array.removeAt(index);\n\n if (array.length === 0) {\n index = 0;\n } else if (index >= array.length) {\n index = array.length - 1;\n }\n this.setSelectedIndex(attr.attributeName, index);\n }\n\n // ─── Initial values for nested RECORD / RECORD_ARRAY (stable empty to avoid loops) ─\n getRawInitialValue(attributeName: string, index?: number): RawInitialValue[] {\n const source = this.initialValues() ?? EMPTY_INITIAL_VALUES;\n const raw = source.find((val) => val.attributeName === attributeName)?.value;\n if (index !== undefined && Array.isArray(raw)) {\n const item = raw[index]?.attributes ?? EMPTY_INITIAL_VALUES;\n return Array.isArray(item) ? item : EMPTY_INITIAL_VALUES;\n }\n if (this.isRecordValue(raw) && Array.isArray(raw[\"attributes\"])) {\n return raw[\"attributes\"];\n }\n if (raw !== undefined && raw !== null && Array.isArray(raw)) {\n return raw;\n }\n return EMPTY_INITIAL_VALUES;\n }\n}\n\n// ─── Exported types (used by attribute-data-service and parent components) ───────────\nexport interface RawInitialValue {\n attributeName: string;\n value: unknown;\n __typename?: string;\n}\n\n/** Stable empty array to avoid new [] references that would retrigger effects (infinite loop). */\nconst EMPTY_INITIAL_VALUES: RawInitialValue[] = [];\n\nexport interface RtEntityValuesResponse {\n initial: RawInitialValue[];\n}\n","import { inject, Injectable } from \"@angular/core\";\nimport { RtEntityInputDto, RtEntityUpdateDto } from \"@meshmakers/octo-services\";\nimport { NotificationService } from \"@progress/kendo-angular-notification\";\n\n/**\n * Shared utilities for create and update entity editors: mutation options (including multipart for binary uploads)\n * and error notifications. Injected by both CreateEditorComponent and UpdateEditorComponent.\n */\n@Injectable({\n providedIn: \"root\",\n})\nexport class SharedEditor {\n private readonly notificationService = inject(NotificationService);\n\n /**\n * Builds Apollo mutation options for createEntities: variables and optional multipart context when attributes contain File(s).\n */\n public prepareMutationOptions(entityInput: RtEntityInputDto): {\n variables: { entities: RtEntityInputDto[] };\n context?: { useMultipart: true };\n } {\n const mutationOptions: {\n variables: { entities: RtEntityInputDto[] };\n context?: { useMultipart: true };\n } = {\n variables: { entities: [entityInput] },\n };\n\n // Use multipart for binary file uploads (BINARY_LINKED or BINARY)\n const hasBinaryFiles =\n entityInput.attributes?.some((attr) => {\n // BINARY_LINKED: File, BINARY: File or File[]\n if (attr?.value instanceof File) return true;\n if (Array.isArray(attr?.value) && attr?.value[0] instanceof File)\n return true;\n return false;\n }) ?? false;\n if (hasBinaryFiles) {\n mutationOptions.context = { useMultipart: true };\n }\n\n return mutationOptions;\n }\n\n /**\n * Builds Apollo mutation options for updateRuntimeEntities: variables and optional multipart context when attributes contain File(s).\n */\n public prepareUpdateMutationOptions(entities: RtEntityUpdateDto[]): {\n variables: { entities: RtEntityUpdateDto[] };\n context?: { useMultipart: true };\n } {\n const mutationOptions: {\n variables: { entities: RtEntityUpdateDto[] };\n context?: { useMultipart: true };\n } = {\n variables: { entities },\n };\n\n const hasBinaryFiles =\n entities?.some((e) =>\n e?.item?.attributes?.some((attr) => {\n if (attr?.value instanceof File) return true;\n if (Array.isArray(attr?.value) && attr?.value[0] instanceof File)\n return true;\n return false;\n }),\n ) ?? false;\n\n if (hasBinaryFiles) {\n mutationOptions.context = { useMultipart: true };\n }\n\n return mutationOptions;\n }\n\n /**\n * Shows an error notification to the user.\n */\n public showErrorNotification(message: string): void {\n this.notificationService.show({\n content: message,\n hideAfter: 3000,\n position: { horizontal: \"right\", vertical: \"top\" },\n animation: { type: \"fade\", duration: 400 },\n type: { style: \"error\", icon: true },\n });\n }\n}\n","import {\n Component,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n} from \"@angular/core\";\nimport { toObservable, toSignal } from \"@angular/core/rxjs-interop\";\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from \"@angular/forms\";\nimport {\n AssociationModOptionsDto,\n RtEntityInputDto,\n} from \"@meshmakers/octo-services\";\nimport { KENDO_BUTTONS } from \"@progress/kendo-angular-buttons\";\nimport { KENDO_DATEINPUTS } from \"@progress/kendo-angular-dateinputs\";\nimport { KENDO_DROPDOWNS } from \"@progress/kendo-angular-dropdowns\";\nimport { KENDO_INPUTS } from \"@progress/kendo-angular-inputs\";\nimport { KENDO_LABEL } from \"@progress/kendo-angular-label\";\nimport { CardModule } from \"@progress/kendo-angular-layout\";\nimport { firstValueFrom, of, startWith, switchMap } from \"rxjs\";\nimport { CreateEntitiesDtoGQL } from \"../../../graphQL/createEntities\";\nimport { CkTypeDto } from \"../../../graphQL/globalTypes\";\nimport { Attribute } from \"../../models/attribute\";\nimport {\n DEFAULT_RUNTIME_BROWSER_MESSAGES,\n RuntimeBrowserMessages,\n} from \"../../runtime-browser.model\";\nimport { AttributeCoordinatorService } from \"../../services/attribute-coordinator.service\";\nimport { AttributeDataService } from \"../../services/attribute-data.service\";\nimport { AttributeMapperService } from \"../../services/attribute-mapper.service\";\nimport { AttributesGroupComponent } from \"../attributes-group/attributes-group.component\";\nimport { SharedEditor } from \"../shared-editor/shared-editor\";\n\n@Component({\n selector: \"mm-create-editor-component\",\n imports: [\n ReactiveFormsModule,\n CardModule,\n KENDO_INPUTS,\n KENDO_LABEL,\n KENDO_BUTTONS,\n KENDO_DROPDOWNS,\n KENDO_DATEINPUTS,\n AttributesGroupComponent,\n ],\n template: `\n <div class=\"entity-editor-container\">\n <kendo-card class=\"basic-info-card\">\n <kendo-card-header>\n <h3 class=\"title\">\n {{ resolvedMessages().createEntity }}\n </h3>\n </kendo-card-header>\n <kendo-card-body>\n <div class=\"info-item\">\n <label>{{ resolvedMessages().targetLocation }}</label>\n <kendo-textbox\n [disabled]=\"true\"\n [value]=\"\n createInput()!.parent!.name || resolvedMessages().rootLevel\n \"\n ></kendo-textbox>\n </div>\n\n <div class=\"info-item\">\n <label>{{ resolvedMessages().entityType }}</label>\n <kendo-dropdownlist\n [data]=\"createInput()!.ckTypes || []\"\n textField=\"rtCkTypeId\"\n valueField=\"rtCkTypeId\"\n [valuePrimitive]=\"false\"\n [attr.placeholder]=\"resolvedMessages().selectType\"\n (valueChange)=\"onTypeChange($event)\"\n >\n </kendo-dropdownlist>\n </div>\n </kendo-card-body>\n </kendo-card>\n\n <div class=\"attributes-form-container\">\n @if (selectedRtCkTypeId() && form()) {\n <mm-attributes-group\n [ckId]=\"selectedRtCkTypeId()!\"\n [parentFormGroup]=\"form()!\"\n [isRecord]=\"false\"\n />\n } @else {\n <p class=\"select-type-prompt\">\n {{ resolvedMessages().selectTypePrompt }}\n </p>\n }\n </div>\n\n <div class=\"entity-editor-actions\">\n <button\n kendoButton\n (click)=\"onCreate()\"\n [disabled]=\"!isCreateButtonEnabled()\"\n >\n {{ resolvedMessages().save }}\n </button>\n <button\n kendoButton\n [disabled]=\"!isCancelButtonEnabled()\"\n (click)=\"cancelRequested.emit()\"\n >\n {{ resolvedMessages().cancel }}\n </button>\n </div>\n </div>\n `,\n styleUrls: [\"../shared-editor/shared-editor.scss\"],\n})\n/**\n * Editor for creating a new runtime entity under a parent: type selection via dropdown, attribute form\n * via mm-attributes-group, and createEntities mutation with optional parent association. Save is enabled\n * when form is valid, coordinator is ready, and form is dirty vs initial snapshot.\n */\nexport class CreateEditorComponent {\n // Inputs\n createInput = input.required<CreateInput>();\n messages = input<Partial<RuntimeBrowserMessages>>({});\n protected readonly resolvedMessages = computed<RuntimeBrowserMessages>(\n () => ({\n ...DEFAULT_RUNTIME_BROWSER_MESSAGES,\n ...this.messages(),\n }),\n );\n // Outputs\n createOutput = output<CreateOutput>();\n cancelRequested = output<void>();\n // State\n protected isCreating = signal(false);\n protected isCanceling = signal(false);\n protected form = signal<FormGroup | null>(null);\n protected selectedCkTypeId = signal<string | null>(null);\n protected selectedRtCkTypeId = signal<string | null>(null);\n /** Snapshot of form value when coordinator is ready; used for dirty check. */\n private initialValue = signal<string | null>(null);\n // Dependencies\n private readonly createEntitiesGQL = inject(CreateEntitiesDtoGQL);\n private readonly formBuilder = inject(FormBuilder);\n private readonly dataService = inject(AttributeDataService);\n private readonly mapperService = inject(AttributeMapperService);\n private readonly coordinatorService = inject(AttributeCoordinatorService);\n private readonly sharedEditor = inject(SharedEditor);\n\n isCreateButtonEnabled = computed(() => {\n const status = this.formStatusSignal();\n const isLoaded = this.coordinatorService.isFullyLoaded();\n const isDirty = this.formIsDifferentFromInitial();\n\n return (\n !this.isCreating() &&\n !this.isCanceling() &&\n status === \"VALID\" &&\n isLoaded &&\n isDirty\n );\n });\n\n isCancelButtonEnabled = computed(() => {\n return !this.isCreating() && !this.isCanceling();\n });\n\n formIsDifferentFromInitial = computed(() => {\n const current = this.formValueSignal();\n const initial = this.initialValue();\n\n if (!current || initial == null) return false;\n\n return JSON.stringify(current) !== initial;\n });\n\n formStatusSignal = toSignal(\n toObservable(this.form).pipe(\n switchMap((f) => {\n if (!f) return of(\"INVALID\");\n return f.statusChanges.pipe(startWith(f.status));\n }),\n ),\n );\n\n formValueSignal = toSignal(\n toObservable(this.form).pipe(\n switchMap((f) => {\n if (!f) return of(null);\n return f.valueChanges.pipe(startWith(f.getRawValue()));\n }),\n ),\n );\n\n constructor() {\n this.coordinatorService.reset();\n effect(() => {\n if (this.coordinatorService.isFullyLoaded()) {\n const currentForm = this.form();\n if (currentForm) {\n const val = currentForm.getRawValue();\n this.initialValue.set(JSON.stringify(val));\n }\n }\n });\n }\n\n /**\n * Validates preconditions, maps form to attributes, builds create payload, runs mutation, emits result.\n */\n protected async onCreate(): Promise<void> {\n const currentForm = this.form();\n const ckTypeId = this.selectedCkTypeId();\n const rtCkTypeId = this.selectedRtCkTypeId();\n\n if (this.isCreating() || !currentForm?.valid || !ckTypeId || !rtCkTypeId) {\n return;\n }\n\n this.isCreating.set(true);\n\n try {\n const attributesMetadata = await this.fetchAttributesMetadata(rtCkTypeId);\n const mappedAttributes = await firstValueFrom(\n this.mapFormToAttributes$(\n currentForm.getRawValue(),\n attributesMetadata,\n ),\n );\n\n if (!this.hasValidMappedAttributes(mappedAttributes)) {\n this.sharedEditor.showErrorNotification(\n this.resolvedMessages().failedToCreateEntity,\n );\n return;\n }\n\n const entityInput = this.buildCreatePayload(mappedAttributes);\n const options = this.sharedEditor.prepareMutationOptions(entityInput);\n const result = await firstValueFrom(\n this.createEntitiesGQL.mutate(options),\n );\n\n const createdRtId =\n result.data?.runtime?.runtimeEntities?.create?.[0]?.rtId;\n if (createdRtId != null) {\n this.createOutput.emit({\n success: true,\n data: { createdRtEntityId: createdRtId },\n });\n } else {\n this.sharedEditor.showErrorNotification(\n this.resolvedMessages().failedToCreateEntity,\n );\n }\n } catch (error) {\n console.error(\"Error saving entity:\", error);\n this.sharedEditor.showErrorNotification(\n this.resolvedMessages().failedToCreateEntity,\n );\n } finally {\n this.isCreating.set(false);\n }\n }\n\n /** Fetches attribute definitions for the given runtime CK type (single emission). */\n private fetchAttributesMetadata(rtCkTypeId: string): Promise<Attribute[]> {\n return firstValueFrom(\n this.dataService.getAttributesDefinition$(rtCkTypeId, false),\n );\n }\n\n /** Maps form raw value to GraphQL attributes (Observable for composition/retry). */\n private mapFormToAttributes$(\n formValue: unknown,\n attributesMetadata: Attribute[],\n ) {\n return this.mapperService.mapFormValueToGraphQLAttributes$(\n formValue,\n attributesMetadata,\n );\n }\n\n /** Ensures we have at least one mapped attribute (validation). */\n private hasValidMappedAttributes(\n mapped: { attributeName: string; value: unknown }[] | null | undefined,\n ): boolean {\n return Array.isArray(mapped) && mapped.length > 0;\n }\n\n /** Builds the create mutation payload: ckTypeId, attributes, optional parent association. */\n private buildCreatePayload(\n attributes: { attributeName: string; value: unknown }[],\n ): RtEntityInputDto {\n const ckTypeId = this.selectedCkTypeId() ?? this.selectedRtCkTypeId();\n const entity: RtEntityInputDto = {\n ckTypeId: ckTypeId!,\n attributes,\n };\n\n const parent = this.createInput()?.parent;\n if (parent?.ckTypeId && parent?.rtId) {\n entity.associations = [\n {\n roleName: \"parent\",\n targets: [\n {\n modOption: AssociationModOptionsDto.CreateDto,\n target: { ckTypeId: parent.ckTypeId, rtId: parent.rtId },\n },\n ],\n },\n ];\n }\n\n return entity;\n }\n\n /**\n * Resets the form and prepares the state for the selected type.\n * Naming (intentional, not swapped): CkTypeDto has ckTypeId { fullName } and rtCkTypeId.\n * - selectedRtCkTypeId = fullName → used as [ckId] for attributes-group (getCkAttributesDetailed expects type id).\n * - selectedCkTypeId = DTO's rtCkTypeId → used in create mutation payload as entity.ckTypeId.\n */\n protected onTypeChange(selectedType: CkTypeDto | null) {\n if (selectedType === null || selectedType === undefined) return;\n\n const rtCkTypeId = selectedType.ckTypeId.fullName;\n const ckTypeId = selectedType.rtCkTypeId;\n\n if (ckTypeId && rtCkTypeId) {\n this.form.set(this.formBuilder.group({}));\n this.selectedRtCkTypeId.set(rtCkTypeId);\n this.selectedCkTypeId.set(ckTypeId);\n } else {\n this.form.set(null);\n this.selectedRtCkTypeId.set(null);\n this.selectedCkTypeId.set(null);\n }\n }\n}\n\nexport interface CreateInput {\n /**\n * Parent context: object is always present; ckTypeId, rtId and name are optional (undefined for root-level creation, e.g. when creating under a CK Type or when parentNode is null).\n * Code uses parent?.ckTypeId and parent?.rtId defensively when building associations.\n */\n parent: {\n ckTypeId?: string;\n rtId?: string;\n name?: string;\n };\n /**\n * List of available CK types to choose from when creating a new entity. This is required to populate the dropdown for type selection in the UI.\n */\n ckTypes: CkTypeDto[];\n}\n\nexport interface CreateOutput {\n success: boolean;\n data?: {\n /**\n * The RT ID of the newly created entity. This is returned after a successful creation operation and can be used for further operations or navigation. It is optional because the creation might fail, in which case this value would be undefined.\n */\n createdRtEntityId: string;\n };\n}\n\n","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type UpdateRuntimeEntitiesMutationVariablesDto = Types.Exact<{\n entities: Array<Types.InputMaybe<Types.RtEntityUpdateDto>> | Types.InputMaybe<Types.RtEntityUpdateDto>;\n}>;\n\n\nexport type UpdateRuntimeEntitiesMutationDto = { __typename?: 'OctoMutation', runtime?: { __typename?: 'Runtime', runtimeEntities?: { __typename?: 'RtEntityMutations', update?: Array<{ __typename?: 'RtEntity', rtId: any, attributes?: { __typename?: 'RtEntityAttributeDtoConnection', items?: Array<{ __typename?: 'RtEntityAttribute', attributeName?: string | null, value?: any | null } | null> | null } | null } | null> | null } | null } | null };\n\nexport const UpdateRuntimeEntitiesDocumentDto = gql`\n mutation UpdateRuntimeEntities($entities: [RtEntityUpdate]!) {\n runtime {\n runtimeEntities {\n update(entities: $entities) {\n rtId\n attributes {\n items {\n attributeName\n value\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class UpdateRuntimeEntitiesDtoGQL extends Apollo.Mutation<UpdateRuntimeEntitiesMutationDto, UpdateRuntimeEntitiesMutationVariablesDto> {\n document = UpdateRuntimeEntitiesDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import {\n Component,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n} from \"@angular/core\";\nimport { toObservable, toSignal } from \"@angular/core/rxjs-interop\";\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from \"@angular/forms\";\nimport type { RtEntityUpdateDto } from \"@meshmakers/octo-services\";\nimport { KENDO_BUTTONS } from \"@progress/kendo-angular-buttons\";\nimport { KENDO_DATEINPUTS } from \"@progress/kendo-angular-dateinputs\";\nimport { KENDO_DROPDOWNS } from \"@progress/kendo-angular-dropdowns\";\nimport { KENDO_INPUTS } from \"@progress/kendo-angular-inputs\";\nimport { KENDO_LABEL } from \"@progress/kendo-angular-label\";\nimport { CardModule } from \"@progress/kendo-angular-layout\";\nimport { firstValueFrom, of, startWith, switchMap } from \"rxjs\";\nimport { UpdateRuntimeEntitiesDtoGQL } from \"../../../graphQL/updateRuntimeEntities\";\nimport { Attribute } from \"../../models/attribute\";\nimport {\n DEFAULT_RUNTIME_BROWSER_MESSAGES,\n RuntimeBrowserMessages,\n} from \"../../runtime-browser.model\";\nimport { AttributeCoordinatorService } from \"../../services/attribute-coordinator.service\";\nimport { AttributeDataService } from \"../../services/attribute-data.service\";\nimport { AttributeMapperService } from \"../../services/attribute-mapper.service\";\nimport { AttributesGroupComponent } from \"../attributes-group/attributes-group.component\";\nimport { SharedEditor } from \"../shared-editor/shared-editor\";\n\n@Component({\n selector: \"mm-update-editor-component\",\n imports: [\n ReactiveFormsModule,\n CardModule,\n KENDO_INPUTS,\n KENDO_LABEL,\n KENDO_BUTTONS,\n KENDO_DROPDOWNS,\n KENDO_DATEINPUTS,\n AttributesGroupComponent,\n ],\n template: `\n <div class=\"entity-editor-container\">\n <kendo-card class=\"basic-info-card\">\n <kendo-card-header>\n <h3 class=\"title\">\n {{ resolvedMessages().updateEntity }}\n </h3>\n </kendo-card-header>\n <kendo-card-body>\n <div class=\"info-item\">\n <label>{{ resolvedMessages().name }}</label>\n <kendo-textbox\n [disabled]=\"true\"\n [value]=\"updateInput()!.name\"\n ></kendo-textbox>\n </div>\n\n <div class=\"info-item\">\n <label>{{ resolvedMessages().runtimeCkTypeId }}</label>\n <kendo-textbox\n [disabled]=\"true\"\n [value]=\"updateInput()!.rtCkTypeId\"\n ></kendo-textbox>\n </div>\n\n <div class=\"info-item\">\n <label>{{ resolvedMessages().typeId }}</label>\n <kendo-textbox\n [disabled]=\"true\"\n [value]=\"updateInput()!.ckTypeId!\"\n ></kendo-textbox>\n </div>\n\n <div class=\"info-item\">\n <label>{{ resolvedMessages().runtimeId }}</label>\n <kendo-textbox\n [disabled]=\"true\"\n [value]=\"updateInput()!.rtId\"\n ></kendo-textbox>\n </div>\n </kendo-card-body>\n </kendo-card>\n\n <div class=\"attributes-form-container\">\n @if (updateInput().rtCkTypeId && form()) {\n <mm-attributes-group\n [ckId]=\"updateInput().rtCkTypeId\"\n [parentFormGroup]=\"form()!\"\n [initialValues]=\"entityData()?.initial\"\n [isRecord]=\"false\"\n />\n } @else {\n <div class=\"loading-shimmer\">\n {{ resolvedMessages().loadingEntityDetails }}\n </div>\n }\n </div>\n\n <div class=\"entity-editor-actions\">\n <button\n kendoButton\n (click)=\"onUpdate()\"\n [disabled]=\"!isUpdateButtonEnabled()\"\n >\n {{ resolvedMessages().save }}\n </button>\n <button\n kendoButton\n [disabled]=\"!isCancelButtonEnabled()\"\n (click)=\"cancelRequested.emit()\"\n >\n {{ resolvedMessages().cancel }}\n </button>\n </div>\n </div>\n `,\n styleUrls: [\"../shared-editor/shared-editor.scss\"],\n})\n/**\n * Editor for updating an existing runtime entity: loads entity data by rtId/ckTypeId, builds attribute form\n * via mm-attributes-group, and submits updateRuntimeEntities with mapped attributes. Save is enabled only when\n * form is valid, coordinator is ready, and form is dirty vs initial snapshot.\n */\nexport class UpdateEditorComponent {\n // Inputs\n updateInput = input.required<UpdateInput>();\n messages = input<Partial<RuntimeBrowserMessages>>({});\n protected readonly resolvedMessages = computed<RuntimeBrowserMessages>(\n () => ({\n ...DEFAULT_RUNTIME_BROWSER_MESSAGES,\n ...this.messages(),\n }),\n );\n // Outputs\n updateOutput = output<UpdateOutput>();\n cancelRequested = output<void>();\n // State\n protected isUpdating = signal(false);\n protected isCanceling = signal(false);\n protected form = signal<FormGroup | null>(null);\n protected selectedCkTypeId = signal<string | null>(null);\n protected selectedRtCkTypeId = signal<string | null>(null);\n /** Snapshot of form value when coordinator and entity data are ready; used for dirty check. */\n private initialValue = signal<string | null>(null);\n // Dependencies\n private readonly updateRuntimeEntitiesGQL = inject(\n UpdateRuntimeEntitiesDtoGQL,\n );\n private readonly formBuilder = inject(FormBuilder);\n private readonly dataService = inject(AttributeDataService);\n private readonly mapperService = inject(AttributeMapperService);\n private readonly coordinatorService = inject(AttributeCoordinatorService);\n private readonly sharedEditor = inject(SharedEditor);\n\n private dataLoaded = computed(() => !!this.entityData());\n\n isUpdateButtonEnabled = computed(() => {\n const status = this.formStatusSignal();\n const isLoaded = this.coordinatorService.isFullyLoaded();\n const isDirty = this.formIsDifferentFromInitial();\n\n return (\n !this.isUpdating() &&\n !this.isCanceling() &&\n status === \"VALID\" &&\n isLoaded &&\n isDirty\n );\n });\n\n isCancelButtonEnabled = computed(() => {\n return !this.isUpdating() && !this.isCanceling();\n });\n\n formStatusSignal = toSignal(\n toObservable(this.form).pipe(\n switchMap((f) => {\n if (!f) return of(\"INVALID\");\n return f.statusChanges.pipe(startWith(f.status));\n }),\n ),\n );\n\n formValueSignal = toSignal(\n toObservable(this.form).pipe(\n switchMap((f) => {\n if (!f) return of(null);\n return f.valueChanges.pipe(startWith(f.getRawValue()));\n }),\n ),\n );\n\n /**\n * Dirty check: current form value vs snapshot taken when data was loaded.\n * Uses JSON.stringify for stability; do not replace with a custom deep-equal (caused regressions).\n * Known limitations: File objects serialize as {}, Dates as ISO strings. Circular refs are guarded with try/catch.\n */\n formIsDifferentFromInitial = computed(() => {\n const current = this.formValueSignal();\n const initial = this.initialValue();\n\n if (!current || initial == null) return false;\n\n try {\n return JSON.stringify(current) !== initial;\n } catch {\n return true;\n }\n });\n\n protected entityData = toSignal(\n toObservable(this.updateInput).pipe(\n switchMap((input) =>\n this.dataService.getRtEntityValues$(input.rtId, input.ckTypeId!),\n ),\n ),\n );\n\n constructor() {\n this.coordinatorService.reset();\n // INIT: React to input change — reset form and sync type ids from input\n effect(() => {\n const input = this.updateInput();\n this.form.set(this.formBuilder.group({}));\n this.selectedRtCkTypeId.set(input.rtCkTypeId);\n this.selectedCkTypeId.set(input.ckTypeId);\n });\n\n // SNAPSHOT: Take it only once when coordinator and data are ready\n effect(() => {\n const isCoordinatorReady = this.coordinatorService.isFullyLoaded();\n const isDataArrived = this.dataLoaded();\n const currentForm = this.form();\n\n // Boundary condition: everything must be wired\n if (isCoordinatorReady && isDataArrived && currentForm) {\n // Take snapshot without temporal side effects\n const rawValue = currentForm.getRawValue();\n this.initialValue.set(JSON.stringify(rawValue));\n }\n });\n }\n\n /**\n * Validates preconditions for update (form valid, not already updating, ids present).\n */\n protected async onUpdate(): Promise<void> {\n const input = this.updateInput();\n const currentForm = this.form();\n const ckTypeId = this.selectedCkTypeId() ?? input.ckTypeId;\n const rtCkTypeId = this.selectedRtCkTypeId() ?? input.rtCkTypeId;\n\n if (\n this.isUpdating() ||\n !currentForm?.valid ||\n !ckTypeId ||\n !rtCkTypeId ||\n !input.rtId\n ) {\n return;\n }\n\n this.isUpdating.set(true);\n\n try {\n const attributesMetadata = await this.fetchAttributesMetadata(rtCkTypeId);\n const mappedAttributes = await firstValueFrom(\n this.mapFormToAttributes$(\n currentForm.getRawValue(),\n attributesMetadata,\n ),\n );\n\n if (!this.hasValidMappedAttributes(mappedAttributes)) {\n this.sharedEditor.showErrorNotification(\n this.resolvedMessages().failedToUpdateEntity,\n );\n return;\n }\n\n const updateEntity = this.buildUpdatePayload(\n input,\n ckTypeId,\n mappedAttributes,\n );\n const options = this.sharedEditor.prepareUpdateMutationOptions([\n updateEntity,\n ]);\n const result = await firstValueFrom(\n this.updateRuntimeEntitiesGQL.mutate(options),\n );\n\n const updatedRtId =\n result.data?.runtime?.runtimeEntities?.update?.[0]?.rtId;\n if (updatedRtId != null) {\n this.updateOutput.emit({\n success: true,\n data: { updatedRtEntityId: updatedRtId },\n });\n } else {\n this.sharedEditor.showErrorNotification(\n this.resolvedMessages().failedToUpdateEntity,\n );\n }\n } catch (error) {\n console.error(\"Error updating entity:\", error);\n this.sharedEditor.showErrorNotification(\n this.resolvedMessages().failedToUpdateEntity,\n );\n } finally {\n this.isUpdating.set(false);\n }\n }\n\n /** Fetches attribute definitions for the given runtime CK type (single emission). */\n private fetchAttributesMetadata(rtCkTypeId: string): Promise<Attribute[]> {\n return firstValueFrom(\n this.dataService.getAttributesDefinition$(rtCkTypeId, false),\n );\n }\n\n /** Maps form raw value to GraphQL attributes (Observable for composition/retry). */\n private mapFormToAttributes$(\n formValue: unknown,\n attributesMetadata: Attribute[],\n ) {\n return this.mapperService.mapFormValueToGraphQLAttributes$(\n formValue,\n attributesMetadata,\n );\n }\n\n /** Ensures we have at least one mapped attribute (validation). */\n private hasValidMappedAttributes(\n mapped: { attributeName: string; value: unknown }[] | null | undefined,\n ): boolean {\n return Array.isArray(mapped) && mapped.length > 0;\n }\n\n /** Builds the update mutation payload: rtId + item { ckTypeId, attributes }. */\n private buildUpdatePayload(\n input: UpdateInput,\n ckTypeId: string,\n attributes: { attributeName: string; value: unknown }[],\n ): RtEntityUpdateDto {\n return {\n rtId: input.rtId,\n item: {\n ckTypeId,\n attributes,\n },\n };\n }\n}\n\nexport interface UpdateInput {\n /**\n * The name of the entity being updated. This is required to display the name of the entity in the UI.\n */\n name: string;\n /**\n * The RT ID of the entity being updated. This is required to identify which entity to update in the backend.\n */\n rtId: string;\n /**\n * The RT CK type ID of the entity being updated. This is required to understand the structure and attributes of the entity for proper mapping and validation during the update operation.\n */\n rtCkTypeId: string;\n /**\n * The CK type ID of the entity being updated. This is required to understand the structure and attributes of the entity for proper mapping and validation during the update operation.\n */\n ckTypeId: string;\n}\n\nexport interface UpdateOutput {\n success: boolean;\n data?: {\n /**\n * The RT ID of the updated entity. This is returned after a successful update operation and can be used for further operations or navigation. It is optional because the update might fail, in which case this value would be undefined.\n */\n updatedRtEntityId: string;\n };\n}\n\n","import { CommonModule } from \"@angular/common\";\nimport {\n AfterViewInit,\n Component,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n} from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport {\n CommandItemExecuteEventArgs,\n TreeItemDataTyped,\n} from \"@meshmakers/shared-services\";\nimport { ListViewComponent } from \"@meshmakers/shared-ui\";\nimport { ButtonModule } from \"@progress/kendo-angular-buttons\";\nimport { SVGIconModule } from \"@progress/kendo-angular-icons\";\nimport { eyeIcon } from \"@progress/kendo-svg-icons\";\nimport { CkModelDto, CkTypeDto, RtEntityDto } from \"../../graphQL/globalTypes\";\nimport { CkTypeEntitiesDataSourceDirective } from \"../data-sources/ck-type-entities-data-source.directive\";\nimport { EntityDetailDataSource } from \"../data-sources/entity-detail-data-source.service\";\nimport { RtEntityIdHelper } from \"../models/rt-entity-id\";\nimport {\n DEFAULT_RUNTIME_BROWSER_MESSAGES,\n RuntimeBrowserMessages,\n} from \"../runtime-browser.model\";\nimport { RuntimeBrowserStateService } from \"../services/runtime-browser-state.service\";\nimport { TypeHelperService } from \"../services/type-helper.service\";\nimport {\n CreateEditorComponent,\n CreateInput,\n CreateOutput,\n} from \"./create-editor/create-editor-component\";\nimport { EntityDetailViewComponent } from \"./entity-detail-view.component\";\nimport {\n UpdateEditorComponent,\n UpdateInput,\n UpdateOutput,\n} from \"./update-editor/update-editor-component\";\n\n// Extended type to handle both Runtime Entities and CK Models/Types\ntype BrowserItem =\n | RtEntityDto\n | CkModelDto\n | CkTypeDto\n | { isCkModelsRoot?: boolean; ckModelId?: string };\n\n/** Payload emitted when create or update finishes; parent uses it to refresh tree and optionally reload detail view. */\nexport interface EntitySavedEvent {\n parentCkTypeId?: string;\n parentRtId?: string;\n /** True when save was an update; parent should reload detail view after tree refresh. */\n isUpdate?: boolean;\n}\n\n@Component({\n selector: \"mm-runtime-browser-details\",\n imports: [\n CommonModule,\n ButtonModule,\n SVGIconModule,\n EntityDetailViewComponent,\n ListViewComponent,\n CkTypeEntitiesDataSourceDirective,\n CreateEditorComponent,\n UpdateEditorComponent,\n ],\n template: `\n <div class=\"runtime-browser-details\">\n @if (isCreateModeEnabled) {\n <mm-create-editor-component\n [createInput]=\"createInput!\"\n [messages]=\"_messages\"\n (cancelRequested)=\"onCancel()\"\n (createOutput)=\"onEntityCreationFinished($event)\"\n >\n </mm-create-editor-component>\n } @else if (isUpdateModeEnabled) {\n <mm-update-editor-component\n [updateInput]=\"updateInput!\"\n [messages]=\"_messages\"\n (cancelRequested)=\"onCancel()\"\n (updateOutput)=\"onEntityUpdateFinished($event)\"\n >\n </mm-update-editor-component>\n } @else {\n @if (!selectedItem) {\n <div class=\"no-selection\">\n <div class=\"placeholder-content\">\n <div class=\"placeholder-icon\">\n <span class=\"k-icon k-i-information\"></span>\n </div>\n <h3>{{ _messages.title }}</h3>\n <p>{{ _messages.selectItem }}</p>\n </div>\n </div>\n }\n\n @if (selectedItem) {\n <div class=\"entity-details\">\n @if (typeHelperService.isRuntimeEntity(selectedItem.item)) {\n <mm-entity-detail-view\n [entity]=\"getEntityForDisplay()\"\n [loading]=\"loading\"\n [error]=\"error\"\n [messages]=\"_messages\"\n (retry)=\"loadFullEntityDetails()\"\n (navigateToEntity)=\"\n navigateToEntity($event.rtId, $event.ckTypeId)\n \"\n >\n </mm-entity-detail-view>\n } @else if (isCkModel(selectedItem.item)) {\n <div class=\"ck-model-details\">\n <h3>\n {{ _messages.constructionKitModel }}\n </h3>\n <p>\n <strong>{{ _messages.fullName }}:</strong>\n {{ getCkModelIdFullName(selectedItem.item) }}\n </p>\n <p>\n <strong>{{ _messages.semanticName }}:</strong>\n {{ getCkModelIdSemanticName(selectedItem.item) }}\n </p>\n <p>\n <strong>{{ _messages.modelName }}:</strong>\n {{ getCkModelIdName(selectedItem.item) }}\n </p>\n <p>\n <strong>{{ _messages.version }}:</strong>\n {{ getCkModelIdVersion(selectedItem.item) }}\n </p>\n <p>\n <strong>{{ _messages.state }}:</strong>\n {{ getCkModelState(selectedItem.item) }}\n </p>\n <p class=\"info-text\">\n {{ _messages.selectTypeFromTree }}\n </p>\n </div>\n } @else if (isCkType(selectedItem.item)) {\n <div class=\"ck-type-details\">\n <div class=\"type-header\">\n <h3>\n {{ _messages.type }}:\n {{ getCkTypeId(selectedItem.item) }}\n </h3>\n <div class=\"type-metadata\">\n @if (isCkTypeAbstract(selectedItem.item)) {\n <span class=\"badge abstract\">{{\n _messages.abstract\n }}</span>\n }\n @if (isCkTypeFinal(selectedItem.item)) {\n <span class=\"badge final\">{{ _messages.final }}</span>\n }\n @if (getCkTypeBaseType(selectedItem.item)) {\n <span class=\"base-type\"\n >{{ _messages.base }}:\n {{ getCkTypeBaseType(selectedItem.item) }}</span\n >\n }\n </div>\n </div>\n\n <div class=\"entities-table\">\n <h4>\n {{ _messages.runtimeEntities }}\n </h4>\n <mm-list-view\n mmCkTypeEntitiesDataSource\n #dir=\"mmCkTypeEntitiesDataSource\"\n [sortable]=\"true\"\n [pageable]=\"{ buttonCount: 3, pageSizes: [10, 20, 50] }\"\n [pageSize]=\"20\"\n [selectable]=\"{ mode: 'single', enabled: true }\"\n [columns]=\"ckTypeColumns\"\n [actionCommandItems]=\"[ckTypeViewDetailsCommand]\"\n >\n </mm-list-view>\n </div>\n </div>\n } @else if (isCkModelsRoot(selectedItem.item)) {\n <div class=\"ck-models-root\">\n <h3>\n {{ _messages.constructionKitModels }}\n </h3>\n <p class=\"info-text\">\n {{ _messages.browseModelsAndTypes }}\n </p>\n </div>\n }\n </div>\n }\n }\n </div>\n `,\n styleUrls: [\"./runtime-browser-details.component.scss\"],\n})\nexport class RuntimeBrowserDetailsComponent\n implements OnChanges, AfterViewInit\n{\n @Input() selectedItem: TreeItemDataTyped<BrowserItem> | null = null;\n @Input() set messages(value: Partial<RuntimeBrowserMessages>) {\n this._messages = { ...DEFAULT_RUNTIME_BROWSER_MESSAGES, ...value };\n }\n protected _messages: RuntimeBrowserMessages = {\n ...DEFAULT_RUNTIME_BROWSER_MESSAGES,\n };\n @Output() entitySaved = new EventEmitter<EntitySavedEvent | void>();\n @ViewChild(\"dir\", { static: false })\n dataSourceDirective?: CkTypeEntitiesDataSourceDirective;\n\n private readonly router = inject(Router);\n private readonly route = inject(ActivatedRoute);\n private readonly entityDataSource = inject(EntityDetailDataSource);\n private readonly stateService = inject(RuntimeBrowserStateService);\n\n protected readonly typeHelperService = inject(TypeHelperService);\n protected readonly detailsIcon = eyeIcon;\n protected fullEntity: RtEntityDto | null = null;\n\n protected get ckTypeColumns() {\n return [\n {\n field: \"rtId\",\n displayName: this._messages.runtimeId,\n dataType: \"text\" as const,\n },\n {\n field: \"ckTypeId\",\n displayName: this._messages.typeId,\n dataType: \"text\" as const,\n },\n {\n field: \"rtWellKnownName\",\n displayName: this._messages.wellKnownName,\n dataType: \"text\" as const,\n },\n {\n field: \"rtCreationDateTime\",\n displayName: this._messages.created,\n format: \"short\" as const,\n dataType: \"iso8601\" as const,\n },\n {\n field: \"rtChangedDateTime\",\n displayName: this._messages.modified,\n format: \"short\" as const,\n dataType: \"iso8601\" as const,\n },\n ];\n }\n\n protected get ckTypeViewDetailsCommand() {\n return {\n id: \"view\",\n type: \"link\" as const,\n text: this._messages.viewDetails,\n svgIcon: this.detailsIcon,\n onClick: this.onViewEntityDetails,\n };\n }\n\n protected loading = false;\n protected error: string | null = null;\n private pendingRtCkTypeId: string | null = null;\n\n protected isCreateModeEnabled = false;\n protected isUpdateModeEnabled = false;\n protected createInput: CreateInput | undefined = undefined;\n protected updateInput: UpdateInput | undefined = undefined;\n\n ngAfterViewInit(): void {\n // If we have a pending CK type ID, set it now\n if (this.pendingRtCkTypeId && this.dataSourceDirective) {\n console.debug(\n \"AfterViewInit: Setting pending CK Type ID:\",\n this.pendingRtCkTypeId,\n );\n this.dataSourceDirective.setRtCkTypeId(this.pendingRtCkTypeId);\n this.pendingRtCkTypeId = null;\n }\n }\n\n public async ngOnChanges(changes: SimpleChanges): Promise<void> {\n if (changes[\"selectedItem\"] && this.selectedItem) {\n console.debug(\"Selected item changed:\", this.selectedItem);\n\n // If it's a CK Type, update the data source with the type ID\n if (this.isCkType(this.selectedItem.item)) {\n const rtCkTypeId = this.getRtCkTypeId(this.selectedItem.item);\n console.debug(\"Setting CK Type ID:\", rtCkTypeId);\n\n // Use setTimeout to ensure ViewChild is initialized\n setTimeout(() => {\n if (this.dataSourceDirective) {\n console.debug(\n \"ngOnChanges: ViewChild ready, setting CK Type ID:\",\n rtCkTypeId,\n );\n this.dataSourceDirective.setRtCkTypeId(rtCkTypeId);\n } else {\n console.debug(\n \"ngOnChanges: ViewChild not ready, storing pending CK Type ID:\",\n rtCkTypeId,\n );\n this.pendingRtCkTypeId = rtCkTypeId;\n }\n }, 0);\n } else {\n // Load full entity details for runtime entities\n await this.loadFullEntityDetails();\n // Clear any pending CK type ID\n this.pendingRtCkTypeId = null;\n }\n } else if (changes[\"selectedItem\"] && !this.selectedItem) {\n this.fullEntity = null;\n this.error = null;\n this.pendingRtCkTypeId = null;\n }\n }\n\n protected async loadFullEntityDetails(): Promise<void> {\n // Only load full details for runtime entities\n const item = this.selectedItem?.item;\n if (!this.typeHelperService.isRuntimeEntity(item)) {\n // Not a runtime entity, clear the full entity\n this.fullEntity = null;\n this.loading = false;\n this.error = null;\n return;\n }\n\n const runtimeEntity = item as RtEntityDto;\n this.loading = true;\n this.error = null;\n\n try {\n this.fullEntity = await this.entityDataSource.fetchEntityDetails(\n runtimeEntity.rtId,\n runtimeEntity.ckTypeId!,\n );\n\n if (!this.fullEntity) {\n this.error = this._messages.couldNotLoadEntityDetails;\n }\n } catch (error) {\n console.error(\"Failed to load full entity details:\", error);\n this.error = this._messages.failedToLoadEntityDetails;\n // Fall back to the basic entity data\n this.fullEntity = runtimeEntity;\n } finally {\n this.loading = false;\n }\n }\n\n protected async navigateToDetails(): Promise<void> {\n const item = this.selectedItem?.item;\n if (!this.typeHelperService.isRuntimeEntity(item)) {\n return;\n }\n\n const runtimeEntity = item as RtEntityDto;\n\n // Save current state before navigating\n this.stateService.saveState(this.selectedItem);\n\n const encodedId = RtEntityIdHelper.encode(\n runtimeEntity.rtId,\n runtimeEntity.ckTypeId,\n );\n\n await this.router.navigate([\"entity\", encodedId], {\n relativeTo: this.route,\n });\n }\n\n protected async navigateToEntity(\n rtId: string,\n ckTypeId: string,\n ): Promise<void> {\n if (!rtId || !ckTypeId || rtId === \"Unknown\" || ckTypeId === \"Unknown\") {\n return;\n }\n\n const encodedId = RtEntityIdHelper.encode(rtId, ckTypeId);\n await this.router.navigate([\"entity\", encodedId], {\n relativeTo: this.route,\n });\n }\n\n protected getEntityForDisplay(): RtEntityDto | null {\n if (this.fullEntity) {\n return this.fullEntity;\n }\n\n const item = this.selectedItem?.item;\n if (this.typeHelperService.isRuntimeEntity(item)) {\n return item as RtEntityDto;\n }\n\n return null;\n }\n\n protected isCkModel(item: BrowserItem): item is CkModelDto {\n return !!item && \"id\" in item && !(\"rtId\" in item) && !(\"ckTypeId\" in item);\n }\n\n protected isCkType(item: BrowserItem): item is CkTypeDto {\n return !!item && \"ckTypeId\" in item && !(\"rtId\" in item) && !(\"id\" in item);\n }\n\n protected isCkModelsRoot(\n item: BrowserItem,\n ): item is { isCkModelsRoot?: boolean; ckModelId?: string } {\n return !!item && \"isCkModelsRoot\" in item;\n }\n\n // Helper methods to get CK Model properties\n protected getCkModelIdFullName(item: BrowserItem): string {\n if (!this.isCkModel(item)) return \"Unknown\";\n return item.id.fullName || \"Unknown\";\n }\n\n protected getCkModelIdName(item: BrowserItem): string {\n if (!this.isCkModel(item)) return \"Unknown\";\n return item.id.name || \"Unknown\";\n }\n\n protected getCkModelIdVersion(item: BrowserItem): string {\n if (!this.isCkModel(item)) return \"Unknown\";\n return item.id.version || \"Unknown\";\n }\n\n protected getCkModelIdSemanticName(item: BrowserItem): string {\n if (!this.isCkModel(item)) return \"Unknown\";\n return item.id.semanticVersionedFullName || \"Unknown\";\n }\n\n protected getCkModelState(item: BrowserItem): string {\n if (!this.isCkModel(item)) return \"Unknown\";\n return item.modelState || \"Unknown\";\n }\n\n // Helper methods to get CK Type properties\n protected getCkTypeId(item: BrowserItem): string {\n if (!this.isCkType(item)) return \"Unknown\";\n return item.ckTypeId.fullName || \"Unknown\";\n }\n\n protected getRtCkTypeId(item: BrowserItem): string {\n if (!this.isCkType(item)) return \"Unknown\";\n return item.rtCkTypeId || \"Unknown\";\n }\n\n protected isCkTypeAbstract(item: BrowserItem): boolean {\n return this.isCkType(item) && item.isAbstract === true;\n }\n\n protected isCkTypeFinal(item: BrowserItem): boolean {\n return this.isCkType(item) && item.isFinal === true;\n }\n\n protected getCkTypeBaseType(item: BrowserItem): string | null {\n if (!this.isCkType(item)) return null;\n return item.baseType?.ckTypeId.fullName || null;\n }\n\n protected onViewEntityDetails = async (\n eventArgs: CommandItemExecuteEventArgs,\n ): Promise<void> => {\n const entity = eventArgs.data;\n if (this.typeHelperService.isRuntimeEntity(entity)) {\n await this.navigateToEntity(entity.rtId, entity.ckTypeId);\n }\n };\n\n /**\n * Activates the creation UI and provides necessary data\n * @param parentNode The tree node under which the new entity will be created, or null for root-level creation\n * @param allowedTypes List of compatible entity types for the new node\n */\n public enterCreateMode(\n parentNode: TreeItemDataTyped<BrowserItem> | null,\n allowedTypes: CkTypeDto[],\n ): void {\n const rtEntityDto = parentNode as TreeItemDataTyped<RtEntityDto>;\n\n this.createInput = {\n parent: {\n ckTypeId: rtEntityDto?.item.ckTypeId,\n rtId: rtEntityDto?.item.rtId,\n name: parentNode?.text ?? \"\",\n },\n ckTypes: allowedTypes,\n };\n\n // Toggle the UI state to show the creation form\n this.isCreateModeEnabled = true;\n this.isUpdateModeEnabled = false;\n }\n\n public enterEditMode(\n selectedItem: TreeItemDataTyped<BrowserItem> | null,\n rtCkTypeId: string | undefined,\n ): void {\n const rtEntityDto = selectedItem as TreeItemDataTyped<RtEntityDto>;\n const rtId = rtEntityDto?.item?.rtId ?? \"\";\n const ckTypeId = rtEntityDto?.item?.ckTypeId;\n\n if (!rtId || !ckTypeId || !rtCkTypeId) {\n console.warn(\n \"Enter edit mode skipped: missing rtId, ckTypeId or rtCkTypeId.\",\n { rtId, ckTypeId, rtCkTypeId },\n );\n return;\n }\n\n const name = rtEntityDto?.text ?? \"\";\n this.updateInput = {\n name,\n rtId,\n rtCkTypeId,\n ckTypeId,\n };\n\n this.isCreateModeEnabled = false;\n this.isUpdateModeEnabled = true;\n console.debug(\"Entered update mode with input:\", this.updateInput);\n }\n\n /**\n * Handles the result of the save operation from the child component\n * @param result Object containing success status and new entity details\n */\n public onEntityCreationFinished(result: CreateOutput): void {\n if (result.success) {\n // Use the parent under which we created (from createInput), not the new entity's ID\n const parentRtId = this.createInput?.parent?.rtId;\n if (parentRtId) {\n this.entitySaved.emit({ parentRtId });\n } else {\n // If parent is null or not a runtime entity (e.g., CK Type or Tree root),\n // emit without parent info to refresh entire tree\n this.entitySaved.emit();\n }\n } else {\n // Emit event even on failure to allow cleanup\n this.entitySaved.emit();\n }\n\n this.isCreateModeEnabled = false;\n }\n\n /**\n * Called when update editor saves. Emits so parent refreshes tree, then parent will call\n * reloadCurrentEntityDetails() after refresh so the detail view shows fresh data.\n */\n public onEntityUpdateFinished(result: UpdateOutput): void {\n if (result.success) {\n this.entitySaved.emit({ isUpdate: true });\n } else {\n this.entitySaved.emit();\n }\n this.isUpdateModeEnabled = false;\n }\n\n /**\n * Reloads full entity details for the currently selected item.\n * Called by parent after tree refresh so the detail view shows data after create/update.\n */\n public reloadCurrentEntityDetails(): void {\n this.loadFullEntityDetails();\n }\n\n onCancel() {\n console.debug(\"Creation or update cancelled, resetting state.\");\n\n this.isCreateModeEnabled = false;\n this.isUpdateModeEnabled = false;\n this.createInput = undefined;\n this.updateInput = undefined;\n }\n}\n\n","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type DeleteEntitiesMutationVariablesDto = Types.Exact<{\n rtEntityIds: Array<Types.InputMaybe<Types.RtEntityIdDto>> | Types.InputMaybe<Types.RtEntityIdDto>;\n deleteStrategy?: Types.DeleteStrategiesDto;\n}>;\n\n\nexport type DeleteEntitiesMutationDto = { __typename?: 'OctoMutation', runtime?: { __typename?: 'Runtime', runtimeEntities?: { __typename?: 'RtEntityMutations', delete?: boolean | null } | null } | null };\n\nexport const DeleteEntitiesDocumentDto = gql`\n mutation deleteEntities($rtEntityIds: [RtEntityId]!, $deleteStrategy: DeleteStrategies! = ARCHIVE) {\n runtime {\n runtimeEntities {\n delete(entities: $rtEntityIds, options: $deleteStrategy)\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class DeleteEntitiesDtoGQL extends Apollo.Mutation<DeleteEntitiesMutationDto, DeleteEntitiesMutationVariablesDto> {\n document = DeleteEntitiesDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type GetCkModelsQueryVariablesDto = Types.Exact<{\n after?: Types.InputMaybe<Types.Scalars['String']['input']>;\n first?: Types.InputMaybe<Types.Scalars['Int']['input']>;\n searchFilter?: Types.InputMaybe<Types.SearchFilterDto>;\n fieldFilters?: Types.InputMaybe<Array<Types.InputMaybe<Types.FieldFilterDto>> | Types.InputMaybe<Types.FieldFilterDto>>;\n sort?: Types.InputMaybe<Array<Types.InputMaybe<Types.SortDto>> | Types.InputMaybe<Types.SortDto>>;\n ckId?: Types.InputMaybe<Types.Scalars['String']['input']>;\n}>;\n\n\nexport type GetCkModelsQueryDto = { __typename?: 'OctoQuery', constructionKit?: { __typename?: 'ConstructionKitQuery', models?: { __typename?: 'CkModelDtoConnection', totalCount?: number | null, items?: Array<{ __typename?: 'CkModel', modelState?: Types.ModelStateDto | null, id: { __typename?: 'CkModelId', name: string, version: any, fullName: string, semanticVersionedFullName: string }, dependencies: Array<{ __typename?: 'CkModelId', fullName: string }> } | null> | null } | null } | null };\n\nexport const GetCkModelsDocumentDto = gql`\n query getCkModels($after: String, $first: Int, $searchFilter: SearchFilter, $fieldFilters: [FieldFilter], $sort: [Sort], $ckId: String) {\n constructionKit {\n models(\n after: $after\n first: $first\n searchFilter: $searchFilter\n fieldFilter: $fieldFilters\n sortOrder: $sort\n ckId: $ckId\n ) {\n totalCount\n items {\n id {\n name\n version\n fullName\n semanticVersionedFullName\n }\n modelState\n dependencies {\n fullName\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class GetCkModelsDtoGQL extends Apollo.Query<GetCkModelsQueryDto, GetCkModelsQueryVariablesDto> {\n document = GetCkModelsDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type GetTreeNodesQueryVariablesDto = Types.Exact<{\n rtId: Types.Scalars['OctoObjectId']['input'];\n ckTypeId: Types.Scalars['String']['input'];\n directRoleId: Types.Scalars['String']['input'];\n directTargetCkTypeId: Types.Scalars['String']['input'];\n indirectRoleId: Types.Scalars['String']['input'];\n indirectTargetCkTypeId: Types.Scalars['String']['input'];\n}>;\n\n\nexport type GetTreeNodesQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', items?: Array<{ __typename?: 'RtEntity', rtId: any, ckTypeId: any, attributes?: { __typename?: 'RtEntityAttributeDtoConnection', items?: Array<{ __typename?: 'RtEntityAttribute', attributeName?: string | null, value?: any | null } | null> | null } | null, associations?: { __typename?: 'RtEntityGenericAssociation', targets?: { __typename?: 'RtEntityGenericDtoConnection', items?: Array<{ __typename?: 'RtEntity', rtId: any, ckTypeId: any, attributes?: { __typename?: 'RtEntityAttributeDtoConnection', items?: Array<{ __typename?: 'RtEntityAttribute', attributeName?: string | null, value?: any | null } | null> | null } | null, associations?: { __typename?: 'RtEntityGenericAssociation', targets?: { __typename?: 'RtEntityGenericDtoConnection', totalCount?: number | null } | null } | null } | null> | null } | null } | null } | null> | null } | null } | null };\n\nexport const GetTreeNodesDocumentDto = gql`\n query getTreeNodes($rtId: OctoObjectId!, $ckTypeId: String!, $directRoleId: String!, $directTargetCkTypeId: String!, $indirectRoleId: String!, $indirectTargetCkTypeId: String!) {\n runtime {\n runtimeEntities(rtId: $rtId, ckId: $ckTypeId) {\n items {\n rtId\n ckTypeId\n attributes(attributeNames: [\"name\", \"description\"]) {\n items {\n attributeName\n value\n }\n }\n associations {\n targets(roleId: $directRoleId, ckId: $directTargetCkTypeId, direction: INBOUND) {\n items {\n rtId\n ckTypeId\n attributes(attributeNames: [\"name\", \"description\"]) {\n items {\n attributeName\n value\n }\n }\n associations {\n targets(\n roleId: $indirectRoleId\n ckId: $indirectTargetCkTypeId\n direction: INBOUND\n ) {\n totalCount\n }\n }\n }\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class GetTreeNodesDtoGQL extends Apollo.Query<GetTreeNodesQueryDto, GetTreeNodesQueryVariablesDto> {\n document = GetTreeNodesDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type GetTreesQueryVariablesDto = Types.Exact<{\n ckTypeId: Types.Scalars['String']['input'];\n}>;\n\n\nexport type GetTreesQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', items?: Array<{ __typename?: 'RtEntity', rtId: any, ckTypeId: any, attributes?: { __typename?: 'RtEntityAttributeDtoConnection', items?: Array<{ __typename?: 'RtEntityAttribute', attributeName?: string | null, value?: any | null } | null> | null } | null, associations?: { __typename?: 'RtEntityGenericAssociation', targets?: { __typename?: 'RtEntityGenericDtoConnection', totalCount?: number | null } | null } | null } | null> | null } | null } | null };\n\nexport const GetTreesDocumentDto = gql`\n query getTrees($ckTypeId: String!) {\n runtime {\n runtimeEntities(ckId: $ckTypeId) {\n items {\n rtId\n ckTypeId\n attributes(attributeNames: [\"name\", \"description\"]) {\n items {\n attributeName\n value\n }\n }\n associations {\n targets(\n roleId: \"System/ParentChild\"\n ckId: \"Basic/TreeNode\"\n direction: INBOUND\n ) {\n totalCount\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class GetTreesDtoGQL extends Apollo.Query<GetTreesQueryDto, GetTreesQueryVariablesDto> {\n document = GetTreesDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from './globalTypes';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type UpdateTreeNodesMutationVariablesDto = Types.Exact<{\n entities: Array<Types.InputMaybe<Types.BasicTreeNodeInputUpdateDto>> | Types.InputMaybe<Types.BasicTreeNodeInputUpdateDto>;\n}>;\n\n\nexport type UpdateTreeNodesMutationDto = { __typename?: 'OctoMutation', runtime?: { __typename?: 'Runtime', basicTreeNodes?: { __typename?: 'BasicTreeNodeMutations', update?: Array<{ __typename?: 'BasicTreeNode', rtId: any } | null> | null } | null } | null };\n\nexport const UpdateTreeNodesDocumentDto = gql`\n mutation UpdateTreeNodes($entities: [BasicTreeNodeInputUpdate]!) {\n runtime {\n basicTreeNodes {\n update(entities: $entities) {\n rtId\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class UpdateTreeNodesDtoGQL extends Apollo.Mutation<UpdateTreeNodesMutationDto, UpdateTreeNodesMutationVariablesDto> {\n document = UpdateTreeNodesDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import { Injectable, inject } from '@angular/core';\nimport {\n AssociationModOptionsDto,\n BasicTreeNodeInputUpdateDto,\n CkModelDto,\n CkTypeDto,\n CkTypeMetaData,\n GetCkModelByIdDtoGQL,\n GetCkTypesDtoGQL,\n GraphDirectionDto,\n LevelMetaData,\n RtAssociationDto,\n RtAssociationMetaData,\n RtEntityDto,\n} from '@meshmakers/octo-services';\nimport { TreeItemDataTyped } from '@meshmakers/shared-services';\nimport {\n fileIcon,\n folderMoreIcon,\n folderOpenIcon,\n gearIcon,\n} from '@progress/kendo-svg-icons';\nimport { Apollo } from 'apollo-angular';\nimport { firstValueFrom } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { OctoGraphQlHierarchyDataSource } from '../../data-sources/octo-graph-ql-hierarchy-data-source';\nimport { DeleteEntitiesDtoGQL } from '../../graphQL/deleteEntities';\nimport { GetCkModelsDtoGQL } from '../../graphQL/getCkModels';\nimport {\n GetRuntimeEntityAssociationsByIdDtoGQL,\n GetRuntimeEntityAssociationsByIdQueryDto,\n} from '../../graphQL/getRuntimeEntityAssociationsById';\nimport { GetTreeNodesDtoGQL } from '../../graphQL/getTreeNodes';\nimport { GetTreesDtoGQL } from '../../graphQL/getTrees';\nimport { UpdateTreeNodesDtoGQL } from '../../graphQL/updateTreeNodes';\nimport { code, storage } from '../icons/custom-svg-icons';\nimport { TypeHelperService } from '../services/type-helper.service';\n\n// Extended type to handle both Runtime Entities and CK Models/Types\ntype BrowserItem =\n | RtEntityDto\n | CkModelDto\n | CkTypeDto\n | { isCkModelsRoot?: boolean; ckModelId?: string };\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RuntimeBrowserDataSource extends OctoGraphQlHierarchyDataSource<BrowserItem> {\n private readonly getTreesDtoGQL = inject(GetTreesDtoGQL);\n private readonly getTreeNodesDtoGQL = inject(GetTreeNodesDtoGQL);\n private readonly getCkModelsGQL = inject(GetCkModelsDtoGQL);\n private readonly getCkTypesGQL = inject(GetCkTypesDtoGQL);\n private readonly getCkModelByIdDtoGQL = inject(GetCkModelByIdDtoGQL);\n private readonly deleteEntitiesDtoGQL = inject(DeleteEntitiesDtoGQL);\n private readonly getRuntimeEntityAssociationsByIdDtoGQL = inject(\n GetRuntimeEntityAssociationsByIdDtoGQL,\n );\n private readonly updateTreeNodesDtoGQL = inject(UpdateTreeNodesDtoGQL);\n private readonly typeHelperService = inject(TypeHelperService);\n private isCkModelsRoot(\n item: BrowserItem,\n ): item is { isCkModelsRoot?: boolean; ckModelId?: string } {\n return !!item && 'isCkModelsRoot' in item;\n }\n\n private isCkModel(item: BrowserItem): item is CkModelDto {\n return !!item && 'id' in item && !('rtId' in item) && !('ckTypeId' in item);\n }\n\n private isCkType(item: BrowserItem): item is CkTypeDto {\n return !!item && 'ckTypeId' in item && !('rtId' in item) && !('id' in item);\n }\n\n // Define metadata for different entity types and their hierarchical relationships\n private static readonly levelMetaData: LevelMetaData[] = [\n new LevelMetaData(\n 'Basic/Tree',\n [new RtAssociationMetaData('System/ParentChild', 'Basic/TreeNode')],\n [\n new RtAssociationMetaData('System/ParentChild', 'Basic/TreeNode'),\n new RtAssociationMetaData('Basic/RelatedClassification', 'Basic/Asset'),\n ],\n ),\n new LevelMetaData(\n '*',\n [\n new RtAssociationMetaData('System/ParentChild', 'Basic/TreeNode'),\n new RtAssociationMetaData('Basic/RelatedClassification', 'Basic/Asset'),\n ],\n [\n new RtAssociationMetaData('System/ParentChild', 'Basic/TreeNode'),\n new RtAssociationMetaData('Basic/RelatedClassification', 'Basic/Asset'),\n ],\n ),\n ];\n\n // Define visual metadata for different entity types\n private static readonly ckTypeMetaData: CkTypeMetaData[] = [\n new CkTypeMetaData('Basic/Tree', 'Tree', 'Tree Structure', folderMoreIcon),\n new CkTypeMetaData('Basic/TreeNode', 'Node', 'Tree Node', fileIcon),\n new CkTypeMetaData('Basic/Asset', 'Asset', 'Asset Entity', code),\n new CkTypeMetaData('System/Database', 'Database', 'Database', storage),\n ];\n\n public override async fetchChildren(\n item: TreeItemDataTyped<BrowserItem>,\n ): Promise<TreeItemDataTyped<BrowserItem>[]> {\n // Handle CK Models root node\n if (this.isCkModelsRoot(item.item)) {\n return this.fetchCkModels();\n }\n\n // Handle CK Model node - fetch its types\n if (this.isCkModel(item.item)) {\n const modelId = item.item.id.fullName;\n return this.fetchCkTypes(modelId);\n }\n\n // Handle CK Type node - no children\n if (this.isCkType(item.item)) {\n return [];\n }\n\n // Handle regular runtime entity\n const rtEntity = item.item as RtEntityDto;\n if (!rtEntity.rtId || !rtEntity.ckTypeId) {\n return [];\n }\n\n // Find metadata for the current item type\n let metaData = RuntimeBrowserDataSource.levelMetaData.find(\n (x) => x.ckTypeId === rtEntity.ckTypeId,\n );\n if (!metaData) {\n metaData = RuntimeBrowserDataSource.levelMetaData.find(\n (x) => x.ckTypeId === '*',\n );\n }\n if (!metaData) {\n return [];\n }\n\n const mergedResultsMap: Record<string, TreeItemDataTyped<BrowserItem>> = {};\n\n // Fetch children based on direct and indirect associations\n for (const directRole of metaData.directRoles) {\n const rtEntitiesOrigins = new Array<RtEntityDto>();\n\n for (const indirectRole of metaData.indirectRoles) {\n try {\n const result = await firstValueFrom(\n this.getTreeNodesDtoGQL\n .fetch({\n variables: {\n rtId: rtEntity.rtId,\n ckTypeId: rtEntity.ckTypeId,\n directRoleId: directRole.roleId,\n directTargetCkTypeId: directRole.ckTypeId,\n indirectRoleId: indirectRole.roleId,\n indirectTargetCkTypeId: indirectRole.ckTypeId,\n },\n })\n .pipe(map((r) => r.data?.runtime?.runtimeEntities?.items?.at(0))),\n );\n\n if (result) {\n rtEntitiesOrigins.push(result as RtEntityDto);\n }\n } catch (error) {\n console.error('Error fetching tree nodes:', error);\n }\n }\n\n // Process children and build tree items\n for (const root of rtEntitiesOrigins) {\n if (!root?.associations?.targets?.items) {\n continue;\n }\n\n for (const child of root.associations.targets.items) {\n if (!child?.rtId || !child?.ckTypeId) {\n continue;\n }\n const rtId = child?.rtId;\n\n if (!mergedResultsMap[rtId]) {\n // Find or create metadata for this child type\n let childMetaData = RuntimeBrowserDataSource.ckTypeMetaData.find(\n (x) => x.ckTypeId === child?.ckTypeId,\n );\n if (!childMetaData) {\n childMetaData = new CkTypeMetaData(\n child?.ckTypeId || 'Unknown',\n child?.ckTypeId || 'Unknown',\n child?.ckTypeId || 'Unknown',\n code,\n );\n }\n\n // Extract display name and description from attributes\n const nameValue = child.attributes?.items?.find(\n (x) => x?.attributeName === 'name',\n )?.value;\n const displayNameValue = child.attributes?.items?.find(\n (x) => x?.attributeName === 'displayName',\n )?.value;\n\n // Debug logging\n if (typeof nameValue === 'object') {\n console.warn('Child name value is an object:', nameValue);\n }\n\n const text =\n (typeof nameValue === 'string'\n ? nameValue\n : typeof nameValue === 'object' && nameValue !== null\n ? JSON.stringify(nameValue)\n : null) ||\n (typeof displayNameValue === 'string'\n ? displayNameValue\n : null) ||\n child.ckTypeId ||\n 'Unknown';\n const descValue = child.attributes?.items?.find(\n (x) => x?.attributeName === 'description',\n )?.value;\n const tooltip =\n (typeof descValue === 'string' ? descValue : null) ||\n `${child.ckTypeId} - ${child.rtId}`;\n\n mergedResultsMap[rtId] = new TreeItemDataTyped<BrowserItem>(\n rtId,\n text,\n tooltip,\n child,\n childMetaData.svgIcon,\n (child?.associations?.targets?.totalCount ?? 0) > 0,\n );\n } else {\n // Update expandable status if object already exists\n mergedResultsMap[rtId].expandable ||=\n (child?.associations?.targets?.totalCount ?? 0) > 0;\n }\n }\n }\n }\n\n return Object.values(mergedResultsMap);\n }\n\n public override async fetchRootNodes(): Promise<\n TreeItemDataTyped<BrowserItem>[]\n > {\n try {\n const result = new Array<TreeItemDataTyped<BrowserItem>>();\n\n // Add CK Models root node\n const ckModelsRoot: BrowserItem = { isCkModelsRoot: true };\n result.push(\n new TreeItemDataTyped<BrowserItem>(\n 'ck-models-root',\n 'CK Models',\n 'Construction Kit Models',\n ckModelsRoot,\n folderOpenIcon,\n true, // expandable\n ),\n );\n\n // Check if Basic construction kit is available before trying to fetch Tree entities\n const isBasicCkAvailable =\n await this.checkBasicConstructionKitAvailable();\n\n if (isBasicCkAvailable) {\n // Fetch all Tree entities as root nodes\n const r = await firstValueFrom(\n this.getTreesDtoGQL.fetch({\n variables: { ckTypeId: 'Basic/Tree' },\n fetchPolicy: 'network-only',\n }),\n );\n\n for (const item of (r.data?.runtime?.runtimeEntities\n ?.items as RtEntityDto[]) ?? []) {\n // Find or create metadata for this item type\n let metaData = RuntimeBrowserDataSource.ckTypeMetaData.find(\n (x) => x.ckTypeId === item?.ckTypeId,\n );\n if (!metaData) {\n metaData = new CkTypeMetaData(\n item?.ckTypeId || 'Unknown',\n item?.ckTypeId || 'Unknown',\n item?.ckTypeId || 'Unknown',\n code,\n );\n }\n\n // Extract display information\n const nameValue = item.attributes?.items?.find(\n (x) => x?.attributeName === 'name',\n )?.value;\n const displayNameValue = item.attributes?.items?.find(\n (x) => x?.attributeName === 'displayName',\n )?.value;\n\n // Debug logging\n if (typeof nameValue === 'object') {\n console.warn('Name value is an object:', nameValue);\n }\n\n const text =\n (typeof nameValue === 'string'\n ? nameValue\n : typeof nameValue === 'object' && nameValue !== null\n ? JSON.stringify(nameValue)\n : null) ||\n (typeof displayNameValue === 'string' ? displayNameValue : null) ||\n item.ckTypeId ||\n 'Unknown';\n const descValue = item.attributes?.items?.find(\n (x) => x?.attributeName === 'description',\n )?.value;\n const tooltip =\n (typeof descValue === 'string' ? descValue : null) ||\n `${item.ckTypeId} - ${item.rtId}`;\n\n result.push(\n new TreeItemDataTyped<BrowserItem>(\n `${item.ckTypeId}@${item.rtId}`,\n text,\n tooltip,\n item,\n metaData.svgIcon,\n (item?.associations?.targets?.totalCount ?? 0) > 0,\n ),\n );\n }\n } else {\n console.debug(\n '⚠️ Basic construction kit not available, skipping Tree entities',\n );\n }\n\n return result;\n } catch (error) {\n console.error('Error fetching root nodes:', error);\n return [];\n }\n }\n\n /**\n * Gets ParentChild association of given Runtime Entity.\n *\n * @param ckTypeId Ck Type Id.\n * @param rtId Runtime Id.\n * @param isParentAssoc if true, fetches only parent, otherwise children.\n *\n * @returns Fetches configured association.\n */\n public async getParentChildAssociation(\n ckTypeId: string,\n rtId: string,\n isParentAssoc: boolean,\n ): Promise<RtAssociationDto[] | undefined> {\n let response: Apollo.QueryResult<GetRuntimeEntityAssociationsByIdQueryDto>;\n\n try {\n response = await firstValueFrom(\n this.getRuntimeEntityAssociationsByIdDtoGQL.fetch({\n variables: {\n ckTypeId,\n rtId,\n direction: isParentAssoc\n ? GraphDirectionDto.OutboundDto\n : GraphDirectionDto.InboundDto,\n roleId: 'System/ParentChild',\n },\n fetchPolicy: 'network-only',\n }),\n );\n } catch (error) {\n console.error('Error on attempt to get association', error);\n return undefined;\n }\n\n const assocs = response?.data?.runtime?.runtimeEntities?.items?.[0]\n ?.associations?.definitions?.items as RtAssociationDto[];\n\n return assocs;\n }\n\n /**\n * Swaps parent of the given object.\n *\n * @param srcObjRtId Runtime Entity Id of the object that is supposed to have its association changed.\n * @param oldParentCkTypeId CkTypeId of the current parent.\n * @param oldParentRtId Runtime Entity Id of the current parent.\n * @param newParentCkTypeId CkTypeId of the target parent.\n * @param newParentRtId Runtime Entity Id of the target parent.\n *\n * @returns true if association was successfully swapped.\n */\n public async updateParentChildAssociation(\n srcObjRtId: string,\n oldParentCkTypeId: string,\n oldParentRtId: string,\n newParentCkTypeId: string,\n newParentRtId: string,\n ) {\n const entitiesToUpdate: BasicTreeNodeInputUpdateDto[] = [\n // source\n {\n rtId: srcObjRtId,\n item: {\n parent: [\n {\n target: {\n rtId: oldParentRtId,\n ckTypeId: oldParentCkTypeId,\n },\n modOption: AssociationModOptionsDto.DeleteDto,\n },\n ],\n },\n },\n // target\n {\n rtId: srcObjRtId,\n item: {\n parent: [\n {\n target: {\n rtId: newParentRtId,\n ckTypeId: newParentCkTypeId,\n },\n modOption: AssociationModOptionsDto.CreateDto,\n },\n ],\n },\n },\n ];\n\n try {\n const response = await firstValueFrom(\n this.updateTreeNodesDtoGQL.mutate({\n variables: {\n entities: entitiesToUpdate,\n },\n fetchPolicy: 'network-only',\n }),\n );\n\n if (response.error) {\n throw response.error;\n }\n } catch (error) {\n console.error(\n 'Error on attempt to switch object parents by changing ParentChild association',\n srcObjRtId,\n error,\n );\n return false;\n }\n\n return true;\n }\n\n /**\n * Returns ckTypeId and rtId of a parent of given runtime entity.\n *\n * @param ckTypeId Runtime entity's ck type\n * @param rtId Runtime entity's runtime id\n * @returns object with parent's ckTypeId and rtId, or undefined when not found or on error.\n */\n public async getRuntimeEntityParentData(\n ckTypeId: string,\n rtId: string,\n ): Promise<\n | {\n ckTypeId: string;\n rtId: string;\n }\n | undefined\n > {\n const isParentAssoc = true;\n const parentAssocs = await this.getParentChildAssociation(\n ckTypeId,\n rtId,\n isParentAssoc,\n );\n\n if (!parentAssocs || parentAssocs.length === 0) {\n return undefined;\n }\n\n // the non-null assertion operator can be used because we've checked array length before\n const parentAssoc = parentAssocs[0]!;\n\n return {\n ckTypeId: parentAssoc.targetCkTypeId,\n rtId: parentAssoc.targetRtId,\n };\n }\n\n /**\n * Performs cascade delete operation on given runtime entity.\n *\n * @param itemToDelete Potential runtime entity.\n * @returns true on successful delete, false on database error or if object is not a runtime entity.\n */\n public async deleteRtEntityAndChildren(\n itemToDelete: TreeItemDataTyped<unknown>,\n ): Promise<boolean> {\n const runtimeEntity = itemToDelete.item;\n\n if (!this.typeHelperService.isRuntimeEntity(runtimeEntity)) {\n console.error(\n 'The item given for deletion is not a runtime entity',\n itemToDelete,\n );\n return false;\n }\n\n try {\n const result = await firstValueFrom(\n this.deleteEntitiesDtoGQL.mutate({\n variables: {\n rtEntityIds: [\n {\n ckTypeId: runtimeEntity.ckTypeId,\n rtId: runtimeEntity.rtId,\n },\n ],\n },\n }),\n );\n\n if (result.error) {\n throw result.error;\n }\n\n return result.data?.runtime?.runtimeEntities?.delete ?? false;\n } catch (error) {\n console.error(\n 'Error on attempt to cascade delete nodes during Delete Node operation',\n error,\n );\n return false;\n }\n }\n\n /**\n * Check if the Basic construction kit is available in the system\n */\n private async checkBasicConstructionKitAvailable(): Promise<boolean> {\n try {\n // Check if any types exist in the Basic model\n const response = await firstValueFrom(\n this.getCkModelByIdDtoGQL.fetch({\n variables: {\n model: 'Basic',\n },\n fetchPolicy: 'network-only',\n }),\n );\n\n const hasBasicTypes =\n (response.data?.constructionKit?.models?.items?.length ?? 0) > 0;\n\n if (hasBasicTypes) {\n console.debug('✅ Basic construction kit is available');\n } else {\n console.debug(\n '⚠️ Basic construction kit not found - no types in Basic model',\n );\n }\n\n return hasBasicTypes;\n } catch (error) {\n console.warn(\n '⚠️ Error checking Basic construction kit availability:',\n error,\n );\n return false; // Assume not available on error\n }\n }\n\n private async fetchCkModels(): Promise<TreeItemDataTyped<BrowserItem>[]> {\n try {\n const response = await firstValueFrom(\n this.getCkModelsGQL.fetch({\n variables: {},\n fetchPolicy: 'network-only',\n }),\n );\n\n const result: TreeItemDataTyped<BrowserItem>[] = [];\n const models = response.data?.constructionKit?.models?.items || [];\n\n for (const model of models) {\n if (!model) {\n continue;\n }\n const modelItem = model as unknown as CkModelDto;\n\n result.push(\n new TreeItemDataTyped<BrowserItem>(\n `model:${model.id.fullName}`,\n model.id.fullName || 'Unknown Model',\n `Model: ${model.id.fullName} (${model.modelState || 'Unknown State'})`,\n modelItem,\n folderMoreIcon,\n true, // Models have types as children\n ),\n );\n }\n\n return result;\n } catch (error) {\n console.error('Error fetching CK models:', error);\n return [];\n }\n }\n\n private async fetchCkTypes(\n modelId: string,\n ): Promise<TreeItemDataTyped<BrowserItem>[]> {\n try {\n const response = await firstValueFrom(\n this.getCkTypesGQL.fetch({\n variables: {\n ckModelIds: [modelId],\n },\n fetchPolicy: 'network-only',\n }),\n );\n\n const result: TreeItemDataTyped<BrowserItem>[] = [];\n const types = response.data?.constructionKit?.types?.items || [];\n\n for (const type of types) {\n if (!type) continue;\n const typeItem = type as unknown as CkTypeDto;\n\n const isAbstract = type.isAbstract ? ' (Abstract)' : '';\n const isFinal = type.isFinal ? ' (Final)' : '';\n\n result.push(\n new TreeItemDataTyped<BrowserItem>(\n `type:${type.ckTypeId.fullName}`,\n type.ckTypeId.fullName || 'Unknown Type',\n `Type: ${type.ckTypeId.fullName}${isAbstract}${isFinal}`,\n typeItem,\n gearIcon,\n false, // Types don't have children in this view\n ),\n );\n }\n\n return result;\n } catch (error) {\n console.error('Error fetching CK types:', error);\n return [];\n }\n }\n}\n","import { GetRuntimeEntityByIdDtoGQL } from '../graphQL/getRuntimeEntityById';\nimport {\n AfterViewInit,\n Component,\n computed,\n inject,\n input,\n ViewChild,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { CommandItem, TreeItemDataTyped } from '@meshmakers/shared-services';\nimport {\n BaseTreeDetailComponent,\n InputService,\n NodeDroppedEvent,\n} from '@meshmakers/shared-ui';\nimport { NotificationService } from '@progress/kendo-angular-notification';\nimport {\n arrowRotateCwIcon,\n locationsIcon,\n pencilIcon,\n plusIcon,\n SVGIcon,\n xIcon,\n} from '@progress/kendo-svg-icons';\nimport { firstValueFrom } from 'rxjs';\nimport {\n CkModelDto,\n CkTypeDto,\n GetCkTypesDtoGQL,\n RtEntityDto,\n} from '../graphQL/globalTypes';\nimport {\n EntitySavedEvent,\n RuntimeBrowserDetailsComponent,\n} from './components/runtime-browser-details.component';\nimport { RuntimeBrowserDataSource } from './data-sources/runtime-browser-data-source.service';\nimport { RtEntityIdHelper } from './models/rt-entity-id';\nimport {\n DEFAULT_RUNTIME_BROWSER_MESSAGES,\n RuntimeBrowserMessages,\n} from './runtime-browser.model';\nimport {\n BrowserState,\n RuntimeBrowserStateService,\n} from './services/runtime-browser-state.service';\nimport { TypeHelperService } from './services/type-helper.service';\n\n// Extended type to handle both Runtime Entities and CK Models/Types\ntype BrowserItem =\n | RtEntityDto\n | CkModelDto\n | CkTypeDto\n | { isCkModelsRoot?: boolean; ckModelId?: string };\n\n@Component({\n selector: 'mm-runtime-browser',\n imports: [BaseTreeDetailComponent, RuntimeBrowserDetailsComponent],\n template: `\n <div class=\"runtime-browser-container kendo-theme-provider\">\n <!-- LCARS Header -->\n <div class=\"lcars-page-header\">\n <div class=\"lcars-header-accent\"></div>\n <div class=\"header-content\">\n <h1 class=\"page-title\">\n <span class=\"title-prefix\">{{\n resolvedMessages().titlePrefix\n }}</span>\n <span class=\"title-main\">{{ resolvedMessages().title }}</span>\n </h1>\n <div class=\"header-stats\">\n <div class=\"stat-badge\">\n <span class=\"badge-icon\">&#9632;</span>\n <span class=\"badge-label\">{{\n resolvedMessages().badgeLabel\n }}</span>\n </div>\n </div>\n </div>\n <div class=\"lcars-header-line\"></div>\n </div>\n\n <!-- Main Content -->\n <div class=\"lcars-content-panel\">\n <div class=\"panel-accent-top\"></div>\n <mm-base-tree-detail\n #treeDetail\n [treeDataSource]=\"dataSource\"\n [leftPaneSize]=\"'25%'\"\n [leftToolbarActions]=\"leftToolbarActions\"\n [rightToolbarActions]=\"rightToolbarActions\"\n (nodeSelected)=\"onNodeSelected($event)\"\n (nodeDropped)=\"onNodeDropped($event)\"\n >\n <mm-runtime-browser-details\n #detailsPanel\n slot=\"detail-panel\"\n [selectedItem]=\"selectedItem\"\n [messages]=\"resolvedMessages()\"\n (entitySaved)=\"onEntitySaved($event)\"\n >\n </mm-runtime-browser-details>\n </mm-base-tree-detail>\n <div class=\"panel-accent-bottom\"></div>\n </div>\n\n <!-- LCARS Footer -->\n <div class=\"lcars-footer\">\n <div class=\"footer-bar bar-1\"></div>\n <div class=\"footer-bar bar-2\"></div>\n <div class=\"footer-bar bar-3\"></div>\n <div class=\"footer-spacer\"></div>\n <div class=\"footer-indicator\">\n <span class=\"indicator-dot\"></span>\n <span class=\"indicator-text\">{{ resolvedMessages().ready }}</span>\n </div>\n </div>\n </div>\n `,\n styleUrls: ['./runtime-browser.component.scss'],\n})\nexport class RuntimeBrowserComponent implements AfterViewInit {\n protected readonly ckTypesGQL = inject(GetCkTypesDtoGQL);\n protected readonly dataSource = inject(RuntimeBrowserDataSource);\n private readonly getRuntimeEntityByIdGQL = inject(GetRuntimeEntityByIdDtoGQL);\n private readonly inputService = inject(InputService);\n private readonly router = inject(Router);\n private readonly route = inject(ActivatedRoute);\n private readonly stateService = inject(RuntimeBrowserStateService);\n private readonly typeHelperService = inject(TypeHelperService);\n private readonly notificationService = inject(NotificationService);\n\n private isSelectedItemAnRtEntity = false;\n private isLoading = false;\n private isCreating = false;\n private isEditing = false;\n\n messages = input<Partial<RuntimeBrowserMessages>>({});\n protected readonly resolvedMessages = computed<RuntimeBrowserMessages>(\n () => ({\n ...DEFAULT_RUNTIME_BROWSER_MESSAGES,\n ...this.messages(),\n }),\n );\n\n @ViewChild('treeDetail', { static: false })\n treeDetail!: BaseTreeDetailComponent<BrowserItem>;\n @ViewChild('detailsPanel', { static: false })\n detailsPanel!: RuntimeBrowserDetailsComponent;\n // Define toolbar actions\n\n protected get leftToolbarActions(): CommandItem[] {\n const messages = this.resolvedMessages();\n return [\n {\n id: 'goto-entity',\n type: 'link',\n text: messages.goToEntity,\n svgIcon: locationsIcon,\n onClick: async () => await this.onGotoEntity(),\n isDisabled: () => !this.isGoToEntityButtonEnabled,\n },\n ];\n }\n\n protected get rightToolbarActions(): CommandItem[] {\n const messages = this.resolvedMessages();\n return [\n {\n id: 'refresh',\n type: 'link',\n text: messages.refresh,\n svgIcon: arrowRotateCwIcon,\n onClick: async () => await this.onRefresh(),\n isDisabled: () => !this.isRefreshButtonEnabled,\n },\n {\n id: 'create',\n type: 'link',\n text: messages.create,\n svgIcon: plusIcon,\n onClick: async () => await this.onCreate(),\n isDisabled: () => !this.isCreateButtonEnabled,\n },\n {\n id: 'edit',\n type: 'link',\n text: messages.edit,\n svgIcon: pencilIcon,\n onClick: async () => await this.onEdit(),\n isDisabled: () => !this.isEditButtonEnabled,\n },\n {\n id: 'delete',\n type: 'link',\n text: messages.delete,\n svgIcon: xIcon,\n onClick: async () => await this.onDelete(),\n isDisabled: () => !this.isDeleteButtonEnabled,\n },\n ];\n }\n\n private _selectedItem: TreeItemDataTyped<BrowserItem> | null = null;\n protected get selectedItem(): TreeItemDataTyped<BrowserItem> | null {\n return this._selectedItem;\n }\n protected set selectedItem(item: TreeItemDataTyped<BrowserItem> | null) {\n this._selectedItem = item;\n this.isSelectedItemAnRtEntity = item\n ? this.typeHelperService.isRuntimeEntity(item.item)\n : false;\n }\n\n private get isGoToEntityButtonEnabled() {\n return !this.isLoading;\n }\n private get isRefreshButtonEnabled() {\n return !this.isLoading;\n }\n private get isCreateButtonEnabled() {\n return !this.isLoading && !this.isCreating;\n }\n private get isDeleteButtonEnabled() {\n return !this.isLoading && this.isSelectedItemAnRtEntity;\n }\n private get isEditButtonEnabled() {\n return !this.isLoading && this.isSelectedItemAnRtEntity && !this.isEditing;\n }\n\n ngAfterViewInit(): void {\n // Restore tree state after the tree has been initialized\n this.waitForTreeComponent().then((isReady) => {\n if (isReady) {\n this.restoreTreeState();\n } else {\n console.warn('⚠️ Tree component not ready, skipping state restoration');\n }\n });\n }\n\n /**\n * Wait for the tree component to be fully initialized and ready\n */\n private async waitForTreeComponent(): Promise<boolean> {\n const maxAttempts = 50; // 5 seconds max (50 * 100ms)\n let attempts = 0;\n\n while (attempts < maxAttempts) {\n if (this.treeDetail?.waitForTreeReady) {\n const isReady = await this.treeDetail.waitForTreeReady();\n if (isReady) {\n console.debug(\n '✅ Tree component chain is ready after',\n attempts * 100,\n 'ms',\n );\n return true;\n }\n }\n\n await new Promise((resolve) => setTimeout(resolve, 100));\n attempts++;\n }\n\n console.warn('⚠️ Tree component chain not ready after 5 seconds');\n return false;\n }\n\n /**\n * Restore the previously selected tree item and expand path\n */\n private async restoreTreeState(): Promise<void> {\n const savedState = this.stateService.getState();\n if (!savedState) {\n console.debug('No saved state to restore');\n return;\n }\n\n console.debug('🔄 Starting tree state restoration:', savedState);\n\n try {\n // First refresh the tree to ensure it's in a clean state\n await this.treeDetail.refreshTree();\n console.debug('🔄 Tree refreshed, starting restoration process');\n\n // Use the saved expanded keys if available, otherwise fall back to parentPath\n let ids: string[] = [];\n if (savedState.expandedKeys && savedState.expandedKeys.length > 0) {\n ids = [...savedState.expandedKeys];\n } else if (savedState.parentPath) {\n // Fallback for old saved states\n for (const pathItem of savedState.parentPath) {\n const id = this.getItemKey(pathItem);\n if (id && id !== 'undefined') {\n ids.push(id);\n }\n }\n }\n\n // Add the selected item's key\n const selectedItemKey = this.getItemKey(savedState);\n if (\n selectedItemKey &&\n selectedItemKey !== 'undefined' &&\n !ids.includes(selectedItemKey)\n ) {\n ids.push(selectedItemKey);\n }\n\n this.treeDetail.setExpandedKeys(ids);\n console.debug('🔑 Expanded keys set for restoration:', ids);\n\n // Give the tree time to expand visually\n await new Promise((resolve) => setTimeout(resolve, 500));\n\n // Create a TreeItemDataTyped from the saved state directly\n const restoredItem = this.createTreeItemFromSavedState(savedState);\n if (restoredItem) {\n console.debug('✅ Successfully restored tree selection:', restoredItem);\n // Set the selected item which will trigger the details display\n this.selectedItem = restoredItem;\n console.debug('🎯 Tree selection and details display restored');\n } else {\n console.debug(\n '❌ Could not create item from saved state, clearing state',\n );\n this.stateService.clearState();\n }\n } catch (error: unknown) {\n console.error('💥 Error restoring tree state:', error);\n this.stateService.clearState();\n }\n }\n\n protected onNodeSelected(treeItem: TreeItemDataTyped<unknown>): void {\n console.debug('Runtime Browser - Node selected:', treeItem);\n this.selectedItem = treeItem as TreeItemDataTyped<BrowserItem>;\n\n // Save the state using the expanded keys from the tree (no recursive search needed)\n this.saveStateFromExpandedKeys(this.selectedItem);\n }\n\n /**\n * Boilerplate for showing warning notification.\n *\n * @param message Message of the warning.\n */\n private _showWarningNotification(message: string) {\n this.notificationService.show({\n content: message,\n hideAfter: 3000,\n position: { horizontal: 'right', vertical: 'top' },\n animation: { type: 'fade', duration: 400 },\n type: { style: 'warning', icon: true },\n });\n }\n\n /**\n * Occurs when item has been dropped on the Runtime Browser tree.\n *\n * @param event Metadata of the drag and drop operation.\n */\n protected async onNodeDropped(event: NodeDroppedEvent<unknown>) {\n console.debug('Runtime Browser - Node dropped:', event);\n\n if (!event.destinationItem) {\n const msg = 'Moving item to the root of the tree is not supported';\n this._showWarningNotification(msg);\n console.debug(msg, event);\n return;\n }\n\n if (!event.sourceParent) {\n const msg = 'Moving item on the root of the tree is not supported';\n this._showWarningNotification(msg);\n console.debug(msg, event);\n return;\n }\n\n if (!event.sourceItem.rtId || !event.destinationItem.rtId) {\n const msg = 'Moving Construction Kit objects is not supported';\n this._showWarningNotification(msg);\n console.debug(msg, event);\n return;\n }\n\n if (\n event.sourceItem.rtId === event.destinationItem.rtId ||\n event.sourceParent.rtId === event.destinationItem.rtId\n ) {\n const msg = 'Dropped entity to same hierarchy level';\n this._showWarningNotification(msg);\n console.debug(msg, event);\n return;\n }\n\n const allowedSrcItemCkTypeIds = ['Basic/TreeNode'];\n\n if (allowedSrcItemCkTypeIds.indexOf(event.sourceItem.ckTypeId) === -1) {\n const msg = 'Moving item other than Basic/TreeNode is not supported';\n this._showWarningNotification(msg);\n console.debug(msg, event);\n return;\n }\n\n const allowedDstParentItemCkTypeIds = ['Basic/TreeNode', 'Basic/Tree'];\n\n if (\n allowedDstParentItemCkTypeIds.indexOf(event.destinationItem.ckTypeId) ===\n -1\n ) {\n const msg = 'Moving item to given parent is not supported';\n this._showWarningNotification(msg);\n console.debug(msg, event);\n return;\n }\n\n try {\n this.isLoading = true;\n this.treeDetail.setEnabledState(false);\n\n const updateSucceeded =\n await this.dataSource.updateParentChildAssociation(\n event.sourceItem.rtId,\n event.sourceParent.ckTypeId,\n event.sourceParent.rtId,\n event.destinationItem.ckTypeId,\n event.destinationItem.rtId,\n );\n\n // Update failed due to query / db error.\n if (!updateSucceeded) {\n console.debug(\n 'Cannot update association due to an error in the GraphQL request.',\n );\n return;\n }\n\n // If new destination item (upper level) is not expanded yet, expand it.\n const expandedKeys = this.treeDetail.getExpandedKeys();\n const expandKey =\n event.destinationItem.ckTypeId === 'Basic/Tree'\n ? `${event.destinationItem.ckTypeId}@${event.destinationItem.rtId}`\n : event.destinationItem.rtId;\n if (expandedKeys.indexOf(expandKey) === -1) {\n this.treeDetail.setExpandedKeys([...expandedKeys, expandKey]);\n }\n\n // Refresh tree if any entity is root node, otherwise do refresh on specified entities.\n if (\n event.refreshItems.some(\n (refItem: RtEntityDto) => refItem.ckTypeId === 'Basic/Tree',\n ) ||\n event.destinationItem.ckTypeId === 'Basic/Tree'\n ) {\n await this.treeDetail.refreshTree();\n } else {\n const entitiesToRefresh = [];\n for (const toRef of event.refreshItems) {\n entitiesToRefresh.push({\n ckTypeId: toRef.ckTypeId,\n rtId: toRef.rtId,\n isRoot: toRef.ckTypeId === 'Basic/Tree',\n });\n }\n\n await this.treeDetail.refreshRuntimeEntities(entitiesToRefresh);\n }\n\n // select item afterwards to better track drag / drop\n this.selectedItem = event.sourceItem\n .dataItem as TreeItemDataTyped<BrowserItem>;\n } catch (error: unknown) {\n console.error(\n 'Error updating tree node parent after drag-and-drop:',\n error,\n );\n } finally {\n this.treeDetail.setEnabledState(true);\n this.isLoading = false;\n }\n }\n\n /**\n * Save the state using the expanded keys from the tree component.\n * This is much more efficient than recursively searching for the path.\n */\n private saveStateFromExpandedKeys(\n selectedItem: TreeItemDataTyped<BrowserItem>,\n ): void {\n // Get the expanded keys directly from the tree component - these represent the path\n const expandedKeys = this.treeDetail?.getExpandedKeys() ?? [];\n console.debug('📍 Saving state with expanded keys:', expandedKeys);\n\n // Convert expanded keys to a simple path representation for the state service\n // The expanded keys already contain the IDs of all expanded parent nodes\n this.stateService.saveStateWithKeys(selectedItem, expandedKeys);\n }\n\n /**\n * Generate a unique key for a tree item (same logic as in TreeComponent)\n */\n private getItemKey(\n dataItem: TreeItemDataTyped<BrowserItem> | BrowserState | BrowserItem,\n ): string {\n const data = this.extractBrowserItem(dataItem);\n\n // For runtime entities\n if (data && 'rtId' in data && 'ckTypeId' in data) {\n return `${String(data.ckTypeId)}@${String(data.rtId)}`;\n }\n\n // For CK Models\n if (data && 'id' in data && !('rtId' in data) && !('ckTypeId' in data)) {\n return `model:${String(data.id)}`;\n }\n\n // For CK Types\n if (data && 'ckTypeId' in data && !('rtId' in data) && !('id' in data)) {\n return `type:${String(data.ckTypeId)}`;\n }\n\n // For special nodes\n if (data && 'isCkModelsRoot' in data && data.isCkModelsRoot) {\n return 'ck-models-root';\n }\n\n // Fallback to text\n return this.getItemText(dataItem) ?? JSON.stringify(data ?? null);\n }\n\n private extractBrowserItem(\n dataItem: TreeItemDataTyped<BrowserItem> | BrowserState | BrowserItem,\n ): BrowserItem | null {\n if (dataItem && typeof dataItem === 'object') {\n if ('item' in dataItem) {\n return (dataItem as TreeItemDataTyped<BrowserItem>).item;\n }\n if ('selectedItemData' in dataItem) {\n return (dataItem as BrowserState).selectedItemData;\n }\n }\n return dataItem as BrowserItem;\n }\n\n private getItemText(\n dataItem: TreeItemDataTyped<BrowserItem> | BrowserState | BrowserItem,\n ): string | undefined {\n if (dataItem && typeof dataItem === 'object') {\n if ('text' in dataItem && typeof dataItem.text === 'string') {\n return dataItem.text;\n }\n if (\n 'selectedItemText' in dataItem &&\n typeof dataItem.selectedItemText === 'string'\n ) {\n return dataItem.selectedItemText;\n }\n }\n return undefined;\n }\n\n /**\n * Create a TreeItemDataTyped from saved state data\n */\n private createTreeItemFromSavedState(\n savedState: BrowserState,\n ): TreeItemDataTyped<BrowserItem> | null {\n try {\n const data = savedState.selectedItemData;\n const text = savedState.selectedItemText;\n const id = savedState.selectedItemId;\n\n if (!data || !text || !id) {\n console.warn('⚠️ Incomplete saved state data:', savedState);\n return null;\n }\n\n // Create a TreeItemDataTyped with the saved data\n return new TreeItemDataTyped<BrowserItem>(\n id,\n text,\n text, // Use text as tooltip\n data,\n null as unknown as SVGIcon, // SVG icon - not critical for restoration\n false, // expandable - not critical for restoration\n );\n } catch (error: unknown) {\n console.error('💥 Error creating tree item from saved state:', error);\n return null;\n }\n }\n\n /**\n * Toolbar action: Open dialog to navigate to entity\n */\n protected async onGotoEntity(): Promise<void> {\n try {\n const messages = this.resolvedMessages();\n const entityIdentifier = await this.inputService.showInputDialog(\n messages.goToEntityTitle,\n messages.goToEntityPrompt,\n 'ckTypeId@rtId',\n messages.go,\n );\n\n if (entityIdentifier) {\n await this.navigateToEntityDetails(entityIdentifier);\n }\n } catch (error: unknown) {\n console.error('Error in goto entity dialog:', error);\n }\n }\n\n /**\n * Toolbar action: Refresh tree data\n */\n protected async onRefresh(): Promise<void> {\n console.debug('Refresh action triggered');\n try {\n const nodes = await this.dataSource.fetchRootNodes();\n console.debug('Tree refreshed with', nodes.length, 'root nodes');\n } catch (error: unknown) {\n console.error('Error refreshing tree:', error);\n }\n }\n\n /**\n * Toolbar action: Delete selected tree node\n */\n protected async onDelete(): Promise<void> {\n console.debug('Delete tree node action triggered');\n\n if (!this.selectedItem) {\n console.warn(\n 'No node selected; cannot perform delete operation on unknown node',\n );\n return;\n }\n\n try {\n this.isLoading = true;\n this.treeDetail.setEnabledState(false);\n\n if (!this.isSelectedItemAnRtEntity) {\n console.warn(\n 'Selected item is not a runtime entity, cannot delete.',\n this.selectedItem,\n );\n return;\n }\n\n const runtimeEntity = this.selectedItem.item as RtEntityDto;\n\n const parentIdPair = await this.dataSource.getRuntimeEntityParentData(\n runtimeEntity.ckTypeId,\n runtimeEntity.rtId,\n );\n\n const deleteState = await this.dataSource.deleteRtEntityAndChildren(\n this.selectedItem,\n );\n if (!deleteState) {\n console.warn(\n 'Runtime entity node deletion failed for selected object',\n this.selectedItem,\n );\n return;\n }\n\n if (parentIdPair) {\n await this.treeDetail.refreshRuntimeEntities([\n {\n ckTypeId: parentIdPair.ckTypeId,\n rtId: parentIdPair.rtId,\n isRoot: parentIdPair.ckTypeId === 'Basic/Tree',\n },\n ]);\n } else {\n // we do not have parent node, so selected node is top level item. So, we need to refresh root nodes\n await this.treeDetail.refreshTree();\n }\n\n this.selectedItem = null;\n } catch (error: unknown) {\n console.error('Error deleting tree node:', error);\n } finally {\n this.treeDetail.setEnabledState(true);\n this.isLoading = false;\n }\n }\n\n /**\n * Navigate to entity details route using the format \"ckTypeId@rtId\"\n * @param entityIdentifier - String in format \"ckTypeId@rtId\"\n * @example navigateToEntityDetails(\"Basic/TreeNode@507f1f77bcf86cd799439011\")\n */\n private async navigateToEntityDetails(\n entityIdentifier: string,\n ): Promise<void> {\n // Parse the identifier\n const parts = entityIdentifier.split('@');\n if (parts.length !== 2) {\n console.error(\n 'Invalid entity identifier format. Expected \"ckTypeId@rtId\"',\n );\n return;\n }\n\n const [ckTypeId, rtId] = parts;\n\n try {\n // Verify entity exists before navigating\n const result = await firstValueFrom(\n this.getRuntimeEntityByIdGQL.fetch({\n variables: {\n ckTypeId: ckTypeId,\n rtId: rtId,\n },\n }),\n );\n\n const entity = result.data?.runtime?.runtimeEntities?.items?.[0];\n if (!entity) {\n console.error(`Entity not found: ${entityIdentifier}`);\n return;\n }\n\n // Navigate to entity detail route using relative path (works across apps)\n if (!RtEntityIdHelper.isValidFormat(entityIdentifier)) {\n console.error(\n 'Invalid entity identifier format. Expected \"ckTypeId@rtId\"',\n );\n return;\n }\n\n const encodedId = RtEntityIdHelper.encodeFromString(entityIdentifier);\n\n await this.router.navigate(['entity', encodedId], {\n relativeTo: this.route,\n });\n\n console.debug(`Navigating to entity details: ${entityIdentifier}`);\n } catch (error: unknown) {\n console.error(`Error navigating to entity ${entityIdentifier}:`, error);\n }\n }\n\n /**\n * Main action to initiate the creation of a new node\n */\n protected async onCreate(): Promise<void> {\n // Anti-spam validation: prevent multiple clicks\n if (this.isCreating) {\n return;\n }\n\n try {\n this.isCreating = true;\n\n // Fetch available Construction Kit types from the API\n const result = await firstValueFrom(this.ckTypesGQL.fetch());\n const allTypes = (\n result.data?.constructionKit?.types?.items ?? []\n ).filter((type): type is CkTypeDto => type != null);\n const isRootLevel = !this.selectedItem;\n const filteredTypes = this.getCompatibleTreeTypes(allTypes, isRootLevel);\n\n // Transition the details panel into Create Mode\n // Pass null as parent if no item is selected (creates root-level entity)\n this.detailsPanel?.enterCreateMode(\n this.selectedItem || null,\n filteredTypes as CkTypeDto[],\n );\n } catch (err) {\n console.error('Failed to load types for creation:', err);\n } finally {\n this.isCreating = false;\n }\n }\n\n protected async onEdit(): Promise<void> {\n // Anti-spam validation: prevent multiple clicks\n if (this.isEditing) {\n return;\n }\n\n try {\n this.isEditing = true;\n\n // Fetch available Construction Kit types from the API\n const result = await firstValueFrom(this.ckTypesGQL.fetch());\n const allTypes = (\n result.data?.constructionKit?.types?.items ?? []\n ).filter((type): type is CkTypeDto => type != null);\n\n const rtEntityDto = this\n .selectedItem as TreeItemDataTyped<RtEntityDto> | null;\n const rtCkTypeId = allTypes.find(\n (type) => type!.rtCkTypeId === rtEntityDto?.item?.ckTypeId,\n )?.ckTypeId?.fullName;\n\n if (!rtCkTypeId) {\n this._showWarningNotification(\n this.resolvedMessages().missingRequiredIdentifiers,\n );\n return;\n }\n\n // Transition the details panel into Edit Mode\n this.detailsPanel?.enterEditMode(this.selectedItem, rtCkTypeId);\n } catch (err) {\n console.error('Failed to load types for editing:', err);\n } finally {\n this.isEditing = false;\n }\n }\n\n /**\n * Filters the list of types to find compatible types for entity creation.\n * For root-level creation, only allows Basic/Tree types.\n * For child creation, allows non-abstract TreeNode types.\n *\n * @param types - All available CK types\n * @param isRootLevel - If true, only Basic/Tree types are allowed\n * @returns Filtered list of compatible types\n */\n private getCompatibleTreeTypes(\n types: CkTypeDto[],\n isRootLevel = false,\n ): CkTypeDto[] {\n // For root-level creation, only allow Basic/Tree types\n if (isRootLevel) {\n return types.filter((type) => {\n const isBasicTree = type?.rtCkTypeId === 'Basic/Tree';\n return isBasicTree;\n });\n }\n\n // For child creation, allow non-abstract TreeNode types\n const filtered = types.filter((type) => {\n const isNotAbstract = type?.isAbstract === false;\n const isTreeNodeFamily = this.isTreeNodeType(type);\n\n return isNotAbstract && isTreeNodeFamily;\n });\n\n // If no TreeNode types found, fallback to all non-abstract types\n if (filtered.length === 0) {\n return types.filter((type) => type?.isAbstract === false);\n }\n\n return filtered;\n }\n\n /**\n * Checks if a specific type or its base type belongs to the TreeNode hierarchy\n */\n private isTreeNodeType(type: CkTypeDto): boolean {\n const typeFullName = type?.ckTypeId?.fullName || '';\n const baseTypeFullName = type?.baseType?.ckTypeId?.fullName || '';\n\n const getShortName = (fullName: string): string => {\n if (!fullName) {\n return '';\n }\n // Handle both dot notation (System.Entity) and slash notation (System/Entity)\n const parts = fullName.includes('/')\n ? fullName.split('/')\n : fullName.split('.');\n return parts[parts.length - 1] || '';\n };\n\n const typeName = getShortName(typeFullName);\n const baseTypeName = getShortName(baseTypeFullName);\n\n // Check if type name ends with TreeNode or is TreeNode\n const isTreeNode = typeName === 'TreeNode' || baseTypeName === 'TreeNode';\n\n // Also check if full name contains TreeNode (for cases like Basic/TreeNode)\n const containsTreeNode =\n typeFullName.includes('TreeNode') ||\n baseTypeFullName.includes('TreeNode');\n\n return isTreeNode || containsTreeNode;\n }\n\n /**\n * Handles entitySaved from the details panel: refreshes the tree, then reloads the detail view\n * when the save was an update so the user sees fresh data.\n */\n protected async onEntitySaved(event: EntitySavedEvent | void): Promise<void> {\n const payload = event ?? undefined;\n const parentInfo =\n payload?.parentRtId != null\n ? { parentRtId: payload.parentRtId }\n : undefined;\n\n await this.refreshTreeAfterCreation(parentInfo);\n\n if (payload?.isUpdate === true) {\n this.detailsPanel?.reloadCurrentEntityDetails();\n }\n }\n\n /**\n * Refresh tree data after entity creation.\n * IMPORTANT: We use refreshTree() instead of refreshRuntimeEntities() because\n * refreshRuntimeEntities() only manipulates expanded keys but doesn't force data\n * reload from the data source. This causes stale data to persist in Kendo TreeView\n */\n protected async refreshTreeAfterCreation(parentInfo?: {\n parentRtId?: string;\n }): Promise<void> {\n if (parentInfo?.parentRtId) {\n // Save expanded keys to restore after refresh\n const expandedKeys = this.treeDetail.getExpandedKeys();\n const keysToRestore = [...expandedKeys];\n\n // Refresh entire tree to clear cache and reload all data\n await this.treeDetail.refreshTree();\n\n // Wait for next microtask tick to allow Angular change detection and Kendo TreeView rendering.\n // This prevents race conditions without using arbitrary timeouts.\n await Promise.resolve();\n this.treeDetail.setExpandedKeys(keysToRestore);\n } else {\n // If parent info is not available (root-level creation or parent is not a runtime entity),\n // refresh entire tree to ensure new root-level entities are visible\n await this.treeDetail.refreshTree();\n }\n }\n}\n","import { Component } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\n\n/**\n * Simple outlet component for runtime browser routes.\n * Use as the parent component when mounting runtime browser routes as children.\n */\n@Component({\n selector: 'mm-runtime-browser-outlet',\n standalone: true,\n imports: [RouterOutlet],\n template: `<router-outlet />`,\n})\nexport class RuntimeBrowserOutletComponent {}\n","import { InjectionToken } from '@angular/core';\nimport { RuntimeBrowserMessages } from './runtime-browser.model';\n\n/**\n * Injection token for RuntimeBrowser messages.\n * Provide this at route or component level to override default English messages (e.g. for i18n).\n */\nexport const RUNTIME_BROWSER_MESSAGES = new InjectionToken<RuntimeBrowserMessages>(\n 'RUNTIME_BROWSER_MESSAGES',\n);\n","import { Component, inject } from '@angular/core';\nimport { RuntimeBrowserComponent } from './runtime-browser.component';\nimport {\n DEFAULT_RUNTIME_BROWSER_MESSAGES,\n RuntimeBrowserMessages,\n} from './runtime-browser.model';\nimport { RUNTIME_BROWSER_MESSAGES } from './runtime-browser.tokens';\n\n/**\n * Page component that wraps RuntimeBrowserComponent with optional message override.\n * Use RUNTIME_BROWSER_MESSAGES token to provide custom/translated messages at route level.\n */\n@Component({\n selector: 'mm-runtime-browser-page',\n standalone: true,\n imports: [RuntimeBrowserComponent],\n template: `<mm-runtime-browser [messages]=\"messages\" />`,\n})\nexport class RuntimeBrowserPageComponent {\n private readonly injectedMessages = inject(RUNTIME_BROWSER_MESSAGES, {\n optional: true,\n });\n\n protected readonly messages: RuntimeBrowserMessages = this.injectedMessages\n ? this.injectedMessages\n : DEFAULT_RUNTIME_BROWSER_MESSAGES;\n}\n","import type { Provider } from '@angular/core';\nimport { Route, Routes } from '@angular/router';\nimport { Roles } from '@meshmakers/shared-auth';\nimport type { SVGIcon } from '@progress/kendo-svg-icons';\nimport { EntityDetailComponent } from './entity-detail.component';\nimport { RuntimeBrowserPageComponent } from './runtime-browser-page.component';\n\n/** Options for creating runtime browser routes. */\nexport interface RuntimeBrowserRouteOptions {\n /** Base path for breadcrumb URLs (e.g. 'repository/browser', 'administration/plant-management'). */\n basePath: string;\n /** Breadcrumb label for the main browser view. Default: 'Runtime Browser'. */\n breadcrumbLabel?: string;\n /** Breadcrumb label for the entity detail view. Default: 'Entity Details'. */\n entityBreadcrumbLabel?: string;\n /** Optional SVG icon for breadcrumbs. */\n svgIcon?: SVGIcon;\n /** Optional custom page component for the main view (overrides RuntimeBrowserPageComponent). */\n pageComponent?: unknown;\n /** Optional route-level providers (e.g. for RUNTIME_BROWSER_MESSAGES). */\n providers?: Provider[];\n}\n\n/**\n * Creates routes for the runtime browser feature (main view + entity detail).\n * Use these as children of a parent route that has a router-outlet.\n *\n * @example\n * // In repository.routes.ts\n * import { storage } from '@meshmakers/octo-ui';\n * {\n * path: 'browser',\n * component: RuntimeBrowserOutletComponent,\n * children: createRuntimeBrowserRoutes({\n * basePath: 'repository/browser',\n * breadcrumbLabel: 'Runtime Browser',\n * entityBreadcrumbLabel: 'Entity Details',\n * svgIcon: storage,\n * }),\n * data: { roles: [Roles.AdminPanelManagement], breadcrumb: [{ label: 'Repository', url: 'repository' }] },\n * }\n */\nexport function createRuntimeBrowserRoutes(\n options: RuntimeBrowserRouteOptions,\n): Routes {\n const {\n basePath,\n breadcrumbLabel = 'Runtime Browser',\n entityBreadcrumbLabel = 'Entity Details',\n svgIcon,\n pageComponent,\n providers = [],\n } = options;\n\n const mainRoute: Route = {\n path: '',\n component: (pageComponent as never) ?? RuntimeBrowserPageComponent,\n data: {\n roles: [Roles.AdminPanelManagement],\n breadcrumb: [\n {\n label: breadcrumbLabel,\n ...(svgIcon && { svgIcon }),\n url: basePath,\n },\n ],\n },\n ...(providers.length > 0 && { providers }),\n };\n\n const entityRoute: Route = {\n path: 'entity/:id',\n component: EntityDetailComponent,\n data: {\n roles: [Roles.AdminPanelManagement],\n breadcrumb: [\n {\n label: breadcrumbLabel,\n ...(svgIcon && { svgIcon }),\n url: basePath,\n },\n {\n label: entityBreadcrumbLabel,\n url: `${basePath}/entity/:id`,\n },\n ],\n },\n };\n\n return [mainRoute, entityRoute];\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n Output,\n ViewChild\n} from '@angular/core';\nimport { PopupComponent } from '@progress/kendo-angular-popup';\nimport { ButtonComponent } from '@progress/kendo-angular-buttons';\nimport { SVGIconComponent } from '@progress/kendo-angular-icons';\nimport { arrowRotateCwIcon } from '@progress/kendo-svg-icons';\n\n@Component({\n selector: 'mm-tenant-switcher',\n standalone: true,\n imports: [\n PopupComponent,\n ButtonComponent,\n SVGIconComponent\n ],\n template: `\n @if (currentTenantId) {\n <div #badgeEl class=\"tenant-badge\" [class.denied]=\"isDenied\" (click)=\"onToggle()\">\n <span class=\"tenant-icon\">{{ isDenied ? '\\u26A0' : '\\u25C6' }}</span>\n <span class=\"tenant-name\">{{ currentTenantId }}</span>\n @if (isDenied) {\n <span class=\"denied-label\">NO ACCESS</span>\n }\n </div>\n\n @if (showPopup && !isDenied) {\n <kendo-popup #popupContent [anchor]=\"badgeEl\"\n (anchorViewportLeave)=\"showPopup = false\">\n <div class=\"tenant-popup\">\n <div class=\"tenant-popup-header\">\n <span>Switch Tenant</span>\n <button kendoButton fillMode=\"flat\" size=\"small\" class=\"refresh-btn\"\n [disabled]=\"isRefreshing\"\n title=\"Refresh tenant list\"\n (click)=\"onRefresh($event)\">\n <kendo-svgicon [icon]=\"refreshIcon\" size=\"small\"\n [class.spinning]=\"isRefreshing\"></kendo-svgicon>\n </button>\n </div>\n <ul class=\"tenant-list\">\n @for (tenant of allowedTenants; track tenant) {\n <li class=\"tenant-list-item\" [class.active]=\"tenant === currentTenantId\"\n (click)=\"onSelectTenant(tenant)\">\n <span class=\"tenant-list-icon\">&#9670;</span>\n <span>{{ tenant }}</span>\n </li>\n }\n </ul>\n </div>\n </kendo-popup>\n }\n }\n `,\n styles: [`\n :host {\n display: inline-flex;\n align-items: center;\n }\n\n .tenant-badge {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 14px;\n background: var(--mm-tenant-switcher-bg, var(--kendo-color-surface, transparent));\n border: 1px solid var(--mm-tenant-switcher-border, var(--kendo-color-border, #dee2e6));\n border-radius: var(--mm-tenant-switcher-radius, 4px 16px 16px 4px);\n box-shadow: var(--mm-tenant-switcher-shadow, none);\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover {\n background: var(--mm-tenant-switcher-bg-hover, var(--kendo-color-base-hover, rgba(0, 0, 0, 0.04)));\n box-shadow: var(--mm-tenant-switcher-shadow-hover, var(--mm-tenant-switcher-shadow, none));\n }\n }\n\n .tenant-icon {\n font-size: 0.7rem;\n color: var(--mm-tenant-switcher-accent, var(--kendo-color-primary, #ff6358));\n animation: var(--mm-tenant-switcher-icon-animation, none);\n }\n\n .tenant-name {\n font-family: var(--mm-tenant-switcher-font, inherit);\n font-size: 0.85rem;\n font-weight: 600;\n letter-spacing: 1px;\n color: var(--mm-tenant-switcher-accent, var(--kendo-color-primary, #ff6358));\n text-transform: uppercase;\n text-shadow: var(--mm-tenant-switcher-text-shadow, none);\n }\n\n .denied {\n background: var(--mm-tenant-switcher-denied-bg, var(--mm-tenant-switcher-bg, var(--kendo-color-surface, transparent)));\n border-color: var(--mm-tenant-switcher-denied-border, var(--kendo-color-error, #d9534f));\n box-shadow: var(--mm-tenant-switcher-denied-shadow, none);\n }\n\n .denied .tenant-icon,\n .denied .tenant-name {\n color: var(--mm-tenant-switcher-denied-accent, var(--kendo-color-error, #d9534f));\n text-shadow: var(--mm-tenant-switcher-denied-text-shadow, none);\n }\n\n .denied-label {\n font-family: var(--mm-tenant-switcher-font, inherit);\n font-size: 0.55rem;\n font-weight: 700;\n letter-spacing: 1px;\n color: var(--mm-tenant-switcher-denied-accent, var(--kendo-color-error, #d9534f));\n background: var(--mm-tenant-switcher-denied-label-bg, color-mix(in srgb, var(--kendo-color-error, #d9534f) 15%, transparent));\n padding: 2px 6px;\n border-radius: 3px;\n }\n\n .tenant-popup {\n min-width: 220px;\n padding: 8px 0;\n background: var(--kendo-color-surface, #fff);\n border: 1px solid var(--kendo-color-border, #dee2e6);\n border-radius: 4px;\n }\n\n .tenant-popup-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 16px;\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--kendo-color-subtle, #666);\n border-bottom: 1px solid var(--kendo-color-border, #dee2e6);\n margin-bottom: 4px;\n }\n\n .refresh-btn {\n padding: 2px;\n min-width: unset;\n }\n\n .spinning {\n animation: spin 0.8s linear infinite;\n }\n\n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n .tenant-list {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n .tenant-list-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 16px;\n cursor: pointer;\n font-size: 0.85rem;\n transition: background 0.15s ease;\n\n &:hover {\n background: var(--kendo-color-base-hover, rgba(0, 0, 0, 0.04));\n }\n\n &.active {\n color: var(--kendo-color-primary, #ff6358);\n font-weight: 600;\n }\n }\n\n .tenant-list-icon {\n font-size: 0.5rem;\n color: var(--kendo-color-subtle, #666);\n }\n\n .tenant-list-item.active .tenant-list-icon {\n color: var(--kendo-color-primary, #ff6358);\n }\n\n @keyframes mm-icon-pulse {\n 0%, 100% { opacity: 1; transform: scale(1); }\n 50% { opacity: 0.7; transform: scale(1.1); }\n }\n `]\n})\nexport class TenantSwitcherComponent {\n @Input() currentTenantId: string | null = null;\n @Input() allowedTenants: string[] = [];\n @Input() isDenied = false;\n\n @Output() tenantSelected = new EventEmitter<string>();\n @Output() refreshRequested = new EventEmitter<void>();\n\n protected readonly refreshIcon = arrowRotateCwIcon;\n protected isRefreshing = false;\n\n @ViewChild('badgeEl', { read: ElementRef })\n private anchor: ElementRef | null = null;\n\n @ViewChild('popupContent', { read: ElementRef })\n private popup: ElementRef | null = null;\n\n showPopup = false;\n\n @HostListener('document:keydown', ['$event'])\n onKeydown(event: KeyboardEvent): void {\n if (event.code === 'Escape') {\n this.showPopup = false;\n }\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.contains(event.target)) {\n this.showPopup = false;\n }\n }\n\n onToggle(): void {\n if (!this.isDenied) {\n this.showPopup = !this.showPopup;\n }\n }\n\n onSelectTenant(tenantId: string): void {\n if (tenantId !== this.currentTenantId) {\n this.tenantSelected.emit(tenantId);\n }\n this.showPopup = false;\n }\n\n onRefresh(event: MouseEvent): void {\n event.stopPropagation();\n if (!this.isRefreshing) {\n this.isRefreshing = true;\n this.refreshRequested.emit();\n // Reset spinning after a short delay to give visual feedback\n setTimeout(() => this.isRefreshing = false, 1500);\n }\n }\n\n private contains(target: EventTarget | null): boolean {\n return (\n (this.anchor?.nativeElement.contains(target) ?? false) ||\n (this.popup?.nativeElement.contains(target) ?? false)\n );\n }\n}\n","/*\n * Public API Surface of octo-ui\n */\nimport { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { provideAnimationsAsync } from '@angular/platform-browser/animations/async';\nimport { provideOctoServices } from '@meshmakers/octo-services';\nimport { provideMmSharedAuth } from '@meshmakers/shared-auth';\nimport { provideMmSharedUi } from '@meshmakers/shared-ui';\nimport { AttributeSortSelectorDialogService } from './lib/attribute-sort-selector-dialog';\nimport { CkTypeSelectorDialogService } from './lib/ck-type-selector-dialog';\nimport { PropertyConverterService } from './lib/property-grid';\nimport { RuntimeEntityVariableDialogService } from './lib/runtime-entity-variable-dialog';\n\nexport * from './lib/attribute-selector-dialog';\nexport * from './lib/attribute-sort-selector-dialog';\nexport * from './lib/ck-type-selector-dialog';\nexport * from './lib/ck-type-selector-input';\nexport * from './lib/data-sources/octo-graph-ql-data-source';\nexport * from './lib/data-sources/octo-graph-ql-hierarchy-data-source';\nexport * from './lib/entity-id-info';\nexport * from './lib/field-filter-editor';\nexport * from './lib/octo-loader';\nexport * from './lib/property-grid';\nexport * from './lib/runtime-browser';\nexport * from './lib/runtime-entity-variable-dialog';\nexport * from './lib/tenant-switcher';\n\n/**\n * Provides OctoUi services using modern Angular provider functions.\n * This is the recommended approach for library providers.\n */\nexport function provideOctoUi(): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideOctoServices(),\n provideMmSharedUi(),\n provideMmSharedAuth(),\n provideAnimationsAsync(),\n AttributeSortSelectorDialogService,\n PropertyConverterService,\n CkTypeSelectorDialogService,\n RuntimeEntityVariableDialogService,\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["AttributeValueTypeDto","i2","i3","i4","i5","i1","i6","Apollo","takeUntil","map","catchError","switchMap"],"mappings":"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"}