@yuuvis/client-framework 3.0.0-beta.20.2 → 3.0.0-beta.21.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/autocomplete/README.md +1 -1
- package/common/README.md +1 -1
- package/fesm2022/yuuvis-client-framework-actions.mjs +25 -25
- package/fesm2022/yuuvis-client-framework-actions.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-app-bar.mjs +6 -6
- package/fesm2022/yuuvis-client-framework-app-bar.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-autocomplete.mjs +5 -236
- package/fesm2022/yuuvis-client-framework-autocomplete.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-breadcrumb.mjs +4 -4
- package/fesm2022/yuuvis-client-framework-breadcrumb.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-clipboard.mjs +7 -6
- package/fesm2022/yuuvis-client-framework-clipboard.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-common.mjs +3 -1793
- package/fesm2022/yuuvis-client-framework-common.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-datepicker.mjs +51 -51
- package/fesm2022/yuuvis-client-framework-datepicker.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-forms.mjs +154 -167
- package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-icons.mjs +14 -14
- package/fesm2022/yuuvis-client-framework-icons.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-list.mjs +3 -679
- package/fesm2022/yuuvis-client-framework-list.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-master-details.mjs +3 -136
- package/fesm2022/yuuvis-client-framework-master-details.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs +7 -7
- package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-metadata-form.mjs +28 -28
- package/fesm2022/yuuvis-client-framework-metadata-form.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-details.mjs +92 -95
- package/fesm2022/yuuvis-client-framework-object-details.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-flavor.mjs +46 -44
- package/fesm2022/yuuvis-client-framework-object-flavor.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-form.mjs +47 -47
- package/fesm2022/yuuvis-client-framework-object-form.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-preview.mjs +37 -58
- package/fesm2022/yuuvis-client-framework-object-preview.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-relationship.mjs +80 -80
- package/fesm2022/yuuvis-client-framework-object-relationship.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-summary.mjs +37 -38
- package/fesm2022/yuuvis-client-framework-object-summary.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-versions.mjs +20 -20
- package/fesm2022/yuuvis-client-framework-object-versions.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-overflow-hidden.mjs +3 -62
- package/fesm2022/yuuvis-client-framework-overflow-hidden.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-overflow-menu.mjs +3 -129
- package/fesm2022/yuuvis-client-framework-overflow-menu.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-pagination.mjs +5 -5
- package/fesm2022/yuuvis-client-framework-pagination.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-popout.mjs +3 -239
- package/fesm2022/yuuvis-client-framework-popout.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-query-list.mjs +26 -28
- package/fesm2022/yuuvis-client-framework-query-list.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-renderer.mjs +51 -51
- package/fesm2022/yuuvis-client-framework-renderer.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-sequence-list.mjs +7 -7
- package/fesm2022/yuuvis-client-framework-sequence-list.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-simple-search.mjs +4 -4
- package/fesm2022/yuuvis-client-framework-simple-search.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-sort.mjs +34 -55
- package/fesm2022/yuuvis-client-framework-sort.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-split-view.mjs +3 -321
- package/fesm2022/yuuvis-client-framework-split-view.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-tile-list.mjs +88 -90
- package/fesm2022/yuuvis-client-framework-tile-list.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-token-search.mjs +21 -21
- package/fesm2022/yuuvis-client-framework-token-search.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-tree.mjs +16 -16
- package/fesm2022/yuuvis-client-framework-tree.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-upload-progress.mjs +15 -15
- package/fesm2022/yuuvis-client-framework-upload-progress.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-widget-grid.mjs +3 -946
- package/fesm2022/yuuvis-client-framework-widget-grid.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework.mjs +22 -22
- package/fesm2022/yuuvis-client-framework.mjs.map +1 -1
- package/lib/assets/i18n/de.json +1 -55
- package/lib/assets/i18n/en.json +1 -55
- package/list/README.md +1 -1
- package/master-details/README.md +1 -1
- package/overflow-hidden/README.md +1 -1
- package/overflow-menu/README.md +1 -1
- package/package.json +50 -48
- package/popout/README.md +1 -1
- package/split-view/README.md +1 -1
- package/types/yuuvis-client-framework-autocomplete.d.ts +1 -0
- package/{clipboard/index.d.ts → types/yuuvis-client-framework-clipboard.d.ts} +1 -1
- package/types/yuuvis-client-framework-common.d.ts +1 -0
- package/types/yuuvis-client-framework-list.d.ts +1 -0
- package/types/yuuvis-client-framework-master-details.d.ts +1 -0
- package/{object-flavor/index.d.ts → types/yuuvis-client-framework-object-flavor.d.ts} +1 -0
- package/types/yuuvis-client-framework-overflow-hidden.d.ts +1 -0
- package/types/yuuvis-client-framework-overflow-menu.d.ts +1 -0
- package/types/yuuvis-client-framework-popout.d.ts +1 -0
- package/{renderer/index.d.ts → types/yuuvis-client-framework-renderer.d.ts} +2 -2
- package/types/yuuvis-client-framework-split-view.d.ts +1 -0
- package/types/yuuvis-client-framework-widget-grid.d.ts +1 -0
- package/widget-grid/README.md +1 -46
- package/autocomplete/index.d.ts +0 -89
- package/common/index.d.ts +0 -536
- package/list/index.d.ts +0 -380
- package/master-details/index.d.ts +0 -69
- package/overflow-hidden/index.d.ts +0 -28
- package/overflow-menu/index.d.ts +0 -52
- package/popout/index.d.ts +0 -106
- package/split-view/index.d.ts +0 -197
- package/widget-grid/index.d.ts +0 -299
- /package/{actions/index.d.ts → types/yuuvis-client-framework-actions.d.ts} +0 -0
- /package/{app-bar/index.d.ts → types/yuuvis-client-framework-app-bar.d.ts} +0 -0
- /package/{breadcrumb/index.d.ts → types/yuuvis-client-framework-breadcrumb.d.ts} +0 -0
- /package/{datepicker/index.d.ts → types/yuuvis-client-framework-datepicker.d.ts} +0 -0
- /package/{forms/index.d.ts → types/yuuvis-client-framework-forms.d.ts} +0 -0
- /package/{icons/index.d.ts → types/yuuvis-client-framework-icons.d.ts} +0 -0
- /package/{metadata-form-defaults/index.d.ts → types/yuuvis-client-framework-metadata-form-defaults.d.ts} +0 -0
- /package/{metadata-form/index.d.ts → types/yuuvis-client-framework-metadata-form.d.ts} +0 -0
- /package/{object-details/index.d.ts → types/yuuvis-client-framework-object-details.d.ts} +0 -0
- /package/{object-form/index.d.ts → types/yuuvis-client-framework-object-form.d.ts} +0 -0
- /package/{object-preview/index.d.ts → types/yuuvis-client-framework-object-preview.d.ts} +0 -0
- /package/{object-relationship/index.d.ts → types/yuuvis-client-framework-object-relationship.d.ts} +0 -0
- /package/{object-summary/index.d.ts → types/yuuvis-client-framework-object-summary.d.ts} +0 -0
- /package/{object-versions/index.d.ts → types/yuuvis-client-framework-object-versions.d.ts} +0 -0
- /package/{pagination/index.d.ts → types/yuuvis-client-framework-pagination.d.ts} +0 -0
- /package/{query-list/index.d.ts → types/yuuvis-client-framework-query-list.d.ts} +0 -0
- /package/{sequence-list/index.d.ts → types/yuuvis-client-framework-sequence-list.d.ts} +0 -0
- /package/{simple-search/index.d.ts → types/yuuvis-client-framework-simple-search.d.ts} +0 -0
- /package/{sort/index.d.ts → types/yuuvis-client-framework-sort.d.ts} +0 -0
- /package/{tile-list/index.d.ts → types/yuuvis-client-framework-tile-list.d.ts} +0 -0
- /package/{token-search/index.d.ts → types/yuuvis-client-framework-token-search.d.ts} +0 -0
- /package/{tree/index.d.ts → types/yuuvis-client-framework-tree.d.ts} +0 -0
- /package/{upload-progress/index.d.ts → types/yuuvis-client-framework-upload-progress.d.ts} +0 -0
- /package/{index.d.ts → types/yuuvis-client-framework.d.ts} +0 -0
|
@@ -37,27 +37,27 @@ class RelationshipTargetSearchComponent {
|
|
|
37
37
|
#configQA;
|
|
38
38
|
constructor() {
|
|
39
39
|
this.#searchService = inject(SearchService);
|
|
40
|
-
this.supportedRelationships = input.required(...(ngDevMode ? [{ debugName: "supportedRelationships" }] : []));
|
|
40
|
+
this.supportedRelationships = input.required(...(ngDevMode ? [{ debugName: "supportedRelationships" }] : /* istanbul ignore next */ []));
|
|
41
41
|
// ID of the source object
|
|
42
|
-
this.sourceNode = input.required(...(ngDevMode ? [{ debugName: "sourceNode" }] : []));
|
|
43
|
-
this.targetTypes = input([], ...(ngDevMode ? [{ debugName: "targetTypes" }] : []));
|
|
42
|
+
this.sourceNode = input.required(...(ngDevMode ? [{ debugName: "sourceNode" }] : /* istanbul ignore next */ []));
|
|
43
|
+
this.targetTypes = input([], ...(ngDevMode ? [{ debugName: "targetTypes" }] : /* istanbul ignore next */ []));
|
|
44
44
|
this.#availableTargetTypesEffect = effect(() => {
|
|
45
45
|
const att = this.targetTypes();
|
|
46
46
|
if (att.length === 0)
|
|
47
47
|
this.acFormControl.disable();
|
|
48
48
|
else
|
|
49
49
|
this.acFormControl.enable();
|
|
50
|
-
}, ...(ngDevMode ? [{ debugName: "#availableTargetTypesEffect" }] : []));
|
|
51
|
-
this.config = input.required(...(ngDevMode ? [{ debugName: "config" }] : []));
|
|
50
|
+
}, ...(ngDevMode ? [{ debugName: "#availableTargetTypesEffect" }] : /* istanbul ignore next */ []));
|
|
51
|
+
this.config = input.required(...(ngDevMode ? [{ debugName: "config" }] : /* istanbul ignore next */ []));
|
|
52
52
|
this.#configQA = computed(() => {
|
|
53
53
|
const qa = {};
|
|
54
54
|
this.config().nodes.forEach((c) => {
|
|
55
55
|
qa[c.objectType] = c;
|
|
56
56
|
});
|
|
57
57
|
return qa;
|
|
58
|
-
}, ...(ngDevMode ? [{ debugName: "#configQA" }] : []));
|
|
58
|
+
}, ...(ngDevMode ? [{ debugName: "#configQA" }] : /* istanbul ignore next */ []));
|
|
59
59
|
this.autocompleteRes = [];
|
|
60
|
-
this.innerValue = signal(undefined, ...(ngDevMode ? [{ debugName: "innerValue" }] : []));
|
|
60
|
+
this.innerValue = signal(undefined, ...(ngDevMode ? [{ debugName: "innerValue" }] : /* istanbul ignore next */ []));
|
|
61
61
|
this.mappedValue = computed(() => {
|
|
62
62
|
const v = this.innerValue();
|
|
63
63
|
if (!v || !v.value)
|
|
@@ -77,8 +77,8 @@ class RelationshipTargetSearchComponent {
|
|
|
77
77
|
description: configNode.descriptionField ? v.value.data[configNode.descriptionField] : undefined,
|
|
78
78
|
icon: configNode.icon
|
|
79
79
|
};
|
|
80
|
-
}, ...(ngDevMode ? [{ debugName: "mappedValue" }] : []));
|
|
81
|
-
this.busy = signal(false, ...(ngDevMode ? [{ debugName: "busy" }] : []));
|
|
80
|
+
}, ...(ngDevMode ? [{ debugName: "mappedValue" }] : /* istanbul ignore next */ []));
|
|
81
|
+
this.busy = signal(false, ...(ngDevMode ? [{ debugName: "busy" }] : /* istanbul ignore next */ []));
|
|
82
82
|
this.acFormControl = new FormControl(null, Validators.required);
|
|
83
83
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
84
84
|
this.propagateChange = (_) => { };
|
|
@@ -176,8 +176,8 @@ class RelationshipTargetSearchComponent {
|
|
|
176
176
|
this.acFormControl.enable();
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
180
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
179
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RelationshipTargetSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
180
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: RelationshipTargetSearchComponent, isStandalone: true, selector: "yuv-relationship-target-search", inputs: { supportedRelationships: { classPropertyName: "supportedRelationships", publicName: "supportedRelationships", isSignal: true, isRequired: true, transformFunction: null }, sourceNode: { classPropertyName: "sourceNode", publicName: "sourceNode", isSignal: true, isRequired: true, transformFunction: null }, targetTypes: { classPropertyName: "targetTypes", publicName: "targetTypes", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.has-value": "!!mappedValue()" } }, providers: [
|
|
181
181
|
{
|
|
182
182
|
provide: NG_VALUE_ACCESSOR,
|
|
183
183
|
useExisting: forwardRef(() => RelationshipTargetSearchComponent),
|
|
@@ -185,7 +185,7 @@ class RelationshipTargetSearchComponent {
|
|
|
185
185
|
}
|
|
186
186
|
], ngImport: i0, template: "<mat-form-field>\n <mat-label>{{ 'yuv.object-relationship.add-relationship.target-search.label' | translate }}</mat-label>\n\n <yuv-autocomplete\n [required]=\"true\"\n [busy]=\"busy()\"\n [formControl]=\"acFormControl\"\n [autocompleteValues]=\"autocompleteRes\"\n [forceSelection]=\"true\"\n (autocompleteFnc)=\"autocompleteFn($event)\"\n [multiple]=\"false\"\n >\n <!-- template for option -->\n <ng-template #optionTemplate let-item>\n <div class=\"label\">{{ item.label }}</div>\n <div class=\"meta\" style=\"font: var(--ymt-font-body-subtle); color: var(--ymt-text-color-subtle)\">{{ item.value.description }}</div>\n </ng-template>\n </yuv-autocomplete>\n\n @let v = mappedValue();\n @if (v) {\n <div class=\"value-node\" aria-live=\"polite\">\n @if (v.icon) {\n <div class=\"icon\" aria-hidden=\"true\">\n <mat-icon>{{ v.icon }}</mat-icon>\n </div>\n }\n <strong class=\"label\">{{ v.title }}</strong>\n <div class=\"description\">{{ v.description }}</div>\n\n <button\n type=\"button\"\n ymtIconButton\n icon-button-size=\"small\"\n [attr.aria-label]=\"'yuv.object-relationship.add-relationship.target-search.clear' | translate\"\n (click)=\"reset()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </div>\n }\n</mat-form-field>\n", styles: [":host mat-form-field{width:100%}:host.has-value yuv-autocomplete{display:none}:host .value-node{display:grid;grid-template-columns:auto 1fr auto;grid-template-rows:auto auto;grid-template-areas:\"icon label button\" \"icon description description\";column-gap:var(--ymt-spacing-xs);align-items:center}:host .value-node .icon{grid-area:icon}:host .value-node .label{grid-area:label}:host .value-node .description{grid-area:description;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle)}\n"], dependencies: [{ kind: "ngmodule", type: YuvAutocompleteModule }, { kind: "component", type: i1.AutocompleteComponent, selector: "yuv-autocomplete", inputs: ["ariaLabel", "busy", "multiple", "distinctValues", "addOnBlur", "minLength", "maxItems", "forceSelection", "autocompleteValues"], outputs: ["autocompleteFnc", "acBlur"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
|
|
187
187
|
}
|
|
188
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
188
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RelationshipTargetSearchComponent, decorators: [{
|
|
189
189
|
type: Component,
|
|
190
190
|
args: [{ selector: 'yuv-relationship-target-search', imports: [
|
|
191
191
|
YuvAutocompleteModule,
|
|
@@ -218,12 +218,12 @@ class AddRelationshipComponent {
|
|
|
218
218
|
this.targetTypeFilterValue = toSignal(this.targetTypeFilterControl.valueChanges, {
|
|
219
219
|
initialValue: this.targetTypeFilterControl.value || null
|
|
220
220
|
});
|
|
221
|
-
this.object = input(this.#dialogData.object, ...(ngDevMode ? [{ debugName: "object" }] : []));
|
|
222
|
-
this.config = input(this.#dialogData.config, ...(ngDevMode ? [{ debugName: "config" }] : []));
|
|
221
|
+
this.object = input(this.#dialogData.object, ...(ngDevMode ? [{ debugName: "object" }] : /* istanbul ignore next */ []));
|
|
222
|
+
this.config = input(this.#dialogData.config, ...(ngDevMode ? [{ debugName: "config" }] : /* istanbul ignore next */ []));
|
|
223
223
|
this.supportedRelationships = computed(() => {
|
|
224
224
|
const obj = this.object();
|
|
225
225
|
return obj ? this.#system.getSupportedRelationships(obj, true) : [];
|
|
226
|
-
}, ...(ngDevMode ? [{ debugName: "supportedRelationships" }] : []));
|
|
226
|
+
}, ...(ngDevMode ? [{ debugName: "supportedRelationships" }] : /* istanbul ignore next */ []));
|
|
227
227
|
this.filteredRelationships = computed(() => {
|
|
228
228
|
// filter the supported relationships of the object by the allowed target types
|
|
229
229
|
// if target types are selected
|
|
@@ -231,7 +231,7 @@ class AddRelationshipComponent {
|
|
|
231
231
|
return this.supportedRelationships().filter((r) => {
|
|
232
232
|
return !tt || r.allowedTargetTypes.some((t) => tt.includes(t));
|
|
233
233
|
});
|
|
234
|
-
}, ...(ngDevMode ? [{ debugName: "filteredRelationships" }] : []));
|
|
234
|
+
}, ...(ngDevMode ? [{ debugName: "filteredRelationships" }] : /* istanbul ignore next */ []));
|
|
235
235
|
// get the target types from the relationships
|
|
236
236
|
this.availableTargetTypes = computed(() => {
|
|
237
237
|
const rel = this.supportedRelationships();
|
|
@@ -242,8 +242,8 @@ class AddRelationshipComponent {
|
|
|
242
242
|
}, {});
|
|
243
243
|
this.targetTypeFilterControl.patchValue(types);
|
|
244
244
|
return types;
|
|
245
|
-
}, ...(ngDevMode ? [{ debugName: "availableTargetTypes" }] : []));
|
|
246
|
-
this.labeledTargetTypes = computed(() => this.availableTargetTypes().map((t) => ({ id: t, label: this.targetTypeLabels[t] || t })), ...(ngDevMode ? [{ debugName: "labeledTargetTypes" }] : []));
|
|
245
|
+
}, ...(ngDevMode ? [{ debugName: "availableTargetTypes" }] : /* istanbul ignore next */ []));
|
|
246
|
+
this.labeledTargetTypes = computed(() => this.availableTargetTypes().map((t) => ({ id: t, label: this.targetTypeLabels[t] || t })), ...(ngDevMode ? [{ debugName: "labeledTargetTypes" }] : /* istanbul ignore next */ []));
|
|
247
247
|
this.sourceNode = computed(() => {
|
|
248
248
|
const obj = this.object();
|
|
249
249
|
const config = this.config();
|
|
@@ -252,7 +252,7 @@ class AddRelationshipComponent {
|
|
|
252
252
|
description: obj.data[config.rootNode.descriptionField || ''],
|
|
253
253
|
icon: config.rootNode.icon
|
|
254
254
|
};
|
|
255
|
-
}, ...(ngDevMode ? [{ debugName: "sourceNode" }] : []));
|
|
255
|
+
}, ...(ngDevMode ? [{ debugName: "sourceNode" }] : /* istanbul ignore next */ []));
|
|
256
256
|
this.#relationMatchesTargetObjectValidator = (control) => {
|
|
257
257
|
const targetObject = control.get('targetObject')?.value;
|
|
258
258
|
const relation = control.get('relation')?.value;
|
|
@@ -274,8 +274,8 @@ class AddRelationshipComponent {
|
|
|
274
274
|
validators: [Validators.required]
|
|
275
275
|
})
|
|
276
276
|
}, { validators: this.#relationMatchesTargetObjectValidator });
|
|
277
|
-
this.busy = signal(false, ...(ngDevMode ? [{ debugName: "busy" }] : []));
|
|
278
|
-
this.error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : []));
|
|
277
|
+
this.busy = signal(false, ...(ngDevMode ? [{ debugName: "busy" }] : /* istanbul ignore next */ []));
|
|
278
|
+
this.error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
|
|
279
279
|
}
|
|
280
280
|
#system;
|
|
281
281
|
#dialogData;
|
|
@@ -315,10 +315,10 @@ class AddRelationshipComponent {
|
|
|
315
315
|
close() {
|
|
316
316
|
this.#dialogRef.close();
|
|
317
317
|
}
|
|
318
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
319
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: AddRelationshipComponent, isStandalone: true, selector: "yuv-add-relationship", inputs: { object: { classPropertyName: "object", publicName: "object", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<yuv-dialog class=\"not-separated\" [headertitle]=\"'yuv.object-relationship.add-relationship.headline' | translate\">\n <main [yuvBusyOverlay]=\"busy()\">\n @let sn = sourceNode();\n <form id=\"addRelationshipForm\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <section class=\"source\">\n @if (sn) {\n <div class=\"source-node ymt-panel\">\n @if (sn.icon) {\n <div class=\"icon\">\n <mat-icon>{{ sn.icon }}</mat-icon>\n </div>\n }\n <strong class=\"label\">{{ sn.title }}</strong>\n <div class=\"description\">{{ sn.description }}</div>\n </div>\n }\n </section>\n\n <section class=\"connect\" aria-hidden=\"true\">\n <div class=\"link\"></div>\n <div class=\"dot\"></div>\n <div class=\"link\"></div>\n </section>\n\n <!-- available relationships -->\n <section class=\"relationships ymt-panel\">\n <h3>{{ 'yuv.object-relationship.action.add-link.search.relation.label' | translate }}</h3>\n\n @let tt = labeledTargetTypes();\n @if (tt.length > 1) {\n <div class=\"target-filter\">\n <span>{{ 'yuv.object-relationship.add-relationship.target-type.filter.label' | translate }}</span>\n\n <mat-chip-listbox\n [multiple]=\"true\"\n [formControl]=\"targetTypeFilterControl\"\n [attr.aria-label]=\"'yuv.object-relationship.add-relationship.target-type.filter.label' | translate\"\n >\n @for (t of tt; track t) {\n <mat-chip-option [value]=\"t.id\">{{ t.label }}</mat-chip-option>\n }\n </mat-chip-listbox>\n </div>\n }\n <!-- list of filtered relationships -->\n <yuv-list (itemSelect)=\"onRelationSelect($event)\">\n @for (r of filteredRelationships(); track r.id) {\n <div class=\"relationship\" yuvListItem>\n {{ r.label }}\n\n <div class=\"targets\">\n @for (t of r.allowedTargetTypes; track t) {\n <span>{{ targetTypeLabels[t] }}</span>\n }\n </div>\n </div>\n }\n </yuv-list>\n </section>\n\n <!-- relationship target select -->\n <section class=\"target\">\n <yuv-relationship-target-search\n class=\"ymt-panel\"\n formControlName=\"targetObject\"\n [sourceNode]=\"object().id\"\n [config]=\"config()\"\n [targetTypes]=\"form.get('relation')!.value?.allowedTargetTypes || []\"\n [supportedRelationships]=\"supportedRelationships()\"\n ></yuv-relationship-target-search>\n </section>\n\n <section class=\"error\">\n @if (form.hasError('invalidRelationTargetCombination') && (form.touched || form.dirty)) {\n <mat-error class=\"error\">{{ 'yuv.object-relationship.add-relationship.error.invalidRelationTargetCombination' | translate }}</mat-error>\n }\n @if (error()) {\n <mat-error class=\"error\">{{ error() }}</mat-error>\n }\n </section>\n </form>\n </main>\n\n <footer>\n <button ymtButton=\"secondary\" type=\"button\" (click)=\"close()\" [disabled]=\"busy()\">\n {{ 'yuv.object-relationship.add-relationship.action.cancel' | translate }}\n </button>\n <button ymtButton=\"primary\" type=\"submit\" form=\"addRelationshipForm\" [disabled]=\"form.invalid || busy()\">\n {{ 'yuv.object-relationship.add-relationship.action.submit' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n", styles: ["@charset \"UTF-8\";:host main form{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:auto auto auto;grid-template-areas:\"source relationships\" \"connect relationships\" \"target relationships\" \"error error\";background-color:var(--ymt-surface-container-highest);padding:var(--ymt-spacing-m)}@media not (min-width:750px){:host main form{grid-template-columns:1fr;grid-template-areas:\"source\" \"relationships\" \"target\" \"error\"}:host main form .connect{display:none!important}:host main form .relationships{margin:var(--ymt-spacing-xl)}}:host main form .source{grid-area:source;padding:0 var(--ymt-spacing-xl);display:flex;flex-direction:column;align-items:center;justify-content:end}:host main form .source .source-node{min-width:31ch;border:2px solid var(--ymt-outline);border-radius:var(--ymt-corner-s);padding:var(--ymt-spacing-xs);outline:4px solid rgb(from var(--ymt-outline) r g b/.3);display:grid;grid-template-columns:auto 1fr auto;grid-template-rows:auto auto;grid-template-areas:\"icon label button\" \"icon description description\";column-gap:var(--ymt-spacing-xs);align-items:center}:host main form .source .source-node .icon{grid-area:icon}:host main form .source .source-node .label{grid-area:label}:host main form .source .source-node .description{grid-area:description;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle)}:host main form .connect{grid-area:connect;display:flex;flex-flow:column;align-items:center}:host main form .connect .dot{width:100%;height:2rem;position:relative;flex:0 0 auto}:host main form .connect .dot:after{content:\"\";position:absolute;width:calc(50% - .5rem);height:calc(1rem + 1px);inset-inline-end:0;border-block-end:2px dotted var(--ymt-outline)}:host main form .connect .dot:before{content:\"\";position:absolute;width:1rem;height:1rem;border-radius:50%;margin:auto;inset-inline-end:calc(50% - .5rem);inset-block-start:calc(50% - .5rem);border:2px solid var(--ymt-outline);outline:4px solid rgb(from var(--ymt-outline) r g b/.3)}:host main form .relationships{grid-area:relationships;border-radius:var(--ymt-corner-s);border:1px solid var(--ymt-outline);outline:3px solid rgb(from var(--ymt-outline) r g b/.3);overflow:hidden;max-height:300px;min-width:300px;display:flex;flex-direction:column}:host main form .relationships h3{margin:0;padding:var(--ymt-spacing-m);font:var(--ymt-font-title-small)}:host main form .relationships .target-filter{flex:0 0 auto;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle);padding:0 var(--ymt-spacing-m);display:flex;gap:var(--ymt-spacing-m);align-items:center;justify-content:space-between;border-block-end:1px solid var(--ymt-outline-variant)}:host main form .relationships yuv-list{flex:1;overflow-y:auto}:host main form .relationships .relationship{display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between;padding:var(--ymt-spacing-s) var(--ymt-spacing-m);border-block-end:1px solid var(--ymt-outline-variant)}:host main form .relationships .relationship span{font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle);outline:1px solid var(--ymt-text-color-subtle);border-radius:var(--ymt-corner-xs);padding:0 var(--ymt-spacing-2xs);display:inline-flex;align-items:center;gap:var(--ymt-spacing-2xs)}:host main form .relationships .relationship span:before{content:\"\\bb\"}:host main form .target{grid-area:target;padding:0 var(--ymt-spacing-xl)}:host main form .target yuv-relationship-target-search{min-width:31ch;display:block;margin-block-start:2px;padding:var(--ymt-spacing-xs);border-radius:var(--ymt-corner-s);border:1px solid var(--ymt-outline);outline:3px solid rgb(from var(--ymt-outline) r g b/.3)}:host main form .error{grid-area:error}:host main form .error mat-error{margin-block-start:var(--ymt-spacing-m);background-color:var(--ymt-danger-container);color:var(--ymt-on-danger-container);width:100%;padding:var(--ymt-spacing-m);border-radius:var(--ymt-spacing-xs)}:host main .link{width:2px;flex:1;background-color:var(--ymt-outline);margin-block-end:3px;min-height:2em;position:relative}:host main .link:before{content:\"\";position:absolute;transform:rotate(135deg);width:8px;inset-block-end:0;translate:-3px 2px;height:8px;border:4px solid transparent;border-block-start-color:var(--ymt-outline);border-inline-end-color:var(--ymt-outline)}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: DialogComponent, selector: "yuv-dialog", inputs: ["headertitle", "headertitel"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: YmtButtonDirective, selector: "button[ymtButton], a[ymtButton]", inputs: ["ymtButton", "disabled", "aria-disabled", "disableRipple", "disabledInteractive", "button-size"] }, { kind: "component", type: RelationshipTargetSearchComponent, selector: "yuv-relationship-target-search", inputs: ["supportedRelationships", "sourceNode", "targetTypes", "config"] }, { kind: "directive", type: BusyOverlayDirective, selector: "[yuvBusyOverlay]", inputs: ["yuvBusyOverlay", "yuvBusyOverlayConfig", "yuvBusyError"], outputs: ["yuvBusyErrorDismiss"] }, { kind: "ngmodule", type: YuvListModule }, { kind: "component", type: i4$1.ListComponent, selector: "yuv-list", inputs: ["preventChangeUntil", "multiselect", "selfHandleSelection", "selfHandleClick", "autoSelect", "disableSelection"], outputs: ["itemSelect", "itemFocus"] }, { kind: "directive", type: i4$1.ListItemDirective, selector: "[yuvListItem]", inputs: ["disabled", "active", "selected"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i5.MatChipListbox, selector: "mat-chip-listbox", inputs: ["multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i5.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["selectable", "selected"], outputs: ["selectionChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
|
|
318
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AddRelationshipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
319
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AddRelationshipComponent, isStandalone: true, selector: "yuv-add-relationship", inputs: { object: { classPropertyName: "object", publicName: "object", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<yuv-dialog class=\"not-separated\" [headertitle]=\"'yuv.object-relationship.add-relationship.headline' | translate\">\n <main [yuvBusyOverlay]=\"busy()\">\n @let sn = sourceNode();\n <form id=\"addRelationshipForm\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <section class=\"source\">\n @if (sn) {\n <div class=\"source-node ymt-panel\">\n @if (sn.icon) {\n <div class=\"icon\">\n <mat-icon>{{ sn.icon }}</mat-icon>\n </div>\n }\n <strong class=\"label\">{{ sn.title }}</strong>\n <div class=\"description\">{{ sn.description }}</div>\n </div>\n }\n </section>\n\n <section class=\"connect\" aria-hidden=\"true\">\n <div class=\"link\"></div>\n <div class=\"dot\"></div>\n <div class=\"link\"></div>\n </section>\n\n <!-- available relationships -->\n <section class=\"relationships ymt-panel\">\n <h3>{{ 'yuv.object-relationship.action.add-link.search.relation.label' | translate }}</h3>\n\n @let tt = labeledTargetTypes();\n @if (tt.length > 1) {\n <div class=\"target-filter\">\n <span>{{ 'yuv.object-relationship.add-relationship.target-type.filter.label' | translate }}</span>\n\n <mat-chip-listbox\n [multiple]=\"true\"\n [formControl]=\"targetTypeFilterControl\"\n [attr.aria-label]=\"'yuv.object-relationship.add-relationship.target-type.filter.label' | translate\"\n >\n @for (t of tt; track t) {\n <mat-chip-option [value]=\"t.id\">{{ t.label }}</mat-chip-option>\n }\n </mat-chip-listbox>\n </div>\n }\n <!-- list of filtered relationships -->\n <yuv-list (itemSelect)=\"onRelationSelect($event)\">\n @for (r of filteredRelationships(); track r.id) {\n <div class=\"relationship\" yuvListItem>\n {{ r.label }}\n\n <div class=\"targets\">\n @for (t of r.allowedTargetTypes; track t) {\n <span>{{ targetTypeLabels[t] }}</span>\n }\n </div>\n </div>\n }\n </yuv-list>\n </section>\n\n <!-- relationship target select -->\n <section class=\"target\">\n <yuv-relationship-target-search\n class=\"ymt-panel\"\n formControlName=\"targetObject\"\n [sourceNode]=\"object().id\"\n [config]=\"config()\"\n [targetTypes]=\"form.get('relation')!.value?.allowedTargetTypes || []\"\n [supportedRelationships]=\"supportedRelationships()\"\n ></yuv-relationship-target-search>\n </section>\n\n <section class=\"error\">\n @if (form.hasError('invalidRelationTargetCombination') && (form.touched || form.dirty)) {\n <mat-error class=\"error\">{{ 'yuv.object-relationship.add-relationship.error.invalidRelationTargetCombination' | translate }}</mat-error>\n }\n @if (error()) {\n <mat-error class=\"error\">{{ error() }}</mat-error>\n }\n </section>\n </form>\n </main>\n\n <footer>\n <button ymtButton=\"secondary\" type=\"button\" (click)=\"close()\" [disabled]=\"busy()\">\n {{ 'yuv.object-relationship.add-relationship.action.cancel' | translate }}\n </button>\n <button ymtButton=\"primary\" type=\"submit\" form=\"addRelationshipForm\" [disabled]=\"form.invalid || busy()\">\n {{ 'yuv.object-relationship.add-relationship.action.submit' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n", styles: ["@charset \"UTF-8\";:host main form{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:auto auto auto;grid-template-areas:\"source relationships\" \"connect relationships\" \"target relationships\" \"error error\";background-color:var(--ymt-surface-container-highest);padding:var(--ymt-spacing-m)}@media(width<750px){:host main form{grid-template-columns:1fr;grid-template-areas:\"source\" \"relationships\" \"target\" \"error\"}:host main form .connect{display:none!important}:host main form .relationships{margin:var(--ymt-spacing-xl)}}:host main form .source{grid-area:source;padding:0 var(--ymt-spacing-xl);display:flex;flex-direction:column;align-items:center;justify-content:end}:host main form .source .source-node{min-width:31ch;border:2px solid var(--ymt-outline);border-radius:var(--ymt-corner-s);padding:var(--ymt-spacing-xs);outline:4px solid rgb(from var(--ymt-outline) r g b/.3);display:grid;grid-template-columns:auto 1fr auto;grid-template-rows:auto auto;grid-template-areas:\"icon label button\" \"icon description description\";column-gap:var(--ymt-spacing-xs);align-items:center}:host main form .source .source-node .icon{grid-area:icon}:host main form .source .source-node .label{grid-area:label}:host main form .source .source-node .description{grid-area:description;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle)}:host main form .connect{grid-area:connect;display:flex;flex-flow:column;align-items:center}:host main form .connect .dot{width:100%;height:2rem;position:relative;flex:0 0 auto}:host main form .connect .dot:after{content:\"\";position:absolute;width:calc(50% - .5rem);height:calc(1rem + 1px);inset-inline-end:0;border-block-end:2px dotted var(--ymt-outline)}:host main form .connect .dot:before{content:\"\";position:absolute;width:1rem;height:1rem;border-radius:50%;margin:auto;inset-inline-end:calc(50% - .5rem);inset-block-start:calc(50% - .5rem);border:2px solid var(--ymt-outline);outline:4px solid rgb(from var(--ymt-outline) r g b/.3)}:host main form .relationships{grid-area:relationships;border-radius:var(--ymt-corner-s);border:1px solid var(--ymt-outline);outline:3px solid rgb(from var(--ymt-outline) r g b/.3);overflow:hidden;max-height:300px;min-width:300px;display:flex;flex-direction:column}:host main form .relationships h3{margin:0;padding:var(--ymt-spacing-m);font:var(--ymt-font-title-small)}:host main form .relationships .target-filter{flex:0 0 auto;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle);padding:0 var(--ymt-spacing-m);display:flex;gap:var(--ymt-spacing-m);align-items:center;justify-content:space-between;border-block-end:1px solid var(--ymt-outline-variant)}:host main form .relationships yuv-list{flex:1;overflow-y:auto}:host main form .relationships .relationship{display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between;padding:var(--ymt-spacing-s) var(--ymt-spacing-m);border-block-end:1px solid var(--ymt-outline-variant)}:host main form .relationships .relationship span{font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle);outline:1px solid var(--ymt-text-color-subtle);border-radius:var(--ymt-corner-xs);padding:0 var(--ymt-spacing-2xs);display:inline-flex;align-items:center;gap:var(--ymt-spacing-2xs)}:host main form .relationships .relationship span:before{content:\"\\bb\"}:host main form .target{grid-area:target;padding:0 var(--ymt-spacing-xl)}:host main form .target yuv-relationship-target-search{min-width:31ch;display:block;margin-block-start:2px;padding:var(--ymt-spacing-xs);border-radius:var(--ymt-corner-s);border:1px solid var(--ymt-outline);outline:3px solid rgb(from var(--ymt-outline) r g b/.3)}:host main form .error{grid-area:error}:host main form .error mat-error{margin-block-start:var(--ymt-spacing-m);background-color:var(--ymt-danger-container);color:var(--ymt-on-danger-container);width:100%;padding:var(--ymt-spacing-m);border-radius:var(--ymt-spacing-xs)}:host main .link{width:2px;flex:1;background-color:var(--ymt-outline);margin-block-end:3px;min-height:2em;position:relative}:host main .link:before{content:\"\";position:absolute;transform:rotate(135deg);width:8px;inset-block-end:0;translate:-3px 2px;height:8px;border:4px solid transparent;border-block-start-color:var(--ymt-outline);border-inline-end-color:var(--ymt-outline)}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: DialogComponent, selector: "yuv-dialog", inputs: ["headertitle", "headertitel"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: YmtButtonDirective, selector: "button[ymtButton], a[ymtButton]", inputs: ["ymtButton", "disabled", "aria-disabled", "disableRipple", "disabledInteractive", "button-size"] }, { kind: "component", type: RelationshipTargetSearchComponent, selector: "yuv-relationship-target-search", inputs: ["supportedRelationships", "sourceNode", "targetTypes", "config"] }, { kind: "directive", type: BusyOverlayDirective, selector: "[yuvBusyOverlay]", inputs: ["yuvBusyOverlay", "yuvBusyOverlayConfig", "yuvBusyError"], outputs: ["yuvBusyErrorDismiss"] }, { kind: "ngmodule", type: YuvListModule }, { kind: "component", type: i4$1.ListComponent, selector: "yuv-list", inputs: ["preventChangeUntil", "multiselect", "selfHandleSelection", "selfHandleClick", "autoSelect", "disableSelection"], outputs: ["itemSelect", "itemFocus"] }, { kind: "directive", type: i4$1.ListItemDirective, selector: "[yuvListItem]", inputs: ["disabled", "active", "selected"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i5.MatChipListbox, selector: "mat-chip-listbox", inputs: ["multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i5.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["selectable", "selected"], outputs: ["selectionChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
|
|
320
320
|
}
|
|
321
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
321
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AddRelationshipComponent, decorators: [{
|
|
322
322
|
type: Component,
|
|
323
323
|
args: [{ selector: 'yuv-add-relationship', imports: [
|
|
324
324
|
ReactiveFormsModule,
|
|
@@ -334,7 +334,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
334
334
|
BusyOverlayDirective,
|
|
335
335
|
YuvListModule,
|
|
336
336
|
MatChipsModule
|
|
337
|
-
], template: "<yuv-dialog class=\"not-separated\" [headertitle]=\"'yuv.object-relationship.add-relationship.headline' | translate\">\n <main [yuvBusyOverlay]=\"busy()\">\n @let sn = sourceNode();\n <form id=\"addRelationshipForm\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <section class=\"source\">\n @if (sn) {\n <div class=\"source-node ymt-panel\">\n @if (sn.icon) {\n <div class=\"icon\">\n <mat-icon>{{ sn.icon }}</mat-icon>\n </div>\n }\n <strong class=\"label\">{{ sn.title }}</strong>\n <div class=\"description\">{{ sn.description }}</div>\n </div>\n }\n </section>\n\n <section class=\"connect\" aria-hidden=\"true\">\n <div class=\"link\"></div>\n <div class=\"dot\"></div>\n <div class=\"link\"></div>\n </section>\n\n <!-- available relationships -->\n <section class=\"relationships ymt-panel\">\n <h3>{{ 'yuv.object-relationship.action.add-link.search.relation.label' | translate }}</h3>\n\n @let tt = labeledTargetTypes();\n @if (tt.length > 1) {\n <div class=\"target-filter\">\n <span>{{ 'yuv.object-relationship.add-relationship.target-type.filter.label' | translate }}</span>\n\n <mat-chip-listbox\n [multiple]=\"true\"\n [formControl]=\"targetTypeFilterControl\"\n [attr.aria-label]=\"'yuv.object-relationship.add-relationship.target-type.filter.label' | translate\"\n >\n @for (t of tt; track t) {\n <mat-chip-option [value]=\"t.id\">{{ t.label }}</mat-chip-option>\n }\n </mat-chip-listbox>\n </div>\n }\n <!-- list of filtered relationships -->\n <yuv-list (itemSelect)=\"onRelationSelect($event)\">\n @for (r of filteredRelationships(); track r.id) {\n <div class=\"relationship\" yuvListItem>\n {{ r.label }}\n\n <div class=\"targets\">\n @for (t of r.allowedTargetTypes; track t) {\n <span>{{ targetTypeLabels[t] }}</span>\n }\n </div>\n </div>\n }\n </yuv-list>\n </section>\n\n <!-- relationship target select -->\n <section class=\"target\">\n <yuv-relationship-target-search\n class=\"ymt-panel\"\n formControlName=\"targetObject\"\n [sourceNode]=\"object().id\"\n [config]=\"config()\"\n [targetTypes]=\"form.get('relation')!.value?.allowedTargetTypes || []\"\n [supportedRelationships]=\"supportedRelationships()\"\n ></yuv-relationship-target-search>\n </section>\n\n <section class=\"error\">\n @if (form.hasError('invalidRelationTargetCombination') && (form.touched || form.dirty)) {\n <mat-error class=\"error\">{{ 'yuv.object-relationship.add-relationship.error.invalidRelationTargetCombination' | translate }}</mat-error>\n }\n @if (error()) {\n <mat-error class=\"error\">{{ error() }}</mat-error>\n }\n </section>\n </form>\n </main>\n\n <footer>\n <button ymtButton=\"secondary\" type=\"button\" (click)=\"close()\" [disabled]=\"busy()\">\n {{ 'yuv.object-relationship.add-relationship.action.cancel' | translate }}\n </button>\n <button ymtButton=\"primary\" type=\"submit\" form=\"addRelationshipForm\" [disabled]=\"form.invalid || busy()\">\n {{ 'yuv.object-relationship.add-relationship.action.submit' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n", styles: ["@charset \"UTF-8\";:host main form{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:auto auto auto;grid-template-areas:\"source relationships\" \"connect relationships\" \"target relationships\" \"error error\";background-color:var(--ymt-surface-container-highest);padding:var(--ymt-spacing-m)}@media
|
|
337
|
+
], template: "<yuv-dialog class=\"not-separated\" [headertitle]=\"'yuv.object-relationship.add-relationship.headline' | translate\">\n <main [yuvBusyOverlay]=\"busy()\">\n @let sn = sourceNode();\n <form id=\"addRelationshipForm\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <section class=\"source\">\n @if (sn) {\n <div class=\"source-node ymt-panel\">\n @if (sn.icon) {\n <div class=\"icon\">\n <mat-icon>{{ sn.icon }}</mat-icon>\n </div>\n }\n <strong class=\"label\">{{ sn.title }}</strong>\n <div class=\"description\">{{ sn.description }}</div>\n </div>\n }\n </section>\n\n <section class=\"connect\" aria-hidden=\"true\">\n <div class=\"link\"></div>\n <div class=\"dot\"></div>\n <div class=\"link\"></div>\n </section>\n\n <!-- available relationships -->\n <section class=\"relationships ymt-panel\">\n <h3>{{ 'yuv.object-relationship.action.add-link.search.relation.label' | translate }}</h3>\n\n @let tt = labeledTargetTypes();\n @if (tt.length > 1) {\n <div class=\"target-filter\">\n <span>{{ 'yuv.object-relationship.add-relationship.target-type.filter.label' | translate }}</span>\n\n <mat-chip-listbox\n [multiple]=\"true\"\n [formControl]=\"targetTypeFilterControl\"\n [attr.aria-label]=\"'yuv.object-relationship.add-relationship.target-type.filter.label' | translate\"\n >\n @for (t of tt; track t) {\n <mat-chip-option [value]=\"t.id\">{{ t.label }}</mat-chip-option>\n }\n </mat-chip-listbox>\n </div>\n }\n <!-- list of filtered relationships -->\n <yuv-list (itemSelect)=\"onRelationSelect($event)\">\n @for (r of filteredRelationships(); track r.id) {\n <div class=\"relationship\" yuvListItem>\n {{ r.label }}\n\n <div class=\"targets\">\n @for (t of r.allowedTargetTypes; track t) {\n <span>{{ targetTypeLabels[t] }}</span>\n }\n </div>\n </div>\n }\n </yuv-list>\n </section>\n\n <!-- relationship target select -->\n <section class=\"target\">\n <yuv-relationship-target-search\n class=\"ymt-panel\"\n formControlName=\"targetObject\"\n [sourceNode]=\"object().id\"\n [config]=\"config()\"\n [targetTypes]=\"form.get('relation')!.value?.allowedTargetTypes || []\"\n [supportedRelationships]=\"supportedRelationships()\"\n ></yuv-relationship-target-search>\n </section>\n\n <section class=\"error\">\n @if (form.hasError('invalidRelationTargetCombination') && (form.touched || form.dirty)) {\n <mat-error class=\"error\">{{ 'yuv.object-relationship.add-relationship.error.invalidRelationTargetCombination' | translate }}</mat-error>\n }\n @if (error()) {\n <mat-error class=\"error\">{{ error() }}</mat-error>\n }\n </section>\n </form>\n </main>\n\n <footer>\n <button ymtButton=\"secondary\" type=\"button\" (click)=\"close()\" [disabled]=\"busy()\">\n {{ 'yuv.object-relationship.add-relationship.action.cancel' | translate }}\n </button>\n <button ymtButton=\"primary\" type=\"submit\" form=\"addRelationshipForm\" [disabled]=\"form.invalid || busy()\">\n {{ 'yuv.object-relationship.add-relationship.action.submit' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n", styles: ["@charset \"UTF-8\";:host main form{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:auto auto auto;grid-template-areas:\"source relationships\" \"connect relationships\" \"target relationships\" \"error error\";background-color:var(--ymt-surface-container-highest);padding:var(--ymt-spacing-m)}@media(width<750px){:host main form{grid-template-columns:1fr;grid-template-areas:\"source\" \"relationships\" \"target\" \"error\"}:host main form .connect{display:none!important}:host main form .relationships{margin:var(--ymt-spacing-xl)}}:host main form .source{grid-area:source;padding:0 var(--ymt-spacing-xl);display:flex;flex-direction:column;align-items:center;justify-content:end}:host main form .source .source-node{min-width:31ch;border:2px solid var(--ymt-outline);border-radius:var(--ymt-corner-s);padding:var(--ymt-spacing-xs);outline:4px solid rgb(from var(--ymt-outline) r g b/.3);display:grid;grid-template-columns:auto 1fr auto;grid-template-rows:auto auto;grid-template-areas:\"icon label button\" \"icon description description\";column-gap:var(--ymt-spacing-xs);align-items:center}:host main form .source .source-node .icon{grid-area:icon}:host main form .source .source-node .label{grid-area:label}:host main form .source .source-node .description{grid-area:description;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle)}:host main form .connect{grid-area:connect;display:flex;flex-flow:column;align-items:center}:host main form .connect .dot{width:100%;height:2rem;position:relative;flex:0 0 auto}:host main form .connect .dot:after{content:\"\";position:absolute;width:calc(50% - .5rem);height:calc(1rem + 1px);inset-inline-end:0;border-block-end:2px dotted var(--ymt-outline)}:host main form .connect .dot:before{content:\"\";position:absolute;width:1rem;height:1rem;border-radius:50%;margin:auto;inset-inline-end:calc(50% - .5rem);inset-block-start:calc(50% - .5rem);border:2px solid var(--ymt-outline);outline:4px solid rgb(from var(--ymt-outline) r g b/.3)}:host main form .relationships{grid-area:relationships;border-radius:var(--ymt-corner-s);border:1px solid var(--ymt-outline);outline:3px solid rgb(from var(--ymt-outline) r g b/.3);overflow:hidden;max-height:300px;min-width:300px;display:flex;flex-direction:column}:host main form .relationships h3{margin:0;padding:var(--ymt-spacing-m);font:var(--ymt-font-title-small)}:host main form .relationships .target-filter{flex:0 0 auto;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle);padding:0 var(--ymt-spacing-m);display:flex;gap:var(--ymt-spacing-m);align-items:center;justify-content:space-between;border-block-end:1px solid var(--ymt-outline-variant)}:host main form .relationships yuv-list{flex:1;overflow-y:auto}:host main form .relationships .relationship{display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between;padding:var(--ymt-spacing-s) var(--ymt-spacing-m);border-block-end:1px solid var(--ymt-outline-variant)}:host main form .relationships .relationship span{font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle);outline:1px solid var(--ymt-text-color-subtle);border-radius:var(--ymt-corner-xs);padding:0 var(--ymt-spacing-2xs);display:inline-flex;align-items:center;gap:var(--ymt-spacing-2xs)}:host main form .relationships .relationship span:before{content:\"\\bb\"}:host main form .target{grid-area:target;padding:0 var(--ymt-spacing-xl)}:host main form .target yuv-relationship-target-search{min-width:31ch;display:block;margin-block-start:2px;padding:var(--ymt-spacing-xs);border-radius:var(--ymt-corner-s);border:1px solid var(--ymt-outline);outline:3px solid rgb(from var(--ymt-outline) r g b/.3)}:host main form .error{grid-area:error}:host main form .error mat-error{margin-block-start:var(--ymt-spacing-m);background-color:var(--ymt-danger-container);color:var(--ymt-on-danger-container);width:100%;padding:var(--ymt-spacing-m);border-radius:var(--ymt-spacing-xs)}:host main .link{width:2px;flex:1;background-color:var(--ymt-outline);margin-block-end:3px;min-height:2em;position:relative}:host main .link:before{content:\"\";position:absolute;transform:rotate(135deg);width:8px;inset-block-end:0;translate:-3px 2px;height:8px;border:4px solid transparent;border-block-start-color:var(--ymt-outline);border-inline-end-color:var(--ymt-outline)}\n"] }]
|
|
338
338
|
}], propDecorators: { object: [{ type: i0.Input, args: [{ isSignal: true, alias: "object", required: false }] }], config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: false }] }] } });
|
|
339
339
|
|
|
340
340
|
/**
|
|
@@ -344,9 +344,9 @@ class NodeSummaryComponent {
|
|
|
344
344
|
constructor() {
|
|
345
345
|
this.#system = inject(SystemService);
|
|
346
346
|
this.#router = inject(Router);
|
|
347
|
-
this.object = input(...(ngDevMode ? [undefined, { debugName: "object" }] : []));
|
|
348
|
-
this.nodeConfig = input(...(ngDevMode ? [undefined, { debugName: "nodeConfig" }] : []));
|
|
349
|
-
this.actions = input(null, ...(ngDevMode ? [{ debugName: "actions" }] : []));
|
|
347
|
+
this.object = input(...(ngDevMode ? [undefined, { debugName: "object" }] : /* istanbul ignore next */ []));
|
|
348
|
+
this.nodeConfig = input(...(ngDevMode ? [undefined, { debugName: "nodeConfig" }] : /* istanbul ignore next */ []));
|
|
349
|
+
this.actions = input(null, ...(ngDevMode ? [{ debugName: "actions" }] : /* istanbul ignore next */ []));
|
|
350
350
|
this.nodeSummary = computed(() => {
|
|
351
351
|
const obj = this.object();
|
|
352
352
|
const config = this.nodeConfig();
|
|
@@ -360,7 +360,7 @@ class NodeSummaryComponent {
|
|
|
360
360
|
link: config.objectLink ? config.objectLink.replace('{{id}}', obj.id) : undefined
|
|
361
361
|
}
|
|
362
362
|
: null;
|
|
363
|
-
}, ...(ngDevMode ? [{ debugName: "nodeSummary" }] : []));
|
|
363
|
+
}, ...(ngDevMode ? [{ debugName: "nodeSummary" }] : /* istanbul ignore next */ []));
|
|
364
364
|
}
|
|
365
365
|
#system;
|
|
366
366
|
#router;
|
|
@@ -387,10 +387,10 @@ class NodeSummaryComponent {
|
|
|
387
387
|
}
|
|
388
388
|
};
|
|
389
389
|
}
|
|
390
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
391
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
390
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NodeSummaryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
391
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: NodeSummaryComponent, isStandalone: true, selector: "yuv-node-summary", inputs: { object: { classPropertyName: "object", publicName: "object", isSignal: true, isRequired: false, transformFunction: null }, nodeConfig: { classPropertyName: "nodeConfig", publicName: "nodeConfig", isSignal: true, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@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", styles: [":host{display:flex;flex-direction:column}:host header{flex:0 0 auto}:host header h2{margin-block-end:0}:host header .desc{margin:0;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle)}:host main{flex:1;overflow-y:auto}:host footer{flex:0 0 auto;align-items:center;display:flex}:host footer .actions{flex:1;display:flex;align-items:center}:host .properties{container:section/inline-size;margin-block-start:var(--ymt-spacing-xl);display:flex;flex-direction:column}:host .properties .row{display:flex;flex-flow:column}:host .properties .row .label{font:var(--ymt-font-body-subtle);flex:0 1 33%;font-weight:700;padding-inline-end:var(--ymt-spacing-m);margin-block-end:var(--ymt-spacing-3xs);text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host .properties .row .value{flex:1;word-break:break-all;font:var(--ymt-font-body-subtle);margin-block-end:var(--ymt-spacing-xs)}@container section (min-width: 300px){:host .properties .row{flex-flow:row}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RendererDirective, selector: "[yuvRenderer]", inputs: ["yuvRenderer"] }, { kind: "directive", type: YmtButtonDirective, selector: "button[ymtButton], a[ymtButton]", inputs: ["ymtButton", "disabled", "aria-disabled", "disableRipple", "disabledInteractive", "button-size"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
|
|
392
392
|
}
|
|
393
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
393
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NodeSummaryComponent, decorators: [{
|
|
394
394
|
type: Component,
|
|
395
395
|
args: [{ selector: 'yuv-node-summary', imports: [CommonModule, RendererDirective, TranslatePipe, YmtButtonDirective], template: "@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", styles: [":host{display:flex;flex-direction:column}:host header{flex:0 0 auto}:host header h2{margin-block-end:0}:host header .desc{margin:0;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle)}:host main{flex:1;overflow-y:auto}:host footer{flex:0 0 auto;align-items:center;display:flex}:host footer .actions{flex:1;display:flex;align-items:center}:host .properties{container:section/inline-size;margin-block-start:var(--ymt-spacing-xl);display:flex;flex-direction:column}:host .properties .row{display:flex;flex-flow:column}:host .properties .row .label{font:var(--ymt-font-body-subtle);flex:0 1 33%;font-weight:700;padding-inline-end:var(--ymt-spacing-m);margin-block-end:var(--ymt-spacing-3xs);text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host .properties .row .value{flex:1;word-break:break-all;font:var(--ymt-font-body-subtle);margin-block-end:var(--ymt-spacing-xs)}@container section (min-width: 300px){:host .properties .row{flex-flow:row}}\n"] }]
|
|
396
396
|
}], propDecorators: { object: [{ type: i0.Input, args: [{ isSignal: true, alias: "object", required: false }] }], nodeConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "nodeConfig", required: false }] }], actions: [{ type: i0.Input, args: [{ isSignal: true, alias: "actions", required: false }] }] } });
|
|
@@ -409,15 +409,15 @@ class ObjectRelationshipService {
|
|
|
409
409
|
this.#confirm = inject(ConfirmService);
|
|
410
410
|
this.translate = inject(TranslateService);
|
|
411
411
|
this.#relationQA = {};
|
|
412
|
-
this.objectId = signal(undefined, ...(ngDevMode ? [{ debugName: "objectId" }] : []));
|
|
412
|
+
this.objectId = signal(undefined, ...(ngDevMode ? [{ debugName: "objectId" }] : /* istanbul ignore next */ []));
|
|
413
413
|
this.#relationsResource = rxResource({
|
|
414
414
|
params: this.objectId,
|
|
415
415
|
stream: ({ params }) => this.fetchRelations(params)
|
|
416
416
|
});
|
|
417
417
|
this.relations = this.#relationsResource.value;
|
|
418
|
-
this.busy = signal(false, ...(ngDevMode ? [{ debugName: "busy" }] : []));
|
|
418
|
+
this.busy = signal(false, ...(ngDevMode ? [{ debugName: "busy" }] : /* istanbul ignore next */ []));
|
|
419
419
|
// the DmsObject representing the originId
|
|
420
|
-
this.object = signal(null, ...(ngDevMode ? [{ debugName: "object" }] : []));
|
|
420
|
+
this.object = signal(null, ...(ngDevMode ? [{ debugName: "object" }] : /* istanbul ignore next */ []));
|
|
421
421
|
this.#eventService
|
|
422
422
|
.on(YuvEventType.RELATIONSHIP_CREATED, YuvEventType.RELATIONSHIP_DELETED)
|
|
423
423
|
.pipe(takeUntilDestroyed())
|
|
@@ -488,10 +488,10 @@ class ObjectRelationshipService {
|
|
|
488
488
|
}
|
|
489
489
|
}));
|
|
490
490
|
}
|
|
491
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
492
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
491
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ObjectRelationshipService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
492
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ObjectRelationshipService }); }
|
|
493
493
|
}
|
|
494
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
494
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ObjectRelationshipService, decorators: [{
|
|
495
495
|
type: Injectable
|
|
496
496
|
}], ctorParameters: () => [] });
|
|
497
497
|
|
|
@@ -540,18 +540,18 @@ class ObjectRelationshipGraphComponent {
|
|
|
540
540
|
return 'light';
|
|
541
541
|
}
|
|
542
542
|
}
|
|
543
|
-
}, ...(ngDevMode ? [{ debugName: "#mode" }] : []));
|
|
543
|
+
}, ...(ngDevMode ? [{ debugName: "#mode" }] : /* istanbul ignore next */ []));
|
|
544
544
|
this.#relations = this.#objectRelationshipService.relations;
|
|
545
545
|
this.#relationsEffect = effect(() => {
|
|
546
546
|
const rel = this.#relations();
|
|
547
547
|
if (!rel)
|
|
548
548
|
return;
|
|
549
549
|
this.#_updateGraph(rel.originId, rel.relations, rel.objects);
|
|
550
|
-
}, ...(ngDevMode ? [{ debugName: "#relationsEffect" }] : []));
|
|
550
|
+
}, ...(ngDevMode ? [{ debugName: "#relationsEffect" }] : /* istanbul ignore next */ []));
|
|
551
551
|
/**
|
|
552
552
|
* Configuration for the relations component.
|
|
553
553
|
*/
|
|
554
|
-
this.config = input.required(...(ngDevMode ? [{ debugName: "config" }] : []));
|
|
554
|
+
this.config = input.required(...(ngDevMode ? [{ debugName: "config" }] : /* istanbul ignore next */ []));
|
|
555
555
|
this.objectSelected = output();
|
|
556
556
|
this.relationSelected = output();
|
|
557
557
|
this.#network = null;
|
|
@@ -559,23 +559,23 @@ class ObjectRelationshipGraphComponent {
|
|
|
559
559
|
this.#relationQA = {};
|
|
560
560
|
this.#nodes = new DataSet([]);
|
|
561
561
|
this.#edges = new DataSet([]);
|
|
562
|
-
this.busy = signal(false, ...(ngDevMode ? [{ debugName: "busy" }] : []));
|
|
563
|
-
this.selectedRelation = signal(null, ...(ngDevMode ? [{ debugName: "selectedRelation" }] : []));
|
|
562
|
+
this.busy = signal(false, ...(ngDevMode ? [{ debugName: "busy" }] : /* istanbul ignore next */ []));
|
|
563
|
+
this.selectedRelation = signal(null, ...(ngDevMode ? [{ debugName: "selectedRelation" }] : /* istanbul ignore next */ []));
|
|
564
564
|
this.#selectedRelationEffect = effect(() => {
|
|
565
565
|
this.relationSelected.emit(this.selectedRelation());
|
|
566
|
-
}, ...(ngDevMode ? [{ debugName: "#selectedRelationEffect" }] : []));
|
|
567
|
-
this.selectedObject = signal(null, ...(ngDevMode ? [{ debugName: "selectedObject" }] : []));
|
|
566
|
+
}, ...(ngDevMode ? [{ debugName: "#selectedRelationEffect" }] : /* istanbul ignore next */ []));
|
|
567
|
+
this.selectedObject = signal(null, ...(ngDevMode ? [{ debugName: "selectedObject" }] : /* istanbul ignore next */ []));
|
|
568
568
|
this.#selectedObjectEffect = effect(() => {
|
|
569
569
|
const so = this.selectedObject();
|
|
570
570
|
if (so)
|
|
571
571
|
this.selectedRelation.set(null);
|
|
572
572
|
this.objectSelected.emit(so);
|
|
573
|
-
}, ...(ngDevMode ? [{ debugName: "#selectedObjectEffect" }] : []));
|
|
573
|
+
}, ...(ngDevMode ? [{ debugName: "#selectedObjectEffect" }] : /* istanbul ignore next */ []));
|
|
574
574
|
this.detailsNode = computed(() => {
|
|
575
575
|
const object = this.selectedObject();
|
|
576
576
|
const config = this.#getNodeConfig(object);
|
|
577
577
|
return object && config ? { object, config } : null;
|
|
578
|
-
}, ...(ngDevMode ? [{ debugName: "detailsNode" }] : []));
|
|
578
|
+
}, ...(ngDevMode ? [{ debugName: "detailsNode" }] : /* istanbul ignore next */ []));
|
|
579
579
|
}
|
|
580
580
|
#dialog;
|
|
581
581
|
#system;
|
|
@@ -876,10 +876,10 @@ class ObjectRelationshipGraphComponent {
|
|
|
876
876
|
this.#network.destroy();
|
|
877
877
|
}
|
|
878
878
|
}
|
|
879
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
880
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
879
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ObjectRelationshipGraphComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
880
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ObjectRelationshipGraphComponent, isStandalone: true, selector: "yuv-object-relationship-graph", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { objectSelected: "objectSelected", relationSelected: "relationSelected" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["graphContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "<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", styles: [":host{--_container-background-color: var(--container-background-color, var(--ymt-surface));--_node-background-color: var(--node-background-color, var(--ymt-surface-container));--_node-border-color: var(--node-border-color, var(--ymt-outline));--_node-font-color: var(--node-font-color, var(--ymt-text-color));--_node-background-color-highlight: var(--node-background-color-highlight, var(--ymt-primary-container));--_node-color-highlight: var(--node-color-highlight, var(--ymt-on-primary-container));--_edge-font-color: var(--edge-font-color, var(--ymt-text-color-subtle));--_edge-color: var(--edge-color, var(--ymt-outline));--_edge-color-highlight: var(--edge-color-highlight, var(--ymt-primary));--_edge-color-hover: var(--edge-color-hover, var(--ymt-primary))}:host .relations{position:relative;display:block;height:100%}:host .relations .toolbar{position:absolute;inset-block-start:var(--ymt-spacing-2xs);inset-inline-start:var(--ymt-spacing-s);z-index:10}:host .relations .graph-container{background-color:var(--_container-background-color);width:100%;height:100%}:host .relations .selected{position:absolute;inset-inline-end:var(--ymt-spacing-m);inset-block-start:var(--ymt-spacing-m);inset-block-end:var(--ymt-spacing-m);padding:var(--ymt-spacing-s) var(--ymt-spacing-m);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background-color:rgb(from var(--ymt-surface) r g b/.8);border:1px solid var(--ymt-outline-variant);border-radius:var(--ymt-corner-s);max-width:33%;z-index:10;min-width:200px}:host .relations .selected yuv-node-summary{height:100%}\n"], dependencies: [{ kind: "component", type: NodeSummaryComponent, selector: "yuv-node-summary", inputs: ["object", "nodeConfig", "actions"] }, { kind: "directive", type: BusyOverlayDirective, selector: "[yuvBusyOverlay]", inputs: ["yuvBusyOverlay", "yuvBusyOverlayConfig", "yuvBusyError"], outputs: ["yuvBusyErrorDismiss"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.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: "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: "pipe", type: TranslatePipe, name: "translate" }] }); }
|
|
881
881
|
}
|
|
882
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
882
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ObjectRelationshipGraphComponent, decorators: [{
|
|
883
883
|
type: Component,
|
|
884
884
|
args: [{ selector: 'yuv-object-relationship-graph', imports: [
|
|
885
885
|
NodeSummaryComponent,
|
|
@@ -897,10 +897,10 @@ class ObjectRelationshipListItemComponent {
|
|
|
897
897
|
this.#snack = inject(SnackBarService);
|
|
898
898
|
this.#objectRelationshipService = inject(ObjectRelationshipService);
|
|
899
899
|
this.translate = inject(TranslateService);
|
|
900
|
-
this.link = input.required(...(ngDevMode ? [{ debugName: "link" }] : []));
|
|
901
|
-
this.direction = input.required(...(ngDevMode ? [{ debugName: "direction" }] : []));
|
|
902
|
-
this.enableSourceLink = input(false, ...(ngDevMode ? [{ debugName: "enableSourceLink" }] : []));
|
|
903
|
-
this.enableTargetLink = input(false, ...(ngDevMode ? [{ debugName: "enableTargetLink" }] : []));
|
|
900
|
+
this.link = input.required(...(ngDevMode ? [{ debugName: "link" }] : /* istanbul ignore next */ []));
|
|
901
|
+
this.direction = input.required(...(ngDevMode ? [{ debugName: "direction" }] : /* istanbul ignore next */ []));
|
|
902
|
+
this.enableSourceLink = input(false, ...(ngDevMode ? [{ debugName: "enableSourceLink" }] : /* istanbul ignore next */ []));
|
|
903
|
+
this.enableTargetLink = input(false, ...(ngDevMode ? [{ debugName: "enableTargetLink" }] : /* istanbul ignore next */ []));
|
|
904
904
|
}
|
|
905
905
|
#router;
|
|
906
906
|
#snack;
|
|
@@ -916,10 +916,10 @@ class ObjectRelationshipListItemComponent {
|
|
|
916
916
|
if (link && !skip)
|
|
917
917
|
this.#router.navigateByUrl(link);
|
|
918
918
|
}
|
|
919
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
920
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
919
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ObjectRelationshipListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
920
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ObjectRelationshipListItemComponent, isStandalone: true, selector: "yuv-object-relationship-list-item", inputs: { link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: true, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: true, transformFunction: null }, enableSourceLink: { classPropertyName: "enableSourceLink", publicName: "enableSourceLink", isSignal: true, isRequired: false, transformFunction: null }, enableTargetLink: { classPropertyName: "enableTargetLink", publicName: "enableTargetLink", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@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", styles: [":host{margin-block-end:var(--ymt-spacing-xs);display:grid;grid-template-columns:auto 1fr auto 1fr auto auto;align-items:center;grid-template-areas:\"source line relation arrow target actions\";column-gap:var(--ymt-spacing-xs);background-color:var(--ymt-surface);border-radius:var(--ymt-corner-s);padding:var(--ymt-spacing-2xs);border:1px solid var(--ymt-outline-variant)}:host .relation{color:var(--ymt-text-color-subtle);text-align:center;line-height:1.1em}:host>button{grid-area:source;display:grid;grid-template-rows:auto auto;grid-template-columns:auto 1fr;align-items:center;grid-template-areas:\"icon label\" \"icon desc\";border-radius:var(--ymt-corner-xs);border:2px solid var(--ymt-outline-variant);padding:var(--ymt-spacing-xs);font:var(--ymt-font-title-smallest);background-color:transparent;text-align:start}:host>button mat-icon{grid-area:icon;scale:.6;margin-inline-end:var(--ymt-spacing-xs)}:host>button .title{grid-area:label}:host>button .description{grid-area:desc;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle)}:host>button.self{background-color:var(--ymt-surface-container);color:var(--ymt-on-surface)}:host>button:not(.self):hover{background-color:var(--ymt-hover-background)}:host>button:not([aria-readonly=true]){cursor:pointer}:host>button.target{grid-area:target}:host>button:not([aria-readonly]){cursor:pointer}:host .line{grid-area:line;height:2px;position:relative;background-color:var(--ymt-outline);opacity:.5;min-width:1em}:host .line.arr{grid-area:arrow}:host .line.arr:before{content:\"\";position:absolute;transform:rotate(45deg);transform-origin:top right;width:7px;inset-inline-end:0;translate:2px 1px;height:7px;border:3.5px solid transparent;border-block-start-color:var(--ymt-outline);border-inline-end-color:var(--ymt-outline)}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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"] }] }); }
|
|
921
921
|
}
|
|
922
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
922
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ObjectRelationshipListItemComponent, decorators: [{
|
|
923
923
|
type: Component,
|
|
924
924
|
args: [{ selector: 'yuv-object-relationship-list-item', imports: [MatIconModule, YmtIconButtonDirective], template: "@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", styles: [":host{margin-block-end:var(--ymt-spacing-xs);display:grid;grid-template-columns:auto 1fr auto 1fr auto auto;align-items:center;grid-template-areas:\"source line relation arrow target actions\";column-gap:var(--ymt-spacing-xs);background-color:var(--ymt-surface);border-radius:var(--ymt-corner-s);padding:var(--ymt-spacing-2xs);border:1px solid var(--ymt-outline-variant)}:host .relation{color:var(--ymt-text-color-subtle);text-align:center;line-height:1.1em}:host>button{grid-area:source;display:grid;grid-template-rows:auto auto;grid-template-columns:auto 1fr;align-items:center;grid-template-areas:\"icon label\" \"icon desc\";border-radius:var(--ymt-corner-xs);border:2px solid var(--ymt-outline-variant);padding:var(--ymt-spacing-xs);font:var(--ymt-font-title-smallest);background-color:transparent;text-align:start}:host>button mat-icon{grid-area:icon;scale:.6;margin-inline-end:var(--ymt-spacing-xs)}:host>button .title{grid-area:label}:host>button .description{grid-area:desc;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle)}:host>button.self{background-color:var(--ymt-surface-container);color:var(--ymt-on-surface)}:host>button:not(.self):hover{background-color:var(--ymt-hover-background)}:host>button:not([aria-readonly=true]){cursor:pointer}:host>button.target{grid-area:target}:host>button:not([aria-readonly]){cursor:pointer}:host .line{grid-area:line;height:2px;position:relative;background-color:var(--ymt-outline);opacity:.5;min-width:1em}:host .line.arr{grid-area:arrow}:host .line.arr:before{content:\"\";position:absolute;transform:rotate(45deg);transform-origin:top right;width:7px;inset-inline-end:0;translate:2px 1px;height:7px;border:3.5px solid transparent;border-block-start-color:var(--ymt-outline);border-inline-end-color:var(--ymt-outline)}\n"] }]
|
|
925
925
|
}], propDecorators: { link: [{ type: i0.Input, args: [{ isSignal: true, alias: "link", required: true }] }], direction: [{ type: i0.Input, args: [{ isSignal: true, alias: "direction", required: true }] }], enableSourceLink: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableSourceLink", required: false }] }], enableTargetLink: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableTargetLink", required: false }] }] } });
|
|
@@ -932,16 +932,16 @@ class ObjectRelationshipListComponent {
|
|
|
932
932
|
/**
|
|
933
933
|
* Configuration for the relations component.
|
|
934
934
|
*/
|
|
935
|
-
this.config = input.required(...(ngDevMode ? [{ debugName: "config" }] : []));
|
|
936
|
-
this.incomingLinks = signal([], ...(ngDevMode ? [{ debugName: "incomingLinks" }] : []));
|
|
937
|
-
this.outgoingLinks = signal([], ...(ngDevMode ? [{ debugName: "outgoingLinks" }] : []));
|
|
935
|
+
this.config = input.required(...(ngDevMode ? [{ debugName: "config" }] : /* istanbul ignore next */ []));
|
|
936
|
+
this.incomingLinks = signal([], ...(ngDevMode ? [{ debugName: "incomingLinks" }] : /* istanbul ignore next */ []));
|
|
937
|
+
this.outgoingLinks = signal([], ...(ngDevMode ? [{ debugName: "outgoingLinks" }] : /* istanbul ignore next */ []));
|
|
938
938
|
this.#relations = this.#objectRelationshipService.relations;
|
|
939
939
|
this.#relationsEffect = effect(() => {
|
|
940
940
|
const rel = this.#relations();
|
|
941
941
|
if (!rel)
|
|
942
942
|
return;
|
|
943
943
|
this.#createLists(rel.originId, rel.relations, rel.objects);
|
|
944
|
-
}, ...(ngDevMode ? [{ debugName: "#relationsEffect" }] : []));
|
|
944
|
+
}, ...(ngDevMode ? [{ debugName: "#relationsEffect" }] : /* istanbul ignore next */ []));
|
|
945
945
|
this.#objectQA = {};
|
|
946
946
|
}
|
|
947
947
|
#search;
|
|
@@ -1005,10 +1005,10 @@ class ObjectRelationshipListComponent {
|
|
|
1005
1005
|
return undefined;
|
|
1006
1006
|
return cfg.nodes.find((n) => object.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS].includes(n.objectType));
|
|
1007
1007
|
}
|
|
1008
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1009
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1008
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ObjectRelationshipListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1009
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ObjectRelationshipListComponent, isStandalone: true, selector: "yuv-object-relationship-list", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@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", styles: [":host{display:block;padding:var(--ymt-spacing-m)}\n"], dependencies: [{ kind: "component", type: ObjectRelationshipListItemComponent, selector: "yuv-object-relationship-list-item", inputs: ["link", "direction", "enableSourceLink", "enableTargetLink"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
|
|
1010
1010
|
}
|
|
1011
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1011
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ObjectRelationshipListComponent, decorators: [{
|
|
1012
1012
|
type: Component,
|
|
1013
1013
|
args: [{ selector: 'yuv-object-relationship-list', imports: [ObjectRelationshipListItemComponent, TranslatePipe], template: "@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", styles: [":host{display:block;padding:var(--ymt-spacing-m)}\n"] }]
|
|
1014
1014
|
}], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: true }] }] } });
|
|
@@ -1021,29 +1021,29 @@ class ObjectRelationshipComponent {
|
|
|
1021
1021
|
/**
|
|
1022
1022
|
* Display mode for the relationship view.
|
|
1023
1023
|
*/
|
|
1024
|
-
this.mode = model('graph', ...(ngDevMode ? [{ debugName: "mode" }] : []));
|
|
1024
|
+
this.mode = model('graph', ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
|
|
1025
1025
|
this.empty = computed(() => {
|
|
1026
1026
|
const rel = this.#relations();
|
|
1027
1027
|
return rel && rel.relations.totalNumItems === 0;
|
|
1028
|
-
}, ...(ngDevMode ? [{ debugName: "empty" }] : []));
|
|
1028
|
+
}, ...(ngDevMode ? [{ debugName: "empty" }] : /* istanbul ignore next */ []));
|
|
1029
1029
|
/**
|
|
1030
1030
|
* ID of the object to display relations for.
|
|
1031
1031
|
*/
|
|
1032
|
-
this.objectId = input.required(...(ngDevMode ? [{ debugName: "objectId" }] : []));
|
|
1032
|
+
this.objectId = input.required(...(ngDevMode ? [{ debugName: "objectId" }] : /* istanbul ignore next */ []));
|
|
1033
1033
|
this.#objectIdEffect = effect(() => {
|
|
1034
1034
|
const oid = this.objectId();
|
|
1035
1035
|
this.#objectRelationshipService.objectId.set(oid);
|
|
1036
|
-
}, ...(ngDevMode ? [{ debugName: "#objectIdEffect" }] : []));
|
|
1036
|
+
}, ...(ngDevMode ? [{ debugName: "#objectIdEffect" }] : /* istanbul ignore next */ []));
|
|
1037
1037
|
/**
|
|
1038
1038
|
* Configuration for the relations component.
|
|
1039
1039
|
*/
|
|
1040
|
-
this.config = input.required(...(ngDevMode ? [{ debugName: "config" }] : []));
|
|
1040
|
+
this.config = input.required(...(ngDevMode ? [{ debugName: "config" }] : /* istanbul ignore next */ []));
|
|
1041
1041
|
// the DmsObject representing the originId
|
|
1042
|
-
this.originObject = signal(null, ...(ngDevMode ? [{ debugName: "originObject" }] : []));
|
|
1042
|
+
this.originObject = signal(null, ...(ngDevMode ? [{ debugName: "originObject" }] : /* istanbul ignore next */ []));
|
|
1043
1043
|
this.supportedRelationships = computed(() => {
|
|
1044
1044
|
const obj = this.originObject();
|
|
1045
1045
|
return obj ? this.#system.getSupportedRelationships(obj) : [];
|
|
1046
|
-
}, ...(ngDevMode ? [{ debugName: "supportedRelationships" }] : []));
|
|
1046
|
+
}, ...(ngDevMode ? [{ debugName: "supportedRelationships" }] : /* istanbul ignore next */ []));
|
|
1047
1047
|
this.busy = this.#objectRelationshipService.busy;
|
|
1048
1048
|
this.#relations = this.#objectRelationshipService.relations;
|
|
1049
1049
|
this.#relationsEffect = effect(() => {
|
|
@@ -1056,8 +1056,8 @@ class ObjectRelationshipComponent {
|
|
|
1056
1056
|
const originItem = rel.objects?.items.find((item) => item.fields.get(BaseObjectTypeField.OBJECT_ID) === originId);
|
|
1057
1057
|
// TODO: use linked signal instead
|
|
1058
1058
|
this.originObject.set(originItem ? new DmsObject(originItem) : null);
|
|
1059
|
-
}, ...(ngDevMode ? [{ debugName: "#relationsEffect" }] : []));
|
|
1060
|
-
this.relationActions = input(null, ...(ngDevMode ? [{ debugName: "relationActions" }] : []));
|
|
1059
|
+
}, ...(ngDevMode ? [{ debugName: "#relationsEffect" }] : /* istanbul ignore next */ []));
|
|
1060
|
+
this.relationActions = input(null, ...(ngDevMode ? [{ debugName: "relationActions" }] : /* istanbul ignore next */ []));
|
|
1061
1061
|
}
|
|
1062
1062
|
#objectRelationshipService;
|
|
1063
1063
|
#system;
|
|
@@ -1078,10 +1078,10 @@ class ObjectRelationshipComponent {
|
|
|
1078
1078
|
}
|
|
1079
1079
|
});
|
|
1080
1080
|
}
|
|
1081
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1082
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1081
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ObjectRelationshipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1082
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ObjectRelationshipComponent, isStandalone: true, selector: "yuv-object-relationship", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, 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 } }, outputs: { mode: "modeChange" }, providers: [ObjectRelationshipService], ngImport: i0, template: "<ymt-pane [plain]=\"true\" [topBarActions]=\"topBarActions\">\n <ymt-pane-body [yuvBusyOverlay]=\"busy()\">\n @if (empty()) {\n <div class=\"no-relations\" inert>\n <mat-icon>link_off</mat-icon>\n <p>{{ 'yuv.object-relationship.no-relations' | translate }}</p>\n </div>\n } @else {\n @switch (mode()) {\n @case ('graph') {\n <yuv-object-relationship-graph [config]=\"config()\"></yuv-object-relationship-graph>\n }\n @case ('list') {\n <yuv-object-relationship-list [config]=\"config()\"> </yuv-object-relationship-list>\n }\n }\n }\n </ymt-pane-body>\n</ymt-pane>\n\n<ng-template #topBarActions>\n @if (supportedRelationships().length > 0) {\n <button ymt-icon-button icon-button-size=\"small\" [matTooltip]=\"'yuv.object-relationship.add.tooltip' | translate\" (click)=\"addRelationship()\">\n <mat-icon>add</mat-icon>\n </button>\n }\n <button\n ymt-icon-button\n icon-button-size=\"small\"\n [matTooltip]=\"mode() === 'list' ? ('yuv.object-relationship.mode.graph.tooltip' | translate) : ('yuv.object-relationship.mode.list.tooltip' | translate)\"\n (click)=\"toggleMode()\"\n >\n <mat-icon>{{ mode() === 'list' ? 'graph_3' : 'list' }}</mat-icon>\n </button>\n</ng-template>\n", 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{position:absolute;inset:0;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: MatIconModule }, { kind: "component", type: i1$2.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: MatButtonToggleModule }, { kind: "ngmodule", type: YmtPanesModule }, { kind: "component", type: i3.YmtPaneComponent, selector: "ymt-pane", inputs: ["topBarActions", "busy", "noAnimation", "plain"] }, { kind: "component", type: i3.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"] }, { kind: "directive", type: BusyOverlayDirective, selector: "[yuvBusyOverlay]", inputs: ["yuvBusyOverlay", "yuvBusyOverlayConfig", "yuvBusyError"], outputs: ["yuvBusyErrorDismiss"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
|
|
1083
1083
|
}
|
|
1084
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1084
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ObjectRelationshipComponent, decorators: [{
|
|
1085
1085
|
type: Component,
|
|
1086
1086
|
args: [{ selector: 'yuv-object-relationship', imports: [
|
|
1087
1087
|
MatIconModule,
|
|
@@ -1099,11 +1099,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
1099
1099
|
|
|
1100
1100
|
const cmp = [ObjectRelationshipComponent];
|
|
1101
1101
|
class YuvObjectRelationshipModule {
|
|
1102
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1103
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
1104
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
1102
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: YuvObjectRelationshipModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
1103
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: YuvObjectRelationshipModule, imports: [ObjectRelationshipComponent], exports: [ObjectRelationshipComponent] }); }
|
|
1104
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: YuvObjectRelationshipModule, imports: [cmp] }); }
|
|
1105
1105
|
}
|
|
1106
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1106
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: YuvObjectRelationshipModule, decorators: [{
|
|
1107
1107
|
type: NgModule,
|
|
1108
1108
|
args: [{
|
|
1109
1109
|
imports: [...cmp],
|