@yuuvis/client-framework 3.17.0 → 3.17.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.
|
@@ -556,13 +556,13 @@ class MetadataFormFieldComponent {
|
|
|
556
556
|
#ngControl;
|
|
557
557
|
#objectContext;
|
|
558
558
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: MetadataFormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
559
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: MetadataFormFieldComponent, isStandalone: true, selector: "yuv-metadata-form-field", inputs: { formChangedSubject: { classPropertyName: "formChangedSubject", publicName: "formChangedSubject", isSignal: true, isRequired: false, transformFunction: null }, formField: { classPropertyName: "formField", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, situation: { classPropertyName: "situation", publicName: "situation", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "yuv-metadata-form-field" }, hostDirectives: [{ directive: i1.NoopValueAccessorDirective }], ngImport: i0, template: "@let field = formField();\n@let et = elementTemplate();\n\n@if (field) {\n <div\n [class]=\"'form-field t-' + field._internalType\"\n #formField\n [attr.data-name]=\"field.name\"\n [ngClass]=\"{ disabled: !!readonly, 'form-field--raw': variant() === 'raw' }\"\n >\n @if (et) {\n <ng-container *ngTemplateOutlet=\"et; context: { $implicit: context() }\" />\n } @else {\n <em>\n <strong>{{ field._internalType }}</strong>\n </em>\n }\n </div>\n}\n", styles: [".yuv-metadata-form-field{--label-background-color: transparent;--label-color: inherit}.yuv-metadata-form-field .form-field{margin-block-end:1px;border-radius:.25em;display:flex;align-items:center}.yuv-metadata-form-field .form-field .yuv-label-invalid,.yuv-metadata-form-field .form-field .yuv-formfield-invalid{--label-background-color: var(--ymt-danger-container);--label-color: var(--ymt-on-danger-container)}.yuv-metadata-form-field .form-field :not(.yuv-label-invalid,.yuv-formfield-invalid).yuv-label-required,.yuv-metadata-form-field .form-field :not(.yuv-label-invalid,.yuv-formfield-invalid).yuv-formfield-required{--label-background-color: var(--ymt-primary-container);--label-color: var(--ymt-on-primary-container)}.yuv-metadata-form-field .form-field :not(.yuv-label-invalid,.yuv-formfield-invalid).yuv-label-dirty,.yuv-metadata-form-field .form-field :not(.yuv-label-invalid,.yuv-formfield-invalid).yuv-formfield-dirty{--label-background-color: var(--ymt-success-container);--label-color: var(--ymt-on-success-container)}.yuv-metadata-form-field .form-field .label,.yuv-metadata-form-field .form-field label{--transition-duration: 2s;position:relative;background-color:var(--label-background-color)!important;color:var(--label-color)!important;border-radius:2px;box-shadow:0 0 0 3px var(--label-background-color)}.yuv-metadata-form-field .form-field>*{flex:1}.yuv-metadata-form-field .form-field .yuv-label-marker-dirty:after{content:\"\";display:inline-block;background-color:var(--ymt-warning-container);border:1px solid var(--ymt-on-warning-container);border-radius:50%;width:.5em;height:.5em;margin-inline-start:.5em;margin-inline-end:.25em}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatFormFieldModule }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
559
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: MetadataFormFieldComponent, isStandalone: true, selector: "yuv-metadata-form-field", inputs: { formChangedSubject: { classPropertyName: "formChangedSubject", publicName: "formChangedSubject", isSignal: true, isRequired: false, transformFunction: null }, formField: { classPropertyName: "formField", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, situation: { classPropertyName: "situation", publicName: "situation", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "yuv-metadata-form-field" }, hostDirectives: [{ directive: i1.NoopValueAccessorDirective }], ngImport: i0, template: "@let field = formField();\n@let et = elementTemplate();\n\n@if (field) {\n <div\n [class]=\"'form-field t-' + field._internalType\"\n #formField\n [attr.data-name]=\"field.name\"\n [ngClass]=\"{ disabled: !!readonly, 'form-field--raw': variant() === 'raw' }\"\n >\n @if (et) {\n <ng-container *ngTemplateOutlet=\"et; context: { $implicit: context() }\" />\n } @else {\n <em>\n <strong>{{ field._internalType }}</strong>\n </em>\n }\n </div>\n}\n", styles: [".yuv-metadata-form-field{--label-background-color: transparent;--label-color: inherit}.yuv-metadata-form-field .form-field{margin-block-end:1px;border-radius:.25em;display:flex;align-items:center}.yuv-metadata-form-field .form-field .yuv-label-invalid,.yuv-metadata-form-field .form-field .yuv-formfield-invalid{--label-background-color: var(--ymt-danger-container);--label-color: var(--ymt-on-danger-container)}.yuv-metadata-form-field .form-field :not(.yuv-label-invalid,.yuv-formfield-invalid).yuv-label-required,.yuv-metadata-form-field .form-field :not(.yuv-label-invalid,.yuv-formfield-invalid).yuv-formfield-required{--label-background-color: var(--ymt-primary-container);--label-color: var(--ymt-on-primary-container)}.yuv-metadata-form-field .form-field :not(.yuv-label-invalid,.yuv-formfield-invalid).yuv-label-dirty,.yuv-metadata-form-field .form-field :not(.yuv-label-invalid,.yuv-formfield-invalid).yuv-formfield-dirty{--label-background-color: var(--ymt-success-container);--label-color: var(--ymt-on-success-container)}.yuv-metadata-form-field .form-field .label,.yuv-metadata-form-field .form-field label{--transition-duration: 2s;position:relative;background-color:var(--label-background-color)!important;color:var(--label-color)!important;border-radius:2px;box-shadow:0 0 0 3px var(--label-background-color)}.yuv-metadata-form-field .form-field>*{flex:1}.yuv-metadata-form-field .form-field>mat-checkbox,.yuv-metadata-form-field .form-field>mat-slide-toggle{flex:0 0 auto}.yuv-metadata-form-field .form-field>label{flex:0 1 auto;margin-inline-start:var(--ymt-spacing-xs, .25em)}.yuv-metadata-form-field .form-field .yuv-label-marker-dirty:after{content:\"\";display:inline-block;background-color:var(--ymt-warning-container);border:1px solid var(--ymt-on-warning-container);border-radius:50%;width:.5em;height:.5em;margin-inline-start:.5em;margin-inline-end:.25em}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatFormFieldModule }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
560
560
|
}
|
|
561
561
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: MetadataFormFieldComponent, decorators: [{
|
|
562
562
|
type: Component,
|
|
563
563
|
args: [{ selector: 'yuv-metadata-form-field', standalone: true, imports: [NgClass, NgTemplateOutlet, MatFormFieldModule], hostDirectives: [NoopValueAccessorDirective], encapsulation: ViewEncapsulation.None, host: {
|
|
564
564
|
class: 'yuv-metadata-form-field'
|
|
565
|
-
}, template: "@let field = formField();\n@let et = elementTemplate();\n\n@if (field) {\n <div\n [class]=\"'form-field t-' + field._internalType\"\n #formField\n [attr.data-name]=\"field.name\"\n [ngClass]=\"{ disabled: !!readonly, 'form-field--raw': variant() === 'raw' }\"\n >\n @if (et) {\n <ng-container *ngTemplateOutlet=\"et; context: { $implicit: context() }\" />\n } @else {\n <em>\n <strong>{{ field._internalType }}</strong>\n </em>\n }\n </div>\n}\n", styles: [".yuv-metadata-form-field{--label-background-color: transparent;--label-color: inherit}.yuv-metadata-form-field .form-field{margin-block-end:1px;border-radius:.25em;display:flex;align-items:center}.yuv-metadata-form-field .form-field .yuv-label-invalid,.yuv-metadata-form-field .form-field .yuv-formfield-invalid{--label-background-color: var(--ymt-danger-container);--label-color: var(--ymt-on-danger-container)}.yuv-metadata-form-field .form-field :not(.yuv-label-invalid,.yuv-formfield-invalid).yuv-label-required,.yuv-metadata-form-field .form-field :not(.yuv-label-invalid,.yuv-formfield-invalid).yuv-formfield-required{--label-background-color: var(--ymt-primary-container);--label-color: var(--ymt-on-primary-container)}.yuv-metadata-form-field .form-field :not(.yuv-label-invalid,.yuv-formfield-invalid).yuv-label-dirty,.yuv-metadata-form-field .form-field :not(.yuv-label-invalid,.yuv-formfield-invalid).yuv-formfield-dirty{--label-background-color: var(--ymt-success-container);--label-color: var(--ymt-on-success-container)}.yuv-metadata-form-field .form-field .label,.yuv-metadata-form-field .form-field label{--transition-duration: 2s;position:relative;background-color:var(--label-background-color)!important;color:var(--label-color)!important;border-radius:2px;box-shadow:0 0 0 3px var(--label-background-color)}.yuv-metadata-form-field .form-field>*{flex:1}.yuv-metadata-form-field .form-field .yuv-label-marker-dirty:after{content:\"\";display:inline-block;background-color:var(--ymt-warning-container);border:1px solid var(--ymt-on-warning-container);border-radius:50%;width:.5em;height:.5em;margin-inline-start:.5em;margin-inline-end:.25em}\n"] }]
|
|
565
|
+
}, template: "@let field = formField();\n@let et = elementTemplate();\n\n@if (field) {\n <div\n [class]=\"'form-field t-' + field._internalType\"\n #formField\n [attr.data-name]=\"field.name\"\n [ngClass]=\"{ disabled: !!readonly, 'form-field--raw': variant() === 'raw' }\"\n >\n @if (et) {\n <ng-container *ngTemplateOutlet=\"et; context: { $implicit: context() }\" />\n } @else {\n <em>\n <strong>{{ field._internalType }}</strong>\n </em>\n }\n </div>\n}\n", styles: [".yuv-metadata-form-field{--label-background-color: transparent;--label-color: inherit}.yuv-metadata-form-field .form-field{margin-block-end:1px;border-radius:.25em;display:flex;align-items:center}.yuv-metadata-form-field .form-field .yuv-label-invalid,.yuv-metadata-form-field .form-field .yuv-formfield-invalid{--label-background-color: var(--ymt-danger-container);--label-color: var(--ymt-on-danger-container)}.yuv-metadata-form-field .form-field :not(.yuv-label-invalid,.yuv-formfield-invalid).yuv-label-required,.yuv-metadata-form-field .form-field :not(.yuv-label-invalid,.yuv-formfield-invalid).yuv-formfield-required{--label-background-color: var(--ymt-primary-container);--label-color: var(--ymt-on-primary-container)}.yuv-metadata-form-field .form-field :not(.yuv-label-invalid,.yuv-formfield-invalid).yuv-label-dirty,.yuv-metadata-form-field .form-field :not(.yuv-label-invalid,.yuv-formfield-invalid).yuv-formfield-dirty{--label-background-color: var(--ymt-success-container);--label-color: var(--ymt-on-success-container)}.yuv-metadata-form-field .form-field .label,.yuv-metadata-form-field .form-field label{--transition-duration: 2s;position:relative;background-color:var(--label-background-color)!important;color:var(--label-color)!important;border-radius:2px;box-shadow:0 0 0 3px var(--label-background-color)}.yuv-metadata-form-field .form-field>*{flex:1}.yuv-metadata-form-field .form-field>mat-checkbox,.yuv-metadata-form-field .form-field>mat-slide-toggle{flex:0 0 auto}.yuv-metadata-form-field .form-field>label{flex:0 1 auto;margin-inline-start:var(--ymt-spacing-xs, .25em)}.yuv-metadata-form-field .form-field .yuv-label-marker-dirty:after{content:\"\";display:inline-block;background-color:var(--ymt-warning-container);border:1px solid var(--ymt-on-warning-container);border-radius:50%;width:.5em;height:.5em;margin-inline-start:.5em;margin-inline-end:.25em}\n"] }]
|
|
566
566
|
}], propDecorators: { formChangedSubject: [{ type: i0.Input, args: [{ isSignal: true, alias: "formChangedSubject", required: false }] }], formField: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], situation: [{ type: i0.Input, args: [{ isSignal: true, alias: "situation", required: false }] }] } });
|
|
567
567
|
|
|
568
568
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-client-framework-metadata-form.mjs","sources":["../../../../../libs/yuuvis/client-framework/metadata-form/src/lib/metadata-form-element-registry.service.ts","../../../../../libs/yuuvis/client-framework/metadata-form/src/lib/object-context.token.ts","../../../../../libs/yuuvis/client-framework/metadata-form/src/lib/object-metadata-element-label.directive.ts","../../../../../libs/yuuvis/client-framework/metadata-form/src/lib/object-metadata-element-error.directive.ts","../../../../../libs/yuuvis/client-framework/metadata-form/src/lib/object-metadata-element-template.directive.ts","../../../../../libs/yuuvis/client-framework/metadata-form/src/lib/object-metadata-element-raw.directive.ts","../../../../../libs/yuuvis/client-framework/metadata-form/src/lib/metadata-form-field/metadata-form-field.component.ts","../../../../../libs/yuuvis/client-framework/metadata-form/src/lib/metadata-form-field/metadata-form-field.component.html","../../../../../libs/yuuvis/client-framework/metadata-form/src/yuuvis-client-framework-metadata-form.ts"],"sourcesContent":["import { Injectable, TemplateRef } from '@angular/core';\nimport { Situation } from '@yuuvis/client-core';\n\n/**\n * Object forms are used to render and edit metadata of DMS objects. Each property\n * of an object can be rendered in a diffenrent way, depending on the type of the property.\n * This service allows to register and retrieve templates for rendering these form elements.\n *\n * You can register templates for different situations like EDIT, SEARCH, and CREATE.\n * The templates will then be used to render the form elements in the object form component.\n *\n * So based on the property type you can register custom templates for rendering certain\n * form elements. This is useful if you want to render a property in a different way.\n *\n * Example:\n * Having a number property representing a rating, you might want to render it as\n * a list of stars instead of a simple input field.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class MetadataFormElementRegistry {\n private _defaults: { [propertyType: string]: TemplateRef<any> } = {};\n\n private _edit: { [propertyType: string]: TemplateRef<any> } = {};\n private _search: { [propertyType: string]: TemplateRef<any> } = {};\n private _create: { [propertyType: string]: TemplateRef<any> } = {};\n\n // Parallel maps for raw (unwrapped) form element templates. Same keying and\n // situation cascade as the wrapped maps above.\n private _rawDefaults: { [propertyType: string]: TemplateRef<any> } = {};\n private _rawEdit: { [propertyType: string]: TemplateRef<any> } = {};\n private _rawSearch: { [propertyType: string]: TemplateRef<any> } = {};\n private _rawCreate: { [propertyType: string]: TemplateRef<any> } = {};\n\n // registering a template by name will add this prefix to the given name\n NAME_PROPERTY_PREFIX = '@name:';\n\n /**\n * Get a template to render a certain form element\n * @param propertyType The internal type to get the template for\n * @param situation Form situation\n * @returns TemplateRef or undefined\n */\n getElementTemplate(propertyType: string, situation: string = Situation.EDIT): TemplateRef<any> | undefined {\n let cmps = { ...this._defaults, ...this._edit };\n\n if (situation === Situation.SEARCH) cmps = { ...this._defaults, ...this._edit, ...this._search };\n else if (situation === Situation.CREATE) cmps = { ...this._defaults, ...this._edit, ...this._create };\n return cmps[propertyType];\n }\n\n /**\n * Register an object form element for a certain internal type. You might add a new component\n * or overwrite an existung one.\n * @param propertyType The internal type to provide the component for\n * @param component The component\n * @param situation Form situation to provide thew form element for (defaults to EDIT)\n */\n addElementTemplate(propertyType: string, templateRef: TemplateRef<any>, situation: Situation = Situation.EDIT): void {\n if (propertyType && templateRef) {\n switch (situation) {\n case Situation.SEARCH: {\n this._search[propertyType] = templateRef;\n break;\n }\n case Situation.CREATE: {\n this._create[propertyType] = templateRef;\n break;\n }\n default: {\n this._edit[propertyType] = templateRef;\n }\n }\n }\n }\n\n /**\n * Remove a registered form element.\n * @param propertyType The internal type to remove the component for\n * @param situation Form situation to provide thew form element for (defaults to EDIT)\n */\n removeElementTemplate(propertyType: string, situation: Situation = Situation.EDIT) {\n switch (situation) {\n case Situation.SEARCH: {\n delete this._search[propertyType];\n break;\n }\n case Situation.CREATE: {\n delete this._create[propertyType];\n break;\n }\n default: {\n delete this._edit[propertyType];\n }\n }\n }\n\n /**\n * Register default form element component. Usually this will be done by the object\n * form component itself.\n * @param propertyType The internal type to provide the component for\n * @param component The default component\n */\n _addDefaultElementTemplate(propertyType: string, templateRef: TemplateRef<any>): void {\n if (propertyType && templateRef) {\n this._defaults[propertyType] = templateRef;\n }\n }\n\n /**\n * Remove a registered default form element.\n * @param propertyType The internal type to remove the component for\n */\n _removeDefaultElementTemplate(propertyType: string) {\n delete this._defaults[propertyType];\n }\n\n /**\n * Get a raw (unwrapped) form element template — only the inner widget,\n * without the surrounding `mat-form-field` / label / hint / error shell.\n * Use this when composing the widget into a custom layout (e.g. smart-search).\n * @param propertyType The internal type to get the template for\n * @param situation Form situation\n * @returns TemplateRef or undefined\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getRawElementTemplate(propertyType: string, situation: string = Situation.EDIT): TemplateRef<any> | undefined {\n let map = { ...this._rawDefaults, ...this._rawEdit };\n\n if (situation === Situation.SEARCH) map = { ...this._rawDefaults, ...this._rawEdit, ...this._rawSearch };\n else if (situation === Situation.CREATE) map = { ...this._rawDefaults, ...this._rawEdit, ...this._rawCreate };\n return map[propertyType];\n }\n\n /**\n * Register a raw form element template for a certain internal type.\n * @param propertyType The internal type to provide the template for\n * @param templateRef The template\n * @param situation Form situation to provide the form element for (defaults to EDIT)\n */\n addRawElementTemplate(\n propertyType: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n templateRef: TemplateRef<any>,\n situation: Situation = Situation.EDIT\n ): void {\n if (propertyType && templateRef) {\n switch (situation) {\n case Situation.SEARCH: {\n this._rawSearch[propertyType] = templateRef;\n break;\n }\n case Situation.CREATE: {\n this._rawCreate[propertyType] = templateRef;\n break;\n }\n default: {\n this._rawEdit[propertyType] = templateRef;\n }\n }\n }\n }\n\n /**\n * Remove a registered raw form element template.\n * @param propertyType The internal type to remove the template for\n * @param situation Form situation\n */\n removeRawElementTemplate(propertyType: string, situation: Situation = Situation.EDIT): void {\n switch (situation) {\n case Situation.SEARCH: {\n delete this._rawSearch[propertyType];\n break;\n }\n case Situation.CREATE: {\n delete this._rawCreate[propertyType];\n break;\n }\n default: {\n delete this._rawEdit[propertyType];\n }\n }\n }\n\n /**\n * Register a default raw form element template (used across all situations).\n * @param propertyType The internal type to provide the template for\n * @param templateRef The default template\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _addDefaultRawElementTemplate(propertyType: string, templateRef: TemplateRef<any>): void {\n if (propertyType && templateRef) {\n this._rawDefaults[propertyType] = templateRef;\n }\n }\n\n /**\n * Remove a registered default raw form element template.\n * @param propertyType The internal type to remove the template for\n */\n _removeDefaultRawElementTemplate(propertyType: string): void {\n delete this._rawDefaults[propertyType];\n }\n}\n","import { InjectionToken, Signal } from '@angular/core';\n\n/**\n * Read-only view of the object a metadata form is rendered for. Exposed to\n * element templates (`yuvMetadataElementTemplate`) via the field context.\n *\n * Intentionally minimal and framework-agnostic: it does NOT reference\n * `DmsObject` so the token stays usable outside object-details (smart-search,\n * BPM forms, …). Producers map their object onto this shape.\n */\nexport interface ObjectContext {\n id?: string;\n objectTypeId?: string;\n /** Immutable initial index data of the object (not live form edits). */\n data: Record<string, unknown>;\n}\n\n/**\n * Provide at the component that owns the object (e.g. `ObjectMetadataComponent`)\n * so it is scoped to that instance's view subtree. Consumers inject it\n * `{ optional: true }` — it is absent when a form runs standalone.\n */\nexport const OBJECT_CONTEXT = new InjectionToken<Signal<ObjectContext | undefined>>('yuv.metadata.object-context');\n","import { AfterViewInit, DestroyRef, Directive, effect, ElementRef, inject, input, OnInit, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AbstractControl, FormControlStatus, Validators } from '@angular/forms';\nimport { MetadataFormFieldContext } from './metadata-form-field/metadata-form-field.interface';\nimport { ObjectFormControl, Situation } from '@yuuvis/client-core';\n\n/**\n * Directive to apply styles to an object metadata element label based on its control status.\n * Depending on the state of the control (dirty, error, required), it will add or remove specific classes\n * to the label element. These classes could then be used to style the label accordingly.\n *\n * Could be placed on any HTML element, but is primarily intended for use on `<mat-label>` or `<label>` elements.\n * If you would like to use it on any other element, make sure to add the class 'label' to it.\n *\n * @example\n * <mat-label [yuvObjectMetadataElementLabel]=\"ctx\">My Label</mat-label>\n * <label [yuvObjectMetadataElementLabel]=\"ctx\">My Label</label>\n * <div class=\"label\" [yuvObjectMetadataElementLabel]=\"ctx\">My Label</div>\n */\n@Directive({\n selector: '[yuvObjectMetadataElementLabel]',\n standalone: true\n})\nexport class ObjectMetadataElementLabelDirective implements OnInit, AfterViewInit {\n #elRef = inject(ElementRef);\n #dRef = inject(DestroyRef);\n\n state = signal({\n dirty: false,\n required: false,\n invalid: false\n });\n #stateEffect = effect(() => {\n this.#applyState();\n });\n\n yuvObjectMetadataElementLabel = input<MetadataFormFieldContext>();\n\n #applyState() {\n const s = this.state();\n this.#toggleClass('dirty', s.dirty);\n this.#toggleClass('required', s.required);\n this.#toggleClass('invalid', s.invalid);\n }\n\n #markAsInvalid(ctrl: AbstractControl<any, any>): boolean {\n return ctrl.invalid && (ctrl.dirty || ctrl.touched);\n }\n\n #toggleClass(state: 'dirty' | 'invalid' | 'required', condition: boolean) {\n const matLabelEl = this.#elRef.nativeElement as HTMLElement;\n const matFormFieldEl = matLabelEl.closest('mat-form-field');\n\n if (matFormFieldEl) {\n matFormFieldEl.classList.toggle(`yuv-formfield-${state}`, condition);\n }\n if (matLabelEl) {\n // if the directive is put on a label outside of a mat-form-field, we'll add an\n // indicator element to the label itself\n const classPrefix = matLabelEl.tagName === 'LABEL' ? 'yuv-label-marker' : 'yuv-label';\n matLabelEl.classList.toggle(`${classPrefix}-${state}`, condition);\n }\n }\n\n ngOnInit() {\n const input = this.yuvObjectMetadataElementLabel();\n if (input) {\n if (input.formChangedSubject) {\n input.formChangedSubject?.pipe(takeUntilDestroyed(this.#dRef)).subscribe(() => {\n const ctrl = input.ctrl! as ObjectFormControl;\n const situation = input.situation;\n this.state.set({\n dirty: !!(ctrl && ctrl.dirty),\n required: ctrl._eoFormElement.required && !this.#markAsInvalid(input.ctrl!) && Situation.CREATE === situation,\n invalid: this.#markAsInvalid(ctrl)\n });\n });\n }\n }\n }\n\n ngAfterViewInit(): void {\n this.#applyState();\n }\n}\n","import { DestroyRef, Directive, ElementRef, inject, input, OnInit } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControlStatus } from '@angular/forms';\nimport { ObjectFormControl } from '@yuuvis/client-core';\nimport { FormTranslateService } from '@yuuvis/client-framework/common';\n\n/**\n * Directive to apply an object-form related error to as inner text to an element.\n * This could be used to render objec tform related errors in a custom element like <mat-error>.\n * \n * @example\n * <mat-error [yuvObjectMetadataElementError]=\"myControl\"></mat-error>\n */\n@Directive({\n selector: '[yuvObjectMetadataElementError]',\n standalone: true\n})\nexport class ObjectMetadataElementErrorDirective implements OnInit {\n #elRef = inject(ElementRef);\n #dRef = inject(DestroyRef);\n #fts = inject(FormTranslateService);\n\n yuvObjectMetadataElementError = input<ObjectFormControl>();\n\n #getErrors(): string[] {\n const ctrl = this.yuvObjectMetadataElementError();\n\n // only show errors if the control has been touched\n const shouldShowErrors = ctrl && ctrl.errors && (ctrl.touched || ctrl.dirty);\n\n return shouldShowErrors\n ? Object.keys(ctrl.errors).map((key) => {\n return key === 'eoformScript' ? ctrl._eoFormElement.error.msg : this.#fts.getErrorLabel(key, ctrl.errors![key].params);\n })\n : [];\n }\n\n ngOnInit() {\n const ctrl = this.yuvObjectMetadataElementError();\n if (ctrl) {\n ctrl.statusChanges.pipe(takeUntilDestroyed(this.#dRef)).subscribe((s: FormControlStatus) => {\n if (s === 'INVALID') {\n const err = this.#getErrors();\n this.#elRef.nativeElement.innerText = err.length > 0 ? err[0] : '';\n }\n });\n }\n }\n}\n","import { Directive, OnDestroy, OnInit, TemplateRef, inject, input } from '@angular/core';\nimport { Situation } from '@yuuvis/client-core';\nimport { MetadataFormElementRegistry } from './metadata-form-element-registry.service';\n\n/**\n * Directive to be applied to a `ng-template`. It will register the template as a\n * form element used by object-form component.\n *\n * Context is provided with the following fields:\n * - situation: form situation 'EDIT', 'CREATE', 'SEARCH'\n * - field: ObjectTypeField\n * - ngControl: Reactive FormControl\n *\n * @example\n * <ng-template yuvMetadataElementTemplate propertyType=\"boolean:switch\" let-ctx>...</ng-template>\n *\n */\n@Directive({\n selector: '[yuvMetadataElementTemplate]',\n standalone: true\n})\nexport class ObjectMetadataElementTemplateDirective implements OnInit, OnDestroy {\n #registry = inject(MetadataFormElementRegistry);\n #template = inject(TemplateRef<any>);\n\n /**\n * Bucket to register the template. Use 'default' for templates that should be\n * used across all situations.\n */\n yuvMetadataElementTemplate = input<string>();\n /**\n * Situation to register the template for. So only object forms for that\n * situation (CREATE, EDIT, SEARCH) will use the template. Defaults to `EDIT`.\n */\n situation = input<Situation>(Situation.EDIT);\n\n /**\n * Internal property type to get the registered template. You need to set either\n * `propertyType` or `propertyName` to get a template. Setting a name and\n * a type, the name will be used because it is more precise.\n */\n propertyType = input<string>();\n /**\n * Pick registered metadata element by name. You need to set either\n * `propertyType` or `propertyName` to get a template. Setting a name and\n * a type, the name will be used because it is more precise.\n */\n propertyName = input<string>();\n #registrationKey?: string;\n\n ngOnInit(): void {\n const pn = this.propertyName();\n\n this.#registrationKey = pn ? `${this.#registry.NAME_PROPERTY_PREFIX}${pn}` : this.propertyType();\n if (this.#registrationKey) {\n if (this.yuvMetadataElementTemplate() === 'default') {\n this.#registry._addDefaultElementTemplate(this.#registrationKey, this.#template);\n } else this.#registry.addElementTemplate(this.#registrationKey, this.#template, this.situation());\n }\n }\n\n ngOnDestroy(): void {\n if (!this.#registrationKey) return;\n if (this.yuvMetadataElementTemplate() === 'default')\n this.#registry._removeDefaultElementTemplate(this.#registrationKey);\n else this.#registry.removeElementTemplate(this.#registrationKey, this.situation());\n }\n}\n","import { Directive, OnDestroy, OnInit, TemplateRef, inject, input } from '@angular/core';\nimport { Situation } from '@yuuvis/client-core';\nimport { MetadataFormElementRegistry } from './metadata-form-element-registry.service';\n\n/**\n * Directive to be applied to an `ng-template` that renders only the raw form\n * widget for a metadata property (without the surrounding `mat-form-field`\n * label/hint/error shell). The template is registered in the raw bucket of\n * `MetadataFormElementRegistry`, parallel to the wrapped templates registered\n * via `yuvMetadataElementTemplate`.\n *\n * Use this to expose a type-aware input that can be composed into custom\n * layouts — for example smart-search, where conditions are built inline as\n * a pill chain and a full form-field shell would be visually wrong.\n *\n * @example\n * <ng-template #rawString yuvMetadataElementRaw=\"default\" propertyType=\"string\" let-ctx>\n * <yuv-string [formControl]=\"ctx.ctrl\" [required]=\"ctx.field.required\" />\n * </ng-template>\n */\n@Directive({\n selector: '[yuvMetadataElementRaw]',\n standalone: true\n})\nexport class ObjectMetadataElementRawDirective implements OnInit, OnDestroy {\n #registry = inject(MetadataFormElementRegistry);\n #template = inject(TemplateRef<any>);\n\n /**\n * Bucket to register the template. Use 'default' for templates that should be\n * used across all situations.\n */\n yuvMetadataElementRaw = input<string>();\n /**\n * Situation to register the template for. Defaults to `EDIT`.\n */\n situation = input<Situation>(Situation.EDIT);\n\n /**\n * Internal property type to register the template under. You need to set\n * either `propertyType` or `propertyName`. When both are set, `propertyName`\n * wins because it is more precise.\n */\n propertyType = input<string>();\n /**\n * Register the raw template by metadata field name.\n */\n propertyName = input<string>();\n\n #registrationKey?: string;\n\n ngOnInit(): void {\n const pn = this.propertyName();\n this.#registrationKey = pn ? `${this.#registry.NAME_PROPERTY_PREFIX}${pn}` : this.propertyType();\n if (!this.#registrationKey) return;\n\n if (this.yuvMetadataElementRaw() === 'default') {\n this.#registry._addDefaultRawElementTemplate(this.#registrationKey, this.#template);\n } else {\n this.#registry.addRawElementTemplate(this.#registrationKey, this.#template, this.situation());\n }\n }\n\n ngOnDestroy(): void {\n if (!this.#registrationKey) return;\n if (this.yuvMetadataElementRaw() === 'default') {\n this.#registry._removeDefaultRawElementTemplate(this.#registrationKey);\n } else {\n this.#registry.removeRawElementTemplate(this.#registrationKey, this.situation());\n }\n }\n}\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, inject, input, TemplateRef, ViewEncapsulation } from '@angular/core';\n\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\nimport { LocalizationService, ObjectTypeField, Situation, SystemService } from '@yuuvis/client-core';\nimport { injectNgControl, NoopValueAccessorDirective } from '@yuuvis/client-framework/common';\nimport { Subject } from 'rxjs';\nimport { MetadataFormElementRegistry } from '../metadata-form-element-registry.service';\nimport { OBJECT_CONTEXT } from '../object-context.token';\nimport { MetadataFormFieldContext, ParentFormChangedEvent } from './metadata-form-field.interface';\n\n/**\n * Component to render a metadata form field within an object form. These forms are\n * created to render and edit metadata of DMS objects. This component is used as a wrapper\n * for the actual form element, which is defined by the `formField` input.\n */\n@Component({\n selector: 'yuv-metadata-form-field',\n standalone: true,\n imports: [NgClass, NgTemplateOutlet, MatFormFieldModule],\n templateUrl: './metadata-form-field.component.html',\n styleUrl: './metadata-form-field.component.scss',\n hostDirectives: [NoopValueAccessorDirective],\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'yuv-metadata-form-field'\n }\n})\nexport class MetadataFormFieldComponent {\n #registry = inject(MetadataFormElementRegistry);\n #system = inject(SystemService);\n #localization = inject(LocalizationService);\n\n #ngControl = injectNgControl();\n #objectContext = inject(OBJECT_CONTEXT, { optional: true });\n readonly = false;\n\n formChangedSubject = input<Subject<ParentFormChangedEvent>>();\n formField = input.required<ObjectTypeField>({ alias: 'field' });\n\n /**\n * Which template variant to render. `default` renders the wrapped form field\n * (mat-form-field with label, hint, error). `raw` renders only the inner\n * widget — useful for composing into custom layouts such as smart-search.\n */\n variant = input<'default' | 'raw'>('default');\n\n // elementTemplate = signal<TemplateRef<any> | undefined>(undefined);\n elementTemplate = computed<TemplateRef<any> | undefined>(() => {\n const field = this.formField();\n // TODO: set readonly state based on ...????... schema?\n this.readonly = false;\n const isRaw = this.variant() === 'raw';\n const lookup = isRaw\n ? (key: string): TemplateRef<any> | undefined => this.#registry.getRawElementTemplate(key, this.situation())\n : (key: string): TemplateRef<any> | undefined => this.#registry.getElementTemplate(key, this.situation());\n const templateByName = lookup(`${this.#registry.NAME_PROPERTY_PREFIX}${field.name}`);\n if (templateByName) {\n return templateByName;\n } else {\n if (!field._internalType) {\n field._internalType = this.#system.getInternalFormElementType(\n field.propertyType,\n field.classifications,\n field.catalog\n );\n }\n return lookup(field._internalType);\n }\n });\n\n context = computed<MetadataFormFieldContext>(() => {\n const field = this.formField();\n field.required = this.situation() !== Situation.SEARCH ? field.required : false;\n const label = this.#localization.getLocalizedLabel(field.name) || field.label || field.name;\n return {\n label,\n description: field.description,\n situation: this.situation() || Situation.EDIT,\n field,\n ctrl: this.#ngControl?.control || undefined,\n formChangedSubject: this.formChangedSubject(),\n object: this.#objectContext?.()\n };\n });\n\n /**\n * Form situation, if not set default will be 'EDIT'\n */\n situation = input<string | undefined>(Situation.EDIT);\n}\n","@let field = formField();\n@let et = elementTemplate();\n\n@if (field) {\n <div\n [class]=\"'form-field t-' + field._internalType\"\n #formField\n [attr.data-name]=\"field.name\"\n [ngClass]=\"{ disabled: !!readonly, 'form-field--raw': variant() === 'raw' }\"\n >\n @if (et) {\n <ng-container *ngTemplateOutlet=\"et; context: { $implicit: context() }\" />\n } @else {\n <em>\n <strong>{{ field._internalType }}</strong>\n </em>\n }\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"yuuvis-client-framework-metadata-form.mjs","sources":["../../../../../libs/yuuvis/client-framework/metadata-form/src/lib/metadata-form-element-registry.service.ts","../../../../../libs/yuuvis/client-framework/metadata-form/src/lib/object-context.token.ts","../../../../../libs/yuuvis/client-framework/metadata-form/src/lib/object-metadata-element-label.directive.ts","../../../../../libs/yuuvis/client-framework/metadata-form/src/lib/object-metadata-element-error.directive.ts","../../../../../libs/yuuvis/client-framework/metadata-form/src/lib/object-metadata-element-template.directive.ts","../../../../../libs/yuuvis/client-framework/metadata-form/src/lib/object-metadata-element-raw.directive.ts","../../../../../libs/yuuvis/client-framework/metadata-form/src/lib/metadata-form-field/metadata-form-field.component.ts","../../../../../libs/yuuvis/client-framework/metadata-form/src/lib/metadata-form-field/metadata-form-field.component.html","../../../../../libs/yuuvis/client-framework/metadata-form/src/yuuvis-client-framework-metadata-form.ts"],"sourcesContent":["import { Injectable, TemplateRef } from '@angular/core';\nimport { Situation } from '@yuuvis/client-core';\n\n/**\n * Object forms are used to render and edit metadata of DMS objects. Each property\n * of an object can be rendered in a diffenrent way, depending on the type of the property.\n * This service allows to register and retrieve templates for rendering these form elements.\n *\n * You can register templates for different situations like EDIT, SEARCH, and CREATE.\n * The templates will then be used to render the form elements in the object form component.\n *\n * So based on the property type you can register custom templates for rendering certain\n * form elements. This is useful if you want to render a property in a different way.\n *\n * Example:\n * Having a number property representing a rating, you might want to render it as\n * a list of stars instead of a simple input field.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class MetadataFormElementRegistry {\n private _defaults: { [propertyType: string]: TemplateRef<any> } = {};\n\n private _edit: { [propertyType: string]: TemplateRef<any> } = {};\n private _search: { [propertyType: string]: TemplateRef<any> } = {};\n private _create: { [propertyType: string]: TemplateRef<any> } = {};\n\n // Parallel maps for raw (unwrapped) form element templates. Same keying and\n // situation cascade as the wrapped maps above.\n private _rawDefaults: { [propertyType: string]: TemplateRef<any> } = {};\n private _rawEdit: { [propertyType: string]: TemplateRef<any> } = {};\n private _rawSearch: { [propertyType: string]: TemplateRef<any> } = {};\n private _rawCreate: { [propertyType: string]: TemplateRef<any> } = {};\n\n // registering a template by name will add this prefix to the given name\n NAME_PROPERTY_PREFIX = '@name:';\n\n /**\n * Get a template to render a certain form element\n * @param propertyType The internal type to get the template for\n * @param situation Form situation\n * @returns TemplateRef or undefined\n */\n getElementTemplate(propertyType: string, situation: string = Situation.EDIT): TemplateRef<any> | undefined {\n let cmps = { ...this._defaults, ...this._edit };\n\n if (situation === Situation.SEARCH) cmps = { ...this._defaults, ...this._edit, ...this._search };\n else if (situation === Situation.CREATE) cmps = { ...this._defaults, ...this._edit, ...this._create };\n return cmps[propertyType];\n }\n\n /**\n * Register an object form element for a certain internal type. You might add a new component\n * or overwrite an existung one.\n * @param propertyType The internal type to provide the component for\n * @param component The component\n * @param situation Form situation to provide thew form element for (defaults to EDIT)\n */\n addElementTemplate(propertyType: string, templateRef: TemplateRef<any>, situation: Situation = Situation.EDIT): void {\n if (propertyType && templateRef) {\n switch (situation) {\n case Situation.SEARCH: {\n this._search[propertyType] = templateRef;\n break;\n }\n case Situation.CREATE: {\n this._create[propertyType] = templateRef;\n break;\n }\n default: {\n this._edit[propertyType] = templateRef;\n }\n }\n }\n }\n\n /**\n * Remove a registered form element.\n * @param propertyType The internal type to remove the component for\n * @param situation Form situation to provide thew form element for (defaults to EDIT)\n */\n removeElementTemplate(propertyType: string, situation: Situation = Situation.EDIT) {\n switch (situation) {\n case Situation.SEARCH: {\n delete this._search[propertyType];\n break;\n }\n case Situation.CREATE: {\n delete this._create[propertyType];\n break;\n }\n default: {\n delete this._edit[propertyType];\n }\n }\n }\n\n /**\n * Register default form element component. Usually this will be done by the object\n * form component itself.\n * @param propertyType The internal type to provide the component for\n * @param component The default component\n */\n _addDefaultElementTemplate(propertyType: string, templateRef: TemplateRef<any>): void {\n if (propertyType && templateRef) {\n this._defaults[propertyType] = templateRef;\n }\n }\n\n /**\n * Remove a registered default form element.\n * @param propertyType The internal type to remove the component for\n */\n _removeDefaultElementTemplate(propertyType: string) {\n delete this._defaults[propertyType];\n }\n\n /**\n * Get a raw (unwrapped) form element template — only the inner widget,\n * without the surrounding `mat-form-field` / label / hint / error shell.\n * Use this when composing the widget into a custom layout (e.g. smart-search).\n * @param propertyType The internal type to get the template for\n * @param situation Form situation\n * @returns TemplateRef or undefined\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getRawElementTemplate(propertyType: string, situation: string = Situation.EDIT): TemplateRef<any> | undefined {\n let map = { ...this._rawDefaults, ...this._rawEdit };\n\n if (situation === Situation.SEARCH) map = { ...this._rawDefaults, ...this._rawEdit, ...this._rawSearch };\n else if (situation === Situation.CREATE) map = { ...this._rawDefaults, ...this._rawEdit, ...this._rawCreate };\n return map[propertyType];\n }\n\n /**\n * Register a raw form element template for a certain internal type.\n * @param propertyType The internal type to provide the template for\n * @param templateRef The template\n * @param situation Form situation to provide the form element for (defaults to EDIT)\n */\n addRawElementTemplate(\n propertyType: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n templateRef: TemplateRef<any>,\n situation: Situation = Situation.EDIT\n ): void {\n if (propertyType && templateRef) {\n switch (situation) {\n case Situation.SEARCH: {\n this._rawSearch[propertyType] = templateRef;\n break;\n }\n case Situation.CREATE: {\n this._rawCreate[propertyType] = templateRef;\n break;\n }\n default: {\n this._rawEdit[propertyType] = templateRef;\n }\n }\n }\n }\n\n /**\n * Remove a registered raw form element template.\n * @param propertyType The internal type to remove the template for\n * @param situation Form situation\n */\n removeRawElementTemplate(propertyType: string, situation: Situation = Situation.EDIT): void {\n switch (situation) {\n case Situation.SEARCH: {\n delete this._rawSearch[propertyType];\n break;\n }\n case Situation.CREATE: {\n delete this._rawCreate[propertyType];\n break;\n }\n default: {\n delete this._rawEdit[propertyType];\n }\n }\n }\n\n /**\n * Register a default raw form element template (used across all situations).\n * @param propertyType The internal type to provide the template for\n * @param templateRef The default template\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _addDefaultRawElementTemplate(propertyType: string, templateRef: TemplateRef<any>): void {\n if (propertyType && templateRef) {\n this._rawDefaults[propertyType] = templateRef;\n }\n }\n\n /**\n * Remove a registered default raw form element template.\n * @param propertyType The internal type to remove the template for\n */\n _removeDefaultRawElementTemplate(propertyType: string): void {\n delete this._rawDefaults[propertyType];\n }\n}\n","import { InjectionToken, Signal } from '@angular/core';\n\n/**\n * Read-only view of the object a metadata form is rendered for. Exposed to\n * element templates (`yuvMetadataElementTemplate`) via the field context.\n *\n * Intentionally minimal and framework-agnostic: it does NOT reference\n * `DmsObject` so the token stays usable outside object-details (smart-search,\n * BPM forms, …). Producers map their object onto this shape.\n */\nexport interface ObjectContext {\n id?: string;\n objectTypeId?: string;\n /** Immutable initial index data of the object (not live form edits). */\n data: Record<string, unknown>;\n}\n\n/**\n * Provide at the component that owns the object (e.g. `ObjectMetadataComponent`)\n * so it is scoped to that instance's view subtree. Consumers inject it\n * `{ optional: true }` — it is absent when a form runs standalone.\n */\nexport const OBJECT_CONTEXT = new InjectionToken<Signal<ObjectContext | undefined>>('yuv.metadata.object-context');\n","import { AfterViewInit, DestroyRef, Directive, effect, ElementRef, inject, input, OnInit, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AbstractControl, FormControlStatus, Validators } from '@angular/forms';\nimport { MetadataFormFieldContext } from './metadata-form-field/metadata-form-field.interface';\nimport { ObjectFormControl, Situation } from '@yuuvis/client-core';\n\n/**\n * Directive to apply styles to an object metadata element label based on its control status.\n * Depending on the state of the control (dirty, error, required), it will add or remove specific classes\n * to the label element. These classes could then be used to style the label accordingly.\n *\n * Could be placed on any HTML element, but is primarily intended for use on `<mat-label>` or `<label>` elements.\n * If you would like to use it on any other element, make sure to add the class 'label' to it.\n *\n * @example\n * <mat-label [yuvObjectMetadataElementLabel]=\"ctx\">My Label</mat-label>\n * <label [yuvObjectMetadataElementLabel]=\"ctx\">My Label</label>\n * <div class=\"label\" [yuvObjectMetadataElementLabel]=\"ctx\">My Label</div>\n */\n@Directive({\n selector: '[yuvObjectMetadataElementLabel]',\n standalone: true\n})\nexport class ObjectMetadataElementLabelDirective implements OnInit, AfterViewInit {\n #elRef = inject(ElementRef);\n #dRef = inject(DestroyRef);\n\n state = signal({\n dirty: false,\n required: false,\n invalid: false\n });\n #stateEffect = effect(() => {\n this.#applyState();\n });\n\n yuvObjectMetadataElementLabel = input<MetadataFormFieldContext>();\n\n #applyState() {\n const s = this.state();\n this.#toggleClass('dirty', s.dirty);\n this.#toggleClass('required', s.required);\n this.#toggleClass('invalid', s.invalid);\n }\n\n #markAsInvalid(ctrl: AbstractControl<any, any>): boolean {\n return ctrl.invalid && (ctrl.dirty || ctrl.touched);\n }\n\n #toggleClass(state: 'dirty' | 'invalid' | 'required', condition: boolean) {\n const matLabelEl = this.#elRef.nativeElement as HTMLElement;\n const matFormFieldEl = matLabelEl.closest('mat-form-field');\n\n if (matFormFieldEl) {\n matFormFieldEl.classList.toggle(`yuv-formfield-${state}`, condition);\n }\n if (matLabelEl) {\n // if the directive is put on a label outside of a mat-form-field, we'll add an\n // indicator element to the label itself\n const classPrefix = matLabelEl.tagName === 'LABEL' ? 'yuv-label-marker' : 'yuv-label';\n matLabelEl.classList.toggle(`${classPrefix}-${state}`, condition);\n }\n }\n\n ngOnInit() {\n const input = this.yuvObjectMetadataElementLabel();\n if (input) {\n if (input.formChangedSubject) {\n input.formChangedSubject?.pipe(takeUntilDestroyed(this.#dRef)).subscribe(() => {\n const ctrl = input.ctrl! as ObjectFormControl;\n const situation = input.situation;\n this.state.set({\n dirty: !!(ctrl && ctrl.dirty),\n required: ctrl._eoFormElement.required && !this.#markAsInvalid(input.ctrl!) && Situation.CREATE === situation,\n invalid: this.#markAsInvalid(ctrl)\n });\n });\n }\n }\n }\n\n ngAfterViewInit(): void {\n this.#applyState();\n }\n}\n","import { DestroyRef, Directive, ElementRef, inject, input, OnInit } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControlStatus } from '@angular/forms';\nimport { ObjectFormControl } from '@yuuvis/client-core';\nimport { FormTranslateService } from '@yuuvis/client-framework/common';\n\n/**\n * Directive to apply an object-form related error to as inner text to an element.\n * This could be used to render objec tform related errors in a custom element like <mat-error>.\n * \n * @example\n * <mat-error [yuvObjectMetadataElementError]=\"myControl\"></mat-error>\n */\n@Directive({\n selector: '[yuvObjectMetadataElementError]',\n standalone: true\n})\nexport class ObjectMetadataElementErrorDirective implements OnInit {\n #elRef = inject(ElementRef);\n #dRef = inject(DestroyRef);\n #fts = inject(FormTranslateService);\n\n yuvObjectMetadataElementError = input<ObjectFormControl>();\n\n #getErrors(): string[] {\n const ctrl = this.yuvObjectMetadataElementError();\n\n // only show errors if the control has been touched\n const shouldShowErrors = ctrl && ctrl.errors && (ctrl.touched || ctrl.dirty);\n\n return shouldShowErrors\n ? Object.keys(ctrl.errors).map((key) => {\n return key === 'eoformScript' ? ctrl._eoFormElement.error.msg : this.#fts.getErrorLabel(key, ctrl.errors![key].params);\n })\n : [];\n }\n\n ngOnInit() {\n const ctrl = this.yuvObjectMetadataElementError();\n if (ctrl) {\n ctrl.statusChanges.pipe(takeUntilDestroyed(this.#dRef)).subscribe((s: FormControlStatus) => {\n if (s === 'INVALID') {\n const err = this.#getErrors();\n this.#elRef.nativeElement.innerText = err.length > 0 ? err[0] : '';\n }\n });\n }\n }\n}\n","import { Directive, OnDestroy, OnInit, TemplateRef, inject, input } from '@angular/core';\nimport { Situation } from '@yuuvis/client-core';\nimport { MetadataFormElementRegistry } from './metadata-form-element-registry.service';\n\n/**\n * Directive to be applied to a `ng-template`. It will register the template as a\n * form element used by object-form component.\n *\n * Context is provided with the following fields:\n * - situation: form situation 'EDIT', 'CREATE', 'SEARCH'\n * - field: ObjectTypeField\n * - ngControl: Reactive FormControl\n *\n * @example\n * <ng-template yuvMetadataElementTemplate propertyType=\"boolean:switch\" let-ctx>...</ng-template>\n *\n */\n@Directive({\n selector: '[yuvMetadataElementTemplate]',\n standalone: true\n})\nexport class ObjectMetadataElementTemplateDirective implements OnInit, OnDestroy {\n #registry = inject(MetadataFormElementRegistry);\n #template = inject(TemplateRef<any>);\n\n /**\n * Bucket to register the template. Use 'default' for templates that should be\n * used across all situations.\n */\n yuvMetadataElementTemplate = input<string>();\n /**\n * Situation to register the template for. So only object forms for that\n * situation (CREATE, EDIT, SEARCH) will use the template. Defaults to `EDIT`.\n */\n situation = input<Situation>(Situation.EDIT);\n\n /**\n * Internal property type to get the registered template. You need to set either\n * `propertyType` or `propertyName` to get a template. Setting a name and\n * a type, the name will be used because it is more precise.\n */\n propertyType = input<string>();\n /**\n * Pick registered metadata element by name. You need to set either\n * `propertyType` or `propertyName` to get a template. Setting a name and\n * a type, the name will be used because it is more precise.\n */\n propertyName = input<string>();\n #registrationKey?: string;\n\n ngOnInit(): void {\n const pn = this.propertyName();\n\n this.#registrationKey = pn ? `${this.#registry.NAME_PROPERTY_PREFIX}${pn}` : this.propertyType();\n if (this.#registrationKey) {\n if (this.yuvMetadataElementTemplate() === 'default') {\n this.#registry._addDefaultElementTemplate(this.#registrationKey, this.#template);\n } else this.#registry.addElementTemplate(this.#registrationKey, this.#template, this.situation());\n }\n }\n\n ngOnDestroy(): void {\n if (!this.#registrationKey) return;\n if (this.yuvMetadataElementTemplate() === 'default')\n this.#registry._removeDefaultElementTemplate(this.#registrationKey);\n else this.#registry.removeElementTemplate(this.#registrationKey, this.situation());\n }\n}\n","import { Directive, OnDestroy, OnInit, TemplateRef, inject, input } from '@angular/core';\nimport { Situation } from '@yuuvis/client-core';\nimport { MetadataFormElementRegistry } from './metadata-form-element-registry.service';\n\n/**\n * Directive to be applied to an `ng-template` that renders only the raw form\n * widget for a metadata property (without the surrounding `mat-form-field`\n * label/hint/error shell). The template is registered in the raw bucket of\n * `MetadataFormElementRegistry`, parallel to the wrapped templates registered\n * via `yuvMetadataElementTemplate`.\n *\n * Use this to expose a type-aware input that can be composed into custom\n * layouts — for example smart-search, where conditions are built inline as\n * a pill chain and a full form-field shell would be visually wrong.\n *\n * @example\n * <ng-template #rawString yuvMetadataElementRaw=\"default\" propertyType=\"string\" let-ctx>\n * <yuv-string [formControl]=\"ctx.ctrl\" [required]=\"ctx.field.required\" />\n * </ng-template>\n */\n@Directive({\n selector: '[yuvMetadataElementRaw]',\n standalone: true\n})\nexport class ObjectMetadataElementRawDirective implements OnInit, OnDestroy {\n #registry = inject(MetadataFormElementRegistry);\n #template = inject(TemplateRef<any>);\n\n /**\n * Bucket to register the template. Use 'default' for templates that should be\n * used across all situations.\n */\n yuvMetadataElementRaw = input<string>();\n /**\n * Situation to register the template for. Defaults to `EDIT`.\n */\n situation = input<Situation>(Situation.EDIT);\n\n /**\n * Internal property type to register the template under. You need to set\n * either `propertyType` or `propertyName`. When both are set, `propertyName`\n * wins because it is more precise.\n */\n propertyType = input<string>();\n /**\n * Register the raw template by metadata field name.\n */\n propertyName = input<string>();\n\n #registrationKey?: string;\n\n ngOnInit(): void {\n const pn = this.propertyName();\n this.#registrationKey = pn ? `${this.#registry.NAME_PROPERTY_PREFIX}${pn}` : this.propertyType();\n if (!this.#registrationKey) return;\n\n if (this.yuvMetadataElementRaw() === 'default') {\n this.#registry._addDefaultRawElementTemplate(this.#registrationKey, this.#template);\n } else {\n this.#registry.addRawElementTemplate(this.#registrationKey, this.#template, this.situation());\n }\n }\n\n ngOnDestroy(): void {\n if (!this.#registrationKey) return;\n if (this.yuvMetadataElementRaw() === 'default') {\n this.#registry._removeDefaultRawElementTemplate(this.#registrationKey);\n } else {\n this.#registry.removeRawElementTemplate(this.#registrationKey, this.situation());\n }\n }\n}\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, inject, input, TemplateRef, ViewEncapsulation } from '@angular/core';\n\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\nimport { LocalizationService, ObjectTypeField, Situation, SystemService } from '@yuuvis/client-core';\nimport { injectNgControl, NoopValueAccessorDirective } from '@yuuvis/client-framework/common';\nimport { Subject } from 'rxjs';\nimport { MetadataFormElementRegistry } from '../metadata-form-element-registry.service';\nimport { OBJECT_CONTEXT } from '../object-context.token';\nimport { MetadataFormFieldContext, ParentFormChangedEvent } from './metadata-form-field.interface';\n\n/**\n * Component to render a metadata form field within an object form. These forms are\n * created to render and edit metadata of DMS objects. This component is used as a wrapper\n * for the actual form element, which is defined by the `formField` input.\n */\n@Component({\n selector: 'yuv-metadata-form-field',\n standalone: true,\n imports: [NgClass, NgTemplateOutlet, MatFormFieldModule],\n templateUrl: './metadata-form-field.component.html',\n styleUrl: './metadata-form-field.component.scss',\n hostDirectives: [NoopValueAccessorDirective],\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'yuv-metadata-form-field'\n }\n})\nexport class MetadataFormFieldComponent {\n #registry = inject(MetadataFormElementRegistry);\n #system = inject(SystemService);\n #localization = inject(LocalizationService);\n\n #ngControl = injectNgControl();\n #objectContext = inject(OBJECT_CONTEXT, { optional: true });\n readonly = false;\n\n formChangedSubject = input<Subject<ParentFormChangedEvent>>();\n formField = input.required<ObjectTypeField>({ alias: 'field' });\n\n /**\n * Which template variant to render. `default` renders the wrapped form field\n * (mat-form-field with label, hint, error). `raw` renders only the inner\n * widget — useful for composing into custom layouts such as smart-search.\n */\n variant = input<'default' | 'raw'>('default');\n\n // elementTemplate = signal<TemplateRef<any> | undefined>(undefined);\n elementTemplate = computed<TemplateRef<any> | undefined>(() => {\n const field = this.formField();\n // TODO: set readonly state based on ...????... schema?\n this.readonly = false;\n const isRaw = this.variant() === 'raw';\n const lookup = isRaw\n ? (key: string): TemplateRef<any> | undefined => this.#registry.getRawElementTemplate(key, this.situation())\n : (key: string): TemplateRef<any> | undefined => this.#registry.getElementTemplate(key, this.situation());\n const templateByName = lookup(`${this.#registry.NAME_PROPERTY_PREFIX}${field.name}`);\n if (templateByName) {\n return templateByName;\n } else {\n if (!field._internalType) {\n field._internalType = this.#system.getInternalFormElementType(\n field.propertyType,\n field.classifications,\n field.catalog\n );\n }\n return lookup(field._internalType);\n }\n });\n\n context = computed<MetadataFormFieldContext>(() => {\n const field = this.formField();\n field.required = this.situation() !== Situation.SEARCH ? field.required : false;\n const label = this.#localization.getLocalizedLabel(field.name) || field.label || field.name;\n return {\n label,\n description: field.description,\n situation: this.situation() || Situation.EDIT,\n field,\n ctrl: this.#ngControl?.control || undefined,\n formChangedSubject: this.formChangedSubject(),\n object: this.#objectContext?.()\n };\n });\n\n /**\n * Form situation, if not set default will be 'EDIT'\n */\n situation = input<string | undefined>(Situation.EDIT);\n}\n","@let field = formField();\n@let et = elementTemplate();\n\n@if (field) {\n <div\n [class]=\"'form-field t-' + field._internalType\"\n #formField\n [attr.data-name]=\"field.name\"\n [ngClass]=\"{ disabled: !!readonly, 'form-field--raw': variant() === 'raw' }\"\n >\n @if (et) {\n <ng-container *ngTemplateOutlet=\"et; context: { $implicit: context() }\" />\n } @else {\n <em>\n <strong>{{ field._internalType }}</strong>\n </em>\n }\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/lib/assets/i18n/de.json
CHANGED
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
"yuv.clipboard.text.cut.multiple": "{{count}} Elemente ausgeschnitten",
|
|
39
39
|
"yuv.clipboard.text.cut.single": "1 Element ausgeschnitten",
|
|
40
40
|
"yuv.calendar.time.label": "Uhrzeit",
|
|
41
|
+
"yuv.form.element.catalog.option.none": "Nichts ausgewählt",
|
|
41
42
|
"yuv.form.element.data.grid.add-row.button.tooltip": "Zeile hinzufügen",
|
|
42
43
|
"yuv.form.element.data.grid.add.headline": "Neue Zeile hinzufügen",
|
|
43
44
|
"yuv.form.element.data.grid.edit": "Bearbeiten",
|
|
@@ -49,13 +50,10 @@
|
|
|
49
50
|
"yuv.form.element.data.grid.row.button.actions.tooltip": "Aktionsmenü öffnen",
|
|
50
51
|
"yuv.form.element.datetime.calendar.cancel": "Abbrechen",
|
|
51
52
|
"yuv.form.element.datetime.calendar.select": "Auswählen",
|
|
52
|
-
"yuv.form.element.catalog.option.none": "Nichts ausgewählt",
|
|
53
53
|
"yuv.form.element.datetime.calendar.today": "Heute",
|
|
54
54
|
"yuv.form.element.organization-set.classify.icon.title": "Gruppe",
|
|
55
55
|
"yuv.form.element.organization.classify.icon.title": "Benutzer",
|
|
56
56
|
"yuv.form.element.organization.freetext.tooltip": "Freitext – kein aufgelöster Benutzer bzw. keine Gruppe",
|
|
57
|
-
"yuv.form.element.reference.classify.icon.title": "Referenz",
|
|
58
|
-
"yuv.form.element.reference.open.title": "Referenziertes Objekt öffnen",
|
|
59
57
|
"yuv.form.element.range-select-date.custom.overlay.button.apply": "Anwenden",
|
|
60
58
|
"yuv.form.element.range-select-date.custom.overlay.title": "Benutzerdefinierter Zeitraum",
|
|
61
59
|
"yuv.form.element.range-select-date.option.any": "Beliebiges Datum",
|
|
@@ -70,9 +68,11 @@
|
|
|
70
68
|
"yuv.form.element.range-select-date.option.yesterday": "Gestern",
|
|
71
69
|
"yuv.form.element.range-select-filesize.option.any": "Beliebige Größe",
|
|
72
70
|
"yuv.form.element.range-select-filesize.option.large": "Groß (10-100 MB)",
|
|
73
|
-
"yuv.form.element.range-select-filesize.option.medium": "Mittel (1
|
|
71
|
+
"yuv.form.element.range-select-filesize.option.medium": "Mittel (1–10 MB)",
|
|
74
72
|
"yuv.form.element.range-select-filesize.option.small": "Klein (<1 MB)",
|
|
75
73
|
"yuv.form.element.range-select-filesize.option.verylarge": "Sehr groß (>100 MB)",
|
|
74
|
+
"yuv.form.element.reference.classify.icon.title": "Referenz",
|
|
75
|
+
"yuv.form.element.reference.open.title": "Referenziertes Objekt öffnen",
|
|
76
76
|
"yuv.object-metadata.button.save": "Speichern",
|
|
77
77
|
"yuv.audit.fetch.error": "Historieneinträge konnten nicht geladen werden",
|
|
78
78
|
"yuv.audit.label.paging": "Seitennavigation",
|
|
@@ -214,9 +214,9 @@
|
|
|
214
214
|
"yuv.sort.tooltip": "Sortieren",
|
|
215
215
|
"yuv.action.empty.selection": "",
|
|
216
216
|
"yuv.tile-config.button.close": "Schließen",
|
|
217
|
-
"yuv.tile-config.error.title-required": "Ein Titel-Attribut ist erforderlich. Wählen Sie ein Attribut für den Titel aus.",
|
|
218
217
|
"yuv.tile-config.button.reset": "Zurücksetzen",
|
|
219
218
|
"yuv.tile-config.button.save": "Änderungen speichern",
|
|
219
|
+
"yuv.tile-config.error.title-required": "Ein Titel-Attribut ist erforderlich. Wählen Sie ein Attribut für den Titel aus.",
|
|
220
220
|
"yuv.tile-config.icon-select.pick": "Icon auswählen",
|
|
221
221
|
"yuv.tile-config.icon-select.reset": "Zurücksetzen",
|
|
222
222
|
"yuv.tile-config.slot.action.headline": "Aktionen",
|
package/lib/assets/i18n/en.json
CHANGED
|
@@ -54,8 +54,6 @@
|
|
|
54
54
|
"yuv.form.element.organization-set.classify.icon.title": "Group",
|
|
55
55
|
"yuv.form.element.organization.classify.icon.title": "User",
|
|
56
56
|
"yuv.form.element.organization.freetext.tooltip": "Free text – not a resolved user or group",
|
|
57
|
-
"yuv.form.element.reference.classify.icon.title": "Reference",
|
|
58
|
-
"yuv.form.element.reference.open.title": "Open referenced object",
|
|
59
57
|
"yuv.form.element.range-select-date.custom.overlay.button.apply": "Apply",
|
|
60
58
|
"yuv.form.element.range-select-date.custom.overlay.title": "User-defined time period",
|
|
61
59
|
"yuv.form.element.range-select-date.option.any": "Any date",
|
|
@@ -73,6 +71,8 @@
|
|
|
73
71
|
"yuv.form.element.range-select-filesize.option.medium": "Medium (1–10 MB)",
|
|
74
72
|
"yuv.form.element.range-select-filesize.option.small": "Small (<1 MB)",
|
|
75
73
|
"yuv.form.element.range-select-filesize.option.verylarge": "Very large (>100 MB)",
|
|
74
|
+
"yuv.form.element.reference.classify.icon.title": "Reference",
|
|
75
|
+
"yuv.form.element.reference.open.title": "Open referenced object",
|
|
76
76
|
"yuv.object-metadata.button.save": "Save",
|
|
77
77
|
"yuv.audit.fetch.error": "Unable to load history entries",
|
|
78
78
|
"yuv.audit.label.paging": "Page navigation",
|
|
@@ -214,9 +214,9 @@
|
|
|
214
214
|
"yuv.sort.tooltip": "Sort",
|
|
215
215
|
"yuv.action.empty.selection": "",
|
|
216
216
|
"yuv.tile-config.button.close": "Close",
|
|
217
|
-
"yuv.tile-config.error.title-required": "A title attribute is required. Select an attribute for the title slot.",
|
|
218
217
|
"yuv.tile-config.button.reset": "Reset",
|
|
219
218
|
"yuv.tile-config.button.save": "Save changes",
|
|
219
|
+
"yuv.tile-config.error.title-required": "A title attribute is required. Select an attribute for the title slot.",
|
|
220
220
|
"yuv.tile-config.icon-select.pick": "Select icon",
|
|
221
221
|
"yuv.tile-config.icon-select.reset": "Reset",
|
|
222
222
|
"yuv.tile-config.slot.action.headline": "Actions",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yuuvis/client-framework",
|
|
3
|
-
"version": "3.17.
|
|
3
|
+
"version": "3.17.1",
|
|
4
4
|
"author": "OPTIMAL SYSTEMS GmbH <npm@optimal-systems.de>",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"peerDependencies": {
|
|
@@ -8,16 +8,16 @@
|
|
|
8
8
|
"@angular/common": "^21.2.19",
|
|
9
9
|
"@angular/core": "^21.2.19",
|
|
10
10
|
"angular-gridster2": "^21.0.1",
|
|
11
|
-
"@yuuvis/client-core": "^3.17.
|
|
12
|
-
"@yuuvis/client-shell-core": "^3.17.
|
|
13
|
-
"@yuuvis/client-components": "^3.17.
|
|
11
|
+
"@yuuvis/client-core": "^3.17.1",
|
|
12
|
+
"@yuuvis/client-shell-core": "^3.17.1",
|
|
13
|
+
"@yuuvis/client-components": "^3.17.1",
|
|
14
14
|
"ng-dynamic-component": "^10.8.2",
|
|
15
15
|
"modern-normalize": "^3.0.1"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"@angular/material": "^21.2.14",
|
|
19
19
|
"@ngrx/signals": "^21.1.0",
|
|
20
|
-
"@yuuvis/material": "^3.17.
|
|
20
|
+
"@yuuvis/material": "^3.17.1",
|
|
21
21
|
"@yuuvis/media-viewer": "^4.0.0",
|
|
22
22
|
"angular-split": "^20.0.0",
|
|
23
23
|
"vis-network": "^10.0.2",
|