@yuuvis/client-framework 2.3.8 → 2.3.10

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.
Files changed (28) hide show
  1. package/fesm2022/yuuvis-client-framework-forms.mjs +35 -13
  2. package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
  3. package/fesm2022/yuuvis-client-framework-metadata-form.mjs +17 -18
  4. package/fesm2022/yuuvis-client-framework-metadata-form.mjs.map +1 -1
  5. package/fesm2022/yuuvis-client-framework-object-details.mjs +28 -30
  6. package/fesm2022/yuuvis-client-framework-object-details.mjs.map +1 -1
  7. package/fesm2022/yuuvis-client-framework-object-flavor.mjs +2 -2
  8. package/fesm2022/yuuvis-client-framework-object-flavor.mjs.map +1 -1
  9. package/fesm2022/yuuvis-client-framework-object-form.mjs +4 -4
  10. package/fesm2022/yuuvis-client-framework-object-form.mjs.map +1 -1
  11. package/fesm2022/yuuvis-client-framework-sort.mjs +39 -15
  12. package/fesm2022/yuuvis-client-framework-sort.mjs.map +1 -1
  13. package/fesm2022/yuuvis-client-framework-tile-list.mjs +10 -5
  14. package/fesm2022/yuuvis-client-framework-tile-list.mjs.map +1 -1
  15. package/fesm2022/yuuvis-client-framework-widget-grid.mjs +28 -15
  16. package/fesm2022/yuuvis-client-framework-widget-grid.mjs.map +1 -1
  17. package/fesm2022/yuuvis-client-framework.mjs +1 -1
  18. package/fesm2022/yuuvis-client-framework.mjs.map +1 -1
  19. package/forms/lib/elements/data-grid/data-grid/data-grid.component.d.ts +3 -4
  20. package/lib/assets/i18n/de.json +8 -6
  21. package/lib/assets/i18n/en.json +2 -0
  22. package/metadata-form/lib/metadata-form-field/metadata-form-field.component.d.ts +1 -1
  23. package/object-details/lib/object-audit/object-audit.component.d.ts +3 -8
  24. package/package.json +8 -8
  25. package/sort/lib/sort/sort.component.d.ts +5 -1
  26. package/tile-list/lib/tile/tile.component.d.ts +2 -1
  27. package/tile-list/lib/tile-list/tile-list.component.d.ts +2 -1
  28. package/widget-grid/lib/widget-grid-registry.service.d.ts +1 -0
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, inject, ElementRef, DestroyRef, signal, effect, input, Directive, TemplateRef, Input, untracked, computed, ViewEncapsulation, Component } from '@angular/core';
2
+ import { Injectable, inject, ElementRef, DestroyRef, signal, effect, input, Directive, TemplateRef, Input, computed, ViewEncapsulation, Component } from '@angular/core';
3
3
  import { Situation, SystemService } from '@yuuvis/client-core';
4
4
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
5
  import * as i1 from '@yuuvis/client-framework/common';
