@yuuvis/client-framework 2.11.1 → 2.11.3

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.
@@ -977,6 +977,8 @@ class ObjectRelationshipListComponent {
977
977
  }
978
978
  #getConfigNode(object) {
979
979
  const cfg = this.config();
980
+ if (!object)
981
+ return undefined;
980
982
  return cfg.nodes.find((n) => object.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS].includes(n.objectType));
981
983
  }
982
984
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ObjectRelationshipListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
@@ -1 +1 @@
1
- {"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/object-relationship.const.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship.service.ts","../../../../../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-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 { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { BaseObjectTypeField, Operator, Relationship, SearchQuery, SearchResult, SearchResultItem, SearchService, TranslateModule } from '@yuuvis/client-core';\nimport { AutocompleteItem, YuvAutocompleteModule } from '@yuuvis/client-framework/autocomplete';\nimport { RelationshipComponentConfig, RelationshipComponentConfigNode } from '../../object-relationship.interface';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatIconModule } from '@angular/material/icon';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\n\ninterface AutocompleteItemValue {\n description?: string;\n data: Record<string, unknown>;\n}\n\n@Component({\n selector: 'yuv-relationship-target-search',\n imports: [YuvAutocompleteModule, ReactiveFormsModule, MatIconModule, YmtIconButtonDirective, TranslateModule, MatFormFieldModule],\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: (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 { CommonModule } from '@angular/common';\nimport { Component, computed, inject, input, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { AbstractControl, FormControl, FormGroup, ReactiveFormsModule, ValidationErrors, ValidatorFn, Validators } 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 TranslateModule,\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 CommonModule,\n ReactiveFormsModule,\n TranslateModule,\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, { initialValue: this.targetTypeFilterControl.value || null });\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, { nonNullable: true, validators: [Validators.required] })\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(tap(() => this.#eventService.trigger(YuvEventType.RELATIONSHIP_CREATED, { sourceObjectId: this.object().id })));\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 [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>{{ 'cm.app.cases.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 ></yuv-relationship-target-search>\n </section>\n\n <section class=\"error\">\n @if (form.hasError('invalidRelationTargetCombination') && (form.touched || form.dirty)) {\n <mat-error class=\"error\">{{ 'yuv.object-relationship.add-relationship.error.invalidRelationTargetCombination' | translate }}</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\" [disabled]=\"form.invalid || busy()\">\n {{ 'yuv.object-relationship.add-relationship.action.submit' | translate }}\n </button>\n </footer>\n</yuv-dialog>\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 { 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 request: this.objectId,\n loader: ({ request }) => this.fetchRelations(request)\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 { Component, computed, inject, input, TemplateRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DmsObject, SchemaResponseFieldDefinition, SystemService, TranslateModule } from '@yuuvis/client-core';\nimport { RelationshipComponentConfigNode } from '../object-relationship.interface';\nimport { RendererDirective, RendererDirectiveInput } from '@yuuvis/client-framework/renderer';\nimport { Router } from '@angular/router';\nimport { YmtButtonDirective } from '@yuuvis/material';\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, TranslateModule, 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 || []).map((field) => this.#propertyToRendererInput(field, obj)).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(propertyName: string, object: DmsObject): { 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 || []),\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 { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, computed, effect, ElementRef, inject, input, OnDestroy, output, signal, TemplateRef, viewChild } from '@angular/core';\nimport {\n BaseObjectTypeField,\n DmsObject,\n RelationshipTypeField,\n SearchResult,\n SearchResultItem,\n SearchService,\n SystemService,\n SystemType,\n TranslateModule,\n TranslateService\n} from '@yuuvis/client-core';\nimport { BusyOverlayDirective, ConfirmService, LayoutSettingsService } from '@yuuvis/client-framework/common';\nimport { map, of, switchMap } from 'rxjs';\nimport { Color, DataSet, Edge, Font, Network, Options } from 'vis-network/standalone';\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 { RelationshipComponentConfig, RelationshipComponentConfigNode, RelationshipComponentInput, RelationshipNode } from './../object-relationship.interface';\nimport { MatIconModule } from '@angular/material/icon';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ObjectRelationshipService } from '../object-relationship.service';\nimport { NodeSummaryComponent } from '../node-summary/node-summary.component';\nimport { AddRelationshipComponent } from '../actions/add-relationship/add-relationship.component';\nimport { MatDialog } from '@angular/material/dialog';\nimport { SnackBarService } from '@yuuvis/client-framework';\n\n@Component({\n selector: 'yuv-object-relationship-graph',\n imports: [CommonModule, NodeSummaryComponent, BusyOverlayDirective, MatIconModule, MatTooltipModule, TranslateModule, YmtIconButtonDirective],\n templateUrl: './object-relationship-graph.component.html',\n styleUrl: './object-relationship-graph.component.scss'\n})\nexport class ObjectRelationshipGraphComponent implements AfterViewInit, OnDestroy {\n #dialog = inject(MatDialog);\n #system = inject(SystemService);\n #layoutSettings = inject(LayoutSettingsService);\n #objectRelationshipService = inject(ObjectRelationshipService);\n #snack = inject(SnackBarService);\n private translate = inject(TranslateService);\n container = viewChild.required<ElementRef<HTMLDivElement>>('graphContainer');\n #mode = computed(() => {\n const m = this.#layoutSettings.mode();\n switch (m) {\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\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 so = this.selectedObject();\n if (so) this.selectedRelation.set(null);\n this.objectSelected.emit(so);\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 download() {\n const canvas = this.container().nativeElement.querySelector('canvas')!;\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() {\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((result) => {\n this.expandSelected();\n });\n }\n\n deleteRelationship() {\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 another node in the current graph\n const otherEdgesForSource = this.#edges.get().filter((edge: any) => edge.from === sourceNodeId || edge.to === sourceNodeId);\n const otherEdgesForTarget = this.#edges.get().filter((edge: any) => 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() {\n const selected = this.selectedObject();\n if (selected) {\n this.#expand(selected.id);\n }\n }\n\n #expand(nodeId: string) {\n if (nodeId) {\n this.busy.set(true);\n this.#objectRelationshipService.fetchRelations(nodeId).subscribe({\n next: (res) => {\n this.#_updateGraph(nodeId, res.relations, res.objects);\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 #_updateGraph(originId: string, relations: SearchResult, objects: SearchResult) {\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 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 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 n = this.#toNode(relatedObjectId);\n const e = this.#toEdge(item, originId, relatedObjectId, 'to');\n if (n) {\n // check if the node is already in the rendered graph\n const nodeExists: boolean = _nodes.some((node) => node.id === n.id) || this.#nodes.get([n.id!]).length > 0;\n if (!nodeExists) _nodes.push(n);\n // check if edge already exists\n const edgeExists: boolean = _edges.some((edge) => edge.id === e.id) || this.#edges.get([e.id!]).length > 0;\n if (!edgeExists) _edges.push(e);\n }\n });\n\n incoming.forEach((item) => {\n const relatedObjectId = item.fields.get(RelationshipTypeField.SOURCE_ID) as string;\n const n = this.#toNode(relatedObjectId);\n const e = this.#toEdge(item, relatedObjectId, originId, 'from');\n if (n) {\n // check if the node is already in the rendered graph\n const nodeExists: boolean = _nodes.some((node) => node.id === n.id) || this.#nodes.get([n.id!]).length > 0;\n if (!nodeExists) _nodes.push(n);\n // check if edge already exists\n const edgeExists: boolean = _edges.some((edge) => edge.id === e.id) || this.#edges.get([e.id!]).length > 0;\n if (!edgeExists) _edges.push(e);\n }\n });\n this.#nodes.add(_nodes);\n this.#edges.add(_edges);\n }\n\n #getNodeConfig(o?: DmsObject): RelationshipComponentConfigNode | undefined {\n const cfg = this.config();\n if (!o) return undefined;\n const objectTypeIds = [...o.sots, o.objectTypeId];\n return [cfg.rootNode, ...cfg.nodes].find((n) => objectTypeIds.includes(n.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 cfg = this.config();\n const o = this.#objectQA[objectId];\n if (!o) return null;\n const cfgNode = this.#getNodeConfig(o);\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(o.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.#system.getLocalizedLabel(item.fields.get(BaseObjectTypeField.OBJECT_TYPE_ID) as string) || 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() {\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 #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() {\n const container = this.container().nativeElement;\n return getComputedStyle(container);\n }\n\n // grab color values for light-dark(...,...) notation\n #resolveLightDark(s: 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 ngAfterViewInit() {\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 this.#expand(params.nodes[0]);\n });\n }\n\n #setSelection(params: { nodes: string[]; edges: string[] }) {\n this.selectedObject.set(params.nodes.length === 1 ? this.#objectQA[params.nodes[0]] : null);\n this.selectedRelation.set(params.edges.length === 1 && params.nodes.length === 0 ? this.#relationQA[params.edges[0]] : null);\n }\n\n ngOnDestroy() {\n if (this.#network) {\n this.#network.destroy();\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 ymtIconButton (click)=\"deleteRelationship()\" [matTooltip]=\"'yuv.object-relationship.delete-relation.tooltip' | translate\">\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\"></yuv-node-summary>\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 ymt-icon-button icon-button-size=\"small\" [matTooltip]=\"'yuv.object-relationship.selected.expand.tooltip' | translate\" (click)=\"expandSelected()\">\n <mat-icon>open_with</mat-icon>\n </button>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, input, TemplateRef } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Router } from '@angular/router';\nimport { ObjectLink } from '../../object-relationship.interface';\nimport { ObjectRelationshipService } from '../../object-relationship.service';\nimport { SnackBarService } from '@yuuvis/client-framework';\nimport { TranslateService } from '@yuuvis/client-core';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\n\n@Component({\n selector: 'yuv-object-relationship-list-item',\n imports: [CommonModule, MatIconModule, YmtIconButtonDirective],\n templateUrl: './object-relationship-list-item.component.html',\n styleUrl: './object-relationship-list-item.component.scss'\n})\nexport class ObjectRelationshipListItemComponent {\n #router = inject(Router);\n #snack = inject(SnackBarService);\n #objectRelationshipService = inject(ObjectRelationshipService);\n private 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() {\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 open(link: string | undefined, skip: boolean) {\n if (link && !skip) 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 { CommonModule } from '@angular/common';\nimport { Component, effect, inject, input, output, signal, TemplateRef } from '@angular/core';\nimport {\n BaseObjectTypeField,\n DmsObject,\n RelationshipTypeField,\n SearchResult,\n SearchResultItem,\n SearchService,\n SystemService,\n TranslateModule\n} from '@yuuvis/client-core';\nimport { ObjectLink, RelationshipComponentConfig, RelationshipComponentConfigNode } 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: [CommonModule, ObjectRelationshipListItemComponent, TranslateModule],\n templateUrl: './object-relationship-list.component.html',\n styleUrl: './object-relationship-list.component.scss'\n})\nexport class ObjectRelationshipListComponent {\n #search = inject(SearchService);\n #system = inject(SystemService);\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) {\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((l) => l !== undefined) as ObjectLink[]);\n this.outgoingLinks.set(outgoing.map((rel) => this.#map(rel)).filter((l) => l !== 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.#system.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 return cfg.nodes.find((n) => (object.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] as string[]).includes(n.objectType));\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 { CommonModule } from '@angular/common';\nimport { Component, computed, effect, inject, input, 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, TranslateModule } 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 CommonModule,\n MatIconModule,\n MatTooltipModule,\n TranslateModule,\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 #DEFAULT_MODE: 'list' | 'graph' = 'graph';\n mode = signal<'list' | 'graph'>(this.#DEFAULT_MODE);\n empty = computed(() => {\n const rel = this.#relations();\n return rel && 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","i4","i1","i5"],"mappings":"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"}
1
+ {"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/object-relationship.const.ts","../../../../../libs/yuuvis/client-framework/object-relationship/src/lib/object-relationship.service.ts","../../../../../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-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 { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { BaseObjectTypeField, Operator, Relationship, SearchQuery, SearchResult, SearchResultItem, SearchService, TranslateModule } from '@yuuvis/client-core';\nimport { AutocompleteItem, YuvAutocompleteModule } from '@yuuvis/client-framework/autocomplete';\nimport { RelationshipComponentConfig, RelationshipComponentConfigNode } from '../../object-relationship.interface';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatIconModule } from '@angular/material/icon';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\n\ninterface AutocompleteItemValue {\n description?: string;\n data: Record<string, unknown>;\n}\n\n@Component({\n selector: 'yuv-relationship-target-search',\n imports: [YuvAutocompleteModule, ReactiveFormsModule, MatIconModule, YmtIconButtonDirective, TranslateModule, MatFormFieldModule],\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: (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 { CommonModule } from '@angular/common';\nimport { Component, computed, inject, input, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { AbstractControl, FormControl, FormGroup, ReactiveFormsModule, ValidationErrors, ValidatorFn, Validators } 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 TranslateModule,\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 CommonModule,\n ReactiveFormsModule,\n TranslateModule,\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, { initialValue: this.targetTypeFilterControl.value || null });\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, { nonNullable: true, validators: [Validators.required] })\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(tap(() => this.#eventService.trigger(YuvEventType.RELATIONSHIP_CREATED, { sourceObjectId: this.object().id })));\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 [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>{{ 'cm.app.cases.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 ></yuv-relationship-target-search>\n </section>\n\n <section class=\"error\">\n @if (form.hasError('invalidRelationTargetCombination') && (form.touched || form.dirty)) {\n <mat-error class=\"error\">{{ 'yuv.object-relationship.add-relationship.error.invalidRelationTargetCombination' | translate }}</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\" [disabled]=\"form.invalid || busy()\">\n {{ 'yuv.object-relationship.add-relationship.action.submit' | translate }}\n </button>\n </footer>\n</yuv-dialog>\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 { 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 request: this.objectId,\n loader: ({ request }) => this.fetchRelations(request)\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 { Component, computed, inject, input, TemplateRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DmsObject, SchemaResponseFieldDefinition, SystemService, TranslateModule } from '@yuuvis/client-core';\nimport { RelationshipComponentConfigNode } from '../object-relationship.interface';\nimport { RendererDirective, RendererDirectiveInput } from '@yuuvis/client-framework/renderer';\nimport { Router } from '@angular/router';\nimport { YmtButtonDirective } from '@yuuvis/material';\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, TranslateModule, 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 || []).map((field) => this.#propertyToRendererInput(field, obj)).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(propertyName: string, object: DmsObject): { 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 || []),\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 { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, computed, effect, ElementRef, inject, input, OnDestroy, output, signal, TemplateRef, viewChild } from '@angular/core';\nimport {\n BaseObjectTypeField,\n DmsObject,\n RelationshipTypeField,\n SearchResult,\n SearchResultItem,\n SearchService,\n SystemService,\n SystemType,\n TranslateModule,\n TranslateService\n} from '@yuuvis/client-core';\nimport { BusyOverlayDirective, ConfirmService, LayoutSettingsService } from '@yuuvis/client-framework/common';\nimport { map, of, switchMap } from 'rxjs';\nimport { Color, DataSet, Edge, Font, Network, Options } from 'vis-network/standalone';\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 { RelationshipComponentConfig, RelationshipComponentConfigNode, RelationshipComponentInput, RelationshipNode } from './../object-relationship.interface';\nimport { MatIconModule } from '@angular/material/icon';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ObjectRelationshipService } from '../object-relationship.service';\nimport { NodeSummaryComponent } from '../node-summary/node-summary.component';\nimport { AddRelationshipComponent } from '../actions/add-relationship/add-relationship.component';\nimport { MatDialog } from '@angular/material/dialog';\nimport { SnackBarService } from '@yuuvis/client-framework';\n\n@Component({\n selector: 'yuv-object-relationship-graph',\n imports: [CommonModule, NodeSummaryComponent, BusyOverlayDirective, MatIconModule, MatTooltipModule, TranslateModule, YmtIconButtonDirective],\n templateUrl: './object-relationship-graph.component.html',\n styleUrl: './object-relationship-graph.component.scss'\n})\nexport class ObjectRelationshipGraphComponent implements AfterViewInit, OnDestroy {\n #dialog = inject(MatDialog);\n #system = inject(SystemService);\n #layoutSettings = inject(LayoutSettingsService);\n #objectRelationshipService = inject(ObjectRelationshipService);\n #snack = inject(SnackBarService);\n private translate = inject(TranslateService);\n container = viewChild.required<ElementRef<HTMLDivElement>>('graphContainer');\n #mode = computed(() => {\n const m = this.#layoutSettings.mode();\n switch (m) {\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\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 so = this.selectedObject();\n if (so) this.selectedRelation.set(null);\n this.objectSelected.emit(so);\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 download() {\n const canvas = this.container().nativeElement.querySelector('canvas')!;\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() {\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((result) => {\n this.expandSelected();\n });\n }\n\n deleteRelationship() {\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 another node in the current graph\n const otherEdgesForSource = this.#edges.get().filter((edge: any) => edge.from === sourceNodeId || edge.to === sourceNodeId);\n const otherEdgesForTarget = this.#edges.get().filter((edge: any) => 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() {\n const selected = this.selectedObject();\n if (selected) {\n this.#expand(selected.id);\n }\n }\n\n #expand(nodeId: string) {\n if (nodeId) {\n this.busy.set(true);\n this.#objectRelationshipService.fetchRelations(nodeId).subscribe({\n next: (res) => {\n this.#_updateGraph(nodeId, res.relations, res.objects);\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 #_updateGraph(originId: string, relations: SearchResult, objects: SearchResult) {\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 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 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 n = this.#toNode(relatedObjectId);\n const e = this.#toEdge(item, originId, relatedObjectId, 'to');\n if (n) {\n // check if the node is already in the rendered graph\n const nodeExists: boolean = _nodes.some((node) => node.id === n.id) || this.#nodes.get([n.id!]).length > 0;\n if (!nodeExists) _nodes.push(n);\n // check if edge already exists\n const edgeExists: boolean = _edges.some((edge) => edge.id === e.id) || this.#edges.get([e.id!]).length > 0;\n if (!edgeExists) _edges.push(e);\n }\n });\n\n incoming.forEach((item) => {\n const relatedObjectId = item.fields.get(RelationshipTypeField.SOURCE_ID) as string;\n const n = this.#toNode(relatedObjectId);\n const e = this.#toEdge(item, relatedObjectId, originId, 'from');\n if (n) {\n // check if the node is already in the rendered graph\n const nodeExists: boolean = _nodes.some((node) => node.id === n.id) || this.#nodes.get([n.id!]).length > 0;\n if (!nodeExists) _nodes.push(n);\n // check if edge already exists\n const edgeExists: boolean = _edges.some((edge) => edge.id === e.id) || this.#edges.get([e.id!]).length > 0;\n if (!edgeExists) _edges.push(e);\n }\n });\n this.#nodes.add(_nodes);\n this.#edges.add(_edges);\n }\n\n #getNodeConfig(o?: DmsObject): RelationshipComponentConfigNode | undefined {\n const cfg = this.config();\n if (!o) return undefined;\n const objectTypeIds = [...o.sots, o.objectTypeId];\n return [cfg.rootNode, ...cfg.nodes].find((n) => objectTypeIds.includes(n.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 cfg = this.config();\n const o = this.#objectQA[objectId];\n if (!o) return null;\n const cfgNode = this.#getNodeConfig(o);\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(o.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.#system.getLocalizedLabel(item.fields.get(BaseObjectTypeField.OBJECT_TYPE_ID) as string) || 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() {\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 #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() {\n const container = this.container().nativeElement;\n return getComputedStyle(container);\n }\n\n // grab color values for light-dark(...,...) notation\n #resolveLightDark(s: 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 ngAfterViewInit() {\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 this.#expand(params.nodes[0]);\n });\n }\n\n #setSelection(params: { nodes: string[]; edges: string[] }) {\n this.selectedObject.set(params.nodes.length === 1 ? this.#objectQA[params.nodes[0]] : null);\n this.selectedRelation.set(params.edges.length === 1 && params.nodes.length === 0 ? this.#relationQA[params.edges[0]] : null);\n }\n\n ngOnDestroy() {\n if (this.#network) {\n this.#network.destroy();\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 ymtIconButton (click)=\"deleteRelationship()\" [matTooltip]=\"'yuv.object-relationship.delete-relation.tooltip' | translate\">\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\"></yuv-node-summary>\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 ymt-icon-button icon-button-size=\"small\" [matTooltip]=\"'yuv.object-relationship.selected.expand.tooltip' | translate\" (click)=\"expandSelected()\">\n <mat-icon>open_with</mat-icon>\n </button>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, input, TemplateRef } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Router } from '@angular/router';\nimport { ObjectLink } from '../../object-relationship.interface';\nimport { ObjectRelationshipService } from '../../object-relationship.service';\nimport { SnackBarService } from '@yuuvis/client-framework';\nimport { TranslateService } from '@yuuvis/client-core';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\n\n@Component({\n selector: 'yuv-object-relationship-list-item',\n imports: [CommonModule, MatIconModule, YmtIconButtonDirective],\n templateUrl: './object-relationship-list-item.component.html',\n styleUrl: './object-relationship-list-item.component.scss'\n})\nexport class ObjectRelationshipListItemComponent {\n #router = inject(Router);\n #snack = inject(SnackBarService);\n #objectRelationshipService = inject(ObjectRelationshipService);\n private 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() {\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 open(link: string | undefined, skip: boolean) {\n if (link && !skip) 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 { CommonModule } from '@angular/common';\nimport { Component, effect, inject, input, output, signal, TemplateRef } from '@angular/core';\nimport {\n BaseObjectTypeField,\n DmsObject,\n RelationshipTypeField,\n SearchResult,\n SearchResultItem,\n SearchService,\n SystemService,\n TranslateModule\n} from '@yuuvis/client-core';\nimport { ObjectLink, RelationshipComponentConfig, RelationshipComponentConfigNode } 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: [CommonModule, ObjectRelationshipListItemComponent, TranslateModule],\n templateUrl: './object-relationship-list.component.html',\n styleUrl: './object-relationship-list.component.scss'\n})\nexport class ObjectRelationshipListComponent {\n #search = inject(SearchService);\n #system = inject(SystemService);\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) {\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((l) => l !== undefined) as ObjectLink[]);\n this.outgoingLinks.set(outgoing.map((rel) => this.#map(rel)).filter((l) => l !== 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.#system.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((n) => (object.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] as string[]).includes(n.objectType));\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 { CommonModule } from '@angular/common';\nimport { Component, computed, effect, inject, input, 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, TranslateModule } 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 CommonModule,\n MatIconModule,\n MatTooltipModule,\n TranslateModule,\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 #DEFAULT_MODE: 'list' | 'graph' = 'graph';\n mode = signal<'list' | 'graph'>(this.#DEFAULT_MODE);\n empty = computed(() => {\n const rel = this.#relations();\n return rel && 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","i4","i1","i5"],"mappings":"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"}
@@ -0,0 +1,208 @@
1
+ {
2
+ "yuv.session.expires.message": "Sitzung läuft in einer Minute ab",
3
+ "yuv.session.extend.action": "Sitzung verlängern",
4
+ "yuv.action-menu.action.copy.dms.object.description": "",
5
+ "yuv.action-menu.action.copy.dms.object.label": "Kopieren",
6
+ "yuv.action-menu.action.cut.dms.object.description": "",
7
+ "yuv.action-menu.action.cut.dms.object.label": "Ausschneiden",
8
+ "yuv.action-menu.action.delete.dms.object.confirm.cancel": "Abbrechen",
9
+ "yuv.action-menu.action.delete.dms.object.confirm.message": "Möchten Sie die ausgewählen Objekte wirklich löschen?",
10
+ "yuv.action-menu.action.delete.dms.object.confirm.ok": "Löschen",
11
+ "yuv.action-menu.action.delete.dms.object.description": "Löscht das Objekt.",
12
+ "yuv.action-menu.action.delete.dms.object.label": "Löschen",
13
+ "yuv.action-menu.action.delete.error.403": "Sie haben keine Berechtigung, das Objekt zu löschen.",
14
+ "yuv.action-menu.action.delete.error.404": "Das Objekt konnte nicht gefunden werden.",
15
+ "yuv.action-menu.action.delete.error.default": "Das Objekt konnte nicht gelöscht werden.",
16
+ "yuv.action-menu.action.download.dms.object.content.description": "Lädt die Dokumentdatei des Objekts herunter.",
17
+ "yuv.action-menu.action.download.dms.object.content.label": "Dokumentdatei herunterladen",
18
+ "yuv.clipboard.button.cancel": "Abbrechen",
19
+ "yuv.clipboard.button.paste": "Einfügen",
20
+ "yuv.clipboard.text.copy.multiple": "{{count}} Elemente kopiert",
21
+ "yuv.clipboard.text.copy.single": "1 Element kopiert",
22
+ "yuv.clipboard.text.cut.multiple": "{{count}} Elemente ausgeschnitten",
23
+ "yuv.clipboard.text.cut.single": "1 Element ausgeschnitten",
24
+ "yuv.confirm.cancel": "Abbrechen",
25
+ "yuv.confirm.confirm": "Bestätigen",
26
+ "yuv.object-form-element.error.date.invalid": "Bitte geben Sie ein gültiges Datum ein.",
27
+ "yuv.object-form-element.error.daterange.invalid": "Bitte geben Sie einen gültigen Datumsbereich an.",
28
+ "yuv.object-form-element.error.daterangeorder.invalid": "Das Von-Datum ist später als das Bis-Datum.",
29
+ "yuv.object-form-element.error.maxlength": "Die Eingabe darf max. {{maxLength}} Zeichen enthalten.",
30
+ "yuv.object-form-element.error.maxvalue": "Die Eingabe darf nicht mehr als {{maxValue}} sein.",
31
+ "yuv.object-form-element.error.minlength": "Die Eingabe muss min. {{minLength}} Zeichen enthalten.",
32
+ "yuv.object-form-element.error.minmax": "Die Eingabe muss zwischen {{minValue}} und {{maxValue}} liegen.",
33
+ "yuv.object-form-element.error.minvalue": "Die Eingabe darf nicht weniger als {{minValue}} sein.",
34
+ "yuv.object-form-element.error.number": "Bitte geben Sie einen numerischen Wert ein.",
35
+ "yuv.object-form-element.error.number.precision": "Die Anzahl der Vorkommastellen ist nicht korrekt: max. {{prePointDigits}}.",
36
+ "yuv.object-form-element.error.number.scale": "Die Anzahl der Nachkommastellen ist nicht korrekt: max. {{scale}}.",
37
+ "yuv.object-form-element.error.numberrange.invalid": "Bitte geben Sie einen gültigen Zahlenbereich an.",
38
+ "yuv.object-form-element.error.numberrangeorder.invalid": "Der Von-Wert ist größer als der Bis-Wert.",
39
+ "yuv.object-form-element.error.required": "Pflichtfeld",
40
+ "yuv.object-form-element.error.string.classification.email": "Bitte geben Sie eine gültige E-Mail-Adresse ein.",
41
+ "yuv.object-form-element.error.string.classification.phone": "Bitte geben Sie eine gültige Telefonnummer ein.",
42
+ "yuv.object-form-element.error.string.classification.url": "Bitte geben Sie eine gültige URL ein.",
43
+ "yuv.object-form-element.error.string.regex.nomatch": "Die Eingabe entspricht nicht den Vorgaben.",
44
+ "yuv.object-form-element.error.string.whitespaces": "Die Eingabe enthält nur Leerzeichen.",
45
+ "yuv.retention-badge.retain": "Aufbewahrung {{from}} - {{until}}",
46
+ "yuv.theme.default.description": "The default application theme",
47
+ "yuv.theme.default.label": "Default Theme",
48
+ "yuv.theme.highContrast.description": "A theme with high contrast for better accessibility",
49
+ "yuv.theme.highContrast.label": "High Contrast Theme",
50
+ "yuv.calendar.time.label": "Uhrzeit",
51
+ "yuv.form.element.data.grid.add-row.button.tooltip": "Zeile hinzufügen",
52
+ "yuv.form.element.data.grid.edit": "Bearbeiten",
53
+ "yuv.form.element.data.grid.edit.add": "Hinzufügen",
54
+ "yuv.form.element.data.grid.edit.cancel": "Abbrechen",
55
+ "yuv.form.element.data.grid.edit.headline": "Bearbeiten Sie die Tabellenzeile '{{headline}}'.",
56
+ "yuv.form.element.data.grid.noData": "Keine Daten verfügbar",
57
+ "yuv.form.element.data.grid.remove": "Entfernen",
58
+ "yuv.form.element.data.grid.row.button.actions.tooltip": "Aktionsmenü öffnen",
59
+ "yuv.form.element.datetime.calendar.cancel": "Abbrechen",
60
+ "yuv.form.element.datetime.calendar.select": "Auswählen",
61
+ "yuv.form.element.datetime.calendar.today": "Heute",
62
+ "yuv.form.element.organization-set.classify.icon.title": "Gruppe",
63
+ "yuv.form.element.organization.classify.icon.title": "Benutzer",
64
+ "yuv.form.element.range-select-date.custom.overlay.button.apply": "Anwenden",
65
+ "yuv.form.element.range-select-date.custom.overlay.title": "Benutzerdefinierter Zeitraum",
66
+ "yuv.form.element.range-select-date.option.any": "Beliebiges Datum",
67
+ "yuv.form.element.range-select-date.option.custom": "Zeitraum festlegen",
68
+ "yuv.form.element.range-select-date.option.lastMonth": "Letzter Monat",
69
+ "yuv.form.element.range-select-date.option.lastWeek": "Letzte Woche",
70
+ "yuv.form.element.range-select-date.option.lastYear": "Letztes Jahr",
71
+ "yuv.form.element.range-select-date.option.thisMonth": "Dieser Monat",
72
+ "yuv.form.element.range-select-date.option.thisWeek": "Diese Woche",
73
+ "yuv.form.element.range-select-date.option.thisYear": "Dieses Jahr",
74
+ "yuv.form.element.range-select-date.option.today": "Heute",
75
+ "yuv.form.element.range-select-date.option.yesterday": "Gestern",
76
+ "yuv.form.element.range-select-filesize.option.any": "Beliebige Größe",
77
+ "yuv.form.element.range-select-filesize.option.large": "Groß (10-100 MB)",
78
+ "yuv.form.element.range-select-filesize.option.medium": "Mittel (1-10 MB)",
79
+ "yuv.form.element.range-select-filesize.option.small": "Klein (<1 MB)",
80
+ "yuv.form.element.range-select-filesize.option.verylarge": "Sehr groß (>100 MB)",
81
+ "yuv.object-metadata.button.save": "Speichern",
82
+ "yuv.audit.fetch.error": "Historieneinträge konnten nicht geladen werden",
83
+ "yuv.audit.label.create.metadata": "Objekt wurde erstellt",
84
+ "yuv.audit.label.create.metadata.withcontent": "Objekt wurde mit Dokumentdatei erstellt",
85
+ "yuv.audit.label.create.tag": "Tag wurde erstellt",
86
+ "yuv.audit.label.delete": "Objekt wurde gelöscht",
87
+ "yuv.audit.label.delete.content": "Dokumentdatei wurde gelöscht",
88
+ "yuv.audit.label.delete.marked": "Objekt wurde zur Löschung vorgesehen",
89
+ "yuv.audit.label.delete.tag": "Tag wurde gelöscht",
90
+ "yuv.audit.label.delete.version": "Dokumentversion wurde gelöscht",
91
+ "yuv.audit.label.get.content": "Dokumentdatei wurde gelesen",
92
+ "yuv.audit.label.get.custom": "Alle sonstigen Ereignisse",
93
+ "yuv.audit.label.get.metadata": "Metadaten wurden gelesen",
94
+ "yuv.audit.label.get.rendition.pdf": "PDF-Rendition wurde angefordert",
95
+ "yuv.audit.label.get.rendition.text": "Text-Rendition wurde angefordert",
96
+ "yuv.audit.label.get.rendition.thumbnail": "Minituransicht wurde angefordert",
97
+ "yuv.audit.label.paging.next": "zur nächsten Seite",
98
+ "yuv.audit.label.paging.prev": "zur vorherigen Seite",
99
+ "yuv.audit.label.update.content": "Dokumentdatei wurde geändert",
100
+ "yuv.audit.label.update.metadata": "Metadaten wurden geändert",
101
+ "yuv.audit.label.update.metadata.withcontent": "Metadaten und Dokumentdatei wurden geändert",
102
+ "yuv.audit.label.update.move": "Objekt wurde verschoben",
103
+ "yuv.audit.label.update.move.content": "Dokumentdatei wurde verschoben",
104
+ "yuv.audit.label.update.restore": "Alte Version wurde wiederhergestellt",
105
+ "yuv.audit.label.update.restore.more": "Wiederhergestellt aus Version {{version}}",
106
+ "yuv.audit.label.update.tag": "Tag wurde geändert",
107
+ "yuv.audit.result.empty": "Es wurden keine Historieneinträge gefunden",
108
+ "yuv.audit.timeline": "Historienzeitleiste",
109
+ "yuv.object-details.tabs.content.title": "Inhalt",
110
+ "yuv.object-metadata.button.reset": "Änderungen verwerfen",
111
+ "yuv.object-metadata.context.load.error": "Das Objekt ist nicht verfügbar. Entweder wurde das Objekt gelöscht oder die Zugriffsrechte haben sich geändert.",
112
+ "yuv.object-metadata.empty.message": "Das Objekt hat keine Metadaten.",
113
+ "yuv.object-metadata.pending-changes.alert": "Sie bearbeiten gerade die Metadaten eines ungespeicherten Formulars. Ungespeicherte Daten gehen verloren.",
114
+ "yuv.object-metadata.save.error": "Das Dokument kann im Moment nicht gespeichert werden.",
115
+ "yuv.object-metadata.tabs.history.title": "Historie",
116
+ "yuv.object-metadata.tabs.indexdata.title": "Metadaten",
117
+ "yuv.object-flavor.apply-flavor.button.apply": "Anwenden",
118
+ "yuv.object-flavor.apply-flavor.button.cancel": "Abbrechen",
119
+ "yuv.object-flavor.apply-flavor.headline": "Typ '{{name}}' hinzufügen",
120
+ "yuv.object-flavor.button.add": "Typ hinzufügen",
121
+ "yuv.object-flavor.button.clear-selection": "Auswahl aufheben",
122
+ "yuv.object-flavor.flavor.remove.confirm.message": "Möchten Sie den Typ '{{flavor}}' wirklich entfernen?",
123
+ "yuv.object-flavor.label": "Typen",
124
+ "yuv.object-flavor.picker.button.cancel": "Abbrechen",
125
+ "yuv.object-flavor.picker.text": "Typen sind Erweiterungen für Dateien, die zusätzliche Informationen zu deren Inhalt/Bedeutung bereitstellen.",
126
+ "yuv.object-flavor.picker.title": "Typ hinzufügen",
127
+ "yuv.object-preview.tiff-warning": "Dieses Dokument ist nicht die Original-TIFF-Datei, sondern nur eine Repräsentation. TIFF-Dateien werden nicht für die Vorschau unterstützt. Bitte laden Sie das Dokument herunter, um das Original anzuzeigen.",
128
+ "cm.app.cases.action.add-link.search.relation.label": "Verweistyp",
129
+ "yuv.object-relationship.action.add-relationship.description": "",
130
+ "yuv.object-relationship.action.add-relationship.label": "Verweis hinzufügen",
131
+ "yuv.object-relationship.add-relation.error-message": "Fehler beim Hinzufügen des Verweises.",
132
+ "yuv.object-relationship.add-relationship.action.cancel": "Abbrechen",
133
+ "yuv.object-relationship.add-relationship.action.submit": "Verweis hinzufügen",
134
+ "yuv.object-relationship.add-relationship.error.invalidRelationTargetCombination": "Der ausgewählte Verweistyp ist für das gewählte Zielobjekt nicht gültig.",
135
+ "yuv.object-relationship.add-relationship.headline": "Neuen Verweis hinzufügen",
136
+ "yuv.object-relationship.add-relationship.target-search.clear": "Auswahl entfernen",
137
+ "yuv.object-relationship.add-relationship.target-search.label": "Zielobjekt",
138
+ "yuv.object-relationship.add-relationship.target-type.filter.label": "Ziel Objekttyp",
139
+ "yuv.object-relationship.add.tooltip": "Fügt einen neuen Verweis hinzu",
140
+ "yuv.object-relationship.delete-relation.confirm-message": "Sind Sie sicher, dass Sie den ausgewählten Verweis löschen möchten?",
141
+ "yuv.object-relationship.delete-relation.error-message": "Fehler beim Löschen des ausgewählten Verweises.",
142
+ "yuv.object-relationship.delete-relation.tooltip": "Löscht den ausgewählten Verweis",
143
+ "yuv.object-relationship.download.tooltip": "Als Bild herunterladen",
144
+ "yuv.object-relationship.list.incoming": "Eingehende Verweise",
145
+ "yuv.object-relationship.list.outgoing": "Ausgehende Verweise",
146
+ "yuv.object-relationship.mode.graph.tooltip": "Graphansicht",
147
+ "yuv.object-relationship.mode.list.tooltip": "Listenansicht",
148
+ "yuv.object-relationship.no-relations": "Keine Verweise gefunden.",
149
+ "yuv.object-relationship.node-summary.open-object.button": "Öffnen",
150
+ "yuv.object-relationship.selected.add-relationship.tooltip": "Fügt einen neuen Verweis hinzu",
151
+ "yuv.object-relationship.selected.expand.tooltip": "Erweitert den ausgewählten Verweis",
152
+ "yuv.object-summary-data.base.headline": "Basismetadaten",
153
+ "yuv.object-summary.load.error": "Fehler beim Laden der Zusammenfassung",
154
+ "yuv.object-versions.actions.download": "Version herunterladen",
155
+ "yuv.object-versions.actions.restore": "Version wiederherstellen",
156
+ "yuv.object-versions.actions.restore.confirm.message": "Möchten Sie die Version {{version}} wirklich wiederherstellen?",
157
+ "yuv.object-versions.error.fetch-versions": "Versionen konnten nicht geladen werden",
158
+ "yuv.object-versions.list.version": "Version {{version}}",
159
+ "yuv.object-versions.tabs.content.title": "Inhalt",
160
+ "yuv.object-versions.tabs.indexdata.title": "Metadaten",
161
+ "yuv.table.renderer.moreEntries": "Es werden nur die ersten 10 Einträge angezeigt. Insgesamt: {{ count }}",
162
+ "yuv.sequence-list.form.nextAssignee": "Empfänger",
163
+ "yuv.sequence-list.form.task": "Aufgabe",
164
+ "yuv.simple-search.clear": "Löschen",
165
+ "yuv.simple-search.label": "Suchen",
166
+ "yuv.simple-search.submit": "Suche starten",
167
+ "yuv.sort.ascending": "Aufsteigend",
168
+ "yuv.sort.descending": "Absteigend",
169
+ "yuv.sort.tooltip": "Sortieren",
170
+ "yuv.tile-config.button.close": "Schließen",
171
+ "yuv.tile-config.button.reset": "Zurücksetzen",
172
+ "yuv.tile-config.button.save": "Änderungen speichern",
173
+ "yuv.tile-config.icon-select.pick": "Icon auswählen",
174
+ "yuv.tile-config.icon-select.reset": "Zurücksetzen",
175
+ "yuv.tile-config.slot.action.headline": "Aktionen",
176
+ "yuv.tile-config.slot.icon.headline": "Icon",
177
+ "yuv.tile-config.slot.property.headline": "Attribut",
178
+ "yuv.tile-config.title": "Trefferlistenkonfiguration für {{bucket}}",
179
+ "yuv.tile-config.trigger.tooltip": "Trefferlistenkonfiguration",
180
+ "yuv.tile-list.item.actions-menu.button.tooltip": "Aktionsmenü öffnen",
181
+ "yuv.upload-progress-overlay.error.403": "Sie haben nicht die erforderlichen Berechtigungen, um die Datei hochzuladen.",
182
+ "yuv.upload-progress-overlay.error.default": "Die Datei konnte nicht hochgeladen werden.",
183
+ "yuv.upload-progress.header.uploaded": "{{count}} Datei(en) hochgeladen",
184
+ "yuv.upload-progress.header.uploading": "Hochladen von {{count}} Datei(en)",
185
+ "yuv.widget-grid.button.cancel": "Abbrechen",
186
+ "yuv.widget-grid.button.save": "Speichern",
187
+ "yuv.widget-grid.empty": "Es wurden noch keine Widgets zu diesem Workspace hinzugefügt.",
188
+ "yuv.widget-grid.empty.create": "Workspace bearbeiten",
189
+ "yuv.widget-grid.widget-picker.empty": "Es sind keine Widgets verfügbar.",
190
+ "yuv.widget-grid.widget-picker.title": "Widgets",
191
+ "yuv.widget-grid.widget.add.label": "Widget hinzufügen",
192
+ "yuv.widget-grid.widget.add.tooltip": "Widget hinzufügen",
193
+ "yuv.widget-grid.widget.edit.tooltip": "Widget bearbeiten",
194
+ "yuv.widget-grid.widget.noop.label": "Nicht gefunden",
195
+ "yuv.widget-grid.widget.remove.tooltip": "Widget entfernen",
196
+ "yuv.widget-grid.workspaces.edit.cancel": "Abbrechen",
197
+ "yuv.widget-grid.workspaces.edit.save": "Speichern",
198
+ "yuv.widget-grid.workspaces.edit.title": "Workspace",
199
+ "yuv.widget-grid.workspaces.editMode.cancel": "Verwerfen",
200
+ "yuv.widget-grid.workspaces.editMode.save": "Änderungen speichern",
201
+ "yuv.widget-grid.workspaces.empty": "Keine Workspaces gefunden",
202
+ "yuv.widget-grid.workspaces.empty.button.create": "Workspace erstellen",
203
+ "yuv.widget-grid.workspaces.workspace.delete.confirm.message": "Möchten Sie den Workspace '{{label}}' wirklich löschen?",
204
+ "yuv.widget-grid.workspaces.workspace.label": "Workspace",
205
+ "yuv.widget-grid.workspaces.workspace.menu.create": "Workspace erstellen",
206
+ "yuv.widget-grid.workspaces.workspace.menu.delete": "Workspace löschen",
207
+ "yuv.widget-grid.workspaces.workspace.menu.edit": "Workspace bearbeiten"
208
+ }
@@ -0,0 +1,208 @@
1
+ {
2
+ "yuv.session.expires.message": "Session expires in one minute",
3
+ "yuv.session.extend.action": "Extend session",
4
+ "yuv.action-menu.action.copy.dms.object.description": "",
5
+ "yuv.action-menu.action.copy.dms.object.label": "Copy",
6
+ "yuv.action-menu.action.cut.dms.object.description": "",
7
+ "yuv.action-menu.action.cut.dms.object.label": "Cut",
8
+ "yuv.action-menu.action.delete.dms.object.confirm.cancel": "Cancel",
9
+ "yuv.action-menu.action.delete.dms.object.confirm.message": "Are you sure you want to delete the selected object(s)?",
10
+ "yuv.action-menu.action.delete.dms.object.confirm.ok": "Delete",
11
+ "yuv.action-menu.action.delete.dms.object.description": "Deletes the object.",
12
+ "yuv.action-menu.action.delete.dms.object.label": "Delete",
13
+ "yuv.action-menu.action.delete.error.403": "You are not authorized to delete the object.",
14
+ "yuv.action-menu.action.delete.error.404": "Unable to find the object.",
15
+ "yuv.action-menu.action.delete.error.default": "Unable to delete the object.",
16
+ "yuv.action-menu.action.download.dms.object.content.description": "Downloads the document file of the object.",
17
+ "yuv.action-menu.action.download.dms.object.content.label": "Download document file",
18
+ "yuv.clipboard.button.cancel": "Cancel",
19
+ "yuv.clipboard.button.paste": "Paste",
20
+ "yuv.clipboard.text.copy.multiple": "{{count}} elements copied",
21
+ "yuv.clipboard.text.copy.single": "1 element copied",
22
+ "yuv.clipboard.text.cut.multiple": "{{count}} elements cut out",
23
+ "yuv.clipboard.text.cut.single": "1 element cut out",
24
+ "yuv.confirm.cancel": "Cancel",
25
+ "yuv.confirm.confirm": "Confirm",
26
+ "yuv.object-form-element.error.date.invalid": "Please enter a valid date.",
27
+ "yuv.object-form-element.error.daterange.invalid": "Please enter a valid date range.",
28
+ "yuv.object-form-element.error.daterangeorder.invalid": "The 'From' date is later than the 'To' date.",
29
+ "yuv.object-form-element.error.maxlength": "The entry can contain a maximum of {{maxLength}} characters.",
30
+ "yuv.object-form-element.error.maxvalue": "The entry may not exceed {{maxValue}}.",
31
+ "yuv.object-form-element.error.minlength": "The entry must contain a minimum of {{minLength}} characters.",
32
+ "yuv.object-form-element.error.minmax": "The entry must be between {{minValue}} and {{maxValue}}.",
33
+ "yuv.object-form-element.error.minvalue": "The entry may not be below {{minValue}}.",
34
+ "yuv.object-form-element.error.number": "Please enter a numerical value.",
35
+ "yuv.object-form-element.error.number.precision": "The number of digits before the decimal point is not correct (max. of {{prePointDigits}}).",
36
+ "yuv.object-form-element.error.number.scale": "The number of decimal places is not correct: max. of {{scale}}.",
37
+ "yuv.object-form-element.error.numberrange.invalid": "Please enter a valid number range.",
38
+ "yuv.object-form-element.error.numberrangeorder.invalid": "The 'From' value exceeds the 'To' value.",
39
+ "yuv.object-form-element.error.required": "Mandatory field",
40
+ "yuv.object-form-element.error.string.classification.email": "Please enter a valid e-mail address.",
41
+ "yuv.object-form-element.error.string.classification.phone": "Please enter a valid phone number.",
42
+ "yuv.object-form-element.error.string.classification.url": "Please enter a valid URL.",
43
+ "yuv.object-form-element.error.string.regex.nomatch": "The entry does not follow the specifications.",
44
+ "yuv.object-form-element.error.string.whitespaces": "The entry contains only spaces.",
45
+ "yuv.retention-badge.retain": "Retention {{from}} – {{until}}",
46
+ "yuv.theme.default.description": "The default application theme",
47
+ "yuv.theme.default.label": "Default Theme",
48
+ "yuv.theme.highContrast.description": "A theme with high contrast for better accessibility",
49
+ "yuv.theme.highContrast.label": "High Contrast Theme",
50
+ "yuv.calendar.time.label": "Time",
51
+ "yuv.form.element.data.grid.add-row.button.tooltip": "Add row",
52
+ "yuv.form.element.data.grid.edit": "Edit",
53
+ "yuv.form.element.data.grid.edit.add": "Add",
54
+ "yuv.form.element.data.grid.edit.cancel": "Cancel",
55
+ "yuv.form.element.data.grid.edit.headline": "Edit the '{{headline}}' row in the table.",
56
+ "yuv.form.element.data.grid.noData": "No data available",
57
+ "yuv.form.element.data.grid.remove": "Remove",
58
+ "yuv.form.element.data.grid.row.button.actions.tooltip": "Open actions menu",
59
+ "yuv.form.element.datetime.calendar.cancel": "Cancel",
60
+ "yuv.form.element.datetime.calendar.select": "Select",
61
+ "yuv.form.element.datetime.calendar.today": "Today",
62
+ "yuv.form.element.organization-set.classify.icon.title": "Group",
63
+ "yuv.form.element.organization.classify.icon.title": "User",
64
+ "yuv.form.element.range-select-date.custom.overlay.button.apply": "Apply",
65
+ "yuv.form.element.range-select-date.custom.overlay.title": "User-defined time period",
66
+ "yuv.form.element.range-select-date.option.any": "Any date",
67
+ "yuv.form.element.range-select-date.option.custom": "Set time period",
68
+ "yuv.form.element.range-select-date.option.lastMonth": "Last month",
69
+ "yuv.form.element.range-select-date.option.lastWeek": "Last week",
70
+ "yuv.form.element.range-select-date.option.lastYear": "Last year",
71
+ "yuv.form.element.range-select-date.option.thisMonth": "This month",
72
+ "yuv.form.element.range-select-date.option.thisWeek": "This week",
73
+ "yuv.form.element.range-select-date.option.thisYear": "This year",
74
+ "yuv.form.element.range-select-date.option.today": "Today",
75
+ "yuv.form.element.range-select-date.option.yesterday": "Yesterday",
76
+ "yuv.form.element.range-select-filesize.option.any": "Any size",
77
+ "yuv.form.element.range-select-filesize.option.large": "Large (10–100 MB)",
78
+ "yuv.form.element.range-select-filesize.option.medium": "Medium (1–10 MB)",
79
+ "yuv.form.element.range-select-filesize.option.small": "Small (<1 MB)",
80
+ "yuv.form.element.range-select-filesize.option.verylarge": "Very large (>100 MB)",
81
+ "yuv.object-metadata.button.save": "Save",
82
+ "yuv.audit.fetch.error": "Unable to load history entries",
83
+ "yuv.audit.label.create.metadata": "Object was created",
84
+ "yuv.audit.label.create.metadata.withcontent": "Object was created with document file",
85
+ "yuv.audit.label.create.tag": "Tag was created",
86
+ "yuv.audit.label.delete": "Object was deleted",
87
+ "yuv.audit.label.delete.content": "Document file was deleted",
88
+ "yuv.audit.label.delete.marked": "Object was marked for deletion",
89
+ "yuv.audit.label.delete.tag": "Tag was deleted",
90
+ "yuv.audit.label.delete.version": "Document version was deleted",
91
+ "yuv.audit.label.get.content": "Document file was read",
92
+ "yuv.audit.label.get.custom": "All other events",
93
+ "yuv.audit.label.get.metadata": "Metadata was read",
94
+ "yuv.audit.label.get.rendition.pdf": "PDF rendition was requested",
95
+ "yuv.audit.label.get.rendition.text": "Text rendition was requested",
96
+ "yuv.audit.label.get.rendition.thumbnail": "Thumbnail view was requested",
97
+ "yuv.audit.label.paging.next": "jump to next page",
98
+ "yuv.audit.label.paging.prev": "jump to previous page",
99
+ "yuv.audit.label.update.content": "Document file was changed",
100
+ "yuv.audit.label.update.metadata": "Metadata was changed",
101
+ "yuv.audit.label.update.metadata.withcontent": "Metadata and document file were changed",
102
+ "yuv.audit.label.update.move": "Object was moved",
103
+ "yuv.audit.label.update.move.content": "Document file was moved",
104
+ "yuv.audit.label.update.restore": "An old version was restored",
105
+ "yuv.audit.label.update.restore.more": "Restored from version {{version}}",
106
+ "yuv.audit.label.update.tag": "Tag was changed",
107
+ "yuv.audit.result.empty": "No history entries were found",
108
+ "yuv.audit.timeline": "History timeline",
109
+ "yuv.object-details.tabs.content.title": "Content",
110
+ "yuv.object-metadata.button.reset": "Discard changes",
111
+ "yuv.object-metadata.context.load.error": "The object is not available. The object was either deleted or the access rights were modified.",
112
+ "yuv.object-metadata.empty.message": "The object has no metadata.",
113
+ "yuv.object-metadata.pending-changes.alert": "You are currently editing the metadata of a form that has not been saved. Unsaved data will be lost.",
114
+ "yuv.object-metadata.save.error": "The document cannot be saved currently.",
115
+ "yuv.object-metadata.tabs.history.title": "History",
116
+ "yuv.object-metadata.tabs.indexdata.title": "Metadata",
117
+ "yuv.object-flavor.apply-flavor.button.apply": "Apply",
118
+ "yuv.object-flavor.apply-flavor.button.cancel": "Cancel",
119
+ "yuv.object-flavor.apply-flavor.headline": "Add type '{{name}}'",
120
+ "yuv.object-flavor.button.add": "Add type",
121
+ "yuv.object-flavor.button.clear-selection": "Unselect",
122
+ "yuv.object-flavor.flavor.remove.confirm.message": "Do you really want to remove the type '{{flavor}}'?",
123
+ "yuv.object-flavor.label": "Types",
124
+ "yuv.object-flavor.picker.button.cancel": "Cancel",
125
+ "yuv.object-flavor.picker.text": "Types are extensions for files that provide additional information about their content/meaning.",
126
+ "yuv.object-flavor.picker.title": "Add type",
127
+ "yuv.object-preview.tiff-warning": "This document is not the original *.tiff file, but only a representation. The preview does not support *.tiff files. Please download the document to view the original.",
128
+ "cm.app.cases.action.add-link.search.relation.label": "Reference type",
129
+ "yuv.object-relationship.action.add-relationship.description": "",
130
+ "yuv.object-relationship.action.add-relationship.label": "Add reference",
131
+ "yuv.object-relationship.add-relation.error-message": "Error while adding the reference.",
132
+ "yuv.object-relationship.add-relationship.action.cancel": "Cancel",
133
+ "yuv.object-relationship.add-relationship.action.submit": "Add reference",
134
+ "yuv.object-relationship.add-relationship.error.invalidRelationTargetCombination": "The selected reference type is not valid for the selected target object.",
135
+ "yuv.object-relationship.add-relationship.headline": "Add new reference",
136
+ "yuv.object-relationship.add-relationship.target-search.clear": "Clear selected item",
137
+ "yuv.object-relationship.add-relationship.target-search.label": "Target object",
138
+ "yuv.object-relationship.add-relationship.target-type.filter.label": "Target object type",
139
+ "yuv.object-relationship.add.tooltip": "Add new reference",
140
+ "yuv.object-relationship.delete-relation.confirm-message": "Do you really want to delete the selected reference?",
141
+ "yuv.object-relationship.delete-relation.error-message": "Error while deleting the selected reference.",
142
+ "yuv.object-relationship.delete-relation.tooltip": "Delete selected reference",
143
+ "yuv.object-relationship.download.tooltip": "Download as image",
144
+ "yuv.object-relationship.list.incoming": "Incoming references",
145
+ "yuv.object-relationship.list.outgoing": "Outgoing references",
146
+ "yuv.object-relationship.mode.graph.tooltip": "Graph view",
147
+ "yuv.object-relationship.mode.list.tooltip": "List view",
148
+ "yuv.object-relationship.no-relations": "No references found.",
149
+ "yuv.object-relationship.node-summary.open-object.button": "Open",
150
+ "yuv.object-relationship.selected.add-relationship.tooltip": "Add new reference",
151
+ "yuv.object-relationship.selected.expand.tooltip": "Expand selected reference",
152
+ "yuv.object-summary-data.base.headline": "Basic metadata",
153
+ "yuv.object-summary.load.error": "Error while loading the summary",
154
+ "yuv.object-versions.actions.download": "Download version",
155
+ "yuv.object-versions.actions.restore": "Restore version",
156
+ "yuv.object-versions.actions.restore.confirm.message": "Do you really want to restore version {{version}}?",
157
+ "yuv.object-versions.error.fetch-versions": "Unable to load versions",
158
+ "yuv.object-versions.list.version": "Version {{version}}",
159
+ "yuv.object-versions.tabs.content.title": "Content",
160
+ "yuv.object-versions.tabs.indexdata.title": "Metadata",
161
+ "yuv.table.renderer.moreEntries": "Only the first ten entries are shown. Total: {{ count }}",
162
+ "yuv.sequence-list.form.nextAssignee": "Recipient",
163
+ "yuv.sequence-list.form.task": "Task",
164
+ "yuv.simple-search.clear": "Delete",
165
+ "yuv.simple-search.label": "Search",
166
+ "yuv.simple-search.submit": "Start search",
167
+ "yuv.sort.ascending": "Ascending",
168
+ "yuv.sort.descending": "Descending",
169
+ "yuv.sort.tooltip": "Sort",
170
+ "yuv.tile-config.button.close": "Close",
171
+ "yuv.tile-config.button.reset": "Reset",
172
+ "yuv.tile-config.button.save": "Save changes",
173
+ "yuv.tile-config.icon-select.pick": "Select icon",
174
+ "yuv.tile-config.icon-select.reset": "Reset",
175
+ "yuv.tile-config.slot.action.headline": "Actions",
176
+ "yuv.tile-config.slot.icon.headline": "Icon",
177
+ "yuv.tile-config.slot.property.headline": "Attributes",
178
+ "yuv.tile-config.title": "Hit list configuration for {{bucket}}",
179
+ "yuv.tile-config.trigger.tooltip": "Hit list configuration",
180
+ "yuv.tile-list.item.actions-menu.button.tooltip": "Open actions menu",
181
+ "yuv.upload-progress-overlay.error.403": "You do not have the required permissions to upload the file.",
182
+ "yuv.upload-progress-overlay.error.default": "Unable to upload the file.",
183
+ "yuv.upload-progress.header.uploaded": "{{count}} file(s) uploaded",
184
+ "yuv.upload-progress.header.uploading": "Upload of {{count}} file(s)",
185
+ "yuv.widget-grid.button.cancel": "Cancel",
186
+ "yuv.widget-grid.button.save": "Save",
187
+ "yuv.widget-grid.empty": "No widgets have been added to this workspace yet.",
188
+ "yuv.widget-grid.empty.create": "Edit workspace",
189
+ "yuv.widget-grid.widget-picker.empty": "No widgets available.",
190
+ "yuv.widget-grid.widget-picker.title": "Widgets",
191
+ "yuv.widget-grid.widget.add.label": "Add widget",
192
+ "yuv.widget-grid.widget.add.tooltip": "Add widget",
193
+ "yuv.widget-grid.widget.edit.tooltip": "Edit widget",
194
+ "yuv.widget-grid.widget.noop.label": "Not found",
195
+ "yuv.widget-grid.widget.remove.tooltip": "Remove widget",
196
+ "yuv.widget-grid.workspaces.edit.cancel": "Cancel",
197
+ "yuv.widget-grid.workspaces.edit.save": "Save",
198
+ "yuv.widget-grid.workspaces.edit.title": "Workspace",
199
+ "yuv.widget-grid.workspaces.editMode.cancel": "Discard",
200
+ "yuv.widget-grid.workspaces.editMode.save": "Save changes",
201
+ "yuv.widget-grid.workspaces.empty": "No workspaces found",
202
+ "yuv.widget-grid.workspaces.empty.button.create": "Create workspace",
203
+ "yuv.widget-grid.workspaces.workspace.delete.confirm.message": "Do you really want to delete workspace '{{label}}'?",
204
+ "yuv.widget-grid.workspaces.workspace.label": "Workspace",
205
+ "yuv.widget-grid.workspaces.workspace.menu.create": "Create workspace",
206
+ "yuv.widget-grid.workspaces.workspace.menu.delete": "Delete workspace",
207
+ "yuv.widget-grid.workspaces.workspace.menu.edit": "Edit workspace"
208
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuuvis/client-framework",
3
- "version": "2.11.1",
3
+ "version": "2.11.3",
4
4
  "author": "OPTIMAL SYSTEMS GmbH <npm@optimal-systems.de>",
5
5
  "license": "MIT",
6
6
  "peerDependencies": {
@@ -8,15 +8,15 @@
8
8
  "@angular/common": "^19.2.1",
9
9
  "@angular/core": "^19.2.1",
10
10
  "angular-gridster2": "^19.0.0",
11
- "@yuuvis/client-core": "^2.11.1",
12
- "@yuuvis/client-shell-core": "^2.11.1",
11
+ "@yuuvis/client-core": "^2.11.3",
12
+ "@yuuvis/client-shell-core": "^2.11.3",
13
13
  "ng-dynamic-component": "^10.8.2",
14
14
  "modern-normalize": "^3.0.1"
15
15
  },
16
16
  "dependencies": {
17
17
  "@angular/material": "^19.2.15",
18
18
  "@ngrx/signals": "^19.2.0",
19
- "@yuuvis/material": "2.11.1",
19
+ "@yuuvis/material": "2.11.3",
20
20
  "@yuuvis/media-viewer": "^2.0.12",
21
21
  "angular-split": "^19.0.0",
22
22
  "vis-network": "^10.0.2",
@@ -56,14 +56,14 @@
56
56
  "types": "./datepicker/index.d.ts",
57
57
  "default": "./fesm2022/yuuvis-client-framework-datepicker.mjs"
58
58
  },
59
- "./forms": {
60
- "types": "./forms/index.d.ts",
61
- "default": "./fesm2022/yuuvis-client-framework-forms.mjs"
62
- },
63
59
  "./icons": {
64
60
  "types": "./icons/index.d.ts",
65
61
  "default": "./fesm2022/yuuvis-client-framework-icons.mjs"
66
62
  },
63
+ "./forms": {
64
+ "types": "./forms/index.d.ts",
65
+ "default": "./fesm2022/yuuvis-client-framework-forms.mjs"
66
+ },
67
67
  "./list": {
68
68
  "types": "./list/index.d.ts",
69
69
  "default": "./fesm2022/yuuvis-client-framework-list.mjs"