@yuuvis/client-framework 3.15.0 → 3.17.0

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 (44) hide show
  1. package/fesm2022/yuuvis-client-framework-actions.mjs +21 -25
  2. package/fesm2022/yuuvis-client-framework-actions.mjs.map +1 -1
  3. package/fesm2022/yuuvis-client-framework-app-bar.mjs +3 -3
  4. package/fesm2022/yuuvis-client-framework-badges.mjs +20 -13
  5. package/fesm2022/yuuvis-client-framework-badges.mjs.map +1 -1
  6. package/fesm2022/yuuvis-client-framework-breadcrumb.mjs +3 -3
  7. package/fesm2022/yuuvis-client-framework-clipboard.mjs +3 -3
  8. package/fesm2022/yuuvis-client-framework-datepicker.mjs +31 -31
  9. package/fesm2022/yuuvis-client-framework-forms.mjs +286 -178
  10. package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
  11. package/fesm2022/yuuvis-client-framework-icons.mjs +9 -9
  12. package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs +7 -7
  13. package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs.map +1 -1
  14. package/fesm2022/yuuvis-client-framework-metadata-form.mjs +18 -18
  15. package/fesm2022/yuuvis-client-framework-object-details.mjs +28 -28
  16. package/fesm2022/yuuvis-client-framework-object-flavor.mjs +18 -18
  17. package/fesm2022/yuuvis-client-framework-object-form.mjs +34 -34
  18. package/fesm2022/yuuvis-client-framework-object-preview.mjs +9 -9
  19. package/fesm2022/yuuvis-client-framework-object-relationship.mjs +73 -45
  20. package/fesm2022/yuuvis-client-framework-object-relationship.mjs.map +1 -1
  21. package/fesm2022/yuuvis-client-framework-object-summary.mjs +13 -13
  22. package/fesm2022/yuuvis-client-framework-object-versions.mjs +7 -7
  23. package/fesm2022/yuuvis-client-framework-pagination.mjs +3 -3
  24. package/fesm2022/yuuvis-client-framework-query-list.mjs +7 -7
  25. package/fesm2022/yuuvis-client-framework-renderer.mjs +101 -74
  26. package/fesm2022/yuuvis-client-framework-renderer.mjs.map +1 -1
  27. package/fesm2022/yuuvis-client-framework-sequence-list.mjs +4 -4
  28. package/fesm2022/yuuvis-client-framework-sequence-list.mjs.map +1 -1
  29. package/fesm2022/yuuvis-client-framework-simple-search.mjs +3 -3
  30. package/fesm2022/yuuvis-client-framework-smart-search.mjs +13 -13
  31. package/fesm2022/yuuvis-client-framework-sort.mjs +3 -3
  32. package/fesm2022/yuuvis-client-framework-tile-list.mjs +97 -61
  33. package/fesm2022/yuuvis-client-framework-tile-list.mjs.map +1 -1
  34. package/fesm2022/yuuvis-client-framework-token-search.mjs +7 -7
  35. package/fesm2022/yuuvis-client-framework-tree.mjs +9 -9
  36. package/fesm2022/yuuvis-client-framework-upload-progress.mjs +10 -10
  37. package/fesm2022/yuuvis-client-framework.mjs +25 -25
  38. package/lib/assets/i18n/de.json +10 -8
  39. package/lib/assets/i18n/en.json +10 -8
  40. package/package.json +10 -10
  41. package/types/yuuvis-client-framework-badges.d.ts +7 -0
  42. package/types/yuuvis-client-framework-forms.d.ts +28 -8
  43. package/types/yuuvis-client-framework-object-relationship.d.ts +6 -1
  44. package/types/yuuvis-client-framework-tile-list.d.ts +13 -1
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { input, Component, inject, computed, ChangeDetectionStrategy, signal, Injectable, effect, ViewContainerRef, Directive } from '@angular/core';
3
- import { TranslateService, LocalizationService, SystemService, LocaleDatePipe, FileSizePipe, IdmService, AppCacheService, TranslatePipe, InternalFieldType, ContentStreamField } from '@yuuvis/client-core';
3
+ import { TranslateService, LocalizationService, SystemService, LocaleDatePipe, FileSizePipe, IdmService, AppCacheService, FREE_TEXT_OPTION, STORAGE_ROLES_KEY, USER_ID_REGEX, STORAGE_USERS_KEY, TranslatePipe, InternalFieldType, ContentStreamField } from '@yuuvis/client-core';
4
4
  import { MatIcon, MatIconRegistry } from '@angular/material/icon';
5
5
  import { takeUntilDestroyed, rxResource } from '@angular/core/rxjs-interop';
6
6
  import { DomSanitizer } from '@angular/platform-browser';
