{"version":3,"file":"yuuvis-client-framework-object-relationship.mjs","sources":["../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/actions/relationship-target-search/relationship-target-search.component.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/actions/relationship-target-search/relationship-target-search.component.html","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/actions/add-relationship/add-relationship.component.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/actions/add-relationship/add-relationship.component.html","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/node-summary/node-summary.component.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/node-summary/node-summary.component.html","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship.service.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship.const.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship-graph/object-relationship-graph.component.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship-graph/object-relationship-graph.component.html","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship-list/object-relationship-list-item/object-relationship-list-item.component.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship-list/object-relationship-list-item/object-relationship-list-item.component.html","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship-list/object-relationship-list.component.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship-list/object-relationship-list.component.html","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship.component.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship.component.html","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship.module.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/yuuvis-client-framework-object-relationship.ts"],"sourcesContent":["import { Component, computed, effect, forwardRef, inject, input, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport {\n  BaseObjectTypeField,\n  Operator,\n  Relationship,\n  SearchQuery,\n  SearchResult,\n  SearchResultItem,\n  SearchService,\n  TranslatePipe\n} from '@yuuvis/client-core';\nimport { AutocompleteItem, YuvAutocompleteModule } from '@yuuvis/client-framework/autocomplete';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { RelationshipComponentConfig, RelationshipComponentConfigNode } from '../../object-relationship.interface';\n\ninterface AutocompleteItemValue {\n  description?: string;\n  data: Record<string, unknown>;\n}\n\n@Component({\n  selector: 'yuv-relationship-target-search',\n  imports: [\n    YuvAutocompleteModule,\n    ReactiveFormsModule,\n    MatIconModule,\n    YmtIconButtonDirective,\n    TranslatePipe,\n    MatFormFieldModule\n  ],\n  templateUrl: './relationship-target-search.component.html',\n  styleUrl: './relationship-target-search.component.scss',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => RelationshipTargetSearchComponent),\n      multi: true\n    }\n  ],\n  host: {\n    '[class.has-value]': '!!mappedValue()'\n  }\n})\nexport class RelationshipTargetSearchComponent implements ControlValueAccessor {\n  #searchService = inject(SearchService);\n\n  supportedRelationships = input.required<Relationship[]>();\n  // ID of the source object\n  sourceNode = input.required<string>();\n  targetTypes = input<string[]>([]);\n  #availableTargetTypesEffect = effect(() => {\n    const att = this.targetTypes();\n    if (att.length === 0) this.acFormControl.disable();\n    else this.acFormControl.enable();\n  });\n  config = input.required<RelationshipComponentConfig>();\n  #configQA = computed(() => {\n    const qa: Record<string, RelationshipComponentConfigNode> = {};\n    this.config().nodes.forEach((c) => {\n      qa[c.objectType] = c;\n    });\n    return qa;\n  });\n\n  autocompleteRes: AutocompleteItem<AutocompleteItemValue>[] = [];\n  innerValue = signal<AutocompleteItem<AutocompleteItemValue> | undefined>(undefined);\n  mappedValue = computed<\n    | {\n        title: string;\n        description?: string;\n        icon?: string;\n      }\n    | undefined\n  >(() => {\n    const v = this.innerValue();\n    if (!v || !v.value) return undefined;\n    // map value to RelationshipComponentConfig\n    const configNode: RelationshipComponentConfigNode | undefined = this.config().nodes.find((n) => {\n      const objectTypeId = v.value.data[BaseObjectTypeField.OBJECT_TYPE_ID] as string;\n      const sots = v.value.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] as string[] | undefined;\n      return n.objectType === objectTypeId || (sots && sots.includes(n.objectType));\n    });\n\n    if (!configNode)\n      return {\n        title: v.label\n      };\n    return {\n      title: (v.value.data[configNode.labelField] as string) || v.label,\n      description: configNode.descriptionField ? (v.value.data[configNode.descriptionField] as string) : undefined,\n      icon: configNode.icon\n    };\n  });\n  busy = signal<boolean>(false);\n  acFormControl = new FormControl<AutocompleteItem<AutocompleteItemValue> | null>(null, Validators.required);\n\n  constructor() {\n    this.acFormControl.valueChanges.pipe(takeUntilDestroyed()).subscribe((val) => {\n      this.innerValue.set(val ? (val as AutocompleteItem<AutocompleteItemValue>) : undefined);\n      this.propagateChange(this.innerValue()?.value?.data);\n    });\n  }\n\n  autocompleteFn(term: string) {\n    if (term.length >= 2) {\n      this.busy.set(true);\n      this.#searchService.search(this.#termToQuery(term)).subscribe({\n        next: (res: SearchResult) => {\n          this.busy.set(false);\n          this.autocompleteRes = res.items.map((item) => {\n            const { label, description } = this.#getLabelAndDescription(item)!;\n            return {\n              label,\n              value: {\n                description,\n                data: this.#searchResultItemToRecord(item)\n              }\n            };\n          });\n        },\n        error: () => {\n          this.busy.set(false);\n          this.autocompleteRes = [];\n        }\n      });\n    } else {\n      this.autocompleteRes = [];\n    }\n  }\n\n  reset() {\n    this.innerValue.set(undefined);\n    this.acFormControl.setValue(null);\n    this.autocompleteRes = [];\n  }\n\n  #getConfig(sri: SearchResultItem): RelationshipComponentConfigNode | undefined {\n    const configType = this.targetTypes().find((tt) => {\n      const objectType = sri.fields.get(BaseObjectTypeField.OBJECT_TYPE_ID) as string;\n      const sots = sri.fields.get(BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS) as string[] | undefined;\n      return tt === objectType || (sots && sots.includes(tt));\n    });\n    return configType ? this.#configQA()[configType] : undefined;\n  }\n\n  #getLabelAndDescription(sri: SearchResultItem):\n    | {\n        label: string;\n        description?: string;\n      }\n    | undefined {\n    const config = this.#getConfig(sri);\n    return config\n      ? {\n          label:\n            (sri.fields.get(config.labelField) as string) || (sri.fields.get(BaseObjectTypeField.OBJECT_ID) as string),\n          description: config.descriptionField ? (sri.fields.get(config.descriptionField) as string) : undefined\n        }\n      : undefined;\n  }\n\n  #searchResultItemToRecord(item: SearchResultItem): Record<string, unknown> {\n    return Array.from(item.fields.entries()).reduce(\n      (obj, [key, value]) => {\n        obj[key] = value;\n        return obj;\n      },\n      {} as Record<string, unknown>\n    );\n  }\n\n  #termToQuery(term: string): SearchQuery {\n    return {\n      term,\n      // exclude the source object from the search results\n      // as it doesn't make sense to relate an object to itself\n      filters: [\n        {\n          f: BaseObjectTypeField.OBJECT_ID,\n          o: Operator.EQUAL,\n          v1: this.sourceNode(),\n          useNot: true\n        }\n      ],\n      types: this.targetTypes()\n    };\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  propagateChange = (_: any) => {};\n\n  writeValue(value: any): void {\n    this.innerValue.set(value);\n    this.acFormControl.setValue(value);\n    this.autocompleteRes = [];\n  }\n\n  registerOnChange(fn: any): void {\n    this.propagateChange = fn;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  registerOnTouched(fn: any): void {}\n\n  setDisabledState?(isDisabled: boolean) {\n    if (isDisabled) {\n      this.acFormControl.disable();\n    } else {\n      this.acFormControl.enable();\n    }\n  }\n}\n","<mat-form-field>\n  <mat-label>{{ 'yuv.object-relationship.add-relationship.target-search.label' | translate }}</mat-label>\n\n  <yuv-autocomplete\n    [required]=\"true\"\n    [busy]=\"busy()\"\n    [formControl]=\"acFormControl\"\n    [autocompleteValues]=\"autocompleteRes\"\n    [forceSelection]=\"true\"\n    (autocompleteFnc)=\"autocompleteFn($event)\"\n    [multiple]=\"false\"\n  >\n    <!-- template for option -->\n    <ng-template #optionTemplate let-item>\n      <div class=\"label\">{{ item.label }}</div>\n      <div class=\"meta\" style=\"font: var(--ymt-font-body-subtle); color: var(--ymt-text-color-subtle)\">{{ item.value.description }}</div>\n    </ng-template>\n  </yuv-autocomplete>\n\n  @let v = mappedValue();\n  @if (v) {\n    <div class=\"value-node\" aria-live=\"polite\">\n      @if (v.icon) {\n        <div class=\"icon\" aria-hidden=\"true\">\n          <mat-icon>{{ v.icon }}</mat-icon>\n        </div>\n      }\n      <strong class=\"label\">{{ v.title }}</strong>\n      <div class=\"description\">{{ v.description }}</div>\n\n      <button\n        type=\"button\"\n        ymtIconButton\n        icon-button-size=\"small\"\n        [attr.aria-label]=\"'yuv.object-relationship.add-relationship.target-search.clear' | translate\"\n        (click)=\"reset()\"\n      >\n        <mat-icon>close</mat-icon>\n      </button>\n    </div>\n  }\n</mat-form-field>\n","import { Component, computed, inject, input, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport {\n  AbstractControl,\n  FormControl,\n  FormGroup,\n  ReactiveFormsModule,\n  ValidationErrors,\n  ValidatorFn,\n  Validators\n} from '@angular/forms';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatError, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\nimport {\n  BaseObjectTypeField,\n  DmsObject,\n  DmsService,\n  EventService,\n  Relationship,\n  RelationshipTypeField,\n  SystemService,\n  TranslatePipe,\n  TranslateService,\n  YuvEventType\n} from '@yuuvis/client-core';\nimport { BusyOverlayDirective, DialogComponent } from '@yuuvis/client-framework/common';\nimport { YuvListModule } from '@yuuvis/client-framework/list';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { tap } from 'rxjs';\nimport { RelationshipComponentConfig } from '../../object-relationship.interface';\nimport { RelationshipTargetSearchComponent } from '../relationship-target-search/relationship-target-search.component';\n\n@Component({\n  selector: 'yuv-add-relationship',\n  imports: [\n    ReactiveFormsModule,\n    TranslatePipe,\n    DialogComponent,\n    MatSelectModule,\n    MatIconModule,\n    MatFormFieldModule,\n    MatError,\n    MatButtonToggleModule,\n    YmtButtonDirective,\n    RelationshipTargetSearchComponent,\n    BusyOverlayDirective,\n    YuvListModule,\n    MatChipsModule\n  ],\n\n  templateUrl: './add-relationship.component.html',\n  styleUrl: './add-relationship.component.scss'\n})\nexport class AddRelationshipComponent {\n  #system = inject(SystemService);\n  #dialogData = inject<{\n    config: RelationshipComponentConfig;\n    object: DmsObject;\n  }>(MAT_DIALOG_DATA);\n  readonly #dialogRef = inject(MatDialogRef<AddRelationshipComponent>);\n  #dmsService = inject(DmsService);\n  #eventService = inject(EventService);\n  readonly translate = inject(TranslateService);\n\n  targetTypeLabels: Record<string, string> = {};\n  targetTypeFilterControl = new FormControl<string[]>([]);\n  targetTypeFilterValue = toSignal(this.targetTypeFilterControl.valueChanges, {\n    initialValue: this.targetTypeFilterControl.value || null\n  });\n\n  object = input<DmsObject>(this.#dialogData.object);\n  config = input<RelationshipComponentConfig>(this.#dialogData.config);\n\n  supportedRelationships = computed<Relationship[]>(() => {\n    const obj = this.object();\n    return obj ? this.#system.getSupportedRelationships(obj, true) : [];\n  });\n\n  filteredRelationships = computed<Relationship[]>(() => {\n    // filter the supported relationships of the object by the allowed target types\n    // if target types are selected\n    const tt = this.targetTypeFilterValue();\n    return this.supportedRelationships().filter((r) => {\n      return !tt || r.allowedTargetTypes.some((t) => tt.includes(t));\n    });\n  });\n\n  // get the target types from the relationships\n  availableTargetTypes = computed<string[]>(() => {\n    const rel = this.supportedRelationships();\n    const types = Array.from(new Set(rel.map((r) => r.allowedTargetTypes).flat()));\n    this.targetTypeLabels = types.reduce(\n      (acc, type) => {\n        acc[type] = this.#system.getLocalizedLabel(type) || type;\n        return acc;\n      },\n      {} as Record<string, string>\n    );\n    this.targetTypeFilterControl.patchValue(types);\n    return types;\n  });\n  labeledTargetTypes = computed<{ id: string; label: string }[]>(() =>\n    this.availableTargetTypes().map((t) => ({ id: t, label: this.targetTypeLabels[t] || t }))\n  );\n\n  sourceNode = computed(() => {\n    const obj = this.object();\n    const config = this.config();\n    return {\n      title: obj.data[config.rootNode.labelField] as string,\n      description: obj.data[config.rootNode.descriptionField || ''] as string | undefined,\n      icon: config.rootNode.icon\n    };\n  });\n\n  #relationMatchesTargetObjectValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n    const targetObject = control.get('targetObject')?.value as Record<string, unknown> | null;\n    const relation = control.get('relation')?.value as Relationship | null;\n    let valid = true;\n    if (relation && targetObject) {\n      // the allowed target types of the relation should be included in the selected objects\n      // SOTs or the selected object's type should include one of the allowed target types\n      const targetTypes = relation.allowedTargetTypes || [];\n      const objectType = targetObject[BaseObjectTypeField.OBJECT_TYPE_ID] as string;\n      const sots = targetObject[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] as string[] | undefined;\n      valid = targetTypes.includes(objectType) || targetTypes.some((t) => sots?.includes(t));\n    }\n    return valid ? null : { invalidRelationTargetCombination: true };\n  };\n\n  form = new FormGroup(\n    {\n      relation: new FormControl<Relationship | null>(null, { nonNullable: true, validators: [Validators.required] }),\n      targetObject: new FormControl<Record<string, unknown> | null>(null, {\n        nonNullable: true,\n        validators: [Validators.required]\n      })\n    },\n    { validators: this.#relationMatchesTargetObjectValidator }\n  );\n\n  busy = signal<boolean>(false);\n  error = signal<string | null>(null);\n\n  optionCompareWith(o1: Relationship | undefined, o2: Relationship | undefined): boolean {\n    return o1?.id === o2?.id;\n  }\n\n  onRelationSelect(idx: number[]) {\n    this.form.patchValue({ relation: this.filteredRelationships()[idx[0]] });\n  }\n\n  submit() {\n    this.error.set(null);\n    this.busy.set(true);\n    this.#addRelationship(this.form.value.relation!.id, this.form.value.targetObject!).subscribe({\n      next: () => {\n        this.busy.set(false);\n        this.close();\n      },\n      error: () => {\n        this.error.set(this.translate.instant('yuv.object-relationship.add-relation.error-message'));\n        this.busy.set(false);\n      }\n    });\n  }\n\n  #addRelationship(relationId: string, target: Record<string, unknown>) {\n    const data = {\n      [RelationshipTypeField.SOURCE_ID]: this.object().id,\n      [RelationshipTypeField.TARGET_ID]: target[BaseObjectTypeField.OBJECT_ID]\n    };\n    return this.#dmsService\n      .createDmsObject(relationId, data, [])\n      .pipe(\n        tap(() => this.#eventService.trigger(YuvEventType.RELATIONSHIP_CREATED, { sourceObjectId: this.object().id }))\n      );\n  }\n\n  close() {\n    this.#dialogRef.close();\n  }\n}\n","<yuv-dialog class=\"not-separated\" [headertitle]=\"'yuv.object-relationship.add-relationship.headline' | translate\">\n  <main [yuvBusyOverlay]=\"busy()\">\n    @let sn = sourceNode();\n    <form id=\"addRelationshipForm\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n      <section class=\"source\">\n        @if (sn) {\n          <div class=\"source-node ymt-panel\">\n            @if (sn.icon) {\n              <div class=\"icon\">\n                <mat-icon>{{ sn.icon }}</mat-icon>\n              </div>\n            }\n            <strong class=\"label\">{{ sn.title }}</strong>\n            <div class=\"description\">{{ sn.description }}</div>\n          </div>\n        }\n      </section>\n\n      <section class=\"connect\" aria-hidden=\"true\">\n        <div class=\"link\"></div>\n        <div class=\"dot\"></div>\n        <div class=\"link\"></div>\n      </section>\n\n      <!-- available relationships -->\n      <section class=\"relationships ymt-panel\">\n        <h3>{{ 'yuv.object-relationship.action.add-link.search.relation.label' | translate }}</h3>\n\n        @let tt = labeledTargetTypes();\n        @if (tt.length > 1) {\n          <div class=\"target-filter\">\n            <span>{{ 'yuv.object-relationship.add-relationship.target-type.filter.label' | translate }}</span>\n\n            <mat-chip-listbox\n              [multiple]=\"true\"\n              [formControl]=\"targetTypeFilterControl\"\n              [attr.aria-label]=\"'yuv.object-relationship.add-relationship.target-type.filter.label' | translate\"\n            >\n              @for (t of tt; track t) {\n                <mat-chip-option [value]=\"t.id\">{{ t.label }}</mat-chip-option>\n              }\n            </mat-chip-listbox>\n          </div>\n        }\n        <!-- list of filtered relationships -->\n        <yuv-list (itemSelect)=\"onRelationSelect($event)\">\n          @for (r of filteredRelationships(); track r.id) {\n            <div class=\"relationship\" yuvListItem>\n              {{ r.label }}\n\n              <div class=\"targets\">\n                @for (t of r.allowedTargetTypes; track t) {\n                  <span>{{ targetTypeLabels[t] }}</span>\n                }\n              </div>\n            </div>\n          }\n        </yuv-list>\n      </section>\n\n      <!-- relationship target select -->\n      <section class=\"target\">\n        <yuv-relationship-target-search\n          class=\"ymt-panel\"\n          formControlName=\"targetObject\"\n          [sourceNode]=\"object().id\"\n          [config]=\"config()\"\n          [targetTypes]=\"form.get('relation')!.value?.allowedTargetTypes || []\"\n          [supportedRelationships]=\"supportedRelationships()\"\n        />\n      </section>\n\n      <section class=\"error\">\n        @if (form.hasError('invalidRelationTargetCombination') && (form.touched || form.dirty)) {\n          <mat-error class=\"error\">\n            {{ 'yuv.object-relationship.add-relationship.error.invalidRelationTargetCombination' | translate }}\n          </mat-error>\n        }\n        @if (error()) {\n          <mat-error class=\"error\">{{ error() }}</mat-error>\n        }\n      </section>\n    </form>\n  </main>\n\n  <footer>\n    <button ymtButton=\"secondary\" type=\"button\" (click)=\"close()\" [disabled]=\"busy()\">\n      {{ 'yuv.object-relationship.add-relationship.action.cancel' | translate }}\n    </button>\n    <button ymtButton=\"primary\" type=\"submit\" form=\"addRelationshipForm\" [disabled]=\"form.invalid || busy()\">\n      {{ 'yuv.object-relationship.add-relationship.action.submit' | translate }}\n    </button>\n  </footer>\n</yuv-dialog>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, input, TemplateRef } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { DmsObject, SchemaResponseFieldDefinition, SystemService, TranslatePipe } from '@yuuvis/client-core';\nimport { RendererDirective, RendererDirectiveInput } from '@yuuvis/client-framework/renderer';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { RelationshipComponentConfigNode } from '../object-relationship.interface';\n\n/**\n * Component to display a summary of a node's object properties.\n */\n@Component({\n  selector: 'yuv-node-summary',\n  imports: [CommonModule, RendererDirective, TranslatePipe, YmtButtonDirective],\n  templateUrl: './node-summary.component.html',\n  styleUrl: './node-summary.component.scss'\n})\nexport class NodeSummaryComponent {\n  #system = inject(SystemService);\n  #router = inject(Router);\n\n  object = input<DmsObject>();\n  nodeConfig = input<RelationshipComponentConfigNode>();\n\n  actions = input<TemplateRef<any> | null>(null);\n\n  nodeSummary = computed(() => {\n    const obj = this.object();\n    const config = this.nodeConfig();\n    return obj && config\n      ? {\n          title: obj.data[config.labelField] as string,\n          description: config.descriptionField ? (obj.data[config.descriptionField] as string) : undefined,\n          properties: (config.summaryFields || [])\n            .map((field) => this.#propertyToRendererInput(field, obj))\n            .filter((p) => !!p),\n          link: config.objectLink ? config.objectLink.replace('{{id}}', obj.id) : undefined\n        }\n      : null;\n  });\n\n  openObject(link: string) {\n    this.#router.navigateByUrl(link);\n  }\n\n  #propertyToRendererInput(\n    propertyName: string,\n    object: DmsObject\n  ): { label: string; rendererInput: RendererDirectiveInput } | undefined {\n    const metaKeys = Object.keys(object.data).filter((key) => {\n      return key.startsWith(`${propertyName}_`);\n    });\n\n    const sr: SchemaResponseFieldDefinition | undefined = this.#system.system?.allFields[propertyName];\n    if (!sr) return undefined;\n\n    return {\n      label: this.#system.getLocalizedLabel(propertyName.replace('_title', '')) || propertyName,\n      rendererInput: {\n        propertyName,\n        value: object.data[propertyName],\n        rendererType: this.#system.getInternalFormElementType(propertyName, sr.classifications || [], sr.catalog),\n        meta: metaKeys.reduce(\n          (metaObj, key) => {\n            metaObj[key] = object.data[key];\n            return metaObj;\n          },\n          {} as Record<string, any>\n        )\n      }\n    };\n  }\n}\n","@let ns = nodeSummary();\n@if (ns) {\n  <header>\n    <h2>{{ ns?.title }}</h2>\n    <p class=\"desc\">{{ ns?.description }}</p>\n  </header>\n  <main>\n    <div class=\"properties\">\n      @for (p of ns?.properties; track $index) {\n        <div class=\"row\">\n          <div class=\"label\">{{ p.label }}</div>\n          <div class=\"value\">\n            <ng-container *yuvRenderer=\"p.rendererInput\"></ng-container>\n          </div>\n        </div>\n      }\n    </div>\n  </main>\n  <footer>\n    <div class=\"actions\">\n      <ng-container *ngTemplateOutlet=\"actions()\"></ng-container>\n    </div>\n\n    @if (ns.link) {\n      <button ymtButton=\"primary\" (click)=\"openObject(ns.link)\">\n        {{ 'yuv.object-relationship.node-summary.open-object.button' | translate }}\n      </button>\n    }\n  </footer>\n}\n","import { inject, Injectable, signal } from '@angular/core';\nimport { rxResource, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n  BaseObjectTypeField,\n  DmsObject,\n  DmsService,\n  EventService,\n  RelationshipTypeField,\n  SearchResult,\n  SearchService,\n  SystemType,\n  TranslateService,\n  YuvEvent,\n  YuvEventType\n} from '@yuuvis/client-core';\nimport { ConfirmService } from '@yuuvis/client-framework/common';\nimport { catchError, map, Observable, of, switchMap, tap } from 'rxjs';\nimport { RelationshipComponentInput } from './object-relationship.interface';\n\n@Injectable()\nexport class ObjectRelationshipService {\n  #search = inject(SearchService);\n  #dmsService = inject(DmsService);\n  #eventService = inject(EventService);\n  #confirm = inject(ConfirmService);\n  private translate = inject(TranslateService);\n\n  #relationQA: Record<string, DmsObject> = {};\n\n  objectId = signal<string | undefined>(undefined);\n  #relationsResource = rxResource<RelationshipComponentInput, string | undefined>({\n    params: this.objectId,\n    stream: ({ params }) => this.fetchRelations(params)\n  });\n  relations = this.#relationsResource.value;\n  busy = signal<boolean>(false);\n  // the DmsObject representing the originId\n  object = signal<DmsObject | null>(null);\n\n  constructor() {\n    this.#eventService\n      .on(YuvEventType.RELATIONSHIP_CREATED, YuvEventType.RELATIONSHIP_DELETED)\n      .pipe(takeUntilDestroyed())\n      .subscribe({\n        next: (e: YuvEvent) => {\n          if (e.data?.sourceObjectId === this.objectId()) {\n            this.#relationsResource.reload();\n          }\n        }\n      });\n  }\n\n  fetchRelations(originId: string): Observable<{ originId: string; relations: SearchResult; objects: SearchResult }> {\n    this.busy.set(true);\n    // search for relations that have this object as source or target\n    const query = `SELECT * FROM ${SystemType.RELATIONSHIP} WHERE ${RelationshipTypeField.SOURCE_ID} = '${originId}' OR ${RelationshipTypeField.TARGET_ID} = '${originId}'`;\n    // TODO: What about multi-page results?\n\n    return this.#search\n      .searchCmis(query)\n      .pipe(\n        switchMap((resRelations: SearchResult) => {\n          // collect source and target ids and ensure uniqueness\n          const o: Record<string, null> = {};\n          resRelations.items.forEach((i) => {\n            this.#relationQA[i.fields.get(BaseObjectTypeField.OBJECT_ID)] = new DmsObject(i);\n            o[i.fields.get(RelationshipTypeField.SOURCE_ID)] = null;\n            o[i.fields.get(RelationshipTypeField.TARGET_ID)] = null;\n          });\n          // get the data for these object ids\n          const ids = Object.keys(o)\n            .map((id) => `'${id}'`)\n            .join(',');\n          // having no relations would end up in an empty IN () statement which is invalid\n          // but as we need to fetch the origin objects anyway we can add it manually\n          const q = `SELECT * FROM system:object WHERE ${BaseObjectTypeField.OBJECT_ID} IN (${ids.length > 0 ? ids : `'${originId}'`})`;\n          return this.#search.searchCmis(q).pipe(\n            map((resObjects: SearchResult) => ({\n              relations: resRelations,\n              objects: resObjects\n            }))\n          );\n        })\n      )\n      .pipe(\n        // catchError\n        map((res: { relations: SearchResult; objects: SearchResult }) => {\n          this.busy.set(false);\n          return { originId, relations: res.relations, objects: res.objects };\n        })\n      );\n  }\n\n  /**\n   * Deletes a relationship by its ID. Will ask for confirmation before deletion.\n   * @param relationId ID of the relationship to delete\n   * @param reloadResource Whether to reload the resource after deletion\n   */\n  deleteRelationship(relationId: string, reloadResource: boolean): Observable<boolean> {\n    return this.#confirm\n      .confirm({\n        message: this.translate.instant('yuv.object-relationship.delete-relation.confirm-message')\n      })\n      .pipe(switchMap((confirmed) => (confirmed ? this.#deleteRelationship(relationId, reloadResource) : of(false))));\n  }\n\n  #deleteRelationship(relationId: string, reloadResource: boolean): Observable<boolean> {\n    this.busy.set(true);\n    return this.#dmsService.deleteDmsObject(relationId).pipe(\n      catchError(() => of(false)),\n      map((err) => (err === false ? false : true)),\n      tap((success) => {\n        this.busy.set(false);\n        if (success) {\n          this.#eventService.trigger(YuvEventType.RELATIONSHIP_DELETED, { relationId });\n          // TODO: trigger the event will reload the resource anyway (see constructor)\n\n          if (reloadResource) {\n            this.#relationsResource.reload();\n          }\n        }\n      })\n    );\n  }\n}\n","import { Edge, Font, Node } from 'vis-network/standalone';\n\nexport const ROOT_NODE_SETTINGS: Partial<Node> = {\n  size: 30,\n  borderWidth: 4,\n  borderWidthSelected: 6\n};\nexport const ROOT_NODE_FONT_SETTINGS: Font = {\n  size: 14\n};\nexport const NODE_SETTINGS: Partial<Node> = {\n  borderWidthSelected: 2\n};\nexport const NODE_FONT_SETTINGS: Font = {\n  size: 12\n};\n\nexport const EDGE_SETTINGS: Partial<Edge> = {};\nexport const EDGE_FONT_SETTINGS: Font = {\n  size: 10\n};\n\n// add relationship dialog settings\nexport const ADD_RELATIONSHIP_DIALOG_OPTIONS = {\n  maxWidth: '90vw'\n};\n","import {\n  AfterViewInit,\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  OnDestroy,\n  output,\n  signal,\n  viewChild\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport {\n  BaseObjectTypeField,\n  DmsObject,\n  LocalizationService,\n  RelationshipTypeField,\n  SearchResult,\n  SearchResultItem,\n  SystemService,\n  TranslatePipe,\n  TranslateService\n} from '@yuuvis/client-core';\nimport { SnackBarService } from '@yuuvis/client-framework';\nimport { BusyOverlayDirective, ThemeService } from '@yuuvis/client-framework/common';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { Color, DataSet, Edge, Font, Network, Options } from 'vis-network/standalone';\nimport { AddRelationshipComponent } from '../actions/add-relationship/add-relationship.component';\nimport { NodeSummaryComponent } from '../node-summary/node-summary.component';\nimport { ObjectRelationshipService } from '../object-relationship.service';\nimport {\n  ADD_RELATIONSHIP_DIALOG_OPTIONS,\n  EDGE_FONT_SETTINGS,\n  EDGE_SETTINGS,\n  NODE_FONT_SETTINGS,\n  NODE_SETTINGS,\n  ROOT_NODE_FONT_SETTINGS,\n  ROOT_NODE_SETTINGS\n} from './../object-relationship.const';\nimport {\n  RelationshipComponentConfig,\n  RelationshipComponentConfigNode,\n  RelationshipNode\n} from './../object-relationship.interface';\n\n@Component({\n  selector: 'yuv-object-relationship-graph',\n  imports: [\n    NodeSummaryComponent,\n    BusyOverlayDirective,\n    MatIconModule,\n    MatTooltipModule,\n    TranslatePipe,\n    YmtIconButtonDirective\n  ],\n  templateUrl: './object-relationship-graph.component.html',\n  styleUrls: ['./object-relationship-graph.component.scss']\n})\nexport class ObjectRelationshipGraphComponent implements AfterViewInit, OnDestroy {\n  readonly #dialog = inject(MatDialog);\n  readonly #system = inject(SystemService);\n  readonly #localization = inject(LocalizationService);\n  readonly #theme = inject(ThemeService);\n  readonly #objectRelationshipService = inject(ObjectRelationshipService);\n  readonly #snack = inject(SnackBarService);\n  readonly #translate = inject(TranslateService);\n  container = viewChild.required<ElementRef<HTMLDivElement>>('graphContainer');\n  #mode = computed(() => {\n    const mode = this.#theme.mode();\n    switch (mode) {\n      case 'dark': {\n        return 'dark';\n      }\n      case 'system': {\n        return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n      }\n      default: {\n        return 'light';\n      }\n    }\n  });\n\n  #relations = this.#objectRelationshipService.relations;\n  #relationsEffect = effect(() => {\n    const rel = this.#relations();\n    if (!rel) return;\n    this.#updateGraph(rel.originId, rel.relations, rel.objects);\n  });\n\n  /**\n   * Configuration for the relations component.\n   */\n  config = input.required<RelationshipComponentConfig>();\n\n  objectSelected = output<DmsObject | null>();\n  relationSelected = output<DmsObject | null>();\n\n  #network: Network | null = null;\n  #objectQA: Record<string, DmsObject> = {};\n  #relationQA: Record<string, DmsObject> = {};\n  #nodes = new DataSet<RelationshipNode>([]);\n  #edges = new DataSet<Edge>([]);\n  // tracks what each node's expansion added, so a second double-click can collapse it again\n  #expansions = new Map<string, { nodeIds: string[]; edgeIds: string[] }>();\n\n  busy = signal(false);\n  selectedRelation = signal<DmsObject | null>(null);\n  #selectedRelationEffect = effect(() => {\n    this.relationSelected.emit(this.selectedRelation());\n  });\n\n  selectedObject = signal<DmsObject | null>(null);\n  #selectedObjectEffect = effect(() => {\n    const selectedObj = this.selectedObject();\n    if (selectedObj) this.selectedRelation.set(null);\n    this.objectSelected.emit(selectedObj);\n  });\n  detailsNode = computed(() => {\n    const object = this.selectedObject();\n    const config = this.#getNodeConfig(object!);\n    return object && config ? { object, config } : null;\n  });\n\n  // #region: Lifecycle Hooks */\n  ngOnDestroy(): void {\n    if (this.#network) {\n      this.#network.destroy();\n    }\n  }\n\n  ngAfterViewInit(): void {\n    const options: Options = {\n      physics: {\n        enabled: true,\n        solver: 'forceAtlas2Based',\n        forceAtlas2Based: {\n          // gravitationalConstant: -50,\n          // centralGravity: 0.01,\n          springLength: 200\n        }\n      },\n      nodes: {\n        shape: 'dot',\n        size: 20,\n        font: { size: 12 }\n      }\n    };\n    this.#network = new Network(\n      this.container().nativeElement,\n      {\n        nodes: this.#nodes,\n        edges: this.#edges\n      },\n      options\n    );\n    this.#network.on('selectNode', (params: { nodes: string[]; edges: string[] }) => this.#setSelection(params));\n    this.#network.on('deselectNode', (params: { nodes: string[]; edges: string[] }) => this.#setSelection(params));\n    this.#network.on('dragEnd', (params: { nodes: string[]; edges: string[] }) => this.#setSelection(params));\n    this.#network.on('selectEdge', (params: { nodes: string[]; edges: string[] }) => this.#setSelection(params));\n    this.#network.on('deselectEdge', (params: { nodes: string[]; edges: string[] }) => this.#setSelection(params));\n    this.#network.on('click', (params: { nodes: string[]; edges: string[] }) => this.#setSelection(params));\n    this.#network.on('doubleClick', (params: { nodes: string[]; edges: string[] }) => {\n      const nodeId = params.nodes[0];\n      if (!nodeId) return;\n      // the root node never collapses - a double-click on it just re-expands\n      const isRoot = nodeId === this.#relations()?.originId;\n      if (!isRoot && this.#expansions.has(nodeId)) {\n        this.#collapse(nodeId);\n      } else {\n        this.#expand(nodeId);\n      }\n    });\n  }\n\n  // #endregion\n\n  download(): void {\n    const canvas = this.container().nativeElement.querySelector('canvas');\n    if (!canvas) return;\n    const image = canvas.toDataURL('image/png');\n    const link = document.createElement('a');\n    link.href = image;\n    link.download = 'canvas-image.png';\n    link.click();\n    link.remove();\n  }\n\n  addRelationship(): void {\n    this.#dialog\n      .open(AddRelationshipComponent, {\n        ...ADD_RELATIONSHIP_DIALOG_OPTIONS,\n        data: {\n          object: this.selectedObject(),\n          config: this.config()\n        }\n      })\n      .afterClosed()\n      .subscribe(() => {\n        this.expandSelected();\n      });\n  }\n\n  deleteRelationship(): void {\n    this.#objectRelationshipService.deleteRelationship(this.selectedRelation()!.id, false).subscribe((success) => {\n      if (success) {\n        const deletedEdge = this.#edges.get(this.selectedRelation()!.id);\n        if (!deletedEdge) return;\n        const sourceNodeId = deletedEdge.from;\n        const targetNodeId = deletedEdge.to;\n\n        this.#edges.remove(this.selectedRelation()!.id);\n        // check if the source/target node of the deleted edge has other connections to\n        // another node in the current graph\n        const otherEdgesForSource = this.#edges\n          .get()\n          .filter((edge) => edge.from === sourceNodeId || edge.to === sourceNodeId);\n        const otherEdgesForTarget = this.#edges\n          .get()\n          .filter((edge) => edge.from === targetNodeId || edge.to === targetNodeId);\n\n        if (sourceNodeId && otherEdgesForSource.length === 0) {\n          this.#nodes.remove(sourceNodeId);\n        }\n        if (targetNodeId && otherEdgesForTarget.length === 0) {\n          this.#nodes.remove(targetNodeId);\n        }\n      } else {\n        this.#snack.danger(this.#translate.instant('yuv.object-relationship.delete-relation.error-message'));\n      }\n    });\n  }\n\n  expandSelected(): void {\n    const selected = this.selectedObject();\n    if (selected) {\n      this.#expand(selected.id);\n    }\n  }\n\n  #expand(nodeId: string): void {\n    if (nodeId) {\n      this.busy.set(true);\n      this.#objectRelationshipService.fetchRelations(nodeId).subscribe({\n        next: (res) => {\n          const added = this.#updateGraph(nodeId, res.relations, res.objects);\n          // record the expansion so it can be toggled closed again - but never make the root collapsible\n          if (nodeId !== this.#relations()?.originId) {\n            this.#expansions.set(nodeId, added);\n          }\n          this.busy.set(false);\n        },\n        error: (err) => {\n          console.error('Error fetching relations for node:', err);\n          this.busy.set(false);\n        }\n      });\n    }\n  }\n\n  // remove the nodes/edges that this node's expansion introduced (and any expanded sub-trees),\n  // keeping nodes that are still connected to the rest of the graph\n  #collapse(nodeId: string): void {\n    const expansion = this.#expansions.get(nodeId);\n    if (!expansion) return;\n    this.#expansions.delete(nodeId);\n    this.#edges.remove(expansion.edgeIds);\n    expansion.nodeIds.forEach((id) => {\n      // collapse the sub-tree first so its edges are gone before the orphan check\n      if (this.#expansions.has(id)) this.#collapse(id);\n      const stillConnected = this.#edges.get().some((edge) => edge.from === id || edge.to === id);\n      if (!stillConnected) this.#nodes.remove(id);\n    });\n  }\n\n  #updateGraph(\n    originId: string,\n    relations: SearchResult,\n    objects: SearchResult\n  ): { nodeIds: string[]; edgeIds: string[] } {\n    objects.items.forEach((item) => {\n      const id = item.fields.get(BaseObjectTypeField.OBJECT_ID) as string;\n      this.#objectQA[id] = new DmsObject(item);\n    });\n    relations.items.forEach((item) => {\n      const id = item.fields.get(BaseObjectTypeField.OBJECT_ID) as string;\n      this.#relationQA[id] = new DmsObject(item);\n    });\n\n    // group by incoming and outgoing relations\n    const incoming = relations.items.filter((item) => item.fields.get(RelationshipTypeField.TARGET_ID) === originId);\n    const outgoing = relations.items.filter((item) => item.fields.get(RelationshipTypeField.SOURCE_ID) === originId);\n\n    const rootNode = this.#toNode(originId);\n    const _nodes: RelationshipNode[] =\n      rootNode && originId === this.#relations()?.originId && this.#nodes.get([originId]).length === 0\n        ? [\n            {\n              ...rootNode,\n              ...ROOT_NODE_SETTINGS,\n              font: {\n                ...ROOT_NODE_FONT_SETTINGS,\n                ...this.#getNodeFont()\n              }\n            }\n          ]\n        : [];\n\n    const _edges: Edge[] = [];\n\n    // add nodes and edges from search result\n    outgoing.forEach((item) => {\n      const relatedObjectId = item.fields.get(RelationshipTypeField.TARGET_ID) as string;\n      const node = this.#toNode(relatedObjectId);\n      const edge = this.#toEdge(item, originId, relatedObjectId, 'to');\n      if (node) {\n        // check if the node is already in the rendered graph\n        const nodeExists: boolean =\n          _nodes.some((existing) => existing.id === node.id) || this.#nodes.get([node.id!]).length > 0;\n        if (!nodeExists) _nodes.push(node);\n        // check if edge already exists\n        const edgeExists: boolean =\n          _edges.some((existing) => existing.id === edge.id) || this.#edges.get([edge.id!]).length > 0;\n        if (!edgeExists) _edges.push(edge);\n      }\n    });\n\n    incoming.forEach((item) => {\n      const relatedObjectId = item.fields.get(RelationshipTypeField.SOURCE_ID) as string;\n      const toNode = this.#toNode(relatedObjectId);\n      const toEdge = this.#toEdge(item, relatedObjectId, originId, 'from');\n      if (toNode) {\n        // check if the node is already in the rendered graph\n        const nodeExists: boolean =\n          _nodes.some((node) => node.id === toNode.id) || this.#nodes.get([toNode.id!]).length > 0;\n        if (!nodeExists) _nodes.push(toNode);\n        // check if edge already exists\n        const edgeExists: boolean =\n          _edges.some((edge) => edge.id === toEdge.id) || this.#edges.get([toEdge.id!]).length > 0;\n        if (!edgeExists) _edges.push(toEdge);\n      }\n    });\n    this.#nodes.add(_nodes);\n    this.#edges.add(_edges);\n\n    // report what was added so the caller can later collapse it - never the root node\n    const rootId = this.#relations()?.originId;\n    return {\n      nodeIds: _nodes.map((node) => node.id as string).filter((id) => id !== rootId),\n      edgeIds: _edges.map((edge) => edge.id as string)\n    };\n  }\n\n  #getNodeConfig(dmsObject?: DmsObject): RelationshipComponentConfigNode | undefined {\n    const cfg = this.config();\n    if (!dmsObject) return undefined;\n    const objectTypeIds = [...dmsObject.sots, dmsObject.objectTypeId];\n    return [cfg.rootNode, ...cfg.nodes].find((node) => objectTypeIds.includes(node.objectType));\n  }\n\n  // convert search result item to vis node\n  // will return NULL if the item object type is not configured in the component config\n  #toNode(objectId: string): RelationshipNode | null {\n    const dmsObject = this.#objectQA[objectId];\n    if (!dmsObject) return null;\n    const cfgNode = this.#getNodeConfig(dmsObject);\n    if (!cfgNode) return null;\n    return {\n      ...NODE_SETTINGS,\n      objectType: cfgNode.objectType,\n      color: this.#getNodeColor(),\n      id: objectId,\n      label: this.#maxLength(dmsObject.data[cfgNode.labelField] as string, 30),\n      icon: {\n        face: 'Material Symbols Sharp',\n        code: cfgNode.icon,\n        color: this.#getNodeColor().border\n      },\n      font: {\n        ...NODE_FONT_SETTINGS,\n        ...this.#getNodeFont()\n      }\n    };\n  }\n\n  #toEdge(item: SearchResultItem, from: string, to: string, direction: 'from' | 'to'): Edge {\n    const label =\n      this.#localization.getLocalizedLabel(item.fields.get(BaseObjectTypeField.OBJECT_TYPE_ID) as string) ||\n      item.fields.get(BaseObjectTypeField.OBJECT_TYPE_ID);\n    return {\n      ...EDGE_SETTINGS,\n      id: item.fields.get(BaseObjectTypeField.OBJECT_ID) as string,\n      label: this.#maxLength(label, 30),\n      color: this.#getEdgeColor(),\n      font: {\n        ...EDGE_FONT_SETTINGS,\n        ...this.#getEdgeFont()\n      },\n      arrows: direction,\n      from,\n      to\n    };\n  }\n\n  #maxLength(s: string, max: number): string {\n    if (s.length > max) {\n      return s.substring(0, max - 3) + '...';\n    }\n    return s;\n  }\n\n  #getNodeColor(): Color {\n    const computedStyle = this.#getComputedStyle();\n    return {\n      background: this.#resolveLightDark(computedStyle.getPropertyValue('--_node-background-color').trim()),\n      border: this.#resolveLightDark(computedStyle.getPropertyValue('--_node-border-color').trim()),\n      highlight: {\n        background: this.#resolveLightDark(computedStyle.getPropertyValue('--_node-background-color-highlight').trim()),\n        border: this.#resolveLightDark(computedStyle.getPropertyValue('--_node-color-highlight').trim())\n      }\n    };\n  }\n  #getNodeFont(): Font {\n    const computedStyle = this.#getComputedStyle();\n    return {\n      color: this.#resolveLightDark(computedStyle.getPropertyValue('--_node-font-color').trim()),\n      strokeWidth: 4,\n      strokeColor: this.#resolveLightDark(computedStyle.getPropertyValue('--_container-background-color').trim())\n    };\n  }\n\n  #getEdgeColor(): { color: string; highlight: string; hover: string } {\n    const computedStyle = this.#getComputedStyle();\n    return {\n      color: this.#resolveLightDark(computedStyle.getPropertyValue('--_edge-color').trim()),\n      highlight: this.#resolveLightDark(computedStyle.getPropertyValue('--_edge-color-highlight').trim()),\n      hover: this.#resolveLightDark(computedStyle.getPropertyValue('--_edge-color-hover').trim())\n    };\n  }\n\n  #getEdgeFont(): Font {\n    const computedStyle = this.#getComputedStyle();\n    return {\n      strokeWidth: 4,\n      strokeColor: this.#resolveLightDark(computedStyle.getPropertyValue('--_container-background-color').trim()),\n      color: this.#resolveLightDark(computedStyle.getPropertyValue('--_edge-font-color').trim())\n    };\n  }\n\n  #getComputedStyle(): CSSStyleDeclaration {\n    const container = this.container().nativeElement;\n    return getComputedStyle(container);\n  }\n\n  // grab color values for light-dark(...,...) notation\n  #resolveLightDark(s: string): string {\n    if (s.startsWith('light-dark(')) {\n      const regex = /light-dark\\(\\s*(#[0-9a-fA-F]{6})\\s*,\\s*(#[0-9a-fA-F]{6})\\s*\\)/;\n      const match = s.match(regex);\n      if (match) {\n        const lightColor = match[1];\n        const darkColor = match[2];\n        return this.#mode() === 'dark' ? darkColor : lightColor;\n      } else return s;\n    } else return s;\n  }\n\n  #setSelection(params: { nodes: string[]; edges: string[] }): void {\n    this.selectedObject.set(params.nodes.length === 1 ? this.#objectQA[params.nodes[0]] : null);\n    this.selectedRelation.set(\n      params.edges.length === 1 && params.nodes.length === 0 ? this.#relationQA[params.edges[0]] : null\n    );\n  }\n}\n","<div class=\"relations\" [yuvBusyOverlay]=\"busy()\">\n  <div class=\"toolbar\">\n    <button ymtIconButton (click)=\"download()\" [matTooltip]=\"'yuv.object-relationship.download.tooltip' | translate\">\n      <mat-icon>download</mat-icon>\n    </button>\n    @if (selectedRelation()) {\n      <button\n        ymtIconButton\n        (click)=\"deleteRelationship()\"\n        [matTooltip]=\"'yuv.object-relationship.delete-relation.tooltip' | translate\"\n      >\n        <mat-icon>delete</mat-icon>\n      </button>\n    }\n  </div>\n  <div class=\"graph-container\" #graphContainer></div>\n\n  @let dn = detailsNode();\n  @if (dn) {\n    <div class=\"selected\">\n      <yuv-node-summary [object]=\"dn.object\" [nodeConfig]=\"dn.config\" [actions]=\"additionalSummaryActions\" />\n    </div>\n  }\n</div>\n\n<ng-template #additionalSummaryActions>\n  <button\n    ymt-icon-button\n    icon-button-size=\"small\"\n    [matTooltip]=\"'yuv.object-relationship.selected.add-relationship.tooltip' | translate\"\n    (click)=\"addRelationship()\"\n  >\n    <mat-icon>add</mat-icon>\n  </button>\n  <button\n    ymt-icon-button\n    icon-button-size=\"small\"\n    [matTooltip]=\"'yuv.object-relationship.selected.expand.tooltip' | translate\"\n    (click)=\"expandSelected()\"\n  >\n    <mat-icon>open_with</mat-icon>\n  </button>\n</ng-template>\n","import { Component, inject, input } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Router } from '@angular/router';\nimport { TranslateService } from '@yuuvis/client-core';\nimport { SnackBarService } from '@yuuvis/client-framework';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { ObjectLink } from '../../object-relationship.interface';\nimport { ObjectRelationshipService } from '../../object-relationship.service';\n\n@Component({\n  selector: 'yuv-object-relationship-list-item',\n  imports: [MatIconModule, YmtIconButtonDirective],\n  templateUrl: './object-relationship-list-item.component.html',\n  styleUrl: './object-relationship-list-item.component.scss'\n})\nexport class ObjectRelationshipListItemComponent {\n  readonly #router = inject(Router);\n  readonly #snack = inject(SnackBarService);\n  readonly #objectRelationshipService = inject(ObjectRelationshipService);\n  readonly #translate = inject(TranslateService);\n\n  link = input.required<ObjectLink>();\n  direction = input.required<'in' | 'out'>();\n\n  enableSourceLink = input<boolean>(false);\n  enableTargetLink = input<boolean>(false);\n\n  deleteRelationship(): void {\n    this.#objectRelationshipService.deleteRelationship(this.link().id, true).subscribe((success) => {\n      if (!success) {\n        this.#snack.danger(this.#translate.instant('yuv.object-relationship.delete-relation.error-message'));\n      }\n    });\n  }\n\n  async open(link: string | undefined, skip: boolean): Promise<void> {\n    if (link && !skip) await this.#router.navigateByUrl(link);\n  }\n}\n","@let lnk = link();\n\n<button\n  class=\"node source\"\n  (click)=\"open(lnk.source.objectLink, !enableSourceLink())\"\n  [attr.aria-readonly]=\"!enableSourceLink() || !lnk.source.objectLink\"\n  [class.self]=\"direction() === 'out'\"\n>\n  @if (lnk.source.icon) {\n    <mat-icon>{{ lnk.source.icon }}</mat-icon>\n  }\n  <span class=\"title\">{{ lnk.source.label }}</span>\n  <span class=\"description\">{{ lnk.source.description }}</span>\n</button>\n\n<div class=\"line\" [class.arr]=\"direction() === 'in'\"></div>\n<div class=\"relation\">{{ lnk.type.label }}</div>\n<div class=\"line\" [class.arr]=\"direction() === 'out'\"></div>\n\n<button\n  class=\"node target\"\n  (click)=\"open(lnk.target.objectLink, !enableTargetLink())\"\n  [attr.aria-readonly]=\"!enableTargetLink() || !lnk.target.objectLink\"\n  [class.self]=\"direction() === 'in'\"\n>\n  @if (lnk.target.icon) {\n    <mat-icon>{{ lnk.target.icon }}</mat-icon>\n  }\n  <span class=\"title\">{{ lnk.target.label }}</span>\n  <span class=\"description\">{{ lnk.target.description }}</span>\n</button>\n\n<div class=\"actions\">  \n  <button ymtIconButton icon-button-size=\"small\" (click)=\"deleteRelationship()\"><mat-icon>delete</mat-icon></button>\n</div>\n","import { Component, effect, inject, input, signal } from '@angular/core';\nimport {\n  BaseObjectTypeField,\n  DmsObject,\n  LocalizationService,\n  RelationshipTypeField,\n  SearchResult,\n  SearchResultItem,\n  SearchService,\n  TranslatePipe\n} from '@yuuvis/client-core';\nimport {\n  ObjectLink,\n  RelationshipComponentConfig,\n  RelationshipComponentConfigNode\n} from '../object-relationship.interface';\nimport { ObjectRelationshipService } from '../object-relationship.service';\nimport { ObjectRelationshipListItemComponent } from './object-relationship-list-item/object-relationship-list-item.component';\n\n@Component({\n  selector: 'yuv-object-relationship-list',\n  imports: [ObjectRelationshipListItemComponent, TranslatePipe],\n  templateUrl: './object-relationship-list.component.html',\n  styleUrl: './object-relationship-list.component.scss'\n})\nexport class ObjectRelationshipListComponent {\n  #search = inject(SearchService);\n  #localization = inject(LocalizationService);\n  #objectRelationshipService = inject(ObjectRelationshipService);\n\n  /**\n   * Configuration for the relations component.\n   */\n  config = input.required<RelationshipComponentConfig>();\n\n  incomingLinks = signal<ObjectLink[]>([]);\n  outgoingLinks = signal<ObjectLink[]>([]);\n\n  #relations = this.#objectRelationshipService.relations;\n  #relationsEffect = effect(() => {\n    const rel = this.#relations();\n    if (!rel) return;\n    this.#createLists(rel.originId, rel.relations, rel.objects);\n  });\n\n  #objectQA: Record<string, DmsObject> = {};\n\n  #createLists(objectId: string, relations: SearchResult, objects?: SearchResult): void {\n    const incoming = relations.items.filter((item) => item.fields.get(RelationshipTypeField.TARGET_ID) === objectId);\n    const outgoing = relations.items.filter((item) => item.fields.get(RelationshipTypeField.SOURCE_ID) === objectId);\n\n    objects?.items.forEach((item) => {\n      const id = item.fields.get(BaseObjectTypeField.OBJECT_ID) as string;\n      this.#objectQA[id] = new DmsObject(item);\n    });\n\n    this.incomingLinks.set(incoming.map((rel) => this.#map(rel)).filter((link) => link !== undefined) as ObjectLink[]);\n    this.outgoingLinks.set(outgoing.map((rel) => this.#map(rel)).filter((link) => link !== undefined) as ObjectLink[]);\n  }\n\n  #map(relation: SearchResultItem): ObjectLink | undefined {\n    const sourceObject: DmsObject = this.#objectQA[relation.fields.get(RelationshipTypeField.SOURCE_ID)];\n    const targetObject: DmsObject = this.#objectQA[relation.fields.get(RelationshipTypeField.TARGET_ID)];\n\n    const relID = relation.fields.get(BaseObjectTypeField.OBJECT_ID) as string;\n    const relObjectTypeID = relation.fields.get(BaseObjectTypeField.OBJECT_TYPE_ID) as string;\n\n    const sourceCfg = this.#getConfigNode(sourceObject);\n    const targetCfg = this.#getConfigNode(targetObject);\n\n    // if no config found, this means that the relation is not configured to be shown\n    // Only nodes provided with the config are mapped to links\n    if (!sourceCfg || !targetCfg) return undefined;\n\n    const sourceLabel = sourceObject.data[sourceCfg?.labelField || ''] as string;\n    const sourceDescription = sourceObject.data[sourceCfg?.descriptionField || ''] as string;\n    const sourceIcon = sourceCfg?.icon;\n\n    const targetLabel = targetObject.data[targetCfg?.labelField || ''] as string;\n    const targetDescription = targetObject.data[targetCfg?.descriptionField || ''] as string;\n    const targetIcon = targetCfg?.icon;\n\n    return {\n      id: relID,\n      type: {\n        id: relObjectTypeID,\n        label: this.#localization.getLocalizedLabel(relObjectTypeID) || relObjectTypeID\n      },\n      source: {\n        id: relation.fields.get(RelationshipTypeField.SOURCE_ID) as string,\n        label: sourceLabel,\n        description: sourceDescription,\n        icon: sourceIcon,\n        objectLink: sourceCfg.objectLink ? sourceCfg.objectLink.replace('{{id}}', sourceObject.id) : undefined\n      },\n      target: {\n        id: relation.fields.get(RelationshipTypeField.TARGET_ID) as string,\n        label: targetLabel,\n        description: targetDescription,\n        icon: targetIcon,\n        objectLink: targetCfg.objectLink ? targetCfg.objectLink.replace('{{id}}', targetObject.id) : undefined\n      }\n    };\n  }\n\n  #getConfigNode(object: DmsObject): RelationshipComponentConfigNode | undefined {\n    const cfg = this.config();\n    if (!object) return undefined;\n    return cfg.nodes.find((nodes) =>\n      (object.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] as string[]).includes(nodes.objectType)\n    );\n  }\n}\n","@let incoming = incomingLinks();\n@let outgoing = outgoingLinks();\n\n@if (incoming.length > 0) {\n  <h3>{{ 'yuv.object-relationship.list.incoming' | translate }}</h3>\n  @for (n of incoming; track n.id) {\n    <yuv-object-relationship-list-item\n      [enableSourceLink]=\"true\"\n      [enableTargetLink]=\"false\"\n      [link]=\"n\"\n      direction=\"in\"\n    ></yuv-object-relationship-list-item>\n  }\n}\n@if (outgoing.length > 0) {\n  <h3>{{ 'yuv.object-relationship.list.outgoing' | translate }}</h3>\n  @for (n of outgoing; track n.id) {\n    <yuv-object-relationship-list-item\n      [enableSourceLink]=\"false\"\n      [enableTargetLink]=\"true\"\n      [link]=\"n\"\n      direction=\"out\"\n    ></yuv-object-relationship-list-item>\n  }\n}\n","import { Component, computed, effect, inject, input, model, signal, TemplateRef } from '@angular/core';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { BaseObjectTypeField, DmsObject, Relationship, SystemService, TranslatePipe } from '@yuuvis/client-core';\nimport { BusyOverlayDirective } from '@yuuvis/client-framework/common';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { YmtPanesModule } from '@yuuvis/material/panes';\nimport { AddRelationshipComponent } from './actions/add-relationship/add-relationship.component';\nimport { ObjectRelationshipGraphComponent } from './object-relationship-graph/object-relationship-graph.component';\nimport { ObjectRelationshipListComponent } from './object-relationship-list/object-relationship-list.component';\nimport { ADD_RELATIONSHIP_DIALOG_OPTIONS } from './object-relationship.const';\nimport { RelationshipComponentConfig } from './object-relationship.interface';\nimport { ObjectRelationshipService } from './object-relationship.service';\n\n@Component({\n  selector: 'yuv-object-relationship',\n  imports: [\n    MatIconModule,\n    MatTooltipModule,\n    TranslatePipe,\n    MatButtonToggleModule,\n    YmtPanesModule,\n    YmtIconButtonDirective,\n    ObjectRelationshipGraphComponent,\n    ObjectRelationshipListComponent,\n    YmtIconButtonDirective,\n    BusyOverlayDirective\n  ],\n  templateUrl: './object-relationship.component.html',\n  styleUrl: './object-relationship.component.scss',\n  providers: [ObjectRelationshipService]\n})\nexport class ObjectRelationshipComponent {\n  #objectRelationshipService = inject(ObjectRelationshipService);\n  #system = inject(SystemService);\n  #dialog = inject(MatDialog);\n\n  /**\n   * Display mode for the relationship view.\n   */\n  mode = model<'list' | 'graph'>('graph');\n  empty = computed(() => {\n    const rel = this.#relations();\n    return rel?.relations.totalNumItems === 0;\n  });\n  /**\n   * ID of the object to display relations for.\n   */\n  objectId = input.required<string>();\n  #objectIdEffect = effect(() => {\n    const oid = this.objectId();\n    this.#objectRelationshipService.objectId.set(oid);\n  });\n  /**\n   * Configuration for the relations component.\n   */\n  config = input.required<RelationshipComponentConfig>();\n\n  // the DmsObject representing the originId\n  originObject = signal<DmsObject | null>(null);\n  supportedRelationships = computed<Relationship[]>(() => {\n    const obj = this.originObject();\n    return obj ? this.#system.getSupportedRelationships(obj) : [];\n  });\n\n  busy = this.#objectRelationshipService.busy;\n\n  #relations = this.#objectRelationshipService.relations;\n  #relationsEffect = effect(() => {\n    const rel = this.#relations();\n    if (!rel) {\n      this.originObject.set(null);\n      return;\n    }\n    const originId = rel.originId;\n    const originItem = rel.objects?.items.find((item) => item.fields.get(BaseObjectTypeField.OBJECT_ID) === originId);\n    // TODO: use linked signal instead\n    this.originObject.set(originItem ? new DmsObject(originItem) : null);\n  });\n  relationActions = input<TemplateRef<any> | null>(null);\n\n  toggleMode() {\n    const newMode = this.mode() === 'list' ? 'graph' : 'list';\n    this.mode.set(newMode);\n  }\n\n  addRelationship() {\n    this.#dialog.open(AddRelationshipComponent, {\n      ...ADD_RELATIONSHIP_DIALOG_OPTIONS,\n      data: {\n        object: this.originObject(),\n        config: this.config()\n      }\n    });\n  }\n}\n","<ymt-pane [plain]=\"true\" [topBarActions]=\"topBarActions\">\n  <ymt-pane-body [yuvBusyOverlay]=\"busy()\">\n    @if (empty()) {\n      <div class=\"no-relations\" inert>\n        <mat-icon>link_off</mat-icon>\n        <p>{{ 'yuv.object-relationship.no-relations' | translate }}</p>\n      </div>\n    } @else {\n      @switch (mode()) {\n        @case ('graph') {\n          <yuv-object-relationship-graph [config]=\"config()\"></yuv-object-relationship-graph>\n        }\n        @case ('list') {\n          <yuv-object-relationship-list [config]=\"config()\"> </yuv-object-relationship-list>\n        }\n      }\n    }\n  </ymt-pane-body>\n</ymt-pane>\n\n<ng-template #topBarActions>\n  @if (supportedRelationships().length > 0) {\n    <button ymt-icon-button icon-button-size=\"small\" [matTooltip]=\"'yuv.object-relationship.add.tooltip' | translate\" (click)=\"addRelationship()\">\n      <mat-icon>add</mat-icon>\n    </button>\n  }\n  <button\n    ymt-icon-button\n    icon-button-size=\"small\"\n    [matTooltip]=\"mode() === 'list' ? ('yuv.object-relationship.mode.graph.tooltip' | translate) : ('yuv.object-relationship.mode.list.tooltip' | translate)\"\n    (click)=\"toggleMode()\"\n  >\n    <mat-icon>{{ mode() === 'list' ? 'graph_3' : 'list' }}</mat-icon>\n  </button>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { ObjectRelationshipComponent } from './object-relationship.component';\n\nconst cmp = [ObjectRelationshipComponent];\n@NgModule({\n  imports: [...cmp],\n  exports: [...cmp]\n})\nexport class YuvObjectRelationshipModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i3","i1","i4"],"mappings":"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"}