@yuuvis/client-framework 3.17.1 → 3.18.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.
@@ -10,7 +10,7 @@ import * as i2$2 from '@angular/material/progress-bar';
10
10
  import { MatProgressBarModule } from '@angular/material/progress-bar';
11
11
  import * as i1$3 from '@angular/material/tooltip';
12
12
  import { MatTooltipModule } from '@angular/material/tooltip';
13
- import { TranslateService, SystemService, Situation, TranslatePipe } from '@yuuvis/client-core';
13
+ import { TranslateService, SystemService, NotificationService, Situation, TranslatePipe } from '@yuuvis/client-core';
14
14
  import { BusyOverlayDirective, DialogComponent, ConfirmService, DragScrollDirective } from '@yuuvis/client-framework/common';
15
15
  import * as i1$2 from '@yuuvis/client-framework/list';
16
16
  import { YuvListModule, ListComponent } from '@yuuvis/client-framework/list';
@@ -72,6 +72,7 @@ class DefaultApplyFlavorComponent extends AbstractApplyObjectFlavorComponent {
72
72
  super(...arguments);
73
73
  this.#system = inject(SystemService);
74
74
  this.#shell = inject(ShellService);
75
+ this.#notification = inject(NotificationService);
75
76
  this.translate = inject(TranslateService);
76
77
  this.objectForm = viewChild(ObjectFormComponent, ...(ngDevMode ? [{ debugName: "objectForm" }] : /* istanbul ignore next */ []));
77
78
  this.flavorLabel = computed(() => this.flavor().origin === 'app'
@@ -92,6 +93,7 @@ class DefaultApplyFlavorComponent extends AbstractApplyObjectFlavorComponent {
92
93
  }
93
94
  #system;
94
95
  #shell;
96
+ #notification;
95
97
  #flavorEffect;
96
98
  #loadForm(f) {
97
99
  this.busyLoading.set(true);
@@ -118,15 +120,16 @@ class DefaultApplyFlavorComponent extends AbstractApplyObjectFlavorComponent {
118
120
  .applyObjectFlavor(this.dmsObject(), this.flavor(), data)
119
121
  .pipe(finalize(() => this.busySaving.set(false)))
120
122
  .subscribe({
121
- next: () => this.close()
122
- // TODO: handle error
123
+ next: () => this.close(),
124
+ // keep the dialog open so the entered form data is not lost and the user can retry
125
+ error: () => this.#notification.error(this.translate.instant('yuv.object-flavor.apply-flavor.error'))
123
126
  });
124
127
  }
125
128
  close() {
126
129
  this.dialogRef.close();
127
130
  }
128
131
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: DefaultApplyFlavorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
129
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: DefaultApplyFlavorComponent, isStandalone: true, selector: "yuv-default-apply-flavor", viewQueries: [{ propertyName: "objectForm", first: true, predicate: ObjectFormComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@let o = dmsObject();\n@if (o) {\n <yuv-dialog [yuvBusyOverlay]=\"busyLoading()\" [headertitel]=\"'yuv.object-flavor.apply-flavor.headline' | translate: { name: flavorLabel() }\">\n <main>\n <yuv-split-view [gutterSize]=\"1\">\n <ng-template yuvSplitArea [size]=\"60\" [visible]=\"!!o.content\">\n @if (o.content) {\n <yuv-object-preview [objectId]=\"dmsObject().id\"></yuv-object-preview>\n }\n </ng-template>\n\n <ng-template yuvSplitArea [size]=\"40\">\n <div class=\"metadata\">\n @let fo = formOptions();\n @if (fo) {\n <yuv-object-form [inert]=\"busySaving()\" [formOptions]=\"fo\" (statusChanged)=\"onFormStatusChanged($event)\"></yuv-object-form>\n }\n </div>\n </ng-template>\n </yuv-split-view>\n </main>\n <footer>\n <button ymtButton=\"secondary\" mat-dialog-close [disabled]=\"busySaving()\">{{ 'yuv.object-flavor.apply-flavor.button.cancel' | translate }}</button>\n <button ymtButton=\"primary\" mat-dialog-close [ngClass]=\"{ spinning: busySaving() }\" [disabled]=\"applyDisabled()\" (click)=\"applyFlavor()\">\n {{ 'yuv.object-flavor.apply-flavor.button.apply' | translate }}\n </button>\n </footer>\n </yuv-dialog>\n}\n", styles: [":host{display:grid;overflow:hidden}:host main{overflow:hidden}:host yuv-split-view{--split-gutter-background-color: var(--ymt-outline-variant);flex:1}:host .metadata{overflow-y:auto}:host .metadata yuv-object-form{display:block;background-color:var(--ymt-surface-panel);border:1px solid var(--ymt-outline-variant);max-width:100%;margin-inline:auto;box-sizing:border-box}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i2$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "ngmodule", type: YuvSplitViewModule }, { kind: "directive", type: i3.SplitAreaDirective, selector: "[yuvSplitArea]", inputs: ["size", "minSize", "maxSize", "panelClass", "visible", "lockSize"] }, { kind: "component", type: i3.SplitViewComponent, selector: "yuv-split-view", inputs: ["direction", "gutterSize", "restrictMove", "disabled", "layoutSettingsID"], outputs: ["layoutSettingsChange", "dragStart", "dragEnd", "gutterClick", "gutterDblClick"] }, { kind: "directive", type: BusyOverlayDirective, selector: "[yuvBusyOverlay]", inputs: ["yuvBusyOverlay", "yuvBusyOverlayConfig", "yuvBusyError"], outputs: ["yuvBusyErrorDismiss"] }, { kind: "component", type: ObjectFormComponent, selector: "yuv-object-form", inputs: ["formOptions", "inert", "readonly", "elementExtensions", "isInnerTableForm"], outputs: ["statusChanged", "onFormReady"] }, { kind: "component", type: ObjectPreviewComponent, selector: "yuv-object-preview", inputs: ["objectId", "dmsObject", "version", "metadata"] }, { kind: "component", type: DialogComponent, selector: "yuv-dialog", inputs: ["headertitle", "headertitel"] }, { kind: "directive", type: YmtButtonDirective, selector: "button[ymtButton], a[ymtButton]", inputs: ["ymtButton", "disabled", "aria-disabled", "disableRipple", "disabledInteractive", "button-size"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
132
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: DefaultApplyFlavorComponent, isStandalone: true, selector: "yuv-default-apply-flavor", viewQueries: [{ propertyName: "objectForm", first: true, predicate: ObjectFormComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@let o = dmsObject();\n@if (o) {\n <yuv-dialog [yuvBusyOverlay]=\"busyLoading()\" [headertitel]=\"'yuv.object-flavor.apply-flavor.headline' | translate: { name: flavorLabel() }\">\n <main>\n <yuv-split-view [gutterSize]=\"1\">\n <ng-template yuvSplitArea [size]=\"60\" [visible]=\"!!o.content\">\n @if (o.content) {\n <yuv-object-preview [objectId]=\"dmsObject().id\"></yuv-object-preview>\n }\n </ng-template>\n\n <ng-template yuvSplitArea [size]=\"40\">\n <div class=\"metadata\">\n @let fo = formOptions();\n @if (fo) {\n <yuv-object-form [inert]=\"busySaving()\" [formOptions]=\"fo\" (statusChanged)=\"onFormStatusChanged($event)\"></yuv-object-form>\n }\n </div>\n </ng-template>\n </yuv-split-view>\n </main>\n <footer>\n <button ymtButton=\"secondary\" mat-dialog-close [disabled]=\"busySaving()\">{{ 'yuv.object-flavor.apply-flavor.button.cancel' | translate }}</button>\n <button ymtButton=\"primary\" [ngClass]=\"{ spinning: busySaving() }\" [disabled]=\"applyDisabled() || busySaving()\" (click)=\"applyFlavor()\">\n {{ 'yuv.object-flavor.apply-flavor.button.apply' | translate }}\n </button>\n </footer>\n </yuv-dialog>\n}\n", styles: [":host{display:grid;overflow:hidden}:host main{overflow:hidden}:host yuv-split-view{--split-gutter-background-color: var(--ymt-outline-variant);flex:1}:host .metadata{overflow-y:auto;padding-block:var(--ymt-spacing-m)}:host .metadata yuv-object-form{display:block;background-color:var(--ymt-surface-panel);border:1px solid var(--ymt-outline-variant);max-width:100%;margin-inline:auto;box-sizing:border-box}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i2$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "ngmodule", type: YuvSplitViewModule }, { kind: "directive", type: i3.SplitAreaDirective, selector: "[yuvSplitArea]", inputs: ["size", "minSize", "maxSize", "panelClass", "visible", "lockSize"] }, { kind: "component", type: i3.SplitViewComponent, selector: "yuv-split-view", inputs: ["direction", "gutterSize", "restrictMove", "disabled", "layoutSettingsID"], outputs: ["layoutSettingsChange", "dragStart", "dragEnd", "gutterClick", "gutterDblClick"] }, { kind: "directive", type: BusyOverlayDirective, selector: "[yuvBusyOverlay]", inputs: ["yuvBusyOverlay", "yuvBusyOverlayConfig", "yuvBusyError"], outputs: ["yuvBusyErrorDismiss"] }, { kind: "component", type: ObjectFormComponent, selector: "yuv-object-form", inputs: ["formOptions", "inert", "readonly", "elementExtensions", "isInnerTableForm"], outputs: ["statusChanged", "onFormReady"] }, { kind: "component", type: ObjectPreviewComponent, selector: "yuv-object-preview", inputs: ["objectId", "dmsObject", "version", "metadata"] }, { kind: "component", type: DialogComponent, selector: "yuv-dialog", inputs: ["headertitle", "headertitel"] }, { kind: "directive", type: YmtButtonDirective, selector: "button[ymtButton], a[ymtButton]", inputs: ["ymtButton", "disabled", "aria-disabled", "disableRipple", "disabledInteractive", "button-size"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
130
133
  }
131
134
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: DefaultApplyFlavorComponent, decorators: [{
132
135
  type: Component,
@@ -140,13 +143,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
140
143
  ObjectPreviewComponent,
141
144
  DialogComponent,
142
145
  YmtButtonDirective
143
- ], template: "@let o = dmsObject();\n@if (o) {\n <yuv-dialog [yuvBusyOverlay]=\"busyLoading()\" [headertitel]=\"'yuv.object-flavor.apply-flavor.headline' | translate: { name: flavorLabel() }\">\n <main>\n <yuv-split-view [gutterSize]=\"1\">\n <ng-template yuvSplitArea [size]=\"60\" [visible]=\"!!o.content\">\n @if (o.content) {\n <yuv-object-preview [objectId]=\"dmsObject().id\"></yuv-object-preview>\n }\n </ng-template>\n\n <ng-template yuvSplitArea [size]=\"40\">\n <div class=\"metadata\">\n @let fo = formOptions();\n @if (fo) {\n <yuv-object-form [inert]=\"busySaving()\" [formOptions]=\"fo\" (statusChanged)=\"onFormStatusChanged($event)\"></yuv-object-form>\n }\n </div>\n </ng-template>\n </yuv-split-view>\n </main>\n <footer>\n <button ymtButton=\"secondary\" mat-dialog-close [disabled]=\"busySaving()\">{{ 'yuv.object-flavor.apply-flavor.button.cancel' | translate }}</button>\n <button ymtButton=\"primary\" mat-dialog-close [ngClass]=\"{ spinning: busySaving() }\" [disabled]=\"applyDisabled()\" (click)=\"applyFlavor()\">\n {{ 'yuv.object-flavor.apply-flavor.button.apply' | translate }}\n </button>\n </footer>\n </yuv-dialog>\n}\n", styles: [":host{display:grid;overflow:hidden}:host main{overflow:hidden}:host yuv-split-view{--split-gutter-background-color: var(--ymt-outline-variant);flex:1}:host .metadata{overflow-y:auto}:host .metadata yuv-object-form{display:block;background-color:var(--ymt-surface-panel);border:1px solid var(--ymt-outline-variant);max-width:100%;margin-inline:auto;box-sizing:border-box}\n"] }]
146
+ ], template: "@let o = dmsObject();\n@if (o) {\n <yuv-dialog [yuvBusyOverlay]=\"busyLoading()\" [headertitel]=\"'yuv.object-flavor.apply-flavor.headline' | translate: { name: flavorLabel() }\">\n <main>\n <yuv-split-view [gutterSize]=\"1\">\n <ng-template yuvSplitArea [size]=\"60\" [visible]=\"!!o.content\">\n @if (o.content) {\n <yuv-object-preview [objectId]=\"dmsObject().id\"></yuv-object-preview>\n }\n </ng-template>\n\n <ng-template yuvSplitArea [size]=\"40\">\n <div class=\"metadata\">\n @let fo = formOptions();\n @if (fo) {\n <yuv-object-form [inert]=\"busySaving()\" [formOptions]=\"fo\" (statusChanged)=\"onFormStatusChanged($event)\"></yuv-object-form>\n }\n </div>\n </ng-template>\n </yuv-split-view>\n </main>\n <footer>\n <button ymtButton=\"secondary\" mat-dialog-close [disabled]=\"busySaving()\">{{ 'yuv.object-flavor.apply-flavor.button.cancel' | translate }}</button>\n <button ymtButton=\"primary\" [ngClass]=\"{ spinning: busySaving() }\" [disabled]=\"applyDisabled() || busySaving()\" (click)=\"applyFlavor()\">\n {{ 'yuv.object-flavor.apply-flavor.button.apply' | translate }}\n </button>\n </footer>\n </yuv-dialog>\n}\n", styles: [":host{display:grid;overflow:hidden}:host main{overflow:hidden}:host yuv-split-view{--split-gutter-background-color: var(--ymt-outline-variant);flex:1}:host .metadata{overflow-y:auto;padding-block:var(--ymt-spacing-m)}:host .metadata yuv-object-form{display:block;background-color:var(--ymt-surface-panel);border:1px solid var(--ymt-outline-variant);max-width:100%;margin-inline:auto;box-sizing:border-box}\n"] }]
144
147
  }], propDecorators: { objectForm: [{ type: i0.ViewChild, args: [i0.forwardRef(() => ObjectFormComponent), { isSignal: true }] }] } });
145
148
 
146
149
  class ObjectFlavorPickerComponent {
147
150
  constructor() {
148
151
  this.#shell = inject(ShellService);
149
152
  this.#dialogData = inject(MAT_DIALOG_DATA);
153
+ this.#notification = inject(NotificationService);
154
+ this.#translate = inject(TranslateService);
150
155
  this.#dialogRef = inject((MatDialogRef));
151
156
  // TODO: This was previously not there but used as a host component class, so what the fuck?
152
157
  this.applyComponent = null;
@@ -156,6 +161,8 @@ class ObjectFlavorPickerComponent {
156
161
  }
157
162
  #shell;
158
163
  #dialogData;
164
+ #notification;
165
+ #translate;
159
166
  #dialogRef;
160
167
  #dmsObject;
161
168
  itemSelected(idx) {
@@ -166,7 +173,9 @@ class ObjectFlavorPickerComponent {
166
173
  .subscribe({
167
174
  next: () => {
168
175
  this.#dialogRef.close();
169
- }
176
+ },
177
+ // keep the dialog open so the user sees the type was not applied and can retry
178
+ error: () => this.#notification.error(this.#translate.instant('yuv.object-flavor.apply-flavor.error'))
170
179
  });
171
180
  }
172
181
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: ObjectFlavorPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
@@ -1 +1 @@
1
- {"version":3,"file":"yuuvis-client-framework-object-flavor.mjs","sources":["../../../../../libs/yuuvis/client-framework/object-flavor/src/lib/flavor-chip/flavor-chip.component.ts","../../../../../libs/yuuvis/client-framework/object-flavor/src/lib/flavor-chip/flavor-chip.component.html","../../../../../libs/yuuvis/client-framework/object-flavor/src/lib/abstract-apply-object-flavor/abstract-apply-object-flavor.component.ts","../../../../../libs/yuuvis/client-framework/object-flavor/src/lib/default-apply-flavor/default-apply-flavor.component.ts","../../../../../libs/yuuvis/client-framework/object-flavor/src/lib/default-apply-flavor/default-apply-flavor.component.html","../../../../../libs/yuuvis/client-framework/object-flavor/src/lib/object-flavor-picker/object-flavor-picker.component.ts","../../../../../libs/yuuvis/client-framework/object-flavor/src/lib/object-flavor-picker/object-flavor-picker.component.html","../../../../../libs/yuuvis/client-framework/object-flavor/src/lib/object-flavor/object-flavor.component.ts","../../../../../libs/yuuvis/client-framework/object-flavor/src/lib/object-flavor/object-flavor.component.html","../../../../../libs/yuuvis/client-framework/object-flavor/src/lib/abstract-apply-create-flavor/abstract-apply-create-flavor.component.ts","../../../../../libs/yuuvis/client-framework/object-flavor/src/yuuvis-client-framework-object-flavor.ts"],"sourcesContent":["import { Component, inject, input, output } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { SystemService, TranslateService } from '@yuuvis/client-core';\nimport { ObjectFlavor } from '@yuuvis/client-shell-core';\n\n@Component({\n selector: 'yuv-flavor-chip',\n standalone: true,\n imports: [MatIconModule, MatButtonModule],\n templateUrl: './flavor-chip.component.html',\n styleUrl: './flavor-chip.component.scss'\n})\nexport class FlavorChipComponent {\n private translate = inject(TranslateService);\n #system = inject(SystemService);\n\n flavor = input.required<ObjectFlavor>();\n\n enableRemove = input<boolean>();\n enableDescription = input<boolean>();\n\n flavorRemove = output();\n\n remove(e: MouseEvent | KeyboardEvent) {\n e.preventDefault();\n e.stopPropagation();\n this.flavorRemove.emit();\n }\n}\n","@let fo = flavor();\n\n@if (fo.icon) {\n @if (fo.svgIcon) {\n <mat-icon [svgIcon]=\"fo.icon\"></mat-icon>\n } @else {\n <mat-icon>{{ fo.icon }}</mat-icon>\n }\n} @else {\n <div class=\"empty-icon\"></div>\n}\n\n<div>\n {{ fo.name }}\n @if (enableDescription()) {\n <span class=\"description\">{{ fo.description }}</span>\n }\n</div>\n@if (enableRemove() && !flavor().preventRemove) {\n <button mat-icon-button class=\"ymt-icon-button--size-s\" (click)=\"remove($event)\">\n <mat-icon>close</mat-icon>\n </button>\n}\n","import { Component, inject, input } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { DmsObject } from '@yuuvis/client-core';\nimport { ObjectFlavor } from '@yuuvis/client-shell-core';\n\n@Component({\n selector: 'yuv-apply-object-flavor',\n standalone: true,\n imports: [],\n template: '',\n styles: ''\n})\nexport abstract class AbstractApplyObjectFlavorComponent {\n protected readonly dialogData = inject<any>(MAT_DIALOG_DATA);\n protected readonly dialogRef = inject(MatDialogRef<any>);\n // the dmsObject the flavor should be applied to\n dmsObject = input<DmsObject>(this.dialogData.dmsObject);\n // the flavor that should be applied\n flavor = input<ObjectFlavor>(this.dialogData.flavor);\n // Optional data \n data = input<any>(this.dialogData.data);\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, effect, inject, signal, untracked, viewChild } from '@angular/core';\nimport { Situation, SystemService, TranslatePipe, TranslateService } from '@yuuvis/client-core';\n\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { BusyOverlayDirective, DialogComponent } from '@yuuvis/client-framework/common';\nimport { FormStatusChangedEvent, ObjectFormComponent, ObjectFormOptions } from '@yuuvis/client-framework/object-form';\nimport { ObjectPreviewComponent } from '@yuuvis/client-framework/object-preview';\nimport { YuvSplitViewModule } from '@yuuvis/client-framework/split-view';\nimport { ObjectFlavor, ShellService } from '@yuuvis/client-shell-core';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { finalize } from 'rxjs/operators';\nimport { AbstractApplyObjectFlavorComponent } from '../abstract-apply-object-flavor/abstract-apply-object-flavor.component';\n\n@Component({\n selector: 'yuv-default-apply-flavor',\n imports: [\n CommonModule,\n TranslatePipe,\n MatDialogModule,\n YuvSplitViewModule,\n BusyOverlayDirective,\n ObjectFormComponent,\n ObjectPreviewComponent,\n DialogComponent,\n YmtButtonDirective\n ],\n templateUrl: './default-apply-flavor.component.html',\n styleUrl: './default-apply-flavor.component.scss'\n})\nexport class DefaultApplyFlavorComponent extends AbstractApplyObjectFlavorComponent {\n #system = inject(SystemService);\n #shell = inject(ShellService);\n private translate = inject(TranslateService);\n\n objectForm = viewChild(ObjectFormComponent);\n\n flavorLabel = computed(() =>\n this.flavor().origin === 'app'\n ? this.translate.instant(this.flavor().id)\n : this.#system.getLocalizedLabel(this.flavor().id)\n );\n #flavorEffect = effect(() => {\n const f = this.flavor();\n untracked(() => {\n if (f) this.#loadForm(f);\n });\n });\n\n error = signal<boolean>(false);\n applyDisabled = signal<boolean>(true);\n busyLoading = signal<boolean>(false);\n busySaving = signal<boolean>(false);\n formOptions = signal<ObjectFormOptions | null>(null);\n\n #loadForm(f: ObjectFlavor) {\n this.busyLoading.set(true);\n this.#system\n .getObjectTypeForm(f.sot, Situation.CREATE)\n .pipe(finalize(() => this.busyLoading.set(false)))\n .subscribe({\n next: (form) => {\n this.formOptions.set({\n formModel: form,\n data: {}\n });\n }\n });\n }\n\n onFormStatusChanged(status: FormStatusChangedEvent) {\n this.applyDisabled.set(status.invalid);\n }\n\n applyFlavor() {\n const of = this.objectForm();\n const data: Record<string, unknown> = of ? of.getFormData() : {};\n\n this.busySaving.set(true);\n this.#shell\n .applyObjectFlavor(this.dmsObject(), this.flavor(), data)\n .pipe(finalize(() => this.busySaving.set(false)))\n .subscribe({\n next: () => this.close()\n // TODO: handle error\n });\n }\n\n close() {\n this.dialogRef.close();\n }\n}\n","@let o = dmsObject();\n@if (o) {\n <yuv-dialog [yuvBusyOverlay]=\"busyLoading()\" [headertitel]=\"'yuv.object-flavor.apply-flavor.headline' | translate: { name: flavorLabel() }\">\n <main>\n <yuv-split-view [gutterSize]=\"1\">\n <ng-template yuvSplitArea [size]=\"60\" [visible]=\"!!o.content\">\n @if (o.content) {\n <yuv-object-preview [objectId]=\"dmsObject().id\"></yuv-object-preview>\n }\n </ng-template>\n\n <ng-template yuvSplitArea [size]=\"40\">\n <div class=\"metadata\">\n @let fo = formOptions();\n @if (fo) {\n <yuv-object-form [inert]=\"busySaving()\" [formOptions]=\"fo\" (statusChanged)=\"onFormStatusChanged($event)\"></yuv-object-form>\n }\n </div>\n </ng-template>\n </yuv-split-view>\n </main>\n <footer>\n <button ymtButton=\"secondary\" mat-dialog-close [disabled]=\"busySaving()\">{{ 'yuv.object-flavor.apply-flavor.button.cancel' | translate }}</button>\n <button ymtButton=\"primary\" mat-dialog-close [ngClass]=\"{ spinning: busySaving() }\" [disabled]=\"applyDisabled()\" (click)=\"applyFlavor()\">\n {{ 'yuv.object-flavor.apply-flavor.button.apply' | translate }}\n </button>\n </footer>\n </yuv-dialog>\n}\n","import { Component, inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { DmsObject, TranslatePipe } from '@yuuvis/client-core';\nimport { DialogComponent } from '@yuuvis/client-framework/common';\nimport { YuvListModule } from '@yuuvis/client-framework/list';\nimport { ObjectFlavor, ShellService } from '@yuuvis/client-shell-core';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { DefaultApplyFlavorComponent } from '../default-apply-flavor/default-apply-flavor.component';\nimport { FlavorChipComponent } from '../flavor-chip/flavor-chip.component';\n\n@Component({\n selector: 'yuv-object-flavor-picker',\n standalone: true,\n imports: [\n YuvListModule,\n DialogComponent,\n MatButtonModule,\n MatDialogModule,\n FlavorChipComponent,\n TranslatePipe,\n YmtButtonDirective\n ],\n templateUrl: './object-flavor-picker.component.html',\n styleUrl: './object-flavor-picker.component.scss',\n host: {\n '[class.cmp]': '!!applyComponent'\n }\n})\nexport class ObjectFlavorPickerComponent {\n #shell = inject(ShellService);\n #dialogData = inject<any>(MAT_DIALOG_DATA);\n readonly #dialogRef = inject(MatDialogRef<ObjectFlavorPickerComponent>);\n\n // TODO: This was previously not there but used as a host component class, so what the fuck?\n applyComponent = null;\n\n applicableObjectFlavors: ObjectFlavor[] = this.#dialogData.applicableFlavors;\n\n applicableFlavors: ObjectFlavor[] = this.#dialogData.applicableFlavors.sort((a: ObjectFlavor, b: ObjectFlavor) =>\n (a.name || '').localeCompare(b.name || '')\n );\n #dmsObject: DmsObject = this.#dialogData.dmsObject;\n\n itemSelected(idx: number[]) {\n const flavor = this.applicableObjectFlavors[idx[0]];\n if (this.#dmsObject && flavor)\n this.#shell\n .triggerApplyObjectFlavor(\n this.#dmsObject,\n flavor,\n undefined,\n flavor.useDefaultApplyComponent ? DefaultApplyFlavorComponent : undefined\n )\n .subscribe({\n next: () => {\n this.#dialogRef.close();\n }\n });\n }\n}\n","<yuv-dialog [headertitel]=\"'yuv.object-flavor.picker.title' | translate\">\n <main>\n <p>{{ 'yuv.object-flavor.picker.text' | translate }}</p>\n <yuv-list (itemSelect)=\"itemSelected($event)\" selectOnEnter=\"true\">\n @for (f of applicableFlavors; track $index) {\n <yuv-flavor-chip [flavor]=\"f\" [enableDescription]=\"true\" yuvListItem></yuv-flavor-chip>\n }\n </yuv-list>\n </main>\n <footer>\n <button ymtButton=\"secondary\" mat-dialog-close>{{ 'yuv.object-flavor.picker.button.cancel' | translate }}</button>\n </footer>\n</yuv-dialog>\n","import {\n Component,\n effect,\n HostAttributeToken,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChild\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { DmsObject, SystemService, TranslatePipe, TranslateService } from '@yuuvis/client-core';\nimport { ConfirmService, DragScrollDirective } from '@yuuvis/client-framework/common';\nimport { ListComponent, YuvListModule } from '@yuuvis/client-framework/list';\nimport { ObjectFlavor, ShellService } from '@yuuvis/client-shell-core';\nimport { of, switchMap } from 'rxjs';\nimport { FlavorChipComponent } from '../flavor-chip/flavor-chip.component';\nimport { ObjectFlavorPickerComponent } from '../object-flavor-picker/object-flavor-picker.component';\n\n@Component({\n selector: 'yuv-object-flavor',\n standalone: true,\n imports: [\n FlavorChipComponent,\n MatTooltipModule,\n MatProgressBarModule,\n DragScrollDirective,\n MatIconModule,\n MatButtonModule,\n YuvListModule,\n TranslatePipe\n ],\n templateUrl: './object-flavor.component.html',\n styleUrl: './object-flavor.component.scss',\n host: {\n '[attr.aria-hidden]': 'hidden()',\n '[class.busy]': 'busy()',\n '[class.selection]': 'selectedIndex() > -1',\n '[class.selectionDisabled]': 'disableSelection'\n }\n})\nexport class ObjectFlavorComponent {\n #shell = inject(ShellService);\n #dialog = inject(MatDialog);\n #confirm = inject(ConfirmService);\n #system = inject(SystemService);\n private translate = inject(TranslateService);\n\n list = viewChild(ListComponent);\n\n dmsObject = input.required<DmsObject>();\n #dmsObjectEffect = effect(() => {\n const o = this.dmsObject();\n const listCmp = this.list();\n if (o)\n untracked(() => {\n this.#getAppliedFlavors(o);\n if (listCmp) listCmp.clear(true);\n });\n });\n\n flavorSelect = output<ObjectFlavor | undefined>();\n\n appliedFlavors: ObjectFlavor[] = [];\n applicableFlavors: ObjectFlavor[] = [];\n\n hidden = signal<boolean>(false);\n busy = signal<boolean>(false);\n\n selectedIndex = signal<number>(-1);\n\n disableSelection: boolean =\n (inject(new HostAttributeToken('disableSelection'), { optional: true }) || 'false') === 'true';\n\n clearSelection() {\n const listCmp = this.list();\n if (listCmp) listCmp.clear();\n this.selectedIndex.set(-1);\n this.flavorSelect.emit(undefined);\n }\n\n onItemsSelect(idx: number[]) {\n const ci = idx[0];\n this.selectedIndex.set(ci);\n this.flavorSelect.emit(this.appliedFlavors[ci]);\n }\n\n startApplyFlavor() {\n this.#dialog.open(ObjectFlavorPickerComponent, {\n data: {\n applicableFlavors: this.applicableFlavors,\n dmsObject: structuredClone(this.dmsObject())\n }\n });\n }\n\n removeFlavor(flavor: ObjectFlavor, index: number) {\n if (flavor.preventRemove) return;\n const o = this.dmsObject();\n if (o) {\n this.busy.set(true);\n this.#confirm\n .confirm({\n title: this.translate.instant('yuv.shell.action.manage-flavors.applicable.button.remove.tooltip'),\n message: this.translate.instant('yuv.object-flavor.flavor.remove.confirm.message', {\n flavor: this.#shell.getFlavorLabel(flavor.id)\n }),\n confirmLabel: this.translate.instant('yuv.shell.action.manage-flavors.button.remove')\n })\n .pipe(\n switchMap((confirmed: boolean) => (confirmed ? this.#shell.removeObjectFlavor(o, flavor) : of(undefined)))\n )\n .subscribe({\n next: () => {\n if (index === this.selectedIndex() || !this.appliedFlavors.length) this.clearSelection();\n this.busy.set(false);\n },\n error: () => {\n // TODO: error handling\n this.busy.set(false);\n }\n });\n }\n }\n\n #getAppliedFlavors(dmsObject: DmsObject) {\n const res = this.#shell.getAppliedObjectFlavors(dmsObject);\n this.appliedFlavors = res.applied;\n this.applicableFlavors = res.applicable;\n this.hidden.set(this.applicableFlavors.length === 0 && this.appliedFlavors.length === 0);\n }\n}\n","\n<div class=\"object-flavor\">\n <span class=\"label\">{{ 'yuv.object-flavor.label' | translate }}</span>\n@if (applicableFlavors.length) {\n <button mat-icon-button class=\"add ymt-icon-button--size-s secondary\"\n [matTooltip]=\"'yuv.object-flavor.button.add' | translate\" (click)=\"startApplyFlavor()\">\n <mat-icon>add</mat-icon>\n </button>\n}\n</div>\n@if (appliedFlavors.length) {\n <yuv-list horizontal=\"true\" [disableSelection]=\"disableSelection\" (itemSelect)=\"onItemsSelect($event)\" yuvDragScroll>\n @for (f of appliedFlavors; track f.id) {\n <yuv-flavor-chip yuvListItem [flavor]=\"f\" [enableRemove]=\"true\" (flavorRemove)=\"removeFlavor(f, $index)\"></yuv-flavor-chip>\n }\n </yuv-list>\n}\n<button mat-icon-button class=\"clear\" [matTooltip]=\"'yuv.object-flavor.button.clear-selection' | translate\" (click)=\"clearSelection()\">\n <mat-icon>close</mat-icon>\n</button>\n\n@if (busy()) {\n <mat-progress-bar mode=\"indeterminate\" class=\"progress-bar\"></mat-progress-bar>\n}\n","\nimport { Component, inject, output, signal } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { ObjectCreateFlavor } from '@yuuvis/client-core';\n\n@Component({\n selector: 'yuv-abstract-apply-create-flavor',\n standalone: true,\n imports: [],\n template: ''\n})\nexport abstract class AbstractApplyCreateFlavorComponent {\n #dialogData = inject<any>(MAT_DIALOG_DATA);\n readonly #dialogRef = inject(MatDialogRef<any>);\n createdObjectIDs = signal<string[]>(this.#dialogData.createdObjectIDs);\n flavor = signal<ObjectCreateFlavor>(this.#dialogData.flavor);\n data = signal<any>(this.#dialogData.data);\n cancel = output();\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;MAaa,mBAAmB,CAAA;AAPhC,IAAA,WAAA,GAAA;AAQU,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC5C,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;AAE/B,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,4EAAgB;QAEvC,IAAA,CAAA,YAAY,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAW;QAC/B,IAAA,CAAA,iBAAiB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAW;QAEpC,IAAA,CAAA,YAAY,GAAG,MAAM,EAAE;AAOxB,IAAA;AAdC,IAAA,OAAO;AASP,IAAA,MAAM,CAAC,CAA6B,EAAA;QAClC,CAAC,CAAC,cAAc,EAAE;QAClB,CAAC,CAAC,eAAe,EAAE;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;+GAfW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECbhC,4hBAuBA,EAAA,MAAA,EAAA,CAAA,mnBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDdY,aAAa,mLAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAI7B,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cACf,IAAI,EAAA,OAAA,EACP,CAAC,aAAa,EAAE,eAAe,CAAC,EAAA,QAAA,EAAA,4hBAAA,EAAA,MAAA,EAAA,CAAA,mnBAAA,CAAA,EAAA;;;MEGrB,kCAAkC,CAAA;AAPxD,IAAA,WAAA,GAAA;AAQqB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAM,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,EAAC,YAAiB,EAAC;;QAExD,IAAA,CAAA,SAAS,GAAG,KAAK,CAAY,IAAI,CAAC,UAAU,CAAC,SAAS,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;;QAEvD,IAAA,CAAA,MAAM,GAAG,KAAK,CAAe,IAAI,CAAC,UAAU,CAAC,MAAM,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;;QAEpD,IAAA,CAAA,IAAI,GAAG,KAAK,CAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AACxC,IAAA;+GATqB,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kCAAkC,mdAH5C,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAGQ,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAPvD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAAA,UAAA,EACvB,IAAI,EAAA,OAAA,EACP,EAAE,YACD,EAAE,EAAA;;;ACqBR,MAAO,2BAA4B,SAAQ,kCAAkC,CAAA;AAhBnF,IAAA,WAAA,GAAA;;AAiBE,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;AAC/B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;AACrB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE5C,QAAA,IAAA,CAAA,UAAU,GAAG,SAAS,CAAC,mBAAmB,iFAAC;AAE3C,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MACrB,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,KAAK;AACvB,cAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;AACzC,cAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,kFACrD;AACD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,MAAK;AAC1B,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;YACvB,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,CAAC;AAAE,oBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC1B,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,oFAAC;AAEF,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAU,KAAK,4EAAC;AAC9B,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAU,IAAI,oFAAC;AACrC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAU,KAAK,kFAAC;AACpC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAU,KAAK,iFAAC;AACnC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAA2B,IAAI,kFAAC;AAsCrD,IAAA;AA5DC,IAAA,OAAO;AACP,IAAA,MAAM;AAUN,IAAA,aAAa;AAab,IAAA,SAAS,CAAC,CAAe,EAAA;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC;aACF,iBAAiB,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM;AACzC,aAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAChD,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,IAAI,KAAI;AACb,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AACnB,oBAAA,SAAS,EAAE,IAAI;AACf,oBAAA,IAAI,EAAE;AACP,iBAAA,CAAC;YACJ;AACD,SAAA,CAAC;IACN;AAEA,IAAA,mBAAmB,CAAC,MAA8B,EAAA;QAChD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;IACxC;IAEA,WAAW,GAAA;AACT,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE;AAC5B,QAAA,MAAM,IAAI,GAA4B,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;AAEhE,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC;AACF,aAAA,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI;AACvD,aAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/C,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,MAAM,IAAI,CAAC,KAAK;;AAEvB,SAAA,CAAC;IACN;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IACxB;+GA5DW,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAKf,mBAAmB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnC5C,0xCA6BA,6aDZI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,kBAAkB,6bAClB,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,sBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,OAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,sBAAsB,yHACtB,eAAe,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,kBAAkB,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAPlB,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAYJ,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAhBvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,OAAA,EAC3B;wBACP,YAAY;wBACZ,aAAa;wBACb,eAAe;wBACf,kBAAkB;wBAClB,oBAAoB;wBACpB,mBAAmB;wBACnB,sBAAsB;wBACtB,eAAe;wBACf;AACD,qBAAA,EAAA,QAAA,EAAA,0xCAAA,EAAA,MAAA,EAAA,CAAA,sXAAA,CAAA,EAAA;4FASsB,mBAAmB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEN/B,2BAA2B,CAAA;AAlBxC,IAAA,WAAA,GAAA;AAmBE,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;AAC7B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAM,eAAe,CAAC;AACjC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,EAAC,YAAyC,EAAC;;QAGvE,IAAA,CAAA,cAAc,GAAG,IAAI;AAErB,QAAA,IAAA,CAAA,uBAAuB,GAAmB,IAAI,CAAC,WAAW,CAAC,iBAAiB;AAE5E,QAAA,IAAA,CAAA,iBAAiB,GAAmB,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,CAAe,KAC3G,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAC3C;AACD,QAAA,IAAA,CAAA,UAAU,GAAc,IAAI,CAAC,WAAW,CAAC,SAAS;AAkBnD,IAAA;AA9BC,IAAA,MAAM;AACN,IAAA,WAAW;AACF,IAAA,UAAU;AAUnB,IAAA,UAAU;AAEV,IAAA,YAAY,CAAC,GAAa,EAAA;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACnD,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,MAAM;AAC3B,YAAA,IAAI,CAAC;iBACF,wBAAwB,CACvB,IAAI,CAAC,UAAU,EACf,MAAM,EACN,SAAS,EACT,MAAM,CAAC,wBAAwB,GAAG,2BAA2B,GAAG,SAAS;AAE1E,iBAAA,SAAS,CAAC;gBACT,IAAI,EAAE,MAAK;AACT,oBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;gBACzB;AACD,aAAA,CAAC;IACR;+GA9BW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7BxC,qkBAaA,EAAA,MAAA,EAAA,CAAA,iWAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDEI,aAAa,+ZACb,eAAe,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,cAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEnB,kBAAkB,kLADlB,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FASJ,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAlBvC,SAAS;+BACE,0BAA0B,EAAA,UAAA,EACxB,IAAI,EAAA,OAAA,EACP;wBACP,aAAa;wBACb,eAAe;wBACf,eAAe;wBACf,eAAe;wBACf,mBAAmB;wBACnB,aAAa;wBACb;qBACD,EAAA,IAAA,EAGK;AACJ,wBAAA,aAAa,EAAE;AAChB,qBAAA,EAAA,QAAA,EAAA,qkBAAA,EAAA,MAAA,EAAA,CAAA,iWAAA,CAAA,EAAA;;;MEmBU,qBAAqB,CAAA;AAtBlC,IAAA,WAAA,GAAA;AAuBE,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;AAC7B,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC;AAC3B,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC;AACjC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;AACvB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE5C,QAAA,IAAA,CAAA,IAAI,GAAG,SAAS,CAAC,aAAa,2EAAC;AAE/B,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,+EAAa;AACvC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,MAAK;AAC7B,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE;AAC1B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;AAC3B,YAAA,IAAI,CAAC;gBACH,SAAS,CAAC,MAAK;AACb,oBAAA,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAC1B,oBAAA,IAAI,OAAO;AAAE,wBAAA,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;AAClC,gBAAA,CAAC,CAAC;AACN,QAAA,CAAC,uFAAC;QAEF,IAAA,CAAA,YAAY,GAAG,MAAM,EAA4B;QAEjD,IAAA,CAAA,cAAc,GAAmB,EAAE;QACnC,IAAA,CAAA,iBAAiB,GAAmB,EAAE;AAEtC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAU,KAAK,6EAAC;AAC/B,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAU,KAAK,2EAAC;AAE7B,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAS,CAAC,CAAC,oFAAC;QAElC,IAAA,CAAA,gBAAgB,GACd,CAAC,MAAM,CAAC,IAAI,kBAAkB,CAAC,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,OAAO,MAAM,MAAM;AA2DjG,IAAA;AAzFC,IAAA,MAAM;AACN,IAAA,OAAO;AACP,IAAA,QAAQ;AACR,IAAA,OAAO;AAMP,IAAA,gBAAgB;IAuBhB,cAAc,GAAA;AACZ,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;AAC3B,QAAA,IAAI,OAAO;YAAE,OAAO,CAAC,KAAK,EAAE;QAC5B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;IACnC;AAEA,IAAA,aAAa,CAAC,GAAa,EAAA;AACzB,QAAA,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;AACjB,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IACjD;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE;AAC7C,YAAA,IAAI,EAAE;gBACJ,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;AACzC,gBAAA,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE;AAC5C;AACF,SAAA,CAAC;IACJ;IAEA,YAAY,CAAC,MAAoB,EAAE,KAAa,EAAA;QAC9C,IAAI,MAAM,CAAC,aAAa;YAAE;AAC1B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE;QAC1B,IAAI,CAAC,EAAE;AACL,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACnB,YAAA,IAAI,CAAC;AACF,iBAAA,OAAO,CAAC;gBACP,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kEAAkE,CAAC;gBACjG,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,iDAAiD,EAAE;oBACjF,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;iBAC7C,CAAC;gBACF,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,+CAA+C;aACrF;AACA,iBAAA,IAAI,CACH,SAAS,CAAC,CAAC,SAAkB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AAE3G,iBAAA,SAAS,CAAC;gBACT,IAAI,EAAE,MAAK;AACT,oBAAA,IAAI,KAAK,KAAK,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM;wBAAE,IAAI,CAAC,cAAc,EAAE;AACxF,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;gBACtB,CAAC;gBACD,KAAK,EAAE,MAAK;;AAEV,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;gBACtB;AACD,aAAA,CAAC;QACN;IACF;AAEA,IAAA,kBAAkB,CAAC,SAAoB,EAAA;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC;AAC1D,QAAA,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,OAAO;AACjC,QAAA,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,UAAU;QACvC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC;IAC1F;+GAzFW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,ydAOf,aAAa,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrDhC,mgCAwBA,EAAA,MAAA,EAAA,CAAA,k1QAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDII,mBAAmB,+IACnB,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,oBAAoB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,mBAAmB,2DACnB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,0ZACb,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAWJ,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAtBjC,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EAAA,OAAA,EACP;wBACP,mBAAmB;wBACnB,gBAAgB;wBAChB,oBAAoB;wBACpB,mBAAmB;wBACnB,aAAa;wBACb,eAAe;wBACf,aAAa;wBACb;qBACD,EAAA,IAAA,EAGK;AACJ,wBAAA,oBAAoB,EAAE,UAAU;AAChC,wBAAA,cAAc,EAAE,QAAQ;AACxB,wBAAA,mBAAmB,EAAE,sBAAsB;AAC3C,wBAAA,2BAA2B,EAAE;AAC9B,qBAAA,EAAA,QAAA,EAAA,mgCAAA,EAAA,MAAA,EAAA,CAAA,k1QAAA,CAAA,EAAA;sFASgB,aAAa,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ME1CV,kCAAkC,CAAA;AANxD,IAAA,WAAA,GAAA;AAOE,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAM,eAAe,CAAC;AACjC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,EAAC,YAAiB,EAAC;QAC/C,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAW,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;QACtE,IAAA,CAAA,MAAM,GAAG,MAAM,CAAqB,IAAI,CAAC,WAAW,CAAC,MAAM,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;QAC5D,IAAA,CAAA,IAAI,GAAG,MAAM,CAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;QACzC,IAAA,CAAA,MAAM,GAAG,MAAM,EAAE;AAClB,IAAA;AANC,IAAA,WAAW;AACF,IAAA,UAAU;+GAFC,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kCAAkC,2HAF5C,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;4FAEQ,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBANvD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kCAAkC;AAC5C,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,QAAQ,EAAE;AACX,iBAAA;;;ACVD;;AAEG;;;;"}
1
+ {"version":3,"file":"yuuvis-client-framework-object-flavor.mjs","sources":["../../../../../libs/yuuvis/client-framework/object-flavor/src/lib/flavor-chip/flavor-chip.component.ts","../../../../../libs/yuuvis/client-framework/object-flavor/src/lib/flavor-chip/flavor-chip.component.html","../../../../../libs/yuuvis/client-framework/object-flavor/src/lib/abstract-apply-object-flavor/abstract-apply-object-flavor.component.ts","../../../../../libs/yuuvis/client-framework/object-flavor/src/lib/default-apply-flavor/default-apply-flavor.component.ts","../../../../../libs/yuuvis/client-framework/object-flavor/src/lib/default-apply-flavor/default-apply-flavor.component.html","../../../../../libs/yuuvis/client-framework/object-flavor/src/lib/object-flavor-picker/object-flavor-picker.component.ts","../../../../../libs/yuuvis/client-framework/object-flavor/src/lib/object-flavor-picker/object-flavor-picker.component.html","../../../../../libs/yuuvis/client-framework/object-flavor/src/lib/object-flavor/object-flavor.component.ts","../../../../../libs/yuuvis/client-framework/object-flavor/src/lib/object-flavor/object-flavor.component.html","../../../../../libs/yuuvis/client-framework/object-flavor/src/lib/abstract-apply-create-flavor/abstract-apply-create-flavor.component.ts","../../../../../libs/yuuvis/client-framework/object-flavor/src/yuuvis-client-framework-object-flavor.ts"],"sourcesContent":["import { Component, inject, input, output } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { SystemService, TranslateService } from '@yuuvis/client-core';\nimport { ObjectFlavor } from '@yuuvis/client-shell-core';\n\n@Component({\n selector: 'yuv-flavor-chip',\n standalone: true,\n imports: [MatIconModule, MatButtonModule],\n templateUrl: './flavor-chip.component.html',\n styleUrl: './flavor-chip.component.scss'\n})\nexport class FlavorChipComponent {\n private translate = inject(TranslateService);\n #system = inject(SystemService);\n\n flavor = input.required<ObjectFlavor>();\n\n enableRemove = input<boolean>();\n enableDescription = input<boolean>();\n\n flavorRemove = output();\n\n remove(e: MouseEvent | KeyboardEvent) {\n e.preventDefault();\n e.stopPropagation();\n this.flavorRemove.emit();\n }\n}\n","@let fo = flavor();\n\n@if (fo.icon) {\n @if (fo.svgIcon) {\n <mat-icon [svgIcon]=\"fo.icon\"></mat-icon>\n } @else {\n <mat-icon>{{ fo.icon }}</mat-icon>\n }\n} @else {\n <div class=\"empty-icon\"></div>\n}\n\n<div>\n {{ fo.name }}\n @if (enableDescription()) {\n <span class=\"description\">{{ fo.description }}</span>\n }\n</div>\n@if (enableRemove() && !flavor().preventRemove) {\n <button mat-icon-button class=\"ymt-icon-button--size-s\" (click)=\"remove($event)\">\n <mat-icon>close</mat-icon>\n </button>\n}\n","import { Component, inject, input } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { DmsObject } from '@yuuvis/client-core';\nimport { ObjectFlavor } from '@yuuvis/client-shell-core';\n\n@Component({\n selector: 'yuv-apply-object-flavor',\n standalone: true,\n imports: [],\n template: '',\n styles: ''\n})\nexport abstract class AbstractApplyObjectFlavorComponent {\n protected readonly dialogData = inject<any>(MAT_DIALOG_DATA);\n protected readonly dialogRef = inject(MatDialogRef<any>);\n // the dmsObject the flavor should be applied to\n dmsObject = input<DmsObject>(this.dialogData.dmsObject);\n // the flavor that should be applied\n flavor = input<ObjectFlavor>(this.dialogData.flavor);\n // Optional data \n data = input<any>(this.dialogData.data);\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, effect, inject, signal, untracked, viewChild } from '@angular/core';\nimport { NotificationService, Situation, SystemService, TranslatePipe, TranslateService } from '@yuuvis/client-core';\n\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { BusyOverlayDirective, DialogComponent } from '@yuuvis/client-framework/common';\nimport { FormStatusChangedEvent, ObjectFormComponent, ObjectFormOptions } from '@yuuvis/client-framework/object-form';\nimport { ObjectPreviewComponent } from '@yuuvis/client-framework/object-preview';\nimport { YuvSplitViewModule } from '@yuuvis/client-framework/split-view';\nimport { ObjectFlavor, ShellService } from '@yuuvis/client-shell-core';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { finalize } from 'rxjs/operators';\nimport { AbstractApplyObjectFlavorComponent } from '../abstract-apply-object-flavor/abstract-apply-object-flavor.component';\n\n@Component({\n selector: 'yuv-default-apply-flavor',\n imports: [\n CommonModule,\n TranslatePipe,\n MatDialogModule,\n YuvSplitViewModule,\n BusyOverlayDirective,\n ObjectFormComponent,\n ObjectPreviewComponent,\n DialogComponent,\n YmtButtonDirective\n ],\n templateUrl: './default-apply-flavor.component.html',\n styleUrl: './default-apply-flavor.component.scss'\n})\nexport class DefaultApplyFlavorComponent extends AbstractApplyObjectFlavorComponent {\n #system = inject(SystemService);\n #shell = inject(ShellService);\n #notification = inject(NotificationService);\n private translate = inject(TranslateService);\n\n objectForm = viewChild(ObjectFormComponent);\n\n flavorLabel = computed(() =>\n this.flavor().origin === 'app'\n ? this.translate.instant(this.flavor().id)\n : this.#system.getLocalizedLabel(this.flavor().id)\n );\n #flavorEffect = effect(() => {\n const f = this.flavor();\n untracked(() => {\n if (f) this.#loadForm(f);\n });\n });\n\n error = signal<boolean>(false);\n applyDisabled = signal<boolean>(true);\n busyLoading = signal<boolean>(false);\n busySaving = signal<boolean>(false);\n formOptions = signal<ObjectFormOptions | null>(null);\n\n #loadForm(f: ObjectFlavor) {\n this.busyLoading.set(true);\n this.#system\n .getObjectTypeForm(f.sot, Situation.CREATE)\n .pipe(finalize(() => this.busyLoading.set(false)))\n .subscribe({\n next: (form) => {\n this.formOptions.set({\n formModel: form,\n data: {}\n });\n }\n });\n }\n\n onFormStatusChanged(status: FormStatusChangedEvent) {\n this.applyDisabled.set(status.invalid);\n }\n\n applyFlavor() {\n const of = this.objectForm();\n const data: Record<string, unknown> = of ? of.getFormData() : {};\n\n this.busySaving.set(true);\n this.#shell\n .applyObjectFlavor(this.dmsObject(), this.flavor(), data)\n .pipe(finalize(() => this.busySaving.set(false)))\n .subscribe({\n next: () => this.close(),\n // keep the dialog open so the entered form data is not lost and the user can retry\n error: () => this.#notification.error(this.translate.instant('yuv.object-flavor.apply-flavor.error'))\n });\n }\n\n close() {\n this.dialogRef.close();\n }\n}\n","@let o = dmsObject();\n@if (o) {\n <yuv-dialog [yuvBusyOverlay]=\"busyLoading()\" [headertitel]=\"'yuv.object-flavor.apply-flavor.headline' | translate: { name: flavorLabel() }\">\n <main>\n <yuv-split-view [gutterSize]=\"1\">\n <ng-template yuvSplitArea [size]=\"60\" [visible]=\"!!o.content\">\n @if (o.content) {\n <yuv-object-preview [objectId]=\"dmsObject().id\"></yuv-object-preview>\n }\n </ng-template>\n\n <ng-template yuvSplitArea [size]=\"40\">\n <div class=\"metadata\">\n @let fo = formOptions();\n @if (fo) {\n <yuv-object-form [inert]=\"busySaving()\" [formOptions]=\"fo\" (statusChanged)=\"onFormStatusChanged($event)\"></yuv-object-form>\n }\n </div>\n </ng-template>\n </yuv-split-view>\n </main>\n <footer>\n <button ymtButton=\"secondary\" mat-dialog-close [disabled]=\"busySaving()\">{{ 'yuv.object-flavor.apply-flavor.button.cancel' | translate }}</button>\n <button ymtButton=\"primary\" [ngClass]=\"{ spinning: busySaving() }\" [disabled]=\"applyDisabled() || busySaving()\" (click)=\"applyFlavor()\">\n {{ 'yuv.object-flavor.apply-flavor.button.apply' | translate }}\n </button>\n </footer>\n </yuv-dialog>\n}\n","import { Component, inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { DmsObject, NotificationService, TranslatePipe, TranslateService } from '@yuuvis/client-core';\nimport { DialogComponent } from '@yuuvis/client-framework/common';\nimport { YuvListModule } from '@yuuvis/client-framework/list';\nimport { ObjectFlavor, ShellService } from '@yuuvis/client-shell-core';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { DefaultApplyFlavorComponent } from '../default-apply-flavor/default-apply-flavor.component';\nimport { FlavorChipComponent } from '../flavor-chip/flavor-chip.component';\n\n@Component({\n selector: 'yuv-object-flavor-picker',\n standalone: true,\n imports: [\n YuvListModule,\n DialogComponent,\n MatButtonModule,\n MatDialogModule,\n FlavorChipComponent,\n TranslatePipe,\n YmtButtonDirective\n ],\n templateUrl: './object-flavor-picker.component.html',\n styleUrl: './object-flavor-picker.component.scss',\n host: {\n '[class.cmp]': '!!applyComponent'\n }\n})\nexport class ObjectFlavorPickerComponent {\n #shell = inject(ShellService);\n #dialogData = inject<any>(MAT_DIALOG_DATA);\n #notification = inject(NotificationService);\n #translate = inject(TranslateService);\n readonly #dialogRef = inject(MatDialogRef<ObjectFlavorPickerComponent>);\n\n // TODO: This was previously not there but used as a host component class, so what the fuck?\n applyComponent = null;\n\n applicableObjectFlavors: ObjectFlavor[] = this.#dialogData.applicableFlavors;\n\n applicableFlavors: ObjectFlavor[] = this.#dialogData.applicableFlavors.sort((a: ObjectFlavor, b: ObjectFlavor) =>\n (a.name || '').localeCompare(b.name || '')\n );\n #dmsObject: DmsObject = this.#dialogData.dmsObject;\n\n itemSelected(idx: number[]) {\n const flavor = this.applicableObjectFlavors[idx[0]];\n if (this.#dmsObject && flavor)\n this.#shell\n .triggerApplyObjectFlavor(\n this.#dmsObject,\n flavor,\n undefined,\n flavor.useDefaultApplyComponent ? DefaultApplyFlavorComponent : undefined\n )\n .subscribe({\n next: () => {\n this.#dialogRef.close();\n },\n // keep the dialog open so the user sees the type was not applied and can retry\n error: () => this.#notification.error(this.#translate.instant('yuv.object-flavor.apply-flavor.error'))\n });\n }\n}\n","<yuv-dialog [headertitel]=\"'yuv.object-flavor.picker.title' | translate\">\n <main>\n <p>{{ 'yuv.object-flavor.picker.text' | translate }}</p>\n <yuv-list (itemSelect)=\"itemSelected($event)\" selectOnEnter=\"true\">\n @for (f of applicableFlavors; track $index) {\n <yuv-flavor-chip [flavor]=\"f\" [enableDescription]=\"true\" yuvListItem></yuv-flavor-chip>\n }\n </yuv-list>\n </main>\n <footer>\n <button ymtButton=\"secondary\" mat-dialog-close>{{ 'yuv.object-flavor.picker.button.cancel' | translate }}</button>\n </footer>\n</yuv-dialog>\n","import {\n Component,\n effect,\n HostAttributeToken,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChild\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { DmsObject, SystemService, TranslatePipe, TranslateService } from '@yuuvis/client-core';\nimport { ConfirmService, DragScrollDirective } from '@yuuvis/client-framework/common';\nimport { ListComponent, YuvListModule } from '@yuuvis/client-framework/list';\nimport { ObjectFlavor, ShellService } from '@yuuvis/client-shell-core';\nimport { of, switchMap } from 'rxjs';\nimport { FlavorChipComponent } from '../flavor-chip/flavor-chip.component';\nimport { ObjectFlavorPickerComponent } from '../object-flavor-picker/object-flavor-picker.component';\n\n@Component({\n selector: 'yuv-object-flavor',\n standalone: true,\n imports: [\n FlavorChipComponent,\n MatTooltipModule,\n MatProgressBarModule,\n DragScrollDirective,\n MatIconModule,\n MatButtonModule,\n YuvListModule,\n TranslatePipe\n ],\n templateUrl: './object-flavor.component.html',\n styleUrl: './object-flavor.component.scss',\n host: {\n '[attr.aria-hidden]': 'hidden()',\n '[class.busy]': 'busy()',\n '[class.selection]': 'selectedIndex() > -1',\n '[class.selectionDisabled]': 'disableSelection'\n }\n})\nexport class ObjectFlavorComponent {\n #shell = inject(ShellService);\n #dialog = inject(MatDialog);\n #confirm = inject(ConfirmService);\n #system = inject(SystemService);\n private translate = inject(TranslateService);\n\n list = viewChild(ListComponent);\n\n dmsObject = input.required<DmsObject>();\n #dmsObjectEffect = effect(() => {\n const o = this.dmsObject();\n const listCmp = this.list();\n if (o)\n untracked(() => {\n this.#getAppliedFlavors(o);\n if (listCmp) listCmp.clear(true);\n });\n });\n\n flavorSelect = output<ObjectFlavor | undefined>();\n\n appliedFlavors: ObjectFlavor[] = [];\n applicableFlavors: ObjectFlavor[] = [];\n\n hidden = signal<boolean>(false);\n busy = signal<boolean>(false);\n\n selectedIndex = signal<number>(-1);\n\n disableSelection: boolean =\n (inject(new HostAttributeToken('disableSelection'), { optional: true }) || 'false') === 'true';\n\n clearSelection() {\n const listCmp = this.list();\n if (listCmp) listCmp.clear();\n this.selectedIndex.set(-1);\n this.flavorSelect.emit(undefined);\n }\n\n onItemsSelect(idx: number[]) {\n const ci = idx[0];\n this.selectedIndex.set(ci);\n this.flavorSelect.emit(this.appliedFlavors[ci]);\n }\n\n startApplyFlavor() {\n this.#dialog.open(ObjectFlavorPickerComponent, {\n data: {\n applicableFlavors: this.applicableFlavors,\n dmsObject: structuredClone(this.dmsObject())\n }\n });\n }\n\n removeFlavor(flavor: ObjectFlavor, index: number) {\n if (flavor.preventRemove) return;\n const o = this.dmsObject();\n if (o) {\n this.busy.set(true);\n this.#confirm\n .confirm({\n title: this.translate.instant('yuv.shell.action.manage-flavors.applicable.button.remove.tooltip'),\n message: this.translate.instant('yuv.object-flavor.flavor.remove.confirm.message', {\n flavor: this.#shell.getFlavorLabel(flavor.id)\n }),\n confirmLabel: this.translate.instant('yuv.shell.action.manage-flavors.button.remove')\n })\n .pipe(\n switchMap((confirmed: boolean) => (confirmed ? this.#shell.removeObjectFlavor(o, flavor) : of(undefined)))\n )\n .subscribe({\n next: () => {\n if (index === this.selectedIndex() || !this.appliedFlavors.length) this.clearSelection();\n this.busy.set(false);\n },\n error: () => {\n // TODO: error handling\n this.busy.set(false);\n }\n });\n }\n }\n\n #getAppliedFlavors(dmsObject: DmsObject) {\n const res = this.#shell.getAppliedObjectFlavors(dmsObject);\n this.appliedFlavors = res.applied;\n this.applicableFlavors = res.applicable;\n this.hidden.set(this.applicableFlavors.length === 0 && this.appliedFlavors.length === 0);\n }\n}\n","\n<div class=\"object-flavor\">\n <span class=\"label\">{{ 'yuv.object-flavor.label' | translate }}</span>\n@if (applicableFlavors.length) {\n <button mat-icon-button class=\"add ymt-icon-button--size-s secondary\"\n [matTooltip]=\"'yuv.object-flavor.button.add' | translate\" (click)=\"startApplyFlavor()\">\n <mat-icon>add</mat-icon>\n </button>\n}\n</div>\n@if (appliedFlavors.length) {\n <yuv-list horizontal=\"true\" [disableSelection]=\"disableSelection\" (itemSelect)=\"onItemsSelect($event)\" yuvDragScroll>\n @for (f of appliedFlavors; track f.id) {\n <yuv-flavor-chip yuvListItem [flavor]=\"f\" [enableRemove]=\"true\" (flavorRemove)=\"removeFlavor(f, $index)\"></yuv-flavor-chip>\n }\n </yuv-list>\n}\n<button mat-icon-button class=\"clear\" [matTooltip]=\"'yuv.object-flavor.button.clear-selection' | translate\" (click)=\"clearSelection()\">\n <mat-icon>close</mat-icon>\n</button>\n\n@if (busy()) {\n <mat-progress-bar mode=\"indeterminate\" class=\"progress-bar\"></mat-progress-bar>\n}\n","\nimport { Component, inject, output, signal } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { ObjectCreateFlavor } from '@yuuvis/client-core';\n\n@Component({\n selector: 'yuv-abstract-apply-create-flavor',\n standalone: true,\n imports: [],\n template: ''\n})\nexport abstract class AbstractApplyCreateFlavorComponent {\n #dialogData = inject<any>(MAT_DIALOG_DATA);\n readonly #dialogRef = inject(MatDialogRef<any>);\n createdObjectIDs = signal<string[]>(this.#dialogData.createdObjectIDs);\n flavor = signal<ObjectCreateFlavor>(this.#dialogData.flavor);\n data = signal<any>(this.#dialogData.data);\n cancel = output();\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;MAaa,mBAAmB,CAAA;AAPhC,IAAA,WAAA,GAAA;AAQU,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC5C,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;AAE/B,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,4EAAgB;QAEvC,IAAA,CAAA,YAAY,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAW;QAC/B,IAAA,CAAA,iBAAiB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAW;QAEpC,IAAA,CAAA,YAAY,GAAG,MAAM,EAAE;AAOxB,IAAA;AAdC,IAAA,OAAO;AASP,IAAA,MAAM,CAAC,CAA6B,EAAA;QAClC,CAAC,CAAC,cAAc,EAAE;QAClB,CAAC,CAAC,eAAe,EAAE;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;+GAfW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECbhC,4hBAuBA,EAAA,MAAA,EAAA,CAAA,mnBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDdY,aAAa,mLAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAI7B,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cACf,IAAI,EAAA,OAAA,EACP,CAAC,aAAa,EAAE,eAAe,CAAC,EAAA,QAAA,EAAA,4hBAAA,EAAA,MAAA,EAAA,CAAA,mnBAAA,CAAA,EAAA;;;MEGrB,kCAAkC,CAAA;AAPxD,IAAA,WAAA,GAAA;AAQqB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAM,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,EAAC,YAAiB,EAAC;;QAExD,IAAA,CAAA,SAAS,GAAG,KAAK,CAAY,IAAI,CAAC,UAAU,CAAC,SAAS,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;;QAEvD,IAAA,CAAA,MAAM,GAAG,KAAK,CAAe,IAAI,CAAC,UAAU,CAAC,MAAM,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;;QAEpD,IAAA,CAAA,IAAI,GAAG,KAAK,CAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AACxC,IAAA;+GATqB,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kCAAkC,mdAH5C,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAGQ,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAPvD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAAA,UAAA,EACvB,IAAI,EAAA,OAAA,EACP,EAAE,YACD,EAAE,EAAA;;;ACqBR,MAAO,2BAA4B,SAAQ,kCAAkC,CAAA;AAhBnF,IAAA,WAAA,GAAA;;AAiBE,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;AAC/B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;AAC7B,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACnC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE5C,QAAA,IAAA,CAAA,UAAU,GAAG,SAAS,CAAC,mBAAmB,iFAAC;AAE3C,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MACrB,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,KAAK;AACvB,cAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;AACzC,cAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,kFACrD;AACD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,MAAK;AAC1B,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;YACvB,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,CAAC;AAAE,oBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC1B,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,oFAAC;AAEF,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAU,KAAK,4EAAC;AAC9B,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAU,IAAI,oFAAC;AACrC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAU,KAAK,kFAAC;AACpC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAU,KAAK,iFAAC;AACnC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAA2B,IAAI,kFAAC;AAuCrD,IAAA;AA9DC,IAAA,OAAO;AACP,IAAA,MAAM;AACN,IAAA,aAAa;AAUb,IAAA,aAAa;AAab,IAAA,SAAS,CAAC,CAAe,EAAA;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC;aACF,iBAAiB,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM;AACzC,aAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAChD,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,IAAI,KAAI;AACb,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AACnB,oBAAA,SAAS,EAAE,IAAI;AACf,oBAAA,IAAI,EAAE;AACP,iBAAA,CAAC;YACJ;AACD,SAAA,CAAC;IACN;AAEA,IAAA,mBAAmB,CAAC,MAA8B,EAAA;QAChD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;IACxC;IAEA,WAAW,GAAA;AACT,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE;AAC5B,QAAA,MAAM,IAAI,GAA4B,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;AAEhE,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC;AACF,aAAA,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI;AACvD,aAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/C,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE;;AAExB,YAAA,KAAK,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,sCAAsC,CAAC;AACrG,SAAA,CAAC;IACN;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IACxB;+GA9DW,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAMf,mBAAmB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpC5C,yxCA6BA,gdDZI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,kBAAkB,6bAClB,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,sBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,OAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,sBAAsB,yHACtB,eAAe,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,kBAAkB,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAPlB,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAYJ,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAhBvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,OAAA,EAC3B;wBACP,YAAY;wBACZ,aAAa;wBACb,eAAe;wBACf,kBAAkB;wBAClB,oBAAoB;wBACpB,mBAAmB;wBACnB,sBAAsB;wBACtB,eAAe;wBACf;AACD,qBAAA,EAAA,QAAA,EAAA,yxCAAA,EAAA,MAAA,EAAA,CAAA,yZAAA,CAAA,EAAA;4FAUsB,mBAAmB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEP/B,2BAA2B,CAAA;AAlBxC,IAAA,WAAA,GAAA;AAmBE,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;AAC7B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAM,eAAe,CAAC;AAC1C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAC3C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC5B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,EAAC,YAAyC,EAAC;;QAGvE,IAAA,CAAA,cAAc,GAAG,IAAI;AAErB,QAAA,IAAA,CAAA,uBAAuB,GAAmB,IAAI,CAAC,WAAW,CAAC,iBAAiB;AAE5E,QAAA,IAAA,CAAA,iBAAiB,GAAmB,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,CAAe,KAC3G,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAC3C;AACD,QAAA,IAAA,CAAA,UAAU,GAAc,IAAI,CAAC,WAAW,CAAC,SAAS;AAoBnD,IAAA;AAlCC,IAAA,MAAM;AACN,IAAA,WAAW;AACX,IAAA,aAAa;AACb,IAAA,UAAU;AACD,IAAA,UAAU;AAUnB,IAAA,UAAU;AAEV,IAAA,YAAY,CAAC,GAAa,EAAA;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACnD,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,MAAM;AAC3B,YAAA,IAAI,CAAC;iBACF,wBAAwB,CACvB,IAAI,CAAC,UAAU,EACf,MAAM,EACN,SAAS,EACT,MAAM,CAAC,wBAAwB,GAAG,2BAA2B,GAAG,SAAS;AAE1E,iBAAA,SAAS,CAAC;gBACT,IAAI,EAAE,MAAK;AACT,oBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;gBACzB,CAAC;;AAED,gBAAA,KAAK,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,sCAAsC,CAAC;AACtG,aAAA,CAAC;IACR;+GAlCW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7BxC,qkBAaA,EAAA,MAAA,EAAA,CAAA,iWAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDEI,aAAa,+ZACb,eAAe,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,cAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEnB,kBAAkB,kLADlB,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FASJ,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAlBvC,SAAS;+BACE,0BAA0B,EAAA,UAAA,EACxB,IAAI,EAAA,OAAA,EACP;wBACP,aAAa;wBACb,eAAe;wBACf,eAAe;wBACf,eAAe;wBACf,mBAAmB;wBACnB,aAAa;wBACb;qBACD,EAAA,IAAA,EAGK;AACJ,wBAAA,aAAa,EAAE;AAChB,qBAAA,EAAA,QAAA,EAAA,qkBAAA,EAAA,MAAA,EAAA,CAAA,iWAAA,CAAA,EAAA;;;MEmBU,qBAAqB,CAAA;AAtBlC,IAAA,WAAA,GAAA;AAuBE,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;AAC7B,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC;AAC3B,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC;AACjC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;AACvB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE5C,QAAA,IAAA,CAAA,IAAI,GAAG,SAAS,CAAC,aAAa,2EAAC;AAE/B,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,+EAAa;AACvC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,MAAK;AAC7B,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE;AAC1B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;AAC3B,YAAA,IAAI,CAAC;gBACH,SAAS,CAAC,MAAK;AACb,oBAAA,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAC1B,oBAAA,IAAI,OAAO;AAAE,wBAAA,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;AAClC,gBAAA,CAAC,CAAC;AACN,QAAA,CAAC,uFAAC;QAEF,IAAA,CAAA,YAAY,GAAG,MAAM,EAA4B;QAEjD,IAAA,CAAA,cAAc,GAAmB,EAAE;QACnC,IAAA,CAAA,iBAAiB,GAAmB,EAAE;AAEtC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAU,KAAK,6EAAC;AAC/B,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAU,KAAK,2EAAC;AAE7B,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAS,CAAC,CAAC,oFAAC;QAElC,IAAA,CAAA,gBAAgB,GACd,CAAC,MAAM,CAAC,IAAI,kBAAkB,CAAC,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,OAAO,MAAM,MAAM;AA2DjG,IAAA;AAzFC,IAAA,MAAM;AACN,IAAA,OAAO;AACP,IAAA,QAAQ;AACR,IAAA,OAAO;AAMP,IAAA,gBAAgB;IAuBhB,cAAc,GAAA;AACZ,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;AAC3B,QAAA,IAAI,OAAO;YAAE,OAAO,CAAC,KAAK,EAAE;QAC5B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;IACnC;AAEA,IAAA,aAAa,CAAC,GAAa,EAAA;AACzB,QAAA,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;AACjB,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IACjD;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE;AAC7C,YAAA,IAAI,EAAE;gBACJ,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;AACzC,gBAAA,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE;AAC5C;AACF,SAAA,CAAC;IACJ;IAEA,YAAY,CAAC,MAAoB,EAAE,KAAa,EAAA;QAC9C,IAAI,MAAM,CAAC,aAAa;YAAE;AAC1B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE;QAC1B,IAAI,CAAC,EAAE;AACL,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACnB,YAAA,IAAI,CAAC;AACF,iBAAA,OAAO,CAAC;gBACP,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kEAAkE,CAAC;gBACjG,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,iDAAiD,EAAE;oBACjF,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;iBAC7C,CAAC;gBACF,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,+CAA+C;aACrF;AACA,iBAAA,IAAI,CACH,SAAS,CAAC,CAAC,SAAkB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AAE3G,iBAAA,SAAS,CAAC;gBACT,IAAI,EAAE,MAAK;AACT,oBAAA,IAAI,KAAK,KAAK,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM;wBAAE,IAAI,CAAC,cAAc,EAAE;AACxF,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;gBACtB,CAAC;gBACD,KAAK,EAAE,MAAK;;AAEV,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;gBACtB;AACD,aAAA,CAAC;QACN;IACF;AAEA,IAAA,kBAAkB,CAAC,SAAoB,EAAA;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC;AAC1D,QAAA,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,OAAO;AACjC,QAAA,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,UAAU;QACvC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC;IAC1F;+GAzFW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,ydAOf,aAAa,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrDhC,mgCAwBA,EAAA,MAAA,EAAA,CAAA,k1QAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDII,mBAAmB,+IACnB,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,oBAAoB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,mBAAmB,2DACnB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,0ZACb,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAWJ,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAtBjC,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EAAA,OAAA,EACP;wBACP,mBAAmB;wBACnB,gBAAgB;wBAChB,oBAAoB;wBACpB,mBAAmB;wBACnB,aAAa;wBACb,eAAe;wBACf,aAAa;wBACb;qBACD,EAAA,IAAA,EAGK;AACJ,wBAAA,oBAAoB,EAAE,UAAU;AAChC,wBAAA,cAAc,EAAE,QAAQ;AACxB,wBAAA,mBAAmB,EAAE,sBAAsB;AAC3C,wBAAA,2BAA2B,EAAE;AAC9B,qBAAA,EAAA,QAAA,EAAA,mgCAAA,EAAA,MAAA,EAAA,CAAA,k1QAAA,CAAA,EAAA;sFASgB,aAAa,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ME1CV,kCAAkC,CAAA;AANxD,IAAA,WAAA,GAAA;AAOE,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAM,eAAe,CAAC;AACjC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,EAAC,YAAiB,EAAC;QAC/C,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAW,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;QACtE,IAAA,CAAA,MAAM,GAAG,MAAM,CAAqB,IAAI,CAAC,WAAW,CAAC,MAAM,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;QAC5D,IAAA,CAAA,IAAI,GAAG,MAAM,CAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;QACzC,IAAA,CAAA,MAAM,GAAG,MAAM,EAAE;AAClB,IAAA;AANC,IAAA,WAAW;AACF,IAAA,UAAU;+GAFC,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kCAAkC,2HAF5C,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;4FAEQ,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBANvD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kCAAkC;AAC5C,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,QAAQ,EAAE;AACX,iBAAA;;;ACVD;;AAEG;;;;"}
@@ -1795,7 +1795,7 @@ class TileConfigComponent {
1795
1795
  return true;
1796
1796
  }
1797
1797
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: TileConfigComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1798
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: TileConfigComponent, isStandalone: true, selector: "yuv-tile-config", inputs: { bucket: { classPropertyName: "bucket", publicName: "bucket", isSignal: true, isRequired: false, transformFunction: null }, bucketLabel: { classPropertyName: "bucketLabel", publicName: "bucketLabel", isSignal: true, isRequired: false, transformFunction: null }, configTypes: { classPropertyName: "configTypes", publicName: "configTypes", isSignal: true, isRequired: false, transformFunction: null }, configFlavors: { classPropertyName: "configFlavors", publicName: "configFlavors", isSignal: true, isRequired: false, transformFunction: null }, excludeProperties: { classPropertyName: "excludeProperties", publicName: "excludeProperties", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { save: "save", canceled: "canceled" }, ngImport: i0, template: "<yuv-dialog [headertitle]=\"'yuv.tile-config.title' | translate: { bucket: bucketLabel() }\">\n <main class=\"tile-config\">\n <section class=\"picker\">\n <mat-form-field>\n <mat-select [panelWidth]=\"null\" [(ngModel)]=\"selectedType\" (ngModelChange)=\"typeSelected($event)\">\n @for (t of types() || []; track t.id; let i = $index) {\n <mat-option [value]=\"t.data\">{{ getTypeLabel(t.id) }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n @if (selectedType) {\n <button ymtButton=\"secondary\" (click)=\"resetConfig()\">{{ 'yuv.tile-config.button.reset' | translate }}</button>\n }\n </section>\n\n <section class=\"details\">\n @if (selectedType) {\n <div class=\"dummy-preview\">\n <yuv-tile-config-tile\n [disableIconSlot]=\"true\"\n [objectConfig]=\"objectConfig!\"\n [bucket]=\"bucket()\"\n (slotSelect)=\"slotSelect($event)\"\n />\n </div>\n @if (titleMissing) {\n <section class=\"config-error\">\n {{ 'yuv.tile-config.error.title-required' | translate }} ({{ titleMissingTypeLabels }})\n </section>\n }\n\n <main>\n @if (selectedSlot === 'icon') {\n <h3>{{ 'yuv.tile-config.slot.icon.headline' | translate }}</h3>\n <yuv-icon-select [objectType]=\"selectedType\" (iconSelect)=\"iconSelected($event)\" />\n } @else if (selectedSlot === 'badges') {\n <h3>{{ 'yuv.tile-config.slot.badges.headline' | translate }}</h3>\n <yuv-tile-badge-select\n [selectedBadgeIds]=\"getSelectedBadges()\"\n [bucket]=\"bucket()\"\n (badgeSelect)=\"badgeSelected($event)\"\n />\n } @else if (!selectedSlot) {\n } @else if (selectedSlot === 'actions') {\n <h3>{{ 'yuv.tile-config.slot.action.headline' | translate }}</h3>\n <yuv-tile-action-select\n [objectType]=\"selectedType\"\n [selectedActionIds]=\"getSelectedActions()\"\n (actionSelect)=\"actionSelected($event)\"\n />\n } @else {\n <h3>{{ 'yuv.tile-config.slot.property.headline' | translate }}</h3>\n <yuv-tile-property-select\n [objectType]=\"selectedType\"\n [excludeProperties]=\"excludeProperties()\"\n [selectedProperty]=\"getConfigProperty(selectedSlot)\"\n [allowRemove]=\"selectedSlot !== 'title'\"\n (propertySelect)=\"propertySelected(selectedSlot, $event)\"\n />\n }\n </main>\n } @else {\n <div class=\"placeholder empty\"></div>\n }\n </section>\n </main>\n\n <footer>\n <button ymtButton=\"secondary\" (click)=\"cancelConfig()\">{{ 'yuv.tile-config.button.close' | translate }}</button>\n <button ymtButton=\"primary\" [disabled]=\"!configChanged || titleMissing\" (click)=\"saveConfig()\">\n {{ 'yuv.tile-config.button.save' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n", styles: [":host{display:flex;height:100%;flex-flow:column}:host main.tile-config{height:100%;display:contents}:host .picker{display:flex;justify-content:space-between;gap:var(--ymt-spacing-m);align-items:center;border-bottom:1px solid var(--ymt-outline-variant);padding:var(--ymt-spacing-m)}:host .details{flex:1;display:flex;flex-flow:column;box-sizing:border-box;overflow:hidden}:host .details header{flex:0 0 auto;display:flex;align-items:center;border-bottom:1px solid var(--ymt-outline-variant);padding:var(--ymt-spacing-m);gap:var(--ymt-spacing-m)}:host .details header h2{flex:1;overflow:hidden;text-overflow:ellipsis;margin:0}:host .details .dummy-preview{flex:0 0 auto;padding:var(--ymt-spacing-m);background-color:var(--ymt-surface-panel);border-bottom:1px solid var(--ymt-outline-variant)}:host .details .dummy-preview yuv-tile-config-tile{max-width:500px;margin:auto;border-radius:var(--ymt-corner-m);border:1px solid var(--ymt-outline);background-color:var(--ymt-surface-container)}:host .details main{flex:1;overflow-y:auto;padding:var(--ymt-spacing-m)}:host .details main h3{margin:0;padding-block-end:var(--ymt-spacing-m);font:var(--ymt-font-subhead)}:host .details .config-error{flex:0 0 auto;padding:var(--ymt-spacing-m);background-color:var(--ymt-danger-container);color:var(--ymt-on-danger-container);border-bottom:1px solid var(--ymt-outline-variant)}:host .details .placeholder.empty{height:100%;display:grid;place-content:center;color:var(--ymt-text-color-subtle)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: TileConfigTileComponent, selector: "yuv-tile-config-tile", inputs: ["disableIconSlot", "disableBadgesSlot", "bucket", "objectConfig"], outputs: ["slotSelect"] }, { kind: "component", type: IconSelectComponent, selector: "yuv-icon-select", inputs: ["objectType"], outputs: ["iconSelect"] }, { kind: "component", type: PropertySelectComponent, selector: "yuv-tile-property-select", inputs: ["objectType", "excludeProperties", "selectedProperty", "allowRemove"], outputs: ["propertySelect"] }, { kind: "component", type: ActionSelectComponent, selector: "yuv-tile-action-select", inputs: ["objectType", "selectedActionIds"], outputs: ["actionSelect"] }, { kind: "component", type: BadgeSelectComponent, selector: "yuv-tile-badge-select", inputs: ["selectedBadgeIds", "bucket"], outputs: ["badgeSelect"] }, { kind: "ngmodule", type: YuvListModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i2$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i2$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: DialogComponent, selector: "yuv-dialog", inputs: ["headertitle", "headertitel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "directive", type: YmtButtonDirective, selector: "button[ymtButton], a[ymtButton]", inputs: ["ymtButton", "disabled", "aria-disabled", "disableRipple", "disabledInteractive", "button-size"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1798
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: TileConfigComponent, isStandalone: true, selector: "yuv-tile-config", inputs: { bucket: { classPropertyName: "bucket", publicName: "bucket", isSignal: true, isRequired: false, transformFunction: null }, bucketLabel: { classPropertyName: "bucketLabel", publicName: "bucketLabel", isSignal: true, isRequired: false, transformFunction: null }, configTypes: { classPropertyName: "configTypes", publicName: "configTypes", isSignal: true, isRequired: false, transformFunction: null }, configFlavors: { classPropertyName: "configFlavors", publicName: "configFlavors", isSignal: true, isRequired: false, transformFunction: null }, excludeProperties: { classPropertyName: "excludeProperties", publicName: "excludeProperties", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { save: "save", canceled: "canceled" }, ngImport: i0, template: "<yuv-dialog [headertitle]=\"'yuv.tile-config.title' | translate: { bucket: bucketLabel() }\">\n <main class=\"tile-config\">\n <section class=\"picker\">\n <mat-form-field>\n <mat-select [panelWidth]=\"null\" [(ngModel)]=\"selectedType\" (ngModelChange)=\"typeSelected($event)\">\n @for (t of types() || []; track t.id; let i = $index) {\n <mat-option [value]=\"t.data\">{{ getTypeLabel(t.id) }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n @if (selectedType) {\n <button ymtButton=\"secondary\" (click)=\"resetConfig()\">{{ 'yuv.tile-config.button.reset' | translate }}</button>\n }\n </section>\n\n <section class=\"details\">\n @if (selectedType) {\n <div class=\"dummy-preview\">\n <yuv-tile-config-tile\n [disableIconSlot]=\"true\"\n [objectConfig]=\"objectConfig!\"\n [bucket]=\"bucket()\"\n (slotSelect)=\"slotSelect($event)\"\n />\n </div>\n @if (titleMissing) {\n <section class=\"config-error\">\n {{ 'yuv.tile-config.error.title-required' | translate }} ({{ titleMissingTypeLabels }})\n </section>\n }\n\n <main>\n @if (selectedSlot === 'icon') {\n <h3>{{ 'yuv.tile-config.slot.icon.headline' | translate }}</h3>\n <yuv-icon-select [objectType]=\"selectedType\" (iconSelect)=\"iconSelected($event)\" />\n } @else if (selectedSlot === 'badges') {\n <h3>{{ 'yuv.tile-config.slot.badges.headline' | translate }}</h3>\n <yuv-tile-badge-select\n [objectType]=\"selectedType\"\n [selectedBadgeIds]=\"getSelectedBadges()\"\n [bucket]=\"bucket()\"\n (badgeSelect)=\"badgeSelected($event)\"\n />\n } @else if (!selectedSlot) {\n } @else if (selectedSlot === 'actions') {\n <h3>{{ 'yuv.tile-config.slot.action.headline' | translate }}</h3>\n <yuv-tile-action-select\n [objectType]=\"selectedType\"\n [selectedActionIds]=\"getSelectedActions()\"\n (actionSelect)=\"actionSelected($event)\"\n />\n } @else {\n <h3>{{ 'yuv.tile-config.slot.property.headline' | translate }}</h3>\n <yuv-tile-property-select\n [objectType]=\"selectedType\"\n [excludeProperties]=\"excludeProperties()\"\n [selectedProperty]=\"getConfigProperty(selectedSlot)\"\n [allowRemove]=\"selectedSlot !== 'title'\"\n (propertySelect)=\"propertySelected(selectedSlot, $event)\"\n />\n }\n </main>\n } @else {\n <div class=\"placeholder empty\"></div>\n }\n </section>\n </main>\n\n <footer>\n <button ymtButton=\"secondary\" (click)=\"cancelConfig()\">{{ 'yuv.tile-config.button.close' | translate }}</button>\n <button ymtButton=\"primary\" [disabled]=\"!configChanged || titleMissing\" (click)=\"saveConfig()\">\n {{ 'yuv.tile-config.button.save' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n", styles: [":host{display:flex;height:100%;flex-flow:column}:host main.tile-config{height:100%;display:contents}:host .picker{display:flex;justify-content:space-between;gap:var(--ymt-spacing-m);align-items:center;border-bottom:1px solid var(--ymt-outline-variant);padding:var(--ymt-spacing-m)}:host .details{flex:1;display:flex;flex-flow:column;box-sizing:border-box;overflow:hidden}:host .details header{flex:0 0 auto;display:flex;align-items:center;border-bottom:1px solid var(--ymt-outline-variant);padding:var(--ymt-spacing-m);gap:var(--ymt-spacing-m)}:host .details header h2{flex:1;overflow:hidden;text-overflow:ellipsis;margin:0}:host .details .dummy-preview{flex:0 0 auto;padding:var(--ymt-spacing-m);background-color:var(--ymt-surface-panel);border-bottom:1px solid var(--ymt-outline-variant)}:host .details .dummy-preview yuv-tile-config-tile{max-width:500px;margin:auto;border-radius:var(--ymt-corner-m);border:1px solid var(--ymt-outline);background-color:var(--ymt-surface-container)}:host .details main{flex:1;overflow-y:auto;padding:var(--ymt-spacing-m)}:host .details main h3{margin:0;padding-block-end:var(--ymt-spacing-m);font:var(--ymt-font-subhead)}:host .details .config-error{flex:0 0 auto;padding:var(--ymt-spacing-m);background-color:var(--ymt-danger-container);color:var(--ymt-on-danger-container);border-bottom:1px solid var(--ymt-outline-variant)}:host .details .placeholder.empty{height:100%;display:grid;place-content:center;color:var(--ymt-text-color-subtle)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: TileConfigTileComponent, selector: "yuv-tile-config-tile", inputs: ["disableIconSlot", "disableBadgesSlot", "bucket", "objectConfig"], outputs: ["slotSelect"] }, { kind: "component", type: IconSelectComponent, selector: "yuv-icon-select", inputs: ["objectType"], outputs: ["iconSelect"] }, { kind: "component", type: PropertySelectComponent, selector: "yuv-tile-property-select", inputs: ["objectType", "excludeProperties", "selectedProperty", "allowRemove"], outputs: ["propertySelect"] }, { kind: "component", type: ActionSelectComponent, selector: "yuv-tile-action-select", inputs: ["objectType", "selectedActionIds"], outputs: ["actionSelect"] }, { kind: "component", type: BadgeSelectComponent, selector: "yuv-tile-badge-select", inputs: ["selectedBadgeIds", "bucket", "objectType"], outputs: ["badgeSelect"] }, { kind: "ngmodule", type: YuvListModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i2$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i2$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: DialogComponent, selector: "yuv-dialog", inputs: ["headertitle", "headertitel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "directive", type: YmtButtonDirective, selector: "button[ymtButton], a[ymtButton]", inputs: ["ymtButton", "disabled", "aria-disabled", "disableRipple", "disabledInteractive", "button-size"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1799
1799
  }
1800
1800
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: TileConfigComponent, decorators: [{
1801
1801
  type: Component,
@@ -1815,7 +1815,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
1815
1815
  DialogComponent,
1816
1816
  MatFormFieldModule,
1817
1817
  YmtButtonDirective
1818
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<yuv-dialog [headertitle]=\"'yuv.tile-config.title' | translate: { bucket: bucketLabel() }\">\n <main class=\"tile-config\">\n <section class=\"picker\">\n <mat-form-field>\n <mat-select [panelWidth]=\"null\" [(ngModel)]=\"selectedType\" (ngModelChange)=\"typeSelected($event)\">\n @for (t of types() || []; track t.id; let i = $index) {\n <mat-option [value]=\"t.data\">{{ getTypeLabel(t.id) }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n @if (selectedType) {\n <button ymtButton=\"secondary\" (click)=\"resetConfig()\">{{ 'yuv.tile-config.button.reset' | translate }}</button>\n }\n </section>\n\n <section class=\"details\">\n @if (selectedType) {\n <div class=\"dummy-preview\">\n <yuv-tile-config-tile\n [disableIconSlot]=\"true\"\n [objectConfig]=\"objectConfig!\"\n [bucket]=\"bucket()\"\n (slotSelect)=\"slotSelect($event)\"\n />\n </div>\n @if (titleMissing) {\n <section class=\"config-error\">\n {{ 'yuv.tile-config.error.title-required' | translate }} ({{ titleMissingTypeLabels }})\n </section>\n }\n\n <main>\n @if (selectedSlot === 'icon') {\n <h3>{{ 'yuv.tile-config.slot.icon.headline' | translate }}</h3>\n <yuv-icon-select [objectType]=\"selectedType\" (iconSelect)=\"iconSelected($event)\" />\n } @else if (selectedSlot === 'badges') {\n <h3>{{ 'yuv.tile-config.slot.badges.headline' | translate }}</h3>\n <yuv-tile-badge-select\n [selectedBadgeIds]=\"getSelectedBadges()\"\n [bucket]=\"bucket()\"\n (badgeSelect)=\"badgeSelected($event)\"\n />\n } @else if (!selectedSlot) {\n } @else if (selectedSlot === 'actions') {\n <h3>{{ 'yuv.tile-config.slot.action.headline' | translate }}</h3>\n <yuv-tile-action-select\n [objectType]=\"selectedType\"\n [selectedActionIds]=\"getSelectedActions()\"\n (actionSelect)=\"actionSelected($event)\"\n />\n } @else {\n <h3>{{ 'yuv.tile-config.slot.property.headline' | translate }}</h3>\n <yuv-tile-property-select\n [objectType]=\"selectedType\"\n [excludeProperties]=\"excludeProperties()\"\n [selectedProperty]=\"getConfigProperty(selectedSlot)\"\n [allowRemove]=\"selectedSlot !== 'title'\"\n (propertySelect)=\"propertySelected(selectedSlot, $event)\"\n />\n }\n </main>\n } @else {\n <div class=\"placeholder empty\"></div>\n }\n </section>\n </main>\n\n <footer>\n <button ymtButton=\"secondary\" (click)=\"cancelConfig()\">{{ 'yuv.tile-config.button.close' | translate }}</button>\n <button ymtButton=\"primary\" [disabled]=\"!configChanged || titleMissing\" (click)=\"saveConfig()\">\n {{ 'yuv.tile-config.button.save' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n", styles: [":host{display:flex;height:100%;flex-flow:column}:host main.tile-config{height:100%;display:contents}:host .picker{display:flex;justify-content:space-between;gap:var(--ymt-spacing-m);align-items:center;border-bottom:1px solid var(--ymt-outline-variant);padding:var(--ymt-spacing-m)}:host .details{flex:1;display:flex;flex-flow:column;box-sizing:border-box;overflow:hidden}:host .details header{flex:0 0 auto;display:flex;align-items:center;border-bottom:1px solid var(--ymt-outline-variant);padding:var(--ymt-spacing-m);gap:var(--ymt-spacing-m)}:host .details header h2{flex:1;overflow:hidden;text-overflow:ellipsis;margin:0}:host .details .dummy-preview{flex:0 0 auto;padding:var(--ymt-spacing-m);background-color:var(--ymt-surface-panel);border-bottom:1px solid var(--ymt-outline-variant)}:host .details .dummy-preview yuv-tile-config-tile{max-width:500px;margin:auto;border-radius:var(--ymt-corner-m);border:1px solid var(--ymt-outline);background-color:var(--ymt-surface-container)}:host .details main{flex:1;overflow-y:auto;padding:var(--ymt-spacing-m)}:host .details main h3{margin:0;padding-block-end:var(--ymt-spacing-m);font:var(--ymt-font-subhead)}:host .details .config-error{flex:0 0 auto;padding:var(--ymt-spacing-m);background-color:var(--ymt-danger-container);color:var(--ymt-on-danger-container);border-bottom:1px solid var(--ymt-outline-variant)}:host .details .placeholder.empty{height:100%;display:grid;place-content:center;color:var(--ymt-text-color-subtle)}\n"] }]
1818
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<yuv-dialog [headertitle]=\"'yuv.tile-config.title' | translate: { bucket: bucketLabel() }\">\n <main class=\"tile-config\">\n <section class=\"picker\">\n <mat-form-field>\n <mat-select [panelWidth]=\"null\" [(ngModel)]=\"selectedType\" (ngModelChange)=\"typeSelected($event)\">\n @for (t of types() || []; track t.id; let i = $index) {\n <mat-option [value]=\"t.data\">{{ getTypeLabel(t.id) }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n @if (selectedType) {\n <button ymtButton=\"secondary\" (click)=\"resetConfig()\">{{ 'yuv.tile-config.button.reset' | translate }}</button>\n }\n </section>\n\n <section class=\"details\">\n @if (selectedType) {\n <div class=\"dummy-preview\">\n <yuv-tile-config-tile\n [disableIconSlot]=\"true\"\n [objectConfig]=\"objectConfig!\"\n [bucket]=\"bucket()\"\n (slotSelect)=\"slotSelect($event)\"\n />\n </div>\n @if (titleMissing) {\n <section class=\"config-error\">\n {{ 'yuv.tile-config.error.title-required' | translate }} ({{ titleMissingTypeLabels }})\n </section>\n }\n\n <main>\n @if (selectedSlot === 'icon') {\n <h3>{{ 'yuv.tile-config.slot.icon.headline' | translate }}</h3>\n <yuv-icon-select [objectType]=\"selectedType\" (iconSelect)=\"iconSelected($event)\" />\n } @else if (selectedSlot === 'badges') {\n <h3>{{ 'yuv.tile-config.slot.badges.headline' | translate }}</h3>\n <yuv-tile-badge-select\n [objectType]=\"selectedType\"\n [selectedBadgeIds]=\"getSelectedBadges()\"\n [bucket]=\"bucket()\"\n (badgeSelect)=\"badgeSelected($event)\"\n />\n } @else if (!selectedSlot) {\n } @else if (selectedSlot === 'actions') {\n <h3>{{ 'yuv.tile-config.slot.action.headline' | translate }}</h3>\n <yuv-tile-action-select\n [objectType]=\"selectedType\"\n [selectedActionIds]=\"getSelectedActions()\"\n (actionSelect)=\"actionSelected($event)\"\n />\n } @else {\n <h3>{{ 'yuv.tile-config.slot.property.headline' | translate }}</h3>\n <yuv-tile-property-select\n [objectType]=\"selectedType\"\n [excludeProperties]=\"excludeProperties()\"\n [selectedProperty]=\"getConfigProperty(selectedSlot)\"\n [allowRemove]=\"selectedSlot !== 'title'\"\n (propertySelect)=\"propertySelected(selectedSlot, $event)\"\n />\n }\n </main>\n } @else {\n <div class=\"placeholder empty\"></div>\n }\n </section>\n </main>\n\n <footer>\n <button ymtButton=\"secondary\" (click)=\"cancelConfig()\">{{ 'yuv.tile-config.button.close' | translate }}</button>\n <button ymtButton=\"primary\" [disabled]=\"!configChanged || titleMissing\" (click)=\"saveConfig()\">\n {{ 'yuv.tile-config.button.save' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n", styles: [":host{display:flex;height:100%;flex-flow:column}:host main.tile-config{height:100%;display:contents}:host .picker{display:flex;justify-content:space-between;gap:var(--ymt-spacing-m);align-items:center;border-bottom:1px solid var(--ymt-outline-variant);padding:var(--ymt-spacing-m)}:host .details{flex:1;display:flex;flex-flow:column;box-sizing:border-box;overflow:hidden}:host .details header{flex:0 0 auto;display:flex;align-items:center;border-bottom:1px solid var(--ymt-outline-variant);padding:var(--ymt-spacing-m);gap:var(--ymt-spacing-m)}:host .details header h2{flex:1;overflow:hidden;text-overflow:ellipsis;margin:0}:host .details .dummy-preview{flex:0 0 auto;padding:var(--ymt-spacing-m);background-color:var(--ymt-surface-panel);border-bottom:1px solid var(--ymt-outline-variant)}:host .details .dummy-preview yuv-tile-config-tile{max-width:500px;margin:auto;border-radius:var(--ymt-corner-m);border:1px solid var(--ymt-outline);background-color:var(--ymt-surface-container)}:host .details main{flex:1;overflow-y:auto;padding:var(--ymt-spacing-m)}:host .details main h3{margin:0;padding-block-end:var(--ymt-spacing-m);font:var(--ymt-font-subhead)}:host .details .config-error{flex:0 0 auto;padding:var(--ymt-spacing-m);background-color:var(--ymt-danger-container);color:var(--ymt-on-danger-container);border-bottom:1px solid var(--ymt-outline-variant)}:host .details .placeholder.empty{height:100%;display:grid;place-content:center;color:var(--ymt-text-color-subtle)}\n"] }]
1819
1819
  }], propDecorators: { bucket: [{ type: i0.Input, args: [{ isSignal: true, alias: "bucket", required: false }] }], bucketLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "bucketLabel", required: false }] }], configTypes: [{ type: i0.Input, args: [{ isSignal: true, alias: "configTypes", required: false }] }], configFlavors: [{ type: i0.Input, args: [{ isSignal: true, alias: "configFlavors", required: false }] }], excludeProperties: [{ type: i0.Input, args: [{ isSignal: true, alias: "excludeProperties", required: false }] }], save: [{ type: i0.Output, args: ["save"] }], canceled: [{ type: i0.Output, args: ["canceled"] }] } });
1820
1820
 
1821
1821
  class TileConfigTriggerComponent {