@@ -17,10 +17,10 @@ class AbstractAuditRendererComponent {
17
17
  constructor() {
18
18
  this.auditEntry = input.required(...(ngDevMode ? [{ debugName: "auditEntry" }] : /* istanbul ignore next */ []));
19
19
  }
20
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: AbstractAuditRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
21
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.12", type: AbstractAuditRendererComponent, isStandalone: true, selector: "yuv-abstract-audit-renderer", inputs: { auditEntry: { classPropertyName: "auditEntry", publicName: "auditEntry", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: '', isInline: true }); }
20
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: AbstractAuditRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
21
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.20", type: AbstractAuditRendererComponent, isStandalone: true, selector: "yuv-abstract-audit-renderer", inputs: { auditEntry: { classPropertyName: "auditEntry", publicName: "auditEntry", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: '', isInline: true }); }
22
22
  }
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: AbstractAuditRendererComponent, decorators: [{
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: AbstractAuditRendererComponent, decorators: [{
24
24
  type: Component,
25
25
  args: [{
26
26
  selector: 'yuv-abstract-audit-renderer',
@@ -97,8 +97,8 @@ class DefaultAuditRendererComponent extends AbstractAuditRendererComponent {
97
97
  const m = entry.detail.match(/\[(.*?)\]/);
98
98
  return m?.[1]?.split(',').map((i) => i.trim()) ?? [];
99
99
  }
100
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: DefaultAuditRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
101
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: DefaultAuditRendererComponent, isStandalone: true, selector: "yuv-default-audit-renderer", usesInheritance: true, ngImport: i0, template: `
100
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: DefaultAuditRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
101
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: DefaultAuditRendererComponent, isStandalone: true, selector: "yuv-default-audit-renderer", usesInheritance: true, ngImport: i0, template: `
102
102
  @let r = resolved();
103
103
  <span class="title">{{ r.label }}</span>
104
104
  @if (r.more) {
@@ -106,7 +106,7 @@ class DefaultAuditRendererComponent extends AbstractAuditRendererComponent {
106
106
  }
107
107
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
108
108
  }
109
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: DefaultAuditRendererComponent, decorators: [{
109
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: DefaultAuditRendererComponent, decorators: [{
110
110
  type: Component,
111
111
  args: [{
112
112
  selector: 'yuv-default-audit-renderer',
@@ -159,10 +159,10 @@ class AuditRendererService {
159
159
  k.push(String(subaction));
160
160
  return k.join('-');
161
161
  }
162
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: AuditRendererService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
163
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: AuditRendererService, providedIn: 'root' }); }
162
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: AuditRendererService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
163
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: AuditRendererService, providedIn: 'root' }); }
164
164
  }
165
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: AuditRendererService, decorators: [{
165
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: AuditRendererService, decorators: [{
166
166
  type: Injectable,
167
167
  args: [{
168
168
  providedIn: 'root'
@@ -183,10 +183,10 @@ class AbstractRendererComponent {
183
183
  getProperty() {
184
184
  return this.#system.system?.allFields[this.propertyName()];
185
185
  }
186
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: AbstractRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
187
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.12", type: AbstractRendererComponent, isStandalone: true, selector: "yuv-abstract-renderer", inputs: { propertyName: { classPropertyName: "propertyName", publicName: "propertyName", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, meta: { classPropertyName: "meta", publicName: "meta", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '', isInline: true }); }
186
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: AbstractRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
187
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.20", type: AbstractRendererComponent, isStandalone: true, selector: "yuv-abstract-renderer", inputs: { propertyName: { classPropertyName: "propertyName", publicName: "propertyName", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, meta: { classPropertyName: "meta", publicName: "meta", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '', isInline: true }); }
188
188
  }
189
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: AbstractRendererComponent, decorators: [{
189
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: AbstractRendererComponent, decorators: [{
190
190
  type: Component,
191
191
  args: [{
192
192
  selector: 'yuv-abstract-renderer',
@@ -195,28 +195,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImpo
195
195
  }], propDecorators: { propertyName: [{ type: i0.Input, args: [{ isSignal: true, alias: "propertyName", required: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], meta: [{ type: i0.Input, args: [{ isSignal: true, alias: "meta", required: false }] }] } });
196
196
 
197
197
  class BooleanRendererComponent extends AbstractRendererComponent {
198
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: BooleanRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
199
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.12", type: BooleanRendererComponent, isStandalone: true, selector: "yuv-boolean-renderer", usesInheritance: true, ngImport: i0, template: ` <mat-icon>{{ value() ? 'check_box' : 'check_box_outline_blank' }}</mat-icon>`, isInline: true, styles: [":host{display:flex;padding:var(--tile-slot-padding)}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
198
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: BooleanRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
199
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.20", type: BooleanRendererComponent, isStandalone: true, selector: "yuv-boolean-renderer", usesInheritance: true, ngImport: i0, template: ` <mat-icon>{{ value() ? 'check_box' : 'check_box_outline_blank' }}</mat-icon>`, isInline: true, styles: [":host{display:flex;padding:var(--tile-slot-padding)}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
200
200
  }
201
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: BooleanRendererComponent, decorators: [{
201
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: BooleanRendererComponent, decorators: [{
202
202
  type: Component,
203
203
  args: [{ selector: 'yuv-boolean-renderer', imports: [MatIcon], template: ` <mat-icon>{{ value() ? 'check_box' : 'check_box_outline_blank' }}</mat-icon>`, styles: [":host{display:flex;padding:var(--tile-slot-padding)}\n"] }]
204
204
  }] });
205
205
 
206
206
  class DateTimeRendererComponent extends AbstractRendererComponent {
207
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: DateTimeRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
208
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.12", type: DateTimeRendererComponent, isStandalone: true, selector: "yuv-datetime-renderer", usesInheritance: true, ngImport: i0, template: '{{(value() || undefined) | localeDate}}', isInline: true, styles: [":host{display:inline-block;padding:var(--tile-slot-padding)}\n"], dependencies: [{ kind: "pipe", type: LocaleDatePipe, name: "localeDate" }] }); }
207
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: DateTimeRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
208
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.20", type: DateTimeRendererComponent, isStandalone: true, selector: "yuv-datetime-renderer", usesInheritance: true, ngImport: i0, template: '{{(value() || undefined) | localeDate}}', isInline: true, styles: [":host{display:inline-block;padding:var(--tile-slot-padding)}\n"], dependencies: [{ kind: "pipe", type: LocaleDatePipe, name: "localeDate" }] }); }
209
209
  }
210
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: DateTimeRendererComponent, decorators: [{
210
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: DateTimeRendererComponent, decorators: [{
211
211
  type: Component,
212
212
  args: [{ selector: 'yuv-datetime-renderer', imports: [LocaleDatePipe], template: '{{(value() || undefined) | localeDate}}', styles: [":host{display:inline-block;padding:var(--tile-slot-padding)}\n"] }]
213
213
  }] });
214
214
 
215
215
  class DecimalRendererComponent extends AbstractRendererComponent {
216
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: DecimalRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
217
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.12", type: DecimalRendererComponent, isStandalone: true, selector: "yuv-decimal-renderer", usesInheritance: true, ngImport: i0, template: '{{value()}}', isInline: true, styles: [":host{display:inline-block;padding:var(--tile-slot-padding)}\n"] }); }
216
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: DecimalRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
217
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.20", type: DecimalRendererComponent, isStandalone: true, selector: "yuv-decimal-renderer", usesInheritance: true, ngImport: i0, template: '{{value()}}', isInline: true, styles: [":host{display:inline-block;padding:var(--tile-slot-padding)}\n"] }); }
218
218
  }
219
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: DecimalRendererComponent, decorators: [{
219
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: DecimalRendererComponent, decorators: [{
220
220
  type: Component,
221
221
  args: [{ selector: 'yuv-decimal-renderer', template: '{{value()}}', styles: [":host{display:inline-block;padding:var(--tile-slot-padding)}\n"] }]
222
222
  }] });
@@ -237,10 +237,10 @@ class FileSizeRendererComponent extends AbstractRendererComponent {
237
237
  return n;
238
238
  }, ...(ngDevMode ? [{ debugName: "parsedValue" }] : /* istanbul ignore next */ []));
239
239
  }
240
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: FileSizeRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
241
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.12", type: FileSizeRendererComponent, isStandalone: true, selector: "yuv-string-renderer", usesInheritance: true, ngImport: i0, template: '{{parsedValue() | fileSize}}', isInline: true, styles: [":host{display:inline-block;padding:var(--tile-slot-padding)}\n"], dependencies: [{ kind: "pipe", type: FileSizePipe, name: "fileSize" }] }); }
240
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: FileSizeRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
241
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.20", type: FileSizeRendererComponent, isStandalone: true, selector: "yuv-string-renderer", usesInheritance: true, ngImport: i0, template: '{{parsedValue() | fileSize}}', isInline: true, styles: [":host{display:inline-block;padding:var(--tile-slot-padding)}\n"], dependencies: [{ kind: "pipe", type: FileSizePipe, name: "fileSize" }] }); }
242
242
  }
243
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: FileSizeRendererComponent, decorators: [{
243
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: FileSizeRendererComponent, decorators: [{
244
244
  type: Component,
245
245
  args: [{ selector: 'yuv-string-renderer', imports: [FileSizePipe], template: '{{parsedValue() | fileSize}}', styles: [":host{display:inline-block;padding:var(--tile-slot-padding)}\n"] }]
246
246
  }] });
@@ -279,10 +279,10 @@ class I18nCatalogRendererComponent extends AbstractRendererComponent {
279
279
  #translateValue(value) {
280
280
  return this.#localization.getLocalizedLabel(`catalog:${this.propertyName()}:${value}`) || value;
281
281
  }
282
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: I18nCatalogRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
283
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.12", type: I18nCatalogRendererComponent, isStandalone: true, selector: "yuv-i18n-catalog-renderer", usesInheritance: true, ngImport: i0, template: '{{ label() }}', isInline: true, styles: [":host{display:inline-block;padding:var(--tile-slot-padding)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
282
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: I18nCatalogRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
283
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.20", type: I18nCatalogRendererComponent, isStandalone: true, selector: "yuv-i18n-catalog-renderer", usesInheritance: true, ngImport: i0, template: '{{ label() }}', isInline: true, styles: [":host{display:inline-block;padding:var(--tile-slot-padding)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
284
284
  }
285
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: I18nCatalogRendererComponent, decorators: [{
285
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: I18nCatalogRendererComponent, decorators: [{
286
286
  type: Component,
287
287
  args: [{ selector: 'yuv-i18n-catalog-renderer', template: '{{ label() }}', changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:inline-block;padding:var(--tile-slot-padding)}\n"] }]
288
288
  }], ctorParameters: () => [] });
@@ -304,19 +304,19 @@ class IconRendererComponent extends AbstractRendererComponent {
304
304
  #iconRegistry;
305
305
  #sanitizer;
306
306
  #registerIconsEffect;
307
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: IconRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
308
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: IconRendererComponent, isStandalone: true, selector: "yuv-icon-renderer", usesInheritance: true, ngImport: i0, template: "@let icon = value();\n@if (propertyName() !== 'custom') {\n <yuv-object-type-icon [objectTypeId]=\"icon || ''\"></yuv-object-type-icon>\n} @else if (icon !== null) {\n @let metaData = meta();\n @if (metaData && metaData['isFontIcon']) {\n <mat-icon>{{ icon }}</mat-icon>\n } @else {\n <mat-icon [svgIcon]=\"customId\"></mat-icon>\n }\n}\n", styles: [":host{display:flex;align-items:center;justify-content:center;padding:var(--tile-slot-padding)}:host yuv-icon,:host yuv-object-type-icon{--icon-size: var(--icon-renderer-icon-size);width:var(--icon-size);height:var(--icon-size)}\n"], dependencies: [{ kind: "component", type: ObjectTypeIconComponent, selector: "yuv-object-type-icon", inputs: ["objectTypeId"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
307
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: IconRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
308
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: IconRendererComponent, isStandalone: true, selector: "yuv-icon-renderer", usesInheritance: true, ngImport: i0, template: "@let icon = value();\n@if (propertyName() !== 'custom') {\n <yuv-object-type-icon [objectTypeId]=\"icon || ''\"></yuv-object-type-icon>\n} @else if (icon !== null) {\n @let metaData = meta();\n @if (metaData && metaData['isFontIcon']) {\n <mat-icon>{{ icon }}</mat-icon>\n } @else {\n <mat-icon [svgIcon]=\"customId\"></mat-icon>\n }\n}\n", styles: [":host{display:flex;align-items:center;justify-content:center;padding:var(--tile-slot-padding)}:host yuv-icon,:host yuv-object-type-icon{--icon-size: var(--icon-renderer-icon-size);width:var(--icon-size);height:var(--icon-size)}\n"], dependencies: [{ kind: "component", type: ObjectTypeIconComponent, selector: "yuv-object-type-icon", inputs: ["objectTypeId"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
309
309
  }
310
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: IconRendererComponent, decorators: [{
310
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: IconRendererComponent, decorators: [{
311
311
  type: Component,
312
312
  args: [{ selector: 'yuv-icon-renderer', imports: [ObjectTypeIconComponent, MatIcon], template: "@let icon = value();\n@if (propertyName() !== 'custom') {\n <yuv-object-type-icon [objectTypeId]=\"icon || ''\"></yuv-object-type-icon>\n} @else if (icon !== null) {\n @let metaData = meta();\n @if (metaData && metaData['isFontIcon']) {\n <mat-icon>{{ icon }}</mat-icon>\n } @else {\n <mat-icon [svgIcon]=\"customId\"></mat-icon>\n }\n}\n", styles: [":host{display:flex;align-items:center;justify-content:center;padding:var(--tile-slot-padding)}:host yuv-icon,:host yuv-object-type-icon{--icon-size: var(--icon-renderer-icon-size);width:var(--icon-size);height:var(--icon-size)}\n"] }]
313
313
  }] });
314
314
 
315
315
  class IntegerRendererComponent extends AbstractRendererComponent {
316
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: IntegerRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
317
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.12", type: IntegerRendererComponent, isStandalone: true, selector: "yuv-integer-renderer", usesInheritance: true, ngImport: i0, template: '{{value()}}', isInline: true, styles: [":host{display:inline-block;padding:var(--tile-slot-padding)}\n"] }); }
316
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: IntegerRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
317
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.20", type: IntegerRendererComponent, isStandalone: true, selector: "yuv-integer-renderer", usesInheritance: true, ngImport: i0, template: '{{value()}}', isInline: true, styles: [":host{display:inline-block;padding:var(--tile-slot-padding)}\n"] }); }
318
318
  }
319
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: IntegerRendererComponent, decorators: [{
319
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: IntegerRendererComponent, decorators: [{
320
320
  type: Component,
321
321
  args: [{ selector: 'yuv-integer-renderer', template: '{{value()}}', styles: [":host{display:inline-block;padding:var(--tile-slot-padding)}\n"] }]
322
322
  }] });
@@ -326,8 +326,21 @@ class OrganizationRendererComponent extends AbstractRendererComponent {
326
326
  super(...arguments);
327
327
  this.#idmService = inject(IdmService);
328
328
  this.#appCache = inject(AppCacheService);
329
- this.#STORAGE_USER_KEY = 'yuv.core.users.storage';
330
- this.#STORAGE_ROLES_KEY = 'yuv.core.roles.storage';
329
+ this.#systemService = inject(SystemService);
330
+ // Only fields that opted into free text may hold values that are neither a user ID nor a
331
+ // role name. Everywhere else every non-role value stays a user-ID lookup, unchanged.
332
+ this.#freeTextField = computed(() => {
333
+ const field = this.getProperty();
334
+ // The raw schema uses `classification`, the mapped field model `classifications`.
335
+ const classifications = field?.classifications ?? field?.classification;
336
+ if (!classifications?.length)
337
+ return false;
338
+ for (const entry of this.#systemService.getClassifications(classifications).values()) {
339
+ if (entry.options.includes(FREE_TEXT_OPTION))
340
+ return true;
341
+ }
342
+ return false;
343
+ }, ...(ngDevMode ? [{ debugName: "#freeTextField" }] : /* istanbul ignore next */ []));
331
344
  // Input may be a single id/role-name or an array of them; normalize to string[] so the resolver
332
345
  // pipeline always works on a uniform shape.
333
346
  this.resolvedValue = computed(() => {
@@ -346,29 +359,35 @@ class OrganizationRendererComponent extends AbstractRendererComponent {
346
359
  // names vs. user IDs. Roles are a closed set; anything that doesn't match is treated as
347
360
  // a user ID and resolved in step 2.
348
361
  // TODO: Move get Roles to App init or somewhere else to avoid multiple calls
349
- return this.#appCache.getItem(this.#STORAGE_ROLES_KEY).pipe(switchMap((cachedRoles) => (cachedRoles
362
+ return this.#appCache.getItem(STORAGE_ROLES_KEY).pipe(switchMap((cachedRoles) => (cachedRoles
350
363
  ? of(cachedRoles)
351
364
  : this.#idmService.getRoles().pipe(
352
365
  // Only persist the role list when the backend actually returned something —
353
366
  // caching an empty array would mask later successful fetches.
354
- switchMap((roles) => roles.length ? this.#appCache.setItem(this.#STORAGE_ROLES_KEY, roles).pipe(map(() => roles)) : of([])))).pipe(map((roles) => params.reduce((acc, value) => {
367
+ switchMap((roles) => roles.length ? this.#appCache.setItem(STORAGE_ROLES_KEY, roles).pipe(map(() => roles)) : of([])))).pipe(map((roles) => params.reduce((acc, value) => {
355
368
  const matchingRole = roles.find((role) => role.name === value);
356
369
  // Role-name match → roles bucket; everything else is assumed to be a user ID.
357
370
  if (matchingRole) {
358
371
  acc.roles.push(matchingRole.name);
359
372
  }
373
+ else if (this.#freeTextField() && !USER_ID_REGEX.test(value)) {
374
+ // Free text is stored as a plain string, so there is nothing to look up.
375
+ acc.texts.push(value);
376
+ }
360
377
  else {
361
378
  acc.users.push(value);
362
379
  }
363
380
  return acc;
364
- }, { roles: [], users: [] })))),
381
+ }, { roles: [], users: [], texts: [] })))),
365
382
  // Step 2a — pull the persisted user cache. Defensive filter against null entries that
366
383
  // may linger from earlier buggy writes (see commit 2f3ff694f).
367
- switchMap(({ roles, users }) => this.#appCache
368
- .getItem(this.#STORAGE_USER_KEY)
369
- .pipe(map((cache) => cache ? { roles, users, cache: cache.filter((entry) => entry !== null) } : { roles, users, cache: null }))),
384
+ switchMap(({ roles, users, texts }) => this.#appCache
385
+ .getItem(STORAGE_USERS_KEY)
386
+ .pipe(map((cache) => cache
387
+ ? { roles, users, texts, cache: cache.filter((entry) => entry !== null) }
388
+ : { roles, users, texts, cache: null }))),
370
389
  // Step 2b — resolve users: serve from cache where possible, fetch the rest from IDM.
371
- switchMap(({ roles, users, cache }) => {
390
+ switchMap(({ roles, users, texts, cache }) => {
372
391
  // Dedup the full stored cache by id up-front. A cache can hold multiple copies of the
373
392
  // same user either from the historical write bug, or because several renderer instances
374
393
  // (a view routinely mounts 2-3) each ran an unsynchronized getItem→resolve→setItem cycle
@@ -400,22 +419,24 @@ class OrganizationRendererComponent extends AbstractRendererComponent {
400
419
  // resolved real user always wins over any stale same-id entry — a synthetic
401
420
  // fallback (which is never in `resolved`/`cache`) can therefore never shadow it.
402
421
  const merged = this.#dedupById([...(dedupedCache || []), ...resolved]);
403
- return this.#appCache.setItem(this.#STORAGE_USER_KEY, merged).pipe(map(() => [...resolved, ...unresolved]));
404
- }), map((users) => ({ roles, users: [...users, ...filteredUsers] })));
422
+ return this.#appCache.setItem(STORAGE_USERS_KEY, merged).pipe(map(() => [...resolved, ...unresolved]));
423
+ }), map((users) => ({ roles, texts, users: [...users, ...filteredUsers] })));
405
424
  }
406
425
  else if (cacheShrank && dedupedCache) {
407
426
  // Every requested user was already cached, but the stored array carried duplicates —
408
427
  // write the cleaned version back so the pollution heals instead of re-deduping forever.
409
- return this.#appCache.setItem(this.#STORAGE_USER_KEY, dedupedCache).pipe(map(() => ({ roles, users: [...filteredUsers] })));
428
+ return this.#appCache
429
+ .setItem(STORAGE_USERS_KEY, dedupedCache)
430
+ .pipe(map(() => ({ roles, texts, users: [...filteredUsers] })));
410
431
  }
411
432
  else {
412
433
  // Every requested user was already in the cache and it was clean — no network needed.
413
- return of({ roles, users: [...filteredUsers] });
434
+ return of({ roles, texts, users: [...filteredUsers] });
414
435
  }
415
436
  }),
416
437
  // Step 3 — project to the flat render-model the template iterates over. data-type
417
- // drives the chip styling (user vs role).
418
- map(({ roles, users }) => {
438
+ // drives the chip styling (user vs role vs free text).
439
+ map(({ roles, users, texts }) => {
419
440
  const userNodes = users.map((user) => ({
420
441
  type: 'user',
421
442
  label: user.title || user.displayName
@@ -424,7 +445,11 @@ class OrganizationRendererComponent extends AbstractRendererComponent {
424
445
  type: 'role',
425
446
  label: role
426
447
  }));
427
- return [...userNodes, ...roleNodes];
448
+ const textNodes = texts.map((text) => ({
449
+ type: 'text',
450
+ label: text
451
+ }));
452
+ return [...userNodes, ...roleNodes, ...textNodes];
428
453
  }));
429
454
  },
430
455
  defaultValue: []
@@ -434,27 +459,29 @@ class OrganizationRendererComponent extends AbstractRendererComponent {
434
459
  }
435
460
  #idmService;
436
461
  #appCache;
437
- #STORAGE_USER_KEY;
438
- #STORAGE_ROLES_KEY;
462
+ #systemService;
463
+ // Only fields that opted into free text may hold values that are neither a user ID nor a
464
+ // role name. Everywhere else every non-role value stays a user-ID lookup, unchanged.
465
+ #freeTextField;
439
466
  #userRoleResolver;
440
467
  // Collapse a user list to one entry per id, keeping the LAST occurrence — callers order the
441
468
  // array so the freshest/real entry comes last and wins. Also drops any falsy entries.
442
469
  #dedupById(users) {
443
470
  return [...new Map(users.filter((user) => user).map((user) => [user.id, user])).values()];
444
471
  }
445
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: OrganizationRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
446
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: OrganizationRendererComponent, isStandalone: true, selector: "yuv-organization-renderer", usesInheritance: true, ngImport: i0, template: "@if (userAndRoleLoading()) {\n <span class=\"loading\"><i>.</i><i>.</i><i>.</i></span>\n} @else {\n @for (node of userAndRole(); track $index) {\n <span class=\"node\" [attr.data-type]=\"node.type\">{{ node.label }}</span>\n }\n}\n", styles: [":host{padding:var(--tile-slot-padding);display:var(--yuv-renderer-display, flex);gap:var(--ymt-spacing-xs);align-items:center}:host .node{display:flex;flex-flow:row nowrap;align-items:center;border:1px solid var(--ymt-outline);border-radius:var(--ymt-corner-xs);padding:0 var(--ymt-spacing-xs);font:var(--ymt-font-body-subtle);white-space:nowrap}:host .loading i{animation:pulse 1.4s ease-in-out infinite both}:host .loading i:nth-child(1){animation-delay:-.32s}:host .loading i:nth-child(2){animation-delay:-.16s}:host .loading i:nth-child(3){animation-delay:0s}@keyframes pulse{0%,80%,to{opacity:.3;transform:scale(1)}40%{opacity:1;transform:scale(1.2)}}\n"] }); }
472
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: OrganizationRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
473
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: OrganizationRendererComponent, isStandalone: true, selector: "yuv-organization-renderer", usesInheritance: true, ngImport: i0, template: "@if (userAndRoleLoading()) {\n <span class=\"loading\"><i>.</i><i>.</i><i>.</i></span>\n} @else {\n @for (node of userAndRole(); track $index) {\n <span class=\"node\" [attr.data-type]=\"node.type\">{{ node.label }}</span>\n }\n}\n", styles: [":host{padding:var(--tile-slot-padding);display:var(--yuv-renderer-display, flex);gap:var(--ymt-spacing-xs);align-items:center}:host .node{display:flex;flex-flow:row nowrap;align-items:center;border:1px solid var(--ymt-outline);border-radius:var(--ymt-corner-xs);padding:0 var(--ymt-spacing-xs);font:var(--ymt-font-body-subtle);white-space:nowrap}:host .node[data-type=text]{border-style:dashed;color:var(--ymt-text-color-subtle);font-style:italic}:host .loading i{animation:pulse 1.4s ease-in-out infinite both}:host .loading i:nth-child(1){animation-delay:-.32s}:host .loading i:nth-child(2){animation-delay:-.16s}:host .loading i:nth-child(3){animation-delay:0s}@keyframes pulse{0%,80%,to{opacity:.3;transform:scale(1)}40%{opacity:1;transform:scale(1.2)}}\n"] }); }
447
474
  }
448
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: OrganizationRendererComponent, decorators: [{
475
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: OrganizationRendererComponent, decorators: [{
449
476
  type: Component,
450
- args: [{ selector: 'yuv-organization-renderer', template: "@if (userAndRoleLoading()) {\n <span class=\"loading\"><i>.</i><i>.</i><i>.</i></span>\n} @else {\n @for (node of userAndRole(); track $index) {\n <span class=\"node\" [attr.data-type]=\"node.type\">{{ node.label }}</span>\n }\n}\n", styles: [":host{padding:var(--tile-slot-padding);display:var(--yuv-renderer-display, flex);gap:var(--ymt-spacing-xs);align-items:center}:host .node{display:flex;flex-flow:row nowrap;align-items:center;border:1px solid var(--ymt-outline);border-radius:var(--ymt-corner-xs);padding:0 var(--ymt-spacing-xs);font:var(--ymt-font-body-subtle);white-space:nowrap}:host .loading i{animation:pulse 1.4s ease-in-out infinite both}:host .loading i:nth-child(1){animation-delay:-.32s}:host .loading i:nth-child(2){animation-delay:-.16s}:host .loading i:nth-child(3){animation-delay:0s}@keyframes pulse{0%,80%,to{opacity:.3;transform:scale(1)}40%{opacity:1;transform:scale(1.2)}}\n"] }]
477
+ args: [{ selector: 'yuv-organization-renderer', template: "@if (userAndRoleLoading()) {\n <span class=\"loading\"><i>.</i><i>.</i><i>.</i></span>\n} @else {\n @for (node of userAndRole(); track $index) {\n <span class=\"node\" [attr.data-type]=\"node.type\">{{ node.label }}</span>\n }\n}\n", styles: [":host{padding:var(--tile-slot-padding);display:var(--yuv-renderer-display, flex);gap:var(--ymt-spacing-xs);align-items:center}:host .node{display:flex;flex-flow:row nowrap;align-items:center;border:1px solid var(--ymt-outline);border-radius:var(--ymt-corner-xs);padding:0 var(--ymt-spacing-xs);font:var(--ymt-font-body-subtle);white-space:nowrap}:host .node[data-type=text]{border-style:dashed;color:var(--ymt-text-color-subtle);font-style:italic}:host .loading i{animation:pulse 1.4s ease-in-out infinite both}:host .loading i:nth-child(1){animation-delay:-.32s}:host .loading i:nth-child(2){animation-delay:-.16s}:host .loading i:nth-child(3){animation-delay:0s}@keyframes pulse{0%,80%,to{opacity:.3;transform:scale(1)}40%{opacity:1;transform:scale(1.2)}}\n"] }]
451
478
  }] });
452
479
 
453
480
  class StringRendererComponent extends AbstractRendererComponent {
454
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: StringRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
455
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.12", type: StringRendererComponent, isStandalone: true, selector: "yuv-string-renderer", usesInheritance: true, ngImport: i0, template: `{{ value() }}`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
481
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: StringRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
482
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.20", type: StringRendererComponent, isStandalone: true, selector: "yuv-string-renderer", usesInheritance: true, ngImport: i0, template: `{{ value() }}`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
456
483
  }
457
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: StringRendererComponent, decorators: [{
484
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: StringRendererComponent, decorators: [{
458
485
  type: Component,
459
486
  args: [{ selector: 'yuv-string-renderer', template: `{{ value() }}`, changeDetection: ChangeDetectionStrategy.OnPush }]
460
487
  }] });
@@ -505,19 +532,19 @@ class TableRendererComponent extends AbstractRendererComponent {
505
532
  return element.value;
506
533
  }
507
534
  }
508
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: TableRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
509
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: TableRendererComponent, isStandalone: true, selector: "yuv-table-renderer", providers: [DecimalPipe, DatePipe], usesInheritance: true, ngImport: i0, template: "<div class=\"table-container\">\n <table>\n <thead>\n <tr>\n @for (header of tableHeaders(); track header.id) {\n <th>{{ header.label }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of tableData(); track $index) {\n <tr>\n @for (header of tableHeaders(); track header.id) {\n <td>{{ getCellValue(row, header.key) }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n @if (reducedData()) {\n <p>{{ 'yuv.table.renderer.moreEntries' | translate: { count: value()?.length } }}</p>\n }\n</div>\n", styles: [":host{display:flex;padding:var(--tile-slot-padding);width:100%}.table-container{width:100%;overflow-x:auto;max-width:100%}table{width:100%;border-collapse:collapse;min-width:400px}th,td{padding:8px;text-align:left;border-bottom:1px solid var(--ymt-outline-variant);word-break:normal}th{background-color:var(--object-summary-section-background, var(--ymt-surface));font-weight:700}tr:hover{background-color:var(--ymt-hover-background)}\n"], dependencies: [{ kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
535
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: TableRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
536
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: TableRendererComponent, isStandalone: true, selector: "yuv-table-renderer", providers: [DecimalPipe, DatePipe], usesInheritance: true, ngImport: i0, template: "<div class=\"table-container\">\n <table>\n <thead>\n <tr>\n @for (header of tableHeaders(); track header.id) {\n <th>{{ header.label }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of tableData(); track $index) {\n <tr>\n @for (header of tableHeaders(); track header.id) {\n <td>{{ getCellValue(row, header.key) }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n @if (reducedData()) {\n <p>{{ 'yuv.table.renderer.moreEntries' | translate: { count: value()?.length } }}</p>\n }\n</div>\n", styles: [":host{display:flex;padding:var(--tile-slot-padding);width:100%}.table-container{width:100%;overflow-x:auto;max-width:100%}table{width:100%;border-collapse:collapse;min-width:400px}th,td{padding:8px;text-align:left;border-bottom:1px solid var(--ymt-outline-variant);word-break:normal}th{background-color:var(--object-summary-section-background, var(--ymt-surface));font-weight:700}tr:hover{background-color:var(--ymt-hover-background)}\n"], dependencies: [{ kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
510
537
  }
511
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: TableRendererComponent, decorators: [{
538
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: TableRendererComponent, decorators: [{
512
539
  type: Component,
513
540
  args: [{ selector: 'yuv-table-renderer', standalone: true, imports: [TranslatePipe], providers: [DecimalPipe, DatePipe], template: "<div class=\"table-container\">\n <table>\n <thead>\n <tr>\n @for (header of tableHeaders(); track header.id) {\n <th>{{ header.label }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of tableData(); track $index) {\n <tr>\n @for (header of tableHeaders(); track header.id) {\n <td>{{ getCellValue(row, header.key) }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n @if (reducedData()) {\n <p>{{ 'yuv.table.renderer.moreEntries' | translate: { count: value()?.length } }}</p>\n }\n</div>\n", styles: [":host{display:flex;padding:var(--tile-slot-padding);width:100%}.table-container{width:100%;overflow-x:auto;max-width:100%}table{width:100%;border-collapse:collapse;min-width:400px}th,td{padding:8px;text-align:left;border-bottom:1px solid var(--ymt-outline-variant);word-break:normal}th{background-color:var(--object-summary-section-background, var(--ymt-surface));font-weight:700}tr:hover{background-color:var(--ymt-hover-background)}\n"] }]
514
541
  }] });
515
542
 
516
543
  class UnknownRendererComponent extends AbstractRendererComponent {
517
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: UnknownRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
518
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.12", type: UnknownRendererComponent, isStandalone: true, selector: "yuv-unknown-renderer", usesInheritance: true, ngImport: i0, template: '{{value()}}', isInline: true, styles: [":host{display:inline-block;padding:var(--tile-slot-padding)}\n"] }); }
544
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: UnknownRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
545
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.20", type: UnknownRendererComponent, isStandalone: true, selector: "yuv-unknown-renderer", usesInheritance: true, ngImport: i0, template: '{{value()}}', isInline: true, styles: [":host{display:inline-block;padding:var(--tile-slot-padding)}\n"] }); }
519
546
  }
520
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: UnknownRendererComponent, decorators: [{
547
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: UnknownRendererComponent, decorators: [{
521
548
  type: Component,
522
549
  args: [{ selector: 'yuv-unknown-renderer', template: '{{value()}}', styles: [":host{display:inline-block;padding:var(--tile-slot-padding)}\n"] }]
523
550
  }] });
@@ -592,10 +619,10 @@ class RendererService {
592
619
  typeName && k.push(typeName);
593
620
  return k.join('-');
594
621
  }
595
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: RendererService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
596
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: RendererService, providedIn: 'root' }); }
622
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: RendererService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
623
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: RendererService, providedIn: 'root' }); }
597
624
  }
