@yuuvis/client-framework 2.4.0 → 2.4.1
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.
- package/fesm2022/yuuvis-client-framework-object-relationship.mjs +11 -5
- package/fesm2022/yuuvis-client-framework-object-relationship.mjs.map +1 -1
- package/lib/assets/i18n/de.json +1 -0
- package/lib/assets/i18n/en.json +1 -0
- package/object-relationship/lib/object-relationship.component.d.ts +1 -0
- package/package.json +4 -4
|
@@ -100,7 +100,9 @@ class ObjectRelationshipService {
|
|
|
100
100
|
const ids = Object.keys(o)
|
|
101
101
|
.map((id) => `'${id}'`)
|
|
102
102
|
.join(',');
|
|
103
|
-
|
|
103
|
+
// having no relations would end up in an empty IN () statement which is invalid
|
|
104
|
+
// but as we need to fetch the origin objects anyway we can add it manually
|
|
105
|
+
const q = `SELECT * FROM system:object WHERE ${BaseObjectTypeField.OBJECT_ID} IN (${ids.length > 0 ? ids : `'${originId}'`})`;
|
|
104
106
|
return this.#search.searchCmis(q).pipe(map((resObjects) => ({
|
|
105
107
|
relations: resRelations,
|
|
106
108
|
objects: resObjects
|
|
@@ -832,7 +834,7 @@ class ObjectRelationshipListComponent {
|
|
|
832
834
|
#createLists(objectId, relations, objects) {
|
|
833
835
|
const incoming = relations.items.filter((item) => item.fields.get(RelationshipTypeField.TARGET_ID) === objectId);
|
|
834
836
|
const outgoing = relations.items.filter((item) => item.fields.get(RelationshipTypeField.SOURCE_ID) === objectId);
|
|
835
|
-
objects
|
|
837
|
+
objects?.items.forEach((item) => {
|
|
836
838
|
const id = item.fields.get(BaseObjectTypeField.OBJECT_ID);
|
|
837
839
|
this.#objectQA[id] = new DmsObject(item);
|
|
838
840
|
});
|
|
@@ -897,6 +899,10 @@ class ObjectRelationshipComponent {
|
|
|
897
899
|
this.#dialog = inject(MatDialog);
|
|
898
900
|
this.#DEFAULT_MODE = 'graph';
|
|
899
901
|
this.mode = signal(this.#DEFAULT_MODE);
|
|
902
|
+
this.empty = computed(() => {
|
|
903
|
+
const rel = this.#relations();
|
|
904
|
+
return rel && rel.relations.totalNumItems === 0;
|
|
905
|
+
});
|
|
900
906
|
/**
|
|
901
907
|
* ID of the object to display relations for.
|
|
902
908
|
*/
|
|
@@ -923,7 +929,7 @@ class ObjectRelationshipComponent {
|
|
|
923
929
|
return;
|
|
924
930
|
}
|
|
925
931
|
const originId = rel.originId;
|
|
926
|
-
const originItem = rel.objects
|
|
932
|
+
const originItem = rel.objects?.items.find((item) => item.fields.get(BaseObjectTypeField.OBJECT_ID) === originId);
|
|
927
933
|
this.originObject.set(originItem ? new DmsObject(originItem) : null);
|
|
928
934
|
});
|
|
929
935
|
this.relationActions = input(null);
|
|
@@ -948,7 +954,7 @@ class ObjectRelationshipComponent {
|
|
|
948
954
|
});
|
|
949
955
|
}
|
|
950
956
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ObjectRelationshipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
951
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: ObjectRelationshipComponent, isStandalone: true, selector: "yuv-object-relationship", inputs: { objectId: { classPropertyName: "objectId", publicName: "objectId", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, relationActions: { classPropertyName: "relationActions", publicName: "relationActions", isSignal: true, isRequired: false, transformFunction: null } }, providers: [ObjectRelationshipService], ngImport: i0, template: "<ymt-pane [plain]=\"true\" [topBarActions]=\"topBarActions\">\n <ymt-pane-body>\n @switch (mode()) {\n
|
|
957
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: ObjectRelationshipComponent, isStandalone: true, selector: "yuv-object-relationship", inputs: { objectId: { classPropertyName: "objectId", publicName: "objectId", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, relationActions: { classPropertyName: "relationActions", publicName: "relationActions", isSignal: true, isRequired: false, transformFunction: null } }, providers: [ObjectRelationshipService], ngImport: i0, template: "<ymt-pane [plain]=\"true\" [topBarActions]=\"topBarActions\">\n <ymt-pane-body>\n @if (empty()) {\n <div class=\"no-relations\">\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", styles: [":host{display:block;position:relative;height:100%;background-color:var(--ymt-surface)}:host .toggle{position:absolute;inset-block-start:var(--ymt-spacing-s);inset-inline-end:var(--ymt-spacing-s);z-index:10;background-color:var(--ymt-surface);padding:var(--ymt-spacing-xs);border-radius:var(--ymt-corner-full)}:host yuv-object-relationship-list,:host yuv-object-relationship-graph{height:100%}:host .no-relations{height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;padding:var(--ymt-spacing-l);gap:var(--ymt-spacing-m);overflow:hidden}:host .no-relations mat-icon{scale:4;color:var(--ymt-text-color-subtle);opacity:.5;transform:translateY(-.5em)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "ngmodule", type: YmtPanesModule }, { kind: "component", type: i4$1.YmtPaneComponent, selector: "ymt-pane", inputs: ["topBarActions", "plain", "mode", "modeAlign"], outputs: ["paneToggled", "navigationClicked"] }, { kind: "component", type: i4$1.YmtPaneBodyComponent, selector: "ymt-pane-body" }, { kind: "directive", type: YmtIconButtonDirective, selector: "button[ymtIconButton],button[ymt-icon-button],a[ymtIconButton],a[ymt-icon-button]", inputs: ["disabled", "disableRipple", "aria-disabled", "disabledInteractive", "icon-button-size"] }, { kind: "component", type: ObjectRelationshipGraphComponent, selector: "yuv-object-relationship-graph", inputs: ["config"], outputs: ["objectSelected", "relationSelected"] }, { kind: "component", type: ObjectRelationshipListComponent, selector: "yuv-object-relationship-list", inputs: ["config"] }] }); }
|
|
952
958
|
}
|
|
953
959
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ObjectRelationshipComponent, decorators: [{
|
|
954
960
|
type: Component,
|
|
@@ -963,7 +969,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
|
|
|
963
969
|
ObjectRelationshipGraphComponent,
|
|
964
970
|
ObjectRelationshipListComponent,
|
|
965
971
|
YmtIconButtonDirective
|
|
966
|
-
], providers: [ObjectRelationshipService], template: "<ymt-pane [plain]=\"true\" [topBarActions]=\"topBarActions\">\n <ymt-pane-body>\n @switch (mode()) {\n
|
|
972
|
+
], providers: [ObjectRelationshipService], template: "<ymt-pane [plain]=\"true\" [topBarActions]=\"topBarActions\">\n <ymt-pane-body>\n @if (empty()) {\n <div class=\"no-relations\">\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", styles: [":host{display:block;position:relative;height:100%;background-color:var(--ymt-surface)}:host .toggle{position:absolute;inset-block-start:var(--ymt-spacing-s);inset-inline-end:var(--ymt-spacing-s);z-index:10;background-color:var(--ymt-surface);padding:var(--ymt-spacing-xs);border-radius:var(--ymt-corner-full)}:host yuv-object-relationship-list,:host yuv-object-relationship-graph{height:100%}:host .no-relations{height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;padding:var(--ymt-spacing-l);gap:var(--ymt-spacing-m);overflow:hidden}:host .no-relations mat-icon{scale:4;color:var(--ymt-text-color-subtle);opacity:.5;transform:translateY(-.5em)}\n"] }]
|
|
967
973
|
}] });
|
|
968
974
|
|
|
969
975
|
const cmp = [ObjectRelationshipComponent];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-client-framework-object-relationship.mjs","sources":["../../../../../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/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-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 { 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> = {\n \n};\nexport const EDGE_FONT_SETTINGS: Font = {\n size: 10 ,\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\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 const q = `SELECT * FROM system:object WHERE ${BaseObjectTypeField.OBJECT_ID} IN (${ids})`;\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 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 console.log('Navigating to link:', link);\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 { Component, computed, 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 {\n BaseObjectTypeField,\n Relationship,\n SearchQuery,\n SearchResult,\n SearchResultItem,\n SearchService,\n TranslateModule\n} from '@yuuvis/client-core';\nimport { AutocompleteItem, YuvAutocompleteModule } from '@yuuvis/client-framework/autocomplete';\nimport { RelationshipComponentConfig, RelationshipComponentConfigNode } from '../../object-relationship.interface';\n\n@Component({\n selector: 'yuv-relationship-target-search',\n imports: [YuvAutocompleteModule, ReactiveFormsModule, 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})\nexport class RelationshipTargetSearchComponent implements ControlValueAccessor {\n #searchService = inject(SearchService);\n\n supportedRelationships = input.required<Relationship[]>();\n availableTargetTypes = input<string[]>([]);\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[] = [];\n #value?: AutocompleteItem;\n busy = signal<boolean>(false);\n acFormControl = new FormControl<AutocompleteItem[]>([], Validators.required);\n\n constructor() {\n this.acFormControl.valueChanges.subscribe((val) => {\n this.#value = val && val.length > 0 ? (val[0] as AutocompleteItem) : undefined;\n this.propagateChange(this.#value?.value);\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 label: this.#getLabel(item),\n value: this.#searchResultItemToRecord(item)\n }));\n },\n error: () => {\n this.busy.set(false);\n this.autocompleteRes = [];\n }\n });\n } else {\n this.autocompleteRes = [];\n }\n }\n\n #getLabel(sri: SearchResultItem): string {\n // determine the object type\n const configType = this.availableTargetTypes().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 const config = configType ? this.#configQA()[configType] : undefined;\n return config ? (sri.fields.get(config.labelField) as string) : (sri.fields.get(BaseObjectTypeField.OBJECT_ID) as string);\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 // filters: [\n // {\n // f: this.#targetTitleProperty,\n // o: Operator.CONTAINS,\n // v1: term\n // }\n // ],\n types: this.availableTargetTypes()\n };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n propagateChange = (_: any) => {};\n\n writeValue(value: any): void {\n // this component is not supposed to accept values from outside\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]=\"true\"\n [maxItems]=\"1\"\n >\n <!-- template for chip -->\n <ng-template #chipTemplate let-item>\n <div class=\"label\">{{ item.label }}</div>\n <!-- <div class=\"meta\">{{ item.value[metaFieldProperty] }}</div> -->\n </ng-template>\n </yuv-autocomplete>\n</mat-form-field>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, input, signal } from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup, ReactiveFormsModule, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatError, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport {\n BaseObjectTypeField,\n DmsObject,\n DmsService,\n EventService,\n Relationship,\n RelationshipTypeField,\n SystemService,\n TranslateModule,\n YuvEventType\n} from '@yuuvis/client-core';\nimport { BusyOverlayDirective, DialogComponent } from '@yuuvis/client-framework/common';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { RelationshipComponentConfig, RelationshipComponentConfigNode } from '../../object-relationship.interface';\nimport { RelationshipTargetSearchComponent } from '../relationship-target-search/relationship-target-search.component';\nimport { tap } from 'rxjs';\n\n@Component({\n selector: 'yuv-add-relationship',\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TranslateModule,\n DialogComponent,\n MatSelectModule,\n MatFormFieldModule,\n MatError,\n YmtButtonDirective,\n RelationshipTargetSearchComponent,\n BusyOverlayDirective\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\n object = input<DmsObject>(this.#dialogData.object);\n config = input<RelationshipComponentConfig>(this.#dialogData.config);\n supportedRelationships = computed<Relationship[]>(() => {\n const obj = this.object();\n return obj ? this.#system.getSupportedRelationships(obj, true) : [];\n });\n // get the target types from the relationships\n availableTargetTypes = computed<string[]>(() => {\n const rel = this.supportedRelationships();\n return Array.from(new Set(rel.map((r) => r.allowedTargetTypes).flat()));\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 };\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\n optionCompareWith(o1: Relationship | undefined, o2: Relationship | undefined): boolean {\n return o1?.id === o2?.id;\n }\n\n submit() {\n this.#addRelationship(this.form.value.relation!.id, this.form.value.targetObject!).subscribe({\n next: () => this.close(),\n error: () => {\n // TODO: Handle error appropriately\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\" [headertitel]=\"'yuv.object-relationship.add-relationship.headline' | translate\">\n <main [yuvBusyOverlay]=\"busy()\">\n <form [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n @let sn = sourceNode();\n @if (sn) {\n <div class=\"source\">\n {{ sn.title }}\n @if (sn.description) {\n <em>{{ sn.description }}</em>\n }\n </div>\n <div class=\"line\"></div>\n }\n <mat-form-field>\n <mat-label>{{ 'cm.app.cases.action.add-link.search.relation.label' | translate }}</mat-label>\n <mat-select formControlName=\"relation\" [compareWith]=\"optionCompareWith\">\n @for (r of supportedRelationships(); track r.id) {\n <mat-option [value]=\"r\">{{ r.label }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <div class=\"line\"></div>\n\n <yuv-relationship-target-search formControlName=\"targetObject\"\n [config]=\"config()\"\n [availableTargetTypes]=\"availableTargetTypes()\"\n [supportedRelationships]=\"supportedRelationships()\"\n ></yuv-relationship-target-search>\n\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 </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=\"button\" (click)=\"submit()\" [disabled]=\"form.invalid || busy()\">\n {{ 'yuv.object-relationship.add-relationship.action.submit' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { CommonModule } from '@angular/common';\nimport { 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 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.#outerObjectNodeIds = rel.objects.items.map((i) => i.fields.get(BaseObjectTypeField.OBJECT_ID) as string);\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 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 this.#edges.remove(this.selectedRelation()!.id);\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\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, '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\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, '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 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) => {\n const selectedNodeId = params.nodes[0];\n this.selectedObject.set(this.#objectQA[selectedNodeId]);\n });\n this.#network.on('deselectNode', (params) => {\n this.selectedObject.set(null);\n });\n this.#network.on('dragEnd', (params) => {\n const selectedNodeId = params.nodes[0];\n this.selectedObject.set(this.#objectQA[selectedNodeId]);\n });\n this.#network.on('selectEdge', (params) => {\n const selectedEdgeId = params.edges[0];\n const nodesSelected = params.nodes.length > 0;\n this.selectedRelation.set(params.edges.length === 1 && !nodesSelected ? this.#relationQA[selectedEdgeId] : null);\n });\n this.#network.on('deselectEdge', (params) => {\n const selectedEdgeId = params.edges[0];\n const nodesSelected = params.nodes.length > 0;\n this.selectedRelation.set(params.edges.length === 1 && !nodesSelected ? this.#relationQA[selectedEdgeId] : null);\n });\n this.#network.on('click', (params: { nodes: string[]; edges: string[] }) => {\n const selectedNodeId = params.nodes[0];\n this.selectedObject.set(this.#objectQA[selectedNodeId]);\n });\n this.#network.on('doubleClick', (params: { nodes: string[]; edges: string[] }) => {\n const selectedNodeId = params.nodes[0];\n this.#expand(selectedNodeId);\n });\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 { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { BaseObjectTypeField, DmsObject, Relationship, SystemService, TranslateModule } from '@yuuvis/client-core';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { YmtPanesModule } from '@yuuvis/material/panes';\nimport { ObjectRelationshipGraphComponent } from './object-relationship-graph/object-relationship-graph.component';\nimport { ObjectRelationshipListComponent } from './object-relationship-list/object-relationship-list.component';\nimport { ObjectLink, RelationshipComponentConfig } from './object-relationship.interface';\nimport { ObjectRelationshipService } from './object-relationship.service';\nimport { MatDialog } from '@angular/material/dialog';\nimport { AddRelationshipComponent } from './actions/add-relationship/add-relationship.component';\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 ],\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 /**\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 #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 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 data: {\n object: this.originObject(),\n config: this.config()\n }\n });\n }\n}\n","<ymt-pane [plain]=\"true\" [topBarActions]=\"topBarActions\">\n <ymt-pane-body>\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 </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","i1","i4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"yuuvis-client-framework-object-relationship.mjs","sources":["../../../../../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/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-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 { 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> = {\n \n};\nexport const EDGE_FONT_SETTINGS: Font = {\n size: 10 ,\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\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 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 console.log('Navigating to link:', link);\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 { Component, computed, 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 {\n BaseObjectTypeField,\n Relationship,\n SearchQuery,\n SearchResult,\n SearchResultItem,\n SearchService,\n TranslateModule\n} from '@yuuvis/client-core';\nimport { AutocompleteItem, YuvAutocompleteModule } from '@yuuvis/client-framework/autocomplete';\nimport { RelationshipComponentConfig, RelationshipComponentConfigNode } from '../../object-relationship.interface';\n\n@Component({\n selector: 'yuv-relationship-target-search',\n imports: [YuvAutocompleteModule, ReactiveFormsModule, 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})\nexport class RelationshipTargetSearchComponent implements ControlValueAccessor {\n #searchService = inject(SearchService);\n\n supportedRelationships = input.required<Relationship[]>();\n availableTargetTypes = input<string[]>([]);\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[] = [];\n #value?: AutocompleteItem;\n busy = signal<boolean>(false);\n acFormControl = new FormControl<AutocompleteItem[]>([], Validators.required);\n\n constructor() {\n this.acFormControl.valueChanges.subscribe((val) => {\n this.#value = val && val.length > 0 ? (val[0] as AutocompleteItem) : undefined;\n this.propagateChange(this.#value?.value);\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 label: this.#getLabel(item),\n value: this.#searchResultItemToRecord(item)\n }));\n },\n error: () => {\n this.busy.set(false);\n this.autocompleteRes = [];\n }\n });\n } else {\n this.autocompleteRes = [];\n }\n }\n\n #getLabel(sri: SearchResultItem): string {\n // determine the object type\n const configType = this.availableTargetTypes().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 const config = configType ? this.#configQA()[configType] : undefined;\n return config ? (sri.fields.get(config.labelField) as string) : (sri.fields.get(BaseObjectTypeField.OBJECT_ID) as string);\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 // filters: [\n // {\n // f: this.#targetTitleProperty,\n // o: Operator.CONTAINS,\n // v1: term\n // }\n // ],\n types: this.availableTargetTypes()\n };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n propagateChange = (_: any) => {};\n\n writeValue(value: any): void {\n // this component is not supposed to accept values from outside\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]=\"true\"\n [maxItems]=\"1\"\n >\n <!-- template for chip -->\n <ng-template #chipTemplate let-item>\n <div class=\"label\">{{ item.label }}</div>\n <!-- <div class=\"meta\">{{ item.value[metaFieldProperty] }}</div> -->\n </ng-template>\n </yuv-autocomplete>\n</mat-form-field>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, input, signal } from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup, ReactiveFormsModule, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatError, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport {\n BaseObjectTypeField,\n DmsObject,\n DmsService,\n EventService,\n Relationship,\n RelationshipTypeField,\n SystemService,\n TranslateModule,\n YuvEventType\n} from '@yuuvis/client-core';\nimport { BusyOverlayDirective, DialogComponent } from '@yuuvis/client-framework/common';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { RelationshipComponentConfig, RelationshipComponentConfigNode } from '../../object-relationship.interface';\nimport { RelationshipTargetSearchComponent } from '../relationship-target-search/relationship-target-search.component';\nimport { tap } from 'rxjs';\n\n@Component({\n selector: 'yuv-add-relationship',\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TranslateModule,\n DialogComponent,\n MatSelectModule,\n MatFormFieldModule,\n MatError,\n YmtButtonDirective,\n RelationshipTargetSearchComponent,\n BusyOverlayDirective\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\n object = input<DmsObject>(this.#dialogData.object);\n config = input<RelationshipComponentConfig>(this.#dialogData.config);\n supportedRelationships = computed<Relationship[]>(() => {\n const obj = this.object();\n return obj ? this.#system.getSupportedRelationships(obj, true) : [];\n });\n // get the target types from the relationships\n availableTargetTypes = computed<string[]>(() => {\n const rel = this.supportedRelationships();\n return Array.from(new Set(rel.map((r) => r.allowedTargetTypes).flat()));\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 };\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\n optionCompareWith(o1: Relationship | undefined, o2: Relationship | undefined): boolean {\n return o1?.id === o2?.id;\n }\n\n submit() {\n this.#addRelationship(this.form.value.relation!.id, this.form.value.targetObject!).subscribe({\n next: () => this.close(),\n error: () => {\n // TODO: Handle error appropriately\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\" [headertitel]=\"'yuv.object-relationship.add-relationship.headline' | translate\">\n <main [yuvBusyOverlay]=\"busy()\">\n <form [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n @let sn = sourceNode();\n @if (sn) {\n <div class=\"source\">\n {{ sn.title }}\n @if (sn.description) {\n <em>{{ sn.description }}</em>\n }\n </div>\n <div class=\"line\"></div>\n }\n <mat-form-field>\n <mat-label>{{ 'cm.app.cases.action.add-link.search.relation.label' | translate }}</mat-label>\n <mat-select formControlName=\"relation\" [compareWith]=\"optionCompareWith\">\n @for (r of supportedRelationships(); track r.id) {\n <mat-option [value]=\"r\">{{ r.label }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <div class=\"line\"></div>\n\n <yuv-relationship-target-search formControlName=\"targetObject\"\n [config]=\"config()\"\n [availableTargetTypes]=\"availableTargetTypes()\"\n [supportedRelationships]=\"supportedRelationships()\"\n ></yuv-relationship-target-search>\n\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 </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=\"button\" (click)=\"submit()\" [disabled]=\"form.invalid || busy()\">\n {{ 'yuv.object-relationship.add-relationship.action.submit' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { CommonModule } from '@angular/common';\nimport { 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 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.#outerObjectNodeIds = rel.objects.items.map((i) => i.fields.get(BaseObjectTypeField.OBJECT_ID) as string);\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 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 this.#edges.remove(this.selectedRelation()!.id);\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\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, '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\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, '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 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) => {\n const selectedNodeId = params.nodes[0];\n this.selectedObject.set(this.#objectQA[selectedNodeId]);\n });\n this.#network.on('deselectNode', (params) => {\n this.selectedObject.set(null);\n });\n this.#network.on('dragEnd', (params) => {\n const selectedNodeId = params.nodes[0];\n this.selectedObject.set(this.#objectQA[selectedNodeId]);\n });\n this.#network.on('selectEdge', (params) => {\n const selectedEdgeId = params.edges[0];\n const nodesSelected = params.nodes.length > 0;\n this.selectedRelation.set(params.edges.length === 1 && !nodesSelected ? this.#relationQA[selectedEdgeId] : null);\n });\n this.#network.on('deselectEdge', (params) => {\n const selectedEdgeId = params.edges[0];\n const nodesSelected = params.nodes.length > 0;\n this.selectedRelation.set(params.edges.length === 1 && !nodesSelected ? this.#relationQA[selectedEdgeId] : null);\n });\n this.#network.on('click', (params: { nodes: string[]; edges: string[] }) => {\n const selectedNodeId = params.nodes[0];\n this.selectedObject.set(this.#objectQA[selectedNodeId]);\n });\n this.#network.on('doubleClick', (params: { nodes: string[]; edges: string[] }) => {\n const selectedNodeId = params.nodes[0];\n this.#expand(selectedNodeId);\n });\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 { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { BaseObjectTypeField, DmsObject, Relationship, SystemService, TranslateModule } from '@yuuvis/client-core';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { YmtPanesModule } from '@yuuvis/material/panes';\nimport { ObjectRelationshipGraphComponent } from './object-relationship-graph/object-relationship-graph.component';\nimport { ObjectRelationshipListComponent } from './object-relationship-list/object-relationship-list.component';\nimport { ObjectLink, RelationshipComponentConfig } from './object-relationship.interface';\nimport { ObjectRelationshipService } from './object-relationship.service';\nimport { MatDialog } from '@angular/material/dialog';\nimport { AddRelationshipComponent } from './actions/add-relationship/add-relationship.component';\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 ],\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 #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 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 data: {\n object: this.originObject(),\n config: this.config()\n }\n });\n }\n}\n","<ymt-pane [plain]=\"true\" [topBarActions]=\"topBarActions\">\n <ymt-pane-body>\n @if (empty()) {\n <div class=\"no-relations\">\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","i1","i4"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEO,MAAM,kBAAkB,GAAkB;AAC/C,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,mBAAmB,EAAE,CAAC;CACvB;AACM,MAAM,uBAAuB,GAAS;AAC3C,IAAA,IAAI,EAAE,EAAE;CACT;AACM,MAAM,aAAa,GAAkB;AAC1C,IAAA,mBAAmB,EAAE,CAAC;CACvB;AACM,MAAM,kBAAkB,GAAS;AACtC,IAAA,IAAI,EAAE,EAAE;CACT;AAEM,MAAM,aAAa,GAAkB,EAE3C;AACM,MAAM,kBAAkB,GAAS;AACrC,IAAA,IAAI,EAAE,EAAE;CACV;;MCFY,yBAAyB,CAAA;AACpC,IAAA,OAAO;AACP,IAAA,WAAW;AACX,IAAA,aAAa;AACb,IAAA,QAAQ;AAGR,IAAA,WAAW;AAGX,IAAA,kBAAkB;AASlB,IAAA,WAAA,GAAA;AAlBA,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;AAC/B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAChC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC;AACpC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC;AACzB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAE5C,IAAW,CAAA,WAAA,GAA8B,EAAE;AAE3C,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAqB,SAAS,CAAC;QAChD,IAAkB,CAAA,kBAAA,GAAG,UAAU,CAAiD;YAC9E,OAAO,EAAE,IAAI,CAAC,QAAQ;AACtB,YAAA,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,cAAc,CAAC,OAAO;AACrD,SAAA,CAAC;AACF,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK;AACzC,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAU,KAAK,CAAC;;AAE7B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAmB,IAAI,CAAC;AAGrC,QAAA,IAAI,CAAC;aACF,EAAE,CAAC,YAAY,CAAC,oBAAoB,EAAE,YAAY,CAAC,oBAAoB;aACvE,IAAI,CAAC,kBAAkB,EAAE;AACzB,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,CAAW,KAAI;gBACpB,IAAI,CAAC,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC,QAAQ,EAAE,EAAE;AAC9C,oBAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;;;AAGrC,SAAA,CAAC;;AAGN,IAAA,cAAc,CAAC,QAAgB,EAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;;AAEnB,QAAA,MAAM,KAAK,GAAG,CAAA,cAAA,EAAiB,UAAU,CAAC,YAAY,UAAU,qBAAqB,CAAC,SAAS,CAAO,IAAA,EAAA,QAAQ,QAAQ,qBAAqB,CAAC,SAAS,CAAO,IAAA,EAAA,QAAQ,GAAG;QAEvK,OAAO,IAAI,CAAC;aACT,UAAU,CAAC,KAAK;AAChB,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,YAA0B,KAAI;;YAEvC,MAAM,CAAC,GAAyB,EAAE;YAClC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;gBAC/B,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC;AAChF,gBAAA,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI;AACvD,gBAAA,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI;AACzD,aAAC,CAAC;;AAEF,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;iBACtB,GAAG,CAAC,CAAC,EAAE,KAAK,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,CAAG;iBACrB,IAAI,CAAC,GAAG,CAAC;;;YAGZ,MAAM,CAAC,GAAG,CAAqC,kCAAA,EAAA,mBAAmB,CAAC,SAAS,CAAA,KAAA,EAAQ,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,CAAI,CAAA,EAAA,QAAQ,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG;AAC7H,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CACpC,GAAG,CAAC,CAAC,UAAwB,MAAM;AACjC,gBAAA,SAAS,EAAE,YAAY;AACvB,gBAAA,OAAO,EAAE;aACV,CAAC,CAAC,CACJ;AACH,SAAC,CAAC;aAEH,IAAI;;AAEH,QAAA,GAAG,CAAC,CAAC,GAAuD,KAAI;AAC9D,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACpB,YAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;SACpE,CAAC,CACH;;AAGL;;;;AAIG;IACH,kBAAkB,CAAC,UAAkB,EAAE,cAAuB,EAAA;QAC5D,OAAO,IAAI,CAAC;AACT,aAAA,OAAO,CAAC;YACP,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,yDAAyD;SAC1F;AACA,aAAA,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,cAAc,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;IAGnH,mBAAmB,CAAC,UAAkB,EAAE,cAAuB,EAAA;AAC7D,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,IAAI,CACtD,UAAU,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,EAC3B,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,KAAK,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,EAC5C,GAAG,CAAC,CAAC,OAAO,KAAI;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YACpB,IAAI,OAAO,EAAE;AACX,gBAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,oBAAoB,EAAE,EAAE,UAAU,EAAE,CAAC;gBAC7E,IAAI,cAAc,EAAE;AAClB,oBAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;;;SAGrC,CAAC,CACH;;+GAnGQ,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAzB,yBAAyB,EAAA,CAAA,CAAA;;4FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC;;;ACXD;;AAEG;MAOU,oBAAoB,CAAA;AANjC,IAAA,WAAA,GAAA;AAOE,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;AAC/B,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;QAExB,IAAM,CAAA,MAAA,GAAG,KAAK,EAAa;QAC3B,IAAU,CAAA,UAAA,GAAG,KAAK,EAAmC;AAErD,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAA0B,IAAI,CAAC;AAE9C,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC1B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;AACzB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;YAChC,OAAO,GAAG,IAAI;AACZ,kBAAE;oBACE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAW;AAC5C,oBAAA,WAAW,EAAE,MAAM,CAAC,gBAAgB,GAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAY,GAAG,SAAS;AAChG,oBAAA,UAAU,EAAE,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACrH,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG;AACzE;kBACD,IAAI;AACV,SAAC,CAAC;AA+BH;AAlDC,IAAA,OAAO;AACP,IAAA,OAAO;AAoBP,IAAA,UAAU,CAAC,IAAY,EAAA;AACrB,QAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC;AACxC,QAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC;;IAGlC,wBAAwB,CAAC,YAAoB,EAAE,MAAiB,EAAA;AAC9D,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;YACvD,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,YAAY,CAAA,CAAA,CAAG,CAAC;AAC3C,SAAC,CAAC;AAEF,QAAA,MAAM,EAAE,GAA8C,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,YAAY,CAAC;AAClG,QAAA,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,SAAS;QAEzB,OAAO;AACL,YAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,YAAY;AACzF,YAAA,aAAa,EAAE;gBACb,YAAY;AACZ,gBAAA,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;AAChC,gBAAA,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,YAAY,EAAE,EAAE,CAAC,eAAe,IAAI,EAAE,CAAC;gBAC7F,IAAI,EAAE,QAAQ,CAAC,MAAM,CACnB,CAAC,OAAO,EAAE,GAAG,KAAI;oBACf,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AAC/B,oBAAA,OAAO,OAAO;iBACf,EACD,EAAyB;AAE5B;SACF;;+GAjDQ,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjBjC,g0BA8BA,EDjBY,MAAA,EAAA,CAAA,08BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,sMAAE,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAInE,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;+BACE,kBAAkB,EAAA,OAAA,EACnB,CAAC,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,CAAC,EAAA,QAAA,EAAA,g0BAAA,EAAA,MAAA,EAAA,CAAA,08BAAA,CAAA,EAAA;;;MEepE,iCAAiC,CAAA;AAC5C,IAAA,cAAc;AAKd,IAAA,SAAS;AAST,IAAA,MAAM;AAIN,IAAA,WAAA,GAAA;AAlBA,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;AAEtC,QAAA,IAAA,CAAA,sBAAsB,GAAG,KAAK,CAAC,QAAQ,EAAkB;AACzD,QAAA,IAAA,CAAA,oBAAoB,GAAG,KAAK,CAAW,EAAE,CAAC;AAC1C,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAA+B;AACtD,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;YACxB,MAAM,EAAE,GAAoD,EAAE;YAC9D,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AAChC,gBAAA,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;AACtB,aAAC,CAAC;AACF,YAAA,OAAO,EAAE;AACX,SAAC,CAAC;QAEF,IAAe,CAAA,eAAA,GAAuB,EAAE;AAExC,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAU,KAAK,CAAC;QAC7B,IAAa,CAAA,aAAA,GAAG,IAAI,WAAW,CAAqB,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;;AAkE5E,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,CAAM,KAAI,GAAG;QA/D9B,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;YAChD,IAAI,CAAC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,GAAI,GAAG,CAAC,CAAC,CAAsB,GAAG,SAAS;YAC9E,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AAC1C,SAAC,CAAC;;AAGJ,IAAA,cAAc,CAAC,IAAY,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;AACpB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACnB,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5D,gBAAA,IAAI,EAAE,CAAC,GAAiB,KAAI;AAC1B,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACpB,oBAAA,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;AAC9C,wBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC3B,wBAAA,KAAK,EAAE,IAAI,CAAC,yBAAyB,CAAC,IAAI;AAC3C,qBAAA,CAAC,CAAC;iBACJ;gBACD,KAAK,EAAE,MAAK;AACV,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACpB,oBAAA,IAAI,CAAC,eAAe,GAAG,EAAE;;AAE5B,aAAA,CAAC;;aACG;AACL,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE;;;AAI7B,IAAA,SAAS,CAAC,GAAqB,EAAA;;AAE7B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAI;AACzD,YAAA,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,cAAc,CAAW;AAC/E,YAAA,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,yBAAyB,CAAyB;AAClG,YAAA,OAAO,EAAE,KAAK,UAAU,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACzD,SAAC,CAAC;AACF,QAAA,MAAM,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,SAAS;QACpE,OAAO,MAAM,GAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAY,GAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,SAAS,CAAY;;AAG3H,IAAA,yBAAyB,CAAC,IAAsB,EAAA;QAC9C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAC7C,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AACpB,YAAA,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK;AAChB,YAAA,OAAO,GAAG;SACX,EACD,EAA6B,CAC9B;;AAGH,IAAA,YAAY,CAAC,IAAY,EAAA;QACvB,OAAO;YACL,IAAI;;;;;;;;AAQJ,YAAA,KAAK,EAAE,IAAI,CAAC,oBAAoB;SACjC;;AAMH,IAAA,UAAU,CAAC,KAAU,EAAA;;;AAIrB,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;;;IAI3B,iBAAiB,CAAC,EAAO,EAAA;AAEzB,IAAA,gBAAgB,CAAE,UAAmB,EAAA;QACnC,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;;aACvB;AACL,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;;;+GApGpB,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iCAAiC,EARjC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,EAAA,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iCAAiC,CAAC;AAChE,gBAAA,KAAK,EAAE;AACR;SACF,EC1BH,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,uqBAoBA,yDDHY,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,2FAAE,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAW9E,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAb7C,SAAS;+BACE,gCAAgC,EAAA,OAAA,EACjC,CAAC,qBAAqB,EAAE,mBAAmB,EAAE,eAAe,EAAE,kBAAkB,CAAC,EAG/E,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,uCAAuC,CAAC;AAChE,4BAAA,KAAK,EAAE;AACR;AACF,qBAAA,EAAA,QAAA,EAAA,uqBAAA,EAAA;;;MEeU,wBAAwB,CAAA;AAlBrC,IAAA,WAAA,GAAA;AAmBE,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;AAC/B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAGjB,eAAe,CAAC;AACV,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,EAAC,YAAsC,EAAC;AACpE,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAChC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC;QAEpC,IAAM,CAAA,MAAA,GAAG,KAAK,CAAY,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAClD,IAAM,CAAA,MAAA,GAAG,KAAK,CAA8B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AACpE,QAAA,IAAA,CAAA,sBAAsB,GAAG,QAAQ,CAAiB,MAAK;AACrD,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;AACzB,YAAA,OAAO,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;AACrE,SAAC,CAAC;;AAEF,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAW,MAAK;AAC7C,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,sBAAsB,EAAE;YACzC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACzE,SAAC,CAAC;AACF,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACzB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;AACzB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;YAC5B,OAAO;gBACL,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAW;AACrD,gBAAA,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,IAAI,EAAE;aAC7D;AACH,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,qCAAqC,GAAgB,CAAC,OAAwB,KAA6B;YACzG,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,KAAuC;YACzF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,KAA4B;YACtE,IAAI,KAAK,GAAG,IAAI;AAChB,YAAA,IAAI,QAAQ,IAAI,YAAY,EAAE;;;AAG5B,gBAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,kBAAkB,IAAI,EAAE;gBACrD,MAAM,UAAU,GAAG,YAAY,CAAC,mBAAmB,CAAC,cAAc,CAAW;gBAC7E,MAAM,IAAI,GAAG,YAAY,CAAC,mBAAmB,CAAC,yBAAyB,CAAyB;gBAChG,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;;AAExF,YAAA,OAAO,KAAK,GAAG,IAAI,GAAG,EAAE,gCAAgC,EAAE,IAAI,EAAE;AAClE,SAAC;QAED,IAAI,CAAA,IAAA,GAAG,IAAI,SAAS,CAClB;AACE,YAAA,QAAQ,EAAE,IAAI,WAAW,CAAsB,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC9G,YAAA,YAAY,EAAE,IAAI,WAAW,CAAiC,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;SAC7H,EACD,EAAE,UAAU,EAAE,IAAI,CAAC,qCAAqC,EAAE,CAC3D;AAED,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAU,KAAK,CAAC;AA4B9B;AAhFC,IAAA,OAAO;AACP,IAAA,WAAW;AAIF,IAAA,UAAU;AACnB,IAAA,WAAW;AACX,IAAA,aAAa;AAsBb,IAAA,qCAAqC;IAyBrC,iBAAiB,CAAC,EAA4B,EAAE,EAA4B,EAAA;AAC1E,QAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;;IAG1B,MAAM,GAAA;QACJ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAS,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAa,CAAC,CAAC,SAAS,CAAC;AAC3F,YAAA,IAAI,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE;YACxB,KAAK,EAAE,MAAK;;;AAGb,SAAA,CAAC;;IAGJ,gBAAgB,CAAC,UAAkB,EAAE,MAA+B,EAAA;AAClE,QAAA,MAAM,IAAI,GAAG;YACX,CAAC,qBAAqB,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;YACnD,CAAC,qBAAqB,CAAC,SAAS,GAAG,MAAM,CAAC,mBAAmB,CAAC,SAAS;SACxE;QACD,OAAO,IAAI,CAAC;AACT,aAAA,eAAe,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE;AACpC,aAAA,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,oBAAoB,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;;IAGzH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;;+GA/Ed,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,kVCzCrC,k3DA6CA,EAAA,MAAA,EAAA,CAAA,yvBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDnBI,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,ssBACnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,eAAe,EACf,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,8jCACf,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAElB,kBAAkB,EAClB,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,iCAAiC,iJACjC,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,sBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAMX,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAlBpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EACvB,OAAA,EAAA;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,eAAe;wBACf,eAAe;wBACf,eAAe;wBACf,kBAAkB;wBAClB,QAAQ;wBACR,kBAAkB;wBAClB,iCAAiC;wBACjC;AACD,qBAAA,EAAA,QAAA,EAAA,k3DAAA,EAAA,MAAA,EAAA,CAAA,yvBAAA,CAAA,EAAA;;;MEKU,gCAAgC,CAAA;AAN7C,IAAA,WAAA,GAAA;AAOE,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC;AAC3B,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;AAC/B,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC/C,QAAA,IAAA,CAAA,0BAA0B,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAC9D,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC;AACxB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC5C,QAAA,IAAA,CAAA,SAAS,GAAG,SAAS,CAAC,QAAQ,CAA6B,gBAAgB,CAAC;AAC5E,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;YACpB,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;YACrC,QAAQ,CAAC;gBACP,KAAK,MAAM,EAAE;AACX,oBAAA,OAAO,MAAM;;gBAEf,KAAK,QAAQ,EAAE;AACb,oBAAA,OAAO,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC,OAAO,GAAG,MAAM,GAAG,OAAO;;gBAErF,SAAS;AACP,oBAAA,OAAO,OAAO;;;AAGpB,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,0BAA0B,CAAC,SAAS;AACtD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,MAAK;AAC7B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAA,IAAI,CAAC,GAAG;gBAAE;;AAEV,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC;AAC9D,SAAC,CAAC;AAEF;;AAEG;AACH,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAA+B;QAEtD,IAAc,CAAA,cAAA,GAAG,MAAM,EAAoB;QAC3C,IAAgB,CAAA,gBAAA,GAAG,MAAM,EAAoB;QAE7C,IAAQ,CAAA,QAAA,GAAmB,IAAI;QAC/B,IAAS,CAAA,SAAA,GAA8B,EAAE;QACzC,IAAW,CAAA,WAAA,GAA8B,EAAE;AAC3C,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,OAAO,CAAmB,EAAE,CAAC;AAC1C,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,OAAO,CAAO,EAAE,CAAC;AAE9B,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;AACpB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAmB,IAAI,CAAC;AACjD,QAAA,IAAA,CAAA,uBAAuB,GAAG,MAAM,CAAC,MAAK;YACpC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACrD,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAmB,IAAI,CAAC;AAC/C,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,MAAK;AAClC,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;AAChC,YAAA,IAAI,EAAE;AAAE,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;AACvC,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;AAC9B,SAAC,CAAC;AACF,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC1B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE;YACpC,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAO,CAAC;AAC3C,YAAA,OAAO,MAAM,IAAI,MAAM,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;AACrD,SAAC,CAAC;AAuSH;AAnWC,IAAA,OAAO;AACP,IAAA,OAAO;AACP,IAAA,eAAe;AACf,IAAA,0BAA0B;AAC1B,IAAA,MAAM;AAGN,IAAA,KAAK;AAeL,IAAA,UAAU;AACV,IAAA,gBAAgB;AAehB,IAAA,QAAQ;AACR,IAAA,SAAS;AACT,IAAA,WAAW;AACX,IAAA,MAAM;AACN,IAAA,MAAM;AAIN,IAAA,uBAAuB;AAKvB,IAAA,qBAAqB;IAWrB,QAAQ,GAAA;AACN,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAE;QACtE,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC;QAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACxC,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;AACjB,QAAA,IAAI,CAAC,QAAQ,GAAG,kBAAkB;QAClC,IAAI,CAAC,KAAK,EAAE;QACZ,IAAI,CAAC,MAAM,EAAE;;IAGf,eAAe,GAAA;AACb,QAAA,IAAI,CAAC;aACF,IAAI,CAAC,wBAAwB,EAAE;AAC9B,YAAA,IAAI,EAAE;AACJ,gBAAA,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE;AAC7B,gBAAA,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB;SACF;AACA,aAAA,WAAW;AACX,aAAA,SAAS,CAAC,CAAC,MAAM,KAAI;YACpB,IAAI,CAAC,cAAc,EAAE;AACvB,SAAC,CAAC;;IAGN,kBAAkB,GAAA;QAChB,IAAI,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,EAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,KAAI;YAC3G,IAAI,OAAO,EAAE;AACX,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAG,CAAC,EAAE,CAAC;;iBAC1C;AACL,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,uDAAuD,CAAC,CAAC;;AAEvG,SAAC,CAAC;;IAGJ,cAAc,GAAA;AACZ,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE;QACtC,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;;;AAI7B,IAAA,OAAO,CAAC,MAAc,EAAA;QACpB,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YACnB,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;AAC/D,gBAAA,IAAI,EAAE,CAAC,GAAG,KAAI;AACZ,oBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC;AACtD,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;iBACrB;AACD,gBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,oBAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAC;AACxD,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;;AAEvB,aAAA,CAAC;;;AAIN,IAAA,aAAa,CAAC,QAAgB,EAAE,SAAuB,EAAE,OAAqB,EAAA;QAC5E,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC7B,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,SAAS,CAAW;YACnE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC;AAC1C,SAAC,CAAC;QACF,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC/B,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,SAAS,CAAW;YACnE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC;AAC5C,SAAC,CAAC;;QAGF,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC;QAChH,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC;QAEhH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QACvC,MAAM,MAAM,GACV,QAAQ,KAAK,IAAI,CAAC,UAAU,EAAE,EAAE;AAC9B,cAAE;AACE,gBAAA;AACE,oBAAA,GAAG,QAAS;AACZ,oBAAA,GAAG,kBAAkB;AACrB,oBAAA,IAAI,EAAE;AACJ,wBAAA,GAAG,uBAAuB;wBAC1B,GAAG,IAAI,CAAC,YAAY;AACrB;AACF;AACF;cACD,EAAE;QACR,MAAM,MAAM,GAAW,EAAE;;AAGzB,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACxB,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,SAAS,CAAW;YAClF,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;AACvC,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,CAAC;YAC/D,IAAI,CAAC,EAAE;;AAEL,gBAAA,MAAM,UAAU,GAAY,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;AAC1G,gBAAA,IAAI,CAAC,UAAU;AAAE,oBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;;AAE/B,gBAAA,MAAM,UAAU,GAAY,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;AAC1G,gBAAA,IAAI,CAAC,UAAU;AAAE,oBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;;AAEnC,SAAC,CAAC;AAEF,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACxB,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,SAAS,CAAW;YAClF,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;AACvC,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,CAAC;YAC7D,IAAI,CAAC,EAAE;;AAEL,gBAAA,MAAM,UAAU,GAAY,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;AAC1G,gBAAA,IAAI,CAAC,UAAU;AAAE,oBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;;AAE/B,gBAAA,MAAM,UAAU,GAAY,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;AAC1G,gBAAA,IAAI,CAAC,UAAU;AAAE,oBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;;AAEnC,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;;AAGzB,IAAA,cAAc,CAAC,CAAa,EAAA;AAC1B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;AACzB,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,SAAS;AACxB,QAAA,MAAM,aAAa,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;;;;AAKvF,IAAA,OAAO,CAAC,QAAgB,EAAA;AACtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;QACzB,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AAClC,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;QACzB,OAAO;AACL,YAAA,GAAG,aAAa;YAChB,UAAU,EAAE,OAAO,CAAC,UAAU;AAC9B,YAAA,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE;AAC3B,YAAA,EAAE,EAAE,QAAQ;AACZ,YAAA,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAW,EAAE,EAAE,CAAC;AAChE,YAAA,IAAI,EAAE;AACJ,gBAAA,IAAI,EAAE,wBAAwB;gBAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;AAClB,gBAAA,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;AAC7B,aAAA;AACD,YAAA,IAAI,EAAE;AACJ,gBAAA,GAAG,kBAAkB;gBACrB,GAAG,IAAI,CAAC,YAAY;AACrB;SACF;;AAGH,IAAA,OAAO,CAAC,IAAsB,EAAE,IAAY,EAAE,EAAU,EAAE,SAAwB,EAAA;AAChF,QAAA,MAAM,KAAK,GACT,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,cAAc,CAAW,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,cAAc,CAAC;QACtJ,OAAO;AACL,YAAA,GAAG,aAAa;YAChB,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,SAAS,CAAW;YAC5D,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;AACjC,YAAA,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE;AAC3B,YAAA,IAAI,EAAE;AACJ,gBAAA,GAAG,kBAAkB;gBACrB,GAAG,IAAI,CAAC,YAAY;AACrB,aAAA;AACD,YAAA,MAAM,EAAE,SAAS;YACjB,IAAI;YACJ;SACD;;IAGH,UAAU,CAAC,CAAS,EAAE,GAAW,EAAA;AAC/B,QAAA,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG,EAAE;AAClB,YAAA,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK;;AAExC,QAAA,OAAO,CAAC;;IAGV,aAAa,GAAA;AACX,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE;QAC9C,OAAO;AACL,YAAA,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,CAAC,IAAI,EAAE,CAAC;AACrG,YAAA,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7F,YAAA,SAAS,EAAE;AACT,gBAAA,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,gBAAgB,CAAC,oCAAoC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC/G,gBAAA,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,CAAC,IAAI,EAAE;AAChG;SACF;;IAEH,YAAY,GAAA;AACV,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE;QAC9C,OAAO;AACL,YAAA,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1F,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,gBAAgB,CAAC,+BAA+B,CAAC,CAAC,IAAI,EAAE;SAC3G;;IAGH,aAAa,GAAA;AACX,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE;QAC9C,OAAO;AACL,YAAA,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC;AACrF,YAAA,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,CAAC,IAAI,EAAE,CAAC;AACnG,YAAA,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE;SAC3F;;IAEH,YAAY,GAAA;AACV,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE;QAC9C,OAAO;AACL,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,gBAAgB,CAAC,+BAA+B,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3G,YAAA,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE;SAC1F;;IAGH,iBAAiB,GAAA;QACf,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,aAAa;AAChD,QAAA,OAAO,gBAAgB,CAAC,SAAS,CAAC;;;AAIpC,IAAA,iBAAiB,CAAC,CAAS,EAAA;AACzB,QAAA,IAAI,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;YAC/B,MAAM,KAAK,GAAG,+DAA+D;YAC7E,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;YAC5B,IAAI,KAAK,EAAE;AACT,gBAAA,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC;AAC3B,gBAAA,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC;AAC1B,gBAAA,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,MAAM,GAAG,SAAS,GAAG,UAAU;;;AAClD,gBAAA,OAAO,CAAC;;;AACV,YAAA,OAAO,CAAC;;IAGjB,eAAe,GAAA;AACb,QAAA,MAAM,OAAO,GAAY;AACvB,YAAA,OAAO,EAAE;AACP,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,MAAM,EAAE,kBAAkB;AAC1B,gBAAA,gBAAgB,EAAE;;;AAGhB,oBAAA,YAAY,EAAE,GAAG;AAClB;AACF,aAAA;AACD,YAAA,KAAK,EAAE;AACL,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE;AACjB;SACF;AACD,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,CACzB,IAAI,CAAC,SAAS,EAAE,CAAC,aAAa,EAC9B;YACE,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,KAAK,EAAE,IAAI,CAAC;SACb,EACD,OAAO,CACR;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,KAAI;YACxC,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;AACzD,SAAC,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,MAAM,KAAI;AAC1C,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/B,SAAC,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,MAAM,KAAI;YACrC,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;AACzD,SAAC,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,KAAI;YACxC,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACtC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AAC7C,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;AAClH,SAAC,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,MAAM,KAAI;YAC1C,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACtC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AAC7C,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;AAClH,SAAC,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,MAA4C,KAAI;YACzE,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;AACzD,SAAC,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,MAA4C,KAAI;YAC/E,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;AAC9B,SAAC,CAAC;;IAGJ,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;;;+GAjWhB,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gCAAgC,ECzC7C,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,0xCAkCA,EDGY,MAAA,EAAA,CAAA,igDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+BAAE,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,YAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,4FAAE,sBAAsB,EAAA,QAAA,EAAA,mFAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIjI,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAN5C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,+BAA+B,EAChC,OAAA,EAAA,CAAC,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,sBAAsB,CAAC,EAAA,QAAA,EAAA,0xCAAA,EAAA,MAAA,EAAA,CAAA,igDAAA,CAAA,EAAA;;;MErBlI,mCAAmC,CAAA;AANhD,IAAA,WAAA,GAAA;AAOE,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;AACxB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC;AAChC,QAAA,IAAA,CAAA,0BAA0B,GAAG,MAAM,CAAC,yBAAyB,CAAC;AACtD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE5C,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAc;AACnC,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAgB;AAE1C,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAU,KAAK,CAAC;AACxC,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAU,KAAK,CAAC;AAazC;AAtBC,IAAA,OAAO;AACP,IAAA,MAAM;AACN,IAAA,0BAA0B;IAS1B,kBAAkB,GAAA;QAChB,IAAI,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,KAAI;YAC7F,IAAI,CAAC,OAAO,EAAE;AACZ,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,uDAAuD,CAAC,CAAC;;AAEvG,SAAC,CAAC;;IAGJ,IAAI,CAAC,IAAwB,EAAE,IAAa,EAAA;QAC1C,IAAI,IAAI,IAAI,CAAC,IAAI;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC;;+GArB1C,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mCAAmC,kpBChBhD,6sCAmCA,EAAA,MAAA,EAAA,CAAA,gwDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDvBY,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,sLAAE,sBAAsB,EAAA,QAAA,EAAA,mFAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIlD,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAN/C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mCAAmC,WACpC,CAAC,YAAY,EAAE,aAAa,EAAE,sBAAsB,CAAC,EAAA,QAAA,EAAA,6sCAAA,EAAA,MAAA,EAAA,CAAA,gwDAAA,CAAA,EAAA;;;MEUnD,+BAA+B,CAAA;AAN5C,IAAA,WAAA,GAAA;AAOE,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;AAC/B,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;AAC/B,QAAA,IAAA,CAAA,0BAA0B,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAE9D;;AAEG;AACH,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAA+B;AAEtD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAe,EAAE,CAAC;AACxC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAe,EAAE,CAAC;AAExC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,0BAA0B,CAAC,SAAS;AACtD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,MAAK;AAC7B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAA,IAAI,CAAC,GAAG;gBAAE;AACV,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC;AAC7D,SAAC,CAAC;QAEF,IAAS,CAAA,SAAA,GAA8B,EAAE;AAgE1C;AAnFC,IAAA,OAAO;AACP,IAAA,OAAO;AACP,IAAA,0BAA0B;AAU1B,IAAA,UAAU;AACV,IAAA,gBAAgB;AAMhB,IAAA,SAAS;AAET,IAAA,YAAY,CAAC,QAAgB,EAAE,SAAuB,EAAE,OAAsB,EAAA;QAC5E,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC;QAChH,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC;QAEhH,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC9B,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,SAAS,CAAW;YACnE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC;AAC1C,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS,CAAiB,CAAC;AAC5G,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS,CAAiB,CAAC;;AAG9G,IAAA,IAAI,CAAC,QAA0B,EAAA;AAC7B,QAAA,MAAM,YAAY,GAAc,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;AACpG,QAAA,MAAM,YAAY,GAAc,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;AAEpG,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,SAAS,CAAW;AAC1E,QAAA,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,cAAc,CAAW;QAEzF,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;;;AAInD,QAAA,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,SAAS;AAE9C,QAAA,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,IAAI,EAAE,CAAW;AAC5E,QAAA,MAAM,iBAAiB,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,IAAI,EAAE,CAAW;AACxF,QAAA,MAAM,UAAU,GAAG,SAAS,EAAE,IAAI;AAElC,QAAA,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,IAAI,EAAE,CAAW;AAC5E,QAAA,MAAM,iBAAiB,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,IAAI,EAAE,CAAW;AACxF,QAAA,MAAM,UAAU,GAAG,SAAS,EAAE,IAAI;QAElC,OAAO;AACL,YAAA,EAAE,EAAE,KAAK;AACT,YAAA,IAAI,EAAE;AACJ,gBAAA,EAAE,EAAE,eAAe;gBACnB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,eAAe,CAAC,IAAI;AAC3D,aAAA;AACD,YAAA,MAAM,EAAE;gBACN,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,SAAS,CAAW;AAClE,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,WAAW,EAAE,iBAAiB;AAC9B,gBAAA,IAAI,EAAE,UAAU;gBAChB,UAAU,EAAE,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG;AAC9F,aAAA;AACD,YAAA,MAAM,EAAE;gBACN,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,SAAS,CAAW;AAClE,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,WAAW,EAAE,iBAAiB;AAC9B,gBAAA,IAAI,EAAE,UAAU;gBAChB,UAAU,EAAE,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG;AAC9F;SACF;;AAGH,IAAA,cAAc,CAAC,MAAiB,EAAA;AAC9B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;QACzB,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAM,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,yBAAyB,CAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;;+GAlFpH,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA/B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,+BAA+B,8NCtB5C,uvBAyBA,EAAA,MAAA,EAAA,CAAA,qDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDPY,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mCAAmC,oJAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIjE,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAN3C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,WAC/B,CAAC,YAAY,EAAE,mCAAmC,EAAE,eAAe,CAAC,EAAA,QAAA,EAAA,uvBAAA,EAAA,MAAA,EAAA,CAAA,qDAAA,CAAA,EAAA;;;MEelE,2BAA2B,CAAA;AAlBxC,IAAA,WAAA,GAAA;AAmBE,QAAA,IAAA,CAAA,0BAA0B,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAC9D,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;AAC/B,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC;QAE3B,IAAa,CAAA,aAAA,GAAqB,OAAO;AACzC,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAmB,IAAI,CAAC,aAAa,CAAC;AACnD,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;AACpB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;YAC7B,OAAO,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,aAAa,KAAK,CAAC;AACjD,SAAC,CAAC;AACF;;AAEG;AACH,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAU;AACnC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,MAAK;AAC5B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE;YAC3B,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;AACnD,SAAC,CAAC;AACF;;AAEG;AACH,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAA+B;;AAGtD,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAmB,IAAI,CAAC;AAC7C,QAAA,IAAA,CAAA,sBAAsB,GAAG,QAAQ,CAAiB,MAAK;AACrD,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE;AAC/B,YAAA,OAAO,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,GAAG,CAAC,GAAG,EAAE;AAC/D,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,0BAA0B,CAAC,SAAS;AACtD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,MAAK;AAC7B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;YAC7B,IAAI,CAAC,GAAG,EAAE;AACR,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC3B;;AAEF,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ;AAC7B,YAAA,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC;AACjH,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;AACtE,SAAC,CAAC;AACF,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAA0B,IAAI,CAAC;AAevD;AAxDC,IAAA,0BAA0B;AAC1B,IAAA,OAAO;AACP,IAAA,OAAO;AAEP,IAAA,aAAa;AAUb,IAAA,eAAe;AAgBf,IAAA,UAAU;AACV,IAAA,gBAAgB;IAYhB,UAAU,GAAA;AACR,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,MAAM;AACzD,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;;IAGxB,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE;AAC1C,YAAA,IAAI,EAAE;AACJ,gBAAA,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE;AAC3B,gBAAA,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB;AACF,SAAA,CAAC;;+GAvDO,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAF3B,CAAC,yBAAyB,CAAC,0BC/BxC,svCAmCA,EAAA,MAAA,EAAA,CAAA,gsBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDjBI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,gBAAgB,EAChB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,qBAAqB,EACrB,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,oSACd,sBAAsB,EAAA,QAAA,EAAA,mFAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,gCAAgC,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChC,+BAA+B,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAOtB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAlBvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAC1B,OAAA,EAAA;wBACP,YAAY;wBACZ,aAAa;wBACb,gBAAgB;wBAChB,eAAe;wBACf,qBAAqB;wBACrB,cAAc;wBACd,sBAAsB;wBACtB,gCAAgC;wBAChC,+BAA+B;wBAC/B;qBACD,EAGU,SAAA,EAAA,CAAC,yBAAyB,CAAC,EAAA,QAAA,EAAA,svCAAA,EAAA,MAAA,EAAA,CAAA,gsBAAA,CAAA,EAAA;;;AE5BxC,MAAM,GAAG,GAAG,CAAC,2BAA2B,CAAC;MAK5B,2BAA2B,CAAA;+GAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAA3B,2BAA2B,EAAA,OAAA,EAAA,CAL3B,2BAA2B,CAAA,EAAA,OAAA,EAAA,CAA3B,2BAA2B,CAAA,EAAA,CAAA,CAAA;AAK3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,YAHzB,GAAG,CAAA,EAAA,CAAA,CAAA;;4FAGL,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,GAAG,GAAG,CAAC;AACjB,oBAAA,OAAO,EAAE,CAAC,GAAG,GAAG;AACjB,iBAAA;;;ACPD;;AAEG;;;;"}
|
package/lib/assets/i18n/de.json
CHANGED
|
@@ -136,6 +136,7 @@
|
|
|
136
136
|
"yuv.object-relationship.list.outgoing": "Ausgehende Verweise",
|
|
137
137
|
"yuv.object-relationship.mode.graph.tooltip": "Graphansicht",
|
|
138
138
|
"yuv.object-relationship.mode.list.tooltip": "Listenansicht",
|
|
139
|
+
"yuv.object-relationship.no-relations": "Keine Verweise gefunden.",
|
|
139
140
|
"yuv.object-relationship.node-summary.open-object.button": "Öffnen",
|
|
140
141
|
"yuv.object-relationship.selected.add-relationship.tooltip": "Fügt einen neuen Verweis hinzu",
|
|
141
142
|
"yuv.object-relationship.selected.expand.tooltip": "Erweitert den ausgewählten Verweis",
|
package/lib/assets/i18n/en.json
CHANGED
|
@@ -136,6 +136,7 @@
|
|
|
136
136
|
"yuv.object-relationship.list.outgoing": "Outgoing relations",
|
|
137
137
|
"yuv.object-relationship.mode.graph.tooltip": "Graph view",
|
|
138
138
|
"yuv.object-relationship.mode.list.tooltip": "List view",
|
|
139
|
+
"yuv.object-relationship.no-relations": "No relations found.",
|
|
139
140
|
"yuv.object-relationship.node-summary.open-object.button": "Open",
|
|
140
141
|
"yuv.object-relationship.selected.add-relationship.tooltip": "Adds a new relation",
|
|
141
142
|
"yuv.object-relationship.selected.expand.tooltip": "Expands the selected relation",
|
|
@@ -5,6 +5,7 @@ import * as i0 from "@angular/core";
|
|
|
5
5
|
export declare class ObjectRelationshipComponent {
|
|
6
6
|
#private;
|
|
7
7
|
mode: import("@angular/core").WritableSignal<"list" | "graph">;
|
|
8
|
+
empty: import("@angular/core").Signal<boolean | undefined>;
|
|
8
9
|
/**
|
|
9
10
|
* ID of the object to display relations for.
|
|
10
11
|
*/
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yuuvis/client-framework",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.1",
|
|
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.4.
|
|
12
|
-
"@yuuvis/client-shell-core": "^2.4.
|
|
11
|
+
"@yuuvis/client-core": "^2.4.1",
|
|
12
|
+
"@yuuvis/client-shell-core": "^2.4.1",
|
|
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.4.
|
|
19
|
+
"@yuuvis/material": "2.4.1",
|
|
20
20
|
"@yuuvis/media-viewer": "^2.0.11",
|
|
21
21
|
"angular-split": "^19.0.0",
|
|
22
22
|
"vis-network": "^10.0.2",
|