@@ -328,31 +328,31 @@ class MetadataFormFieldComponent {
328
328
  this.#registry = inject(MetadataFormElementRegistry);
329
329
  this.#system = inject(SystemService);
330
330
  this.#ngControl = injectNgControl();
331
- this.elementTemplate = signal(undefined);
332
331
  this.readonly = false;
333
332
  this.formChangedSubject = input();
334
333
  this.formField = input.required({ alias: 'field' });
335
- this.#fieldEffect = effect(() => {
334
+ // elementTemplate = signal<TemplateRef<any> | undefined>(undefined);
335
+ this.elementTemplate = computed(() => {
336
336
  const field = this.formField();
337
- untracked(() => {
338
- // check for template by name ...
339
- const templateByName = this.#registry.getElementTemplate(`${this.#registry.NAME_PROPERTY_PREFIX}${field.name}`, this.situation());
340
- if (templateByName)
341
- this.elementTemplate.set(templateByName);
342
- else {
343
- if (!field._internalType)
344
- field._internalType = this.#system.getInternalFormElementType(field.propertyType);
345
- this.elementTemplate.set(this.#registry.getElementTemplate(field._internalType, this.situation()));
337
+ // TODO: set readonly state based on ...????... schema?
338
+ this.readonly = false;
339
+ const templateByName = this.#registry.getElementTemplate(`${this.#registry.NAME_PROPERTY_PREFIX}${field.name}`, this.situation());
340
+ if (templateByName) {
341
+ return templateByName;
342
+ }
343
+ else {
344
+ if (!field._internalType) {
345
+ field._internalType = this.#system.getInternalFormElementType(field.propertyType);
346
346
  }
347
- // TODO: set readonly state based on ...????... schema?
348
- this.readonly = false;
349
- });
347
+ return this.#registry.getElementTemplate(field._internalType, this.situation());
348
+ }
350
349
  });
351
350
  this.context = computed(() => {
352
351
  const field = this.formField();
353
352
  field.required = this.situation() !== Situation.SEARCH ? field.required : false;
353
+ const label = this.#system.getLocalizedResource(`${field.name}_label`) || field.label || field.name;
354
354
  return {
355
- label: field.label || field.name,
355
+ label,
356
356
  description: field.description,
357
357
  situation: this.situation() || Situation.EDIT,
358
358
  field,
@@ -368,14 +368,13 @@ class MetadataFormFieldComponent {
368
368
  #registry;
369
369
  #system;
370
370
  #ngControl;
371
- #fieldEffect;
372
371
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MetadataFormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
373
372
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", 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 }, 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 class=\"form-field t-{{ field._internalType }}\" #formField [attr.data-name]=\"field.name\" [ngClass]=\"{ disabled: !!readonly }\">\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", 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-warning-container);--label-color: var(--ymt-on-warning-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 mat-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 }); }
374
373
  }
375
374
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MetadataFormFieldComponent, decorators: [{
376
375
  type: Component,
377
376
  args: [{ selector: 'yuv-metadata-form-field', standalone: true, imports: [NgClass, NgTemplateOutlet, MatFormFieldModule], hostDirectives: [NoopValueAccessorDirective], encapsulation: ViewEncapsulation.None, host: {
378
- class: 'yuv-metadata-form-field',
377
+ class: 'yuv-metadata-form-field'
379
378
  }, template: "@let field = formField();\n@let et = elementTemplate();\n\n@if (field) {\n <div class=\"form-field t-{{ field._internalType }}\" #formField [attr.data-name]=\"field.name\" [ngClass]=\"{ disabled: !!readonly }\">\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", 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-warning-container);--label-color: var(--ymt-on-warning-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 mat-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"] }]
380
379
  }] });
381
380
 
@@ -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-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/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 // 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 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\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","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 @Input() yuvMetadataElementTemplate?: 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 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 { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, effect, inject, input, signal, TemplateRef, untracked, ViewEncapsulation } from '@angular/core';\n\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\nimport { 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\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\n #ngControl = injectNgControl();\n elementTemplate = signal<TemplateRef<any> | undefined>(undefined);\n readonly = false;\n\n formChangedSubject = input<Subject<ParentFormChangedEvent>>()\n formField = input.required<ObjectTypeField>({ alias: 'field' });\n #fieldEffect = effect(() => {\n const field = this.formField();\n\n untracked(() => {\n // check for template by name ...\n const templateByName = this.#registry.getElementTemplate(`${this.#registry.NAME_PROPERTY_PREFIX}${field.name}`, this.situation());\n if (templateByName) this.elementTemplate.set(templateByName);\n else {\n if (!field._internalType) field._internalType = this.#system.getInternalFormElementType(field.propertyType);\n this.elementTemplate.set(this.#registry.getElementTemplate(field._internalType, this.situation()));\n }\n // TODO: set readonly state based on ...????... schema?\n this.readonly = false;\n });\n });\n \n context = computed<MetadataFormFieldContext>(() => {\n const field = this.formField();\n field.required = this.situation() !== Situation.SEARCH ? field.required : false;\n return {\n label: field.label || field.name,\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 class=\"form-field t-{{ field._internalType }}\" #formField [attr.data-name]=\"field.name\" [ngClass]=\"{ disabled: !!readonly }\">\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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"}
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-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/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 // 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 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\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","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 @Input() yuvMetadataElementTemplate?: 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 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 { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, effect, inject, input, signal, TemplateRef, untracked, ViewEncapsulation } from '@angular/core';\n\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\nimport { 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\n #ngControl = injectNgControl();\n readonly = false;\n\n formChangedSubject = input<Subject<ParentFormChangedEvent>>();\n formField = input.required<ObjectTypeField>({ alias: 'field' });\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 templateByName = this.#registry.getElementTemplate(`${this.#registry.NAME_PROPERTY_PREFIX}${field.name}`, this.situation());\n if (templateByName) {\n return templateByName;\n } else {\n if (!field._internalType) {\n field._internalType = this.#system.getInternalFormElementType(field.propertyType);\n }\n\n return this.#registry.getElementTemplate(field._internalType, this.situation());\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.#system.getLocalizedResource(`${field.name}_label`) || 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 class=\"form-field t-{{ field._internalType }}\" #formField [attr.data-name]=\"field.name\" [ngClass]=\"{ disabled: !!readonly }\">\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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"}
@@ -194,11 +194,10 @@ class ObjectAuditComponent {
194
194
  filter: YUV_ICONS.filter,
195
195
  arrowNext: YUV_ICONS.arrowNext
196
196
  };
197
- this.yuvBusyOverlay = true;
197
+ this.auditsRes = signal(undefined);
198
198
  this.resolvedItems = signal([]);
199
- this.searchPanelShow = false;
200
- this.error = false;
201
- this.busy = false;
199
+ this.error = signal(false);
200
+ this.busy = signal(false);
202
201
  this.searchActions = [];
203
202
  this.auditLabels = {};
204
203
  this.dmsObject = input(undefined);
@@ -207,7 +206,7 @@ class ObjectAuditComponent {
207
206
  if (!o) {
208
207
  this._objectID = undefined;
209
208
  this._objectTypeID = undefined;
210
- this.auditsRes = undefined;
209
+ this.auditsRes.set(undefined);
211
210
  }
212
211
  else if (!this._objectID || this._objectID !== o.id) {
213
212
  this._objectID = o.id;
@@ -261,26 +260,24 @@ class ObjectAuditComponent {
261
260
  }
262
261
  });
263
262
  }
264
- fetchAuditEntries() {
263
+ #fetchAuditEntries() {
265
264
  if (!this._objectID || !this._objectTypeID)
266
265
  return;
267
- this.error = false;
268
- this.busy = true;
269
- this.auditService
270
- .getAuditEntries(this._objectID, { skipActions: this.skipActions() })
271
- .subscribe({
266
+ this.error.set(false);
267
+ this.busy.set(true);
268
+ this.auditService.getAuditEntries(this._objectID, { skipActions: this.skipActions() }).subscribe({
272
269
  next: (res) => {
273
- this.busy = false;
274
- this.auditsRes = res;
275
- this.resolvedItems.set(this.mapResult(res));
270
+ this.busy.set(false);
271
+ this.auditsRes.set(res);
272
+ this.resolvedItems.set(this.#mapResult(res));
276
273
  },
277
274
  error: () => {
278
- this.busy = false;
275
+ this.busy.set(false);
279
276
  this.onError();
280
277
  }
281
278
  });
282
279
  }
283
- mapResult(res) {
280
+ #mapResult(res) {
284
281
  return (res.items
285
282
  // TODO: Remove this filter once the system:ren:text audit lifecycle planning is complete and the tag's purpose is fully defined.
286
283
  // https://help.optimal-systems.com/yuuvis/Momentum/latest/index.html#_content_renditions_asynchronous_full_text_indexing.html
@@ -289,7 +286,7 @@ class ObjectAuditComponent {
289
286
  const r = { ...i, label: this.auditLabels['a' + i.action] };
290
287
  // tag related audits
291
288
  if ([110, 210, 310].includes(i.action)) {
292
- const params = this.getAuditEntryParams(i);
289
+ const params = this.#getAuditEntryParams(i);
293
290
  if (params) {
294
291
  const localizedLabel = `${params[0]}:${params[1]}`;
295
292
  r.more = `${this.system.getLocalizedLabel(params[0]) ?? params[0]}: ${this.system.getLocalizedLabel(localizedLabel) ?? localizedLabel}`;
@@ -297,7 +294,7 @@ class ObjectAuditComponent {
297
294
  }
298
295
  // restore audit
299
296
  else if (i.action === 325) {
300
- const params = this.getAuditEntryParams(i);
297
+ const params = this.#getAuditEntryParams(i);
301
298
  r.more = this.translate.instant('yuv.audit.label.update.restore.more', { version: params[0] || '[?]' });
302
299
  }
303
300
  // custom audits
@@ -307,7 +304,7 @@ class ObjectAuditComponent {
307
304
  return r;
308
305
  }));
309
306
  }
310
- getAuditEntryParams(auditItem) {
307
+ #getAuditEntryParams(auditItem) {
311
308
  const m = auditItem.detail.match(/\[(.*?)\]/);
312
309
  return m && m[1] ? m[1].split(',').map((i) => i.trim()) : [];
313
310
  }
@@ -315,18 +312,19 @@ class ObjectAuditComponent {
315
312
  * Execute a query from the search panel.
316
313
  */
317
314
  query() {
318
- this.fetchAuditEntries();
315
+ this.#fetchAuditEntries();
319
316
  }
320
317
  goToPage(page) {
321
- if (this.auditsRes) {
322
- this.busy = true;
318
+ const currentAuditsRes = this.auditsRes();
319
+ if (currentAuditsRes) {
320
+ this.busy.set(true);
323
321
  this.auditService
324
- .getPage(this.auditsRes, page)
325
- .pipe(finalize(() => (this.busy = false)))
322
+ .getPage(currentAuditsRes, page)
323
+ .pipe(finalize(() => this.busy.set(false)))
326
324
  .subscribe({
327
325
  next: (res) => {
328
- this.auditsRes = res;
329
- this.resolvedItems.set(this.mapResult(res));
326
+ this.auditsRes.set(res);
327
+ this.resolvedItems.set(this.#mapResult(res));
330
328
  },
331
329
  error: () => {
332
330
  this.onError();
@@ -335,15 +333,15 @@ class ObjectAuditComponent {
335
333
  }
336
334
  }
337
335
  onError() {
338
- this.auditsRes = undefined;
339
- this.error = true;
336
+ this.auditsRes.set(undefined);
337
+ this.error.set(true);
340
338
  }
341
339
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ObjectAuditComponent, deps: [{ token: i1$1.AuditService }, { token: i1$1.EventService }, { token: i1$1.SystemService }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
342
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: ObjectAuditComponent, isStandalone: true, selector: "yuv-object-audit", inputs: { dmsObject: { classPropertyName: "dmsObject", publicName: "dmsObject", isSignal: true, isRequired: false, transformFunction: null }, skipActions: { classPropertyName: "skipActions", publicName: "skipActions", isSignal: true, isRequired: false, transformFunction: null }, allActions: { classPropertyName: "allActions", publicName: "allActions", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"yuv-audit\" [ngClass]=\"{ singleEntry: auditsRes?.items?.length === 1, onPage: auditsRes && auditsRes.page > 1 }\" [yuvBusyOverlay]=\"busy\">\n @if (error) {\n <div class=\"error\">\n <div translate>yuv.audit.fetch.error</div>\n </div>\n }\n\n @if (auditsRes) {\n <!-- list of audits -->\n @let resItems = resolvedItems();\n @if (resItems.length) {\n <ul class=\"timeline\" [attr.aria-label]=\"'yuv.audit.timeline' | translate\">\n @for (item of resItems; track $index) {\n <li class=\"audit\" attr.aria-labelledby=\"'title-{{ $index }} creator-{{ $index }} date-{{ $index }}'\">\n <time [attr.datetime]=\"item.creationDate\" class=\"date\">{{ item.creationDate | localeDate }}</time>\n <div class=\"node\">\n <div class=\"label\">\n <span class=\"title\" id=\"title-{{ $index }}\">{{ item.label }}</span>\n </div>\n <div class=\"more meta\">{{ item.more }}</div>\n <div class=\"creator meta\" id=\"creator-{{ $index }}\">{{ item.createdBy.title }}</div>\n </div>\n </li>\n }\n </ul>\n } @else {\n <div class=\"empty\" translate>yuv.audit.result.empty</div>\n }\n\n <!-- controls -->\n @if (auditsRes.hasMoreItems || auditsRes.page > 1) {\n <div class=\"footer\" yuvOfflineDisabled>\n <div class=\"paging\">\n <button\n ymtIconButton\n [attr.aria-label]=\"'yuv.audit.label.paging.prev' | translate\"\n [disabled]=\"auditsRes.page === 1\"\n (click)=\"goToPage(auditsRes.page - 1)\"\n >\n <mat-icon>chevron_left</mat-icon>\n </button>\n <div class=\"page\">\n {{ auditsRes.page }}\n </div>\n <button\n ymtIconButton\n [attr.aria-label]=\"'yuv.audit.label.paging.next' | translate\"\n [disabled]=\"!auditsRes.hasMoreItems\"\n (click)=\"goToPage(auditsRes.page + 1)\"\n >\n <mat-icon>chevron_right</mat-icon>\n </button>\n </div>\n </div>\n }\n }\n</div>\n", styles: [":host{--_object-audit-panel-background: var(--object-audit-panel-background, var(--ymt-surface))}:host .yuv-audit{position:relative;height:100%;display:grid;grid-template-columns:1fr;grid-template-rows:1fr auto;grid-template-areas:\"items\" \"footer\";background-color:var(--_object-audit-panel-background);container-type:inline-size;container-name:cmp}:host .yuv-audit .error{grid-area:items;display:flex;flex-flow:column;align-items:center;justify-content:center}:host .yuv-audit .error>div{background-color:var(--ymt-danger-container);color:var(--ymt-on-danger-container);margin:var(--ymt-spacing-m);padding:var(--ymt-spacing-m);border-radius:var(--ymt-spacing-xs)}:host .yuv-audit .audits{grid-area:items}:host .yuv-audit .empty{grid-area:items;display:flex;flex-flow:column;align-items:center;justify-content:center;color:var(--ymt-text-color-subtle)}:host .yuv-audit .footer{grid-area:footer;background-color:var(--ymt-surface);border-top:1px solid var(--ymt-outline-variant);display:flex}:host .yuv-audit .footer .paging{flex:1;display:flex;align-items:center;justify-content:flex-end;padding:var(--ymt-spacing-xs)}:host .yuv-audit .footer .paging .page{padding:0 var(--ymt-spacing-xs)}:host .timeline{--track-color: var(--ymt-outline-variant);--track-size: var(--ymt-spacing-4xl);margin-block-start:0;margin-block-end:0;overflow-y:auto;padding:var(--ymt-spacing-3xl) var(--ymt-spacing-2xs) var(--ymt-spacing-3xl) var(--ymt-spacing-l)}@container (max-width: 450px){:host .timeline .audit{grid-template-columns:var(--track-size) auto;grid-template-rows:var(--track-size) auto;grid-template-areas:\"line date\" \"node node\"}:host .timeline .audit .date{justify-self:start}:host .timeline .audit .date,:host .timeline .audit:after{translate:0 .5em}:host .timeline .audit .node{margin:0;width:100%}:host .timeline .audit:last-child:before{height:100%}}:host .timeline :where(.audit){display:grid;grid-template-columns:1fr var(--track-size) 1fr;grid-template-areas:\"date line node\"}:host .timeline :where(.audit) .date{grid-area:date;justify-self:end;align-self:center}:host .timeline :where(.audit) .node{grid-area:node;justify-self:start;background-color:var(--ymt-surface-panel);border:1px solid var(--ymt-outline-variant);border-radius:.25em;margin:var(--ymt-spacing-xs) 0;padding:var(--ymt-spacing-m);box-sizing:border-box;display:grid;gap:var(--ymt-spacing-3xs)}:host .timeline :where(.audit) .node .label{display:flex;align-items:end}:host .timeline :where(.audit) .node .label .title{flex:1;word-break:break-word;font-weight:700;color:var(--ymt-text-color)}:host .timeline :where(.audit) .node .label .version{line-height:1em;border-radius:2px;background-color:rgb(from var(--ymt-primary) r g b/.15);color:var(--ymt-primary);font:var(--ymt-font-body-subtle);font-family:monospace;align-self:center;margin-left:var(--ymt-spacing-m);padding:4px 6px;display:block}:host .timeline :where(.audit) .node .meta{color:var(--ymt-text-color-subtle)}:host .timeline :where(.audit):before{grid-area:line;content:\"\";width:calc(50% + 1px);height:100%;border-inline-end:2px solid var(--track-color)}:host .timeline :where(.audit):after{grid-area:line;content:\"\";width:14px;height:14px;border-radius:50%;border:2px solid var(--track-color);background-color:var(--ymt-surface-panel);box-sizing:border-box;align-self:center;justify-self:center}:host .timeline :where(.audit):first-child:before{height:50%;align-self:end}:host .timeline :where(.audit):last-child:before{height:50%;align-self:start}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "pipe", type: LocaleDatePipe, name: "localeDate" }, { kind: "directive", type: BusyOverlayDirective, selector: "[yuvBusyOverlay]", inputs: ["yuvBusyOverlay", "yuvBusyOverlayConfig"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.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"] }] }); }
340
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: ObjectAuditComponent, isStandalone: true, selector: "yuv-object-audit", inputs: { dmsObject: { classPropertyName: "dmsObject", publicName: "dmsObject", isSignal: true, isRequired: false, transformFunction: null }, skipActions: { classPropertyName: "skipActions", publicName: "skipActions", isSignal: true, isRequired: false, transformFunction: null }, allActions: { classPropertyName: "allActions", publicName: "allActions", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@let auditsResult = auditsRes();\n\n<div class=\"yuv-audit\" [ngClass]=\"{ singleEntry: auditsResult?.items?.length === 1, onPage: auditsResult && auditsResult.page > 1 }\" [yuvBusyOverlay]=\"busy()\">\n @if (error()) {\n <div class=\"error\">\n <div translate>yuv.audit.fetch.error</div>\n </div>\n }\n\n @if (auditsResult) {\n <!-- list of audits -->\n @let resItems = resolvedItems();\n @if (resItems.length) {\n <ul class=\"timeline\" [attr.aria-label]=\"'yuv.audit.timeline' | translate\">\n @for (item of resItems; track $index) {\n <li class=\"audit\" attr.aria-labelledby=\"'title-{{ $index }} creator-{{ $index }} date-{{ $index }}'\">\n <time [attr.datetime]=\"item.creationDate\" class=\"date\">{{ item.creationDate | localeDate }}</time>\n <div class=\"node\">\n <div class=\"label\">\n <span class=\"title\" id=\"title-{{ $index }}\">{{ item.label }}</span>\n </div>\n <div class=\"more meta\">{{ item.more }}</div>\n <div class=\"creator meta\" id=\"creator-{{ $index }}\">{{ item.createdBy.title }}</div>\n </div>\n </li>\n }\n </ul>\n } @else {\n <div class=\"empty\" translate>yuv.audit.result.empty</div>\n }\n\n <!-- controls -->\n @if (auditsResult.hasMoreItems || auditsResult.page > 1) {\n <div class=\"footer\" yuvOfflineDisabled>\n <div class=\"paging\">\n <button\n ymtIconButton\n [attr.aria-label]=\"'yuv.audit.label.paging.prev' | translate\"\n [disabled]=\"auditsResult.page === 1\"\n (click)=\"goToPage(auditsResult.page - 1)\"\n >\n <mat-icon>chevron_left</mat-icon>\n </button>\n <div class=\"page\">\n {{ auditsResult.page }}\n </div>\n <button\n ymtIconButton\n [attr.aria-label]=\"'yuv.audit.label.paging.next' | translate\"\n [disabled]=\"!auditsResult.hasMoreItems\"\n (click)=\"goToPage(auditsResult.page + 1)\"\n >\n <mat-icon>chevron_right</mat-icon>\n </button>\n </div>\n </div>\n }\n }\n</div>\n", styles: [":host{--_object-audit-panel-background: var(--object-audit-panel-background, var(--ymt-surface))}:host .yuv-audit{position:relative;height:100%;display:grid;grid-template-columns:1fr;grid-template-rows:1fr auto;grid-template-areas:\"items\" \"footer\";background-color:var(--_object-audit-panel-background);container-type:inline-size;container-name:cmp}:host .yuv-audit .error{grid-area:items;display:flex;flex-flow:column;align-items:center;justify-content:center}:host .yuv-audit .error>div{background-color:var(--ymt-danger-container);color:var(--ymt-on-danger-container);margin:var(--ymt-spacing-m);padding:var(--ymt-spacing-m);border-radius:var(--ymt-spacing-xs)}:host .yuv-audit .audits{grid-area:items}:host .yuv-audit .empty{grid-area:items;display:flex;flex-flow:column;align-items:center;justify-content:center;color:var(--ymt-text-color-subtle)}:host .yuv-audit .footer{grid-area:footer;background-color:var(--ymt-surface);border-top:1px solid var(--ymt-outline-variant);display:flex}:host .yuv-audit .footer .paging{flex:1;display:flex;align-items:center;justify-content:flex-end;padding:var(--ymt-spacing-xs)}:host .yuv-audit .footer .paging .page{padding:0 var(--ymt-spacing-xs)}:host .timeline{--track-color: var(--ymt-outline-variant);--track-size: var(--ymt-spacing-4xl);margin-block-start:0;margin-block-end:0;overflow-y:auto;padding:var(--ymt-spacing-3xl) var(--ymt-spacing-2xs) var(--ymt-spacing-3xl) var(--ymt-spacing-l)}@container (max-width: 450px){:host .timeline .audit{grid-template-columns:var(--track-size) auto;grid-template-rows:var(--track-size) auto;grid-template-areas:\"line date\" \"node node\"}:host .timeline .audit .date{justify-self:start}:host .timeline .audit .date,:host .timeline .audit:after{translate:0 .5em}:host .timeline .audit .node{margin:0;width:100%}:host .timeline .audit:last-child:before{height:100%}}:host .timeline :where(.audit){display:grid;grid-template-columns:1fr var(--track-size) 1fr;grid-template-areas:\"date line node\"}:host .timeline :where(.audit) .date{grid-area:date;justify-self:end;align-self:center}:host .timeline :where(.audit) .node{grid-area:node;justify-self:start;background-color:var(--ymt-surface-panel);border:1px solid var(--ymt-outline-variant);border-radius:.25em;margin:var(--ymt-spacing-xs) 0;padding:var(--ymt-spacing-m);box-sizing:border-box;display:grid;gap:var(--ymt-spacing-3xs)}:host .timeline :where(.audit) .node .label{display:flex;align-items:end}:host .timeline :where(.audit) .node .label .title{flex:1;word-break:break-word;font-weight:700;color:var(--ymt-text-color)}:host .timeline :where(.audit) .node .label .version{line-height:1em;border-radius:2px;background-color:rgb(from var(--ymt-primary) r g b/.15);color:var(--ymt-primary);font:var(--ymt-font-body-subtle);font-family:monospace;align-self:center;margin-left:var(--ymt-spacing-m);padding:4px 6px;display:block}:host .timeline :where(.audit) .node .meta{color:var(--ymt-text-color-subtle)}:host .timeline :where(.audit):before{grid-area:line;content:\"\";width:calc(50% + 1px);height:100%;border-inline-end:2px solid var(--track-color)}:host .timeline :where(.audit):after{grid-area:line;content:\"\";width:14px;height:14px;border-radius:50%;border:2px solid var(--track-color);background-color:var(--ymt-surface-panel);box-sizing:border-box;align-self:center;justify-self:center}:host .timeline :where(.audit):first-child:before{height:50%;align-self:end}:host .timeline :where(.audit):last-child:before{height:50%;align-self:start}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "pipe", type: LocaleDatePipe, name: "localeDate" }, { kind: "directive", type: BusyOverlayDirective, selector: "[yuvBusyOverlay]", inputs: ["yuvBusyOverlay", "yuvBusyOverlayConfig"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.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"] }] }); }
343
341
  }
344
342
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ObjectAuditComponent, decorators: [{
345
343
  type: Component,
346
- args: [{ selector: 'yuv-object-audit', standalone: true, imports: [CommonModule, ReactiveFormsModule, LocaleDatePipe, BusyOverlayDirective, TranslateModule, MatIconModule, YmtIconButtonDirective], template: "<div class=\"yuv-audit\" [ngClass]=\"{ singleEntry: auditsRes?.items?.length === 1, onPage: auditsRes && auditsRes.page > 1 }\" [yuvBusyOverlay]=\"busy\">\n @if (error) {\n <div class=\"error\">\n <div translate>yuv.audit.fetch.error</div>\n </div>\n }\n\n @if (auditsRes) {\n <!-- list of audits -->\n @let resItems = resolvedItems();\n @if (resItems.length) {\n <ul class=\"timeline\" [attr.aria-label]=\"'yuv.audit.timeline' | translate\">\n @for (item of resItems; track $index) {\n <li class=\"audit\" attr.aria-labelledby=\"'title-{{ $index }} creator-{{ $index }} date-{{ $index }}'\">\n <time [attr.datetime]=\"item.creationDate\" class=\"date\">{{ item.creationDate | localeDate }}</time>\n <div class=\"node\">\n <div class=\"label\">\n <span class=\"title\" id=\"title-{{ $index }}\">{{ item.label }}</span>\n </div>\n <div class=\"more meta\">{{ item.more }}</div>\n <div class=\"creator meta\" id=\"creator-{{ $index }}\">{{ item.createdBy.title }}</div>\n </div>\n </li>\n }\n </ul>\n } @else {\n <div class=\"empty\" translate>yuv.audit.result.empty</div>\n }\n\n <!-- controls -->\n @if (auditsRes.hasMoreItems || auditsRes.page > 1) {\n <div class=\"footer\" yuvOfflineDisabled>\n <div class=\"paging\">\n <button\n ymtIconButton\n [attr.aria-label]=\"'yuv.audit.label.paging.prev' | translate\"\n [disabled]=\"auditsRes.page === 1\"\n (click)=\"goToPage(auditsRes.page - 1)\"\n >\n <mat-icon>chevron_left</mat-icon>\n </button>\n <div class=\"page\">\n {{ auditsRes.page }}\n </div>\n <button\n ymtIconButton\n [attr.aria-label]=\"'yuv.audit.label.paging.next' | translate\"\n [disabled]=\"!auditsRes.hasMoreItems\"\n (click)=\"goToPage(auditsRes.page + 1)\"\n >\n <mat-icon>chevron_right</mat-icon>\n </button>\n </div>\n </div>\n }\n }\n</div>\n", styles: [":host{--_object-audit-panel-background: var(--object-audit-panel-background, var(--ymt-surface))}:host .yuv-audit{position:relative;height:100%;display:grid;grid-template-columns:1fr;grid-template-rows:1fr auto;grid-template-areas:\"items\" \"footer\";background-color:var(--_object-audit-panel-background);container-type:inline-size;container-name:cmp}:host .yuv-audit .error{grid-area:items;display:flex;flex-flow:column;align-items:center;justify-content:center}:host .yuv-audit .error>div{background-color:var(--ymt-danger-container);color:var(--ymt-on-danger-container);margin:var(--ymt-spacing-m);padding:var(--ymt-spacing-m);border-radius:var(--ymt-spacing-xs)}:host .yuv-audit .audits{grid-area:items}:host .yuv-audit .empty{grid-area:items;display:flex;flex-flow:column;align-items:center;justify-content:center;color:var(--ymt-text-color-subtle)}:host .yuv-audit .footer{grid-area:footer;background-color:var(--ymt-surface);border-top:1px solid var(--ymt-outline-variant);display:flex}:host .yuv-audit .footer .paging{flex:1;display:flex;align-items:center;justify-content:flex-end;padding:var(--ymt-spacing-xs)}:host .yuv-audit .footer .paging .page{padding:0 var(--ymt-spacing-xs)}:host .timeline{--track-color: var(--ymt-outline-variant);--track-size: var(--ymt-spacing-4xl);margin-block-start:0;margin-block-end:0;overflow-y:auto;padding:var(--ymt-spacing-3xl) var(--ymt-spacing-2xs) var(--ymt-spacing-3xl) var(--ymt-spacing-l)}@container (max-width: 450px){:host .timeline .audit{grid-template-columns:var(--track-size) auto;grid-template-rows:var(--track-size) auto;grid-template-areas:\"line date\" \"node node\"}:host .timeline .audit .date{justify-self:start}:host .timeline .audit .date,:host .timeline .audit:after{translate:0 .5em}:host .timeline .audit .node{margin:0;width:100%}:host .timeline .audit:last-child:before{height:100%}}:host .timeline :where(.audit){display:grid;grid-template-columns:1fr var(--track-size) 1fr;grid-template-areas:\"date line node\"}:host .timeline :where(.audit) .date{grid-area:date;justify-self:end;align-self:center}:host .timeline :where(.audit) .node{grid-area:node;justify-self:start;background-color:var(--ymt-surface-panel);border:1px solid var(--ymt-outline-variant);border-radius:.25em;margin:var(--ymt-spacing-xs) 0;padding:var(--ymt-spacing-m);box-sizing:border-box;display:grid;gap:var(--ymt-spacing-3xs)}:host .timeline :where(.audit) .node .label{display:flex;align-items:end}:host .timeline :where(.audit) .node .label .title{flex:1;word-break:break-word;font-weight:700;color:var(--ymt-text-color)}:host .timeline :where(.audit) .node .label .version{line-height:1em;border-radius:2px;background-color:rgb(from var(--ymt-primary) r g b/.15);color:var(--ymt-primary);font:var(--ymt-font-body-subtle);font-family:monospace;align-self:center;margin-left:var(--ymt-spacing-m);padding:4px 6px;display:block}:host .timeline :where(.audit) .node .meta{color:var(--ymt-text-color-subtle)}:host .timeline :where(.audit):before{grid-area:line;content:\"\";width:calc(50% + 1px);height:100%;border-inline-end:2px solid var(--track-color)}:host .timeline :where(.audit):after{grid-area:line;content:\"\";width:14px;height:14px;border-radius:50%;border:2px solid var(--track-color);background-color:var(--ymt-surface-panel);box-sizing:border-box;align-self:center;justify-self:center}:host .timeline :where(.audit):first-child:before{height:50%;align-self:end}:host .timeline :where(.audit):last-child:before{height:50%;align-self:start}\n"] }]
344
+ args: [{ selector: 'yuv-object-audit', standalone: true, imports: [CommonModule, ReactiveFormsModule, LocaleDatePipe, BusyOverlayDirective, TranslateModule, MatIconModule, YmtIconButtonDirective], template: "@let auditsResult = auditsRes();\n\n<div class=\"yuv-audit\" [ngClass]=\"{ singleEntry: auditsResult?.items?.length === 1, onPage: auditsResult && auditsResult.page > 1 }\" [yuvBusyOverlay]=\"busy()\">\n @if (error()) {\n <div class=\"error\">\n <div translate>yuv.audit.fetch.error</div>\n </div>\n }\n\n @if (auditsResult) {\n <!-- list of audits -->\n @let resItems = resolvedItems();\n @if (resItems.length) {\n <ul class=\"timeline\" [attr.aria-label]=\"'yuv.audit.timeline' | translate\">\n @for (item of resItems; track $index) {\n <li class=\"audit\" attr.aria-labelledby=\"'title-{{ $index }} creator-{{ $index }} date-{{ $index }}'\">\n <time [attr.datetime]=\"item.creationDate\" class=\"date\">{{ item.creationDate | localeDate }}</time>\n <div class=\"node\">\n <div class=\"label\">\n <span class=\"title\" id=\"title-{{ $index }}\">{{ item.label }}</span>\n </div>\n <div class=\"more meta\">{{ item.more }}</div>\n <div class=\"creator meta\" id=\"creator-{{ $index }}\">{{ item.createdBy.title }}</div>\n </div>\n </li>\n }\n </ul>\n } @else {\n <div class=\"empty\" translate>yuv.audit.result.empty</div>\n }\n\n <!-- controls -->\n @if (auditsResult.hasMoreItems || auditsResult.page > 1) {\n <div class=\"footer\" yuvOfflineDisabled>\n <div class=\"paging\">\n <button\n ymtIconButton\n [attr.aria-label]=\"'yuv.audit.label.paging.prev' | translate\"\n [disabled]=\"auditsResult.page === 1\"\n (click)=\"goToPage(auditsResult.page - 1)\"\n >\n <mat-icon>chevron_left</mat-icon>\n </button>\n <div class=\"page\">\n {{ auditsResult.page }}\n </div>\n <button\n ymtIconButton\n [attr.aria-label]=\"'yuv.audit.label.paging.next' | translate\"\n [disabled]=\"!auditsResult.hasMoreItems\"\n (click)=\"goToPage(auditsResult.page + 1)\"\n >\n <mat-icon>chevron_right</mat-icon>\n </button>\n </div>\n </div>\n }\n }\n</div>\n", styles: [":host{--_object-audit-panel-background: var(--object-audit-panel-background, var(--ymt-surface))}:host .yuv-audit{position:relative;height:100%;display:grid;grid-template-columns:1fr;grid-template-rows:1fr auto;grid-template-areas:\"items\" \"footer\";background-color:var(--_object-audit-panel-background);container-type:inline-size;container-name:cmp}:host .yuv-audit .error{grid-area:items;display:flex;flex-flow:column;align-items:center;justify-content:center}:host .yuv-audit .error>div{background-color:var(--ymt-danger-container);color:var(--ymt-on-danger-container);margin:var(--ymt-spacing-m);padding:var(--ymt-spacing-m);border-radius:var(--ymt-spacing-xs)}:host .yuv-audit .audits{grid-area:items}:host .yuv-audit .empty{grid-area:items;display:flex;flex-flow:column;align-items:center;justify-content:center;color:var(--ymt-text-color-subtle)}:host .yuv-audit .footer{grid-area:footer;background-color:var(--ymt-surface);border-top:1px solid var(--ymt-outline-variant);display:flex}:host .yuv-audit .footer .paging{flex:1;display:flex;align-items:center;justify-content:flex-end;padding:var(--ymt-spacing-xs)}:host .yuv-audit .footer .paging .page{padding:0 var(--ymt-spacing-xs)}:host .timeline{--track-color: var(--ymt-outline-variant);--track-size: var(--ymt-spacing-4xl);margin-block-start:0;margin-block-end:0;overflow-y:auto;padding:var(--ymt-spacing-3xl) var(--ymt-spacing-2xs) var(--ymt-spacing-3xl) var(--ymt-spacing-l)}@container (max-width: 450px){:host .timeline .audit{grid-template-columns:var(--track-size) auto;grid-template-rows:var(--track-size) auto;grid-template-areas:\"line date\" \"node node\"}:host .timeline .audit .date{justify-self:start}:host .timeline .audit .date,:host .timeline .audit:after{translate:0 .5em}:host .timeline .audit .node{margin:0;width:100%}:host .timeline .audit:last-child:before{height:100%}}:host .timeline :where(.audit){display:grid;grid-template-columns:1fr var(--track-size) 1fr;grid-template-areas:\"date line node\"}:host .timeline :where(.audit) .date{grid-area:date;justify-self:end;align-self:center}:host .timeline :where(.audit) .node{grid-area:node;justify-self:start;background-color:var(--ymt-surface-panel);border:1px solid var(--ymt-outline-variant);border-radius:.25em;margin:var(--ymt-spacing-xs) 0;padding:var(--ymt-spacing-m);box-sizing:border-box;display:grid;gap:var(--ymt-spacing-3xs)}:host .timeline :where(.audit) .node .label{display:flex;align-items:end}:host .timeline :where(.audit) .node .label .title{flex:1;word-break:break-word;font-weight:700;color:var(--ymt-text-color)}:host .timeline :where(.audit) .node .label .version{line-height:1em;border-radius:2px;background-color:rgb(from var(--ymt-primary) r g b/.15);color:var(--ymt-primary);font:var(--ymt-font-body-subtle);font-family:monospace;align-self:center;margin-left:var(--ymt-spacing-m);padding:4px 6px;display:block}:host .timeline :where(.audit) .node .meta{color:var(--ymt-text-color-subtle)}:host .timeline :where(.audit):before{grid-area:line;content:\"\";width:calc(50% + 1px);height:100%;border-inline-end:2px solid var(--track-color)}:host .timeline :where(.audit):after{grid-area:line;content:\"\";width:14px;height:14px;border-radius:50%;border:2px solid var(--track-color);background-color:var(--ymt-surface-panel);box-sizing:border-box;align-self:center;justify-self:center}:host .timeline :where(.audit):first-child:before{height:50%;align-self:end}:host .timeline :where(.audit):last-child:before{height:50%;align-self:start}\n"] }]
347
345
  }], ctorParameters: () => [{ type: i1$1.AuditService }, { type: i1$1.EventService }, { type: i1$1.SystemService }, { type: i1$1.TranslateService }] });
348
346
 
349
347
  class ObjectMetadataSectionComponent {