598
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: RendererService, decorators: [{
625
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: RendererService, decorators: [{
599
626
  type: Injectable,
600
627
  args: [{
601
628
  providedIn: 'root'
@@ -630,10 +657,10 @@ class AuditRendererDirective {
630
657
  #alreadyRendered(entry) {
631
658
  return !!this.#current && JSON.stringify(this.#current) === JSON.stringify(entry);
632
659
  }
633
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: AuditRendererDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
634
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.12", type: AuditRendererDirective, isStandalone: true, selector: "[yuvAuditRenderer]", inputs: { yuvAuditRenderer: { classPropertyName: "yuvAuditRenderer", publicName: "yuvAuditRenderer", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
660
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: AuditRendererDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
661
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.20", type: AuditRendererDirective, isStandalone: true, selector: "[yuvAuditRenderer]", inputs: { yuvAuditRenderer: { classPropertyName: "yuvAuditRenderer", publicName: "yuvAuditRenderer", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
635
662
  }
636
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: AuditRendererDirective, decorators: [{
663
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: AuditRendererDirective, decorators: [{
637
664
  type: Directive,
638
665
  args: [{
639
666
  selector: '[yuvAuditRenderer]',
@@ -677,10 +704,10 @@ class RendererDirective {
677
704
  #alreadyRendered(i) {
678
705
  return !!this.#rendererInput && JSON.stringify(this.#rendererInput) === JSON.stringify(i);
679
706
  }
680
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: RendererDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
681
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.12", type: RendererDirective, isStandalone: true, selector: "[yuvRenderer]", inputs: { yuvRenderer: { classPropertyName: "yuvRenderer", publicName: "yuvRenderer", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
707
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: RendererDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
708
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.20", type: RendererDirective, isStandalone: true, selector: "[yuvRenderer]", inputs: { yuvRenderer: { classPropertyName: "yuvRenderer", publicName: "yuvRenderer", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
682
709
  }
683
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: RendererDirective, decorators: [{
710
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: RendererDirective, decorators: [{
684
711
  type: Directive,
685
712
  args: [{
686
713
  selector: '[yuvRenderer]',