{"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-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 { 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, Input, 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') 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 { 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  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(field.propertyType);\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    };\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() }\"></ng-container>\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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"}