@yuuvis/client-framework 3.15.0 → 3.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/fesm2022/yuuvis-client-framework-actions.mjs +21 -25
  2. package/fesm2022/yuuvis-client-framework-actions.mjs.map +1 -1
  3. package/fesm2022/yuuvis-client-framework-app-bar.mjs +3 -3
  4. package/fesm2022/yuuvis-client-framework-badges.mjs +20 -13
  5. package/fesm2022/yuuvis-client-framework-badges.mjs.map +1 -1
  6. package/fesm2022/yuuvis-client-framework-breadcrumb.mjs +3 -3
  7. package/fesm2022/yuuvis-client-framework-clipboard.mjs +3 -3
  8. package/fesm2022/yuuvis-client-framework-datepicker.mjs +31 -31
  9. package/fesm2022/yuuvis-client-framework-forms.mjs +286 -178
  10. package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
  11. package/fesm2022/yuuvis-client-framework-icons.mjs +9 -9
  12. package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs +7 -7
  13. package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs.map +1 -1
  14. package/fesm2022/yuuvis-client-framework-metadata-form.mjs +18 -18
  15. package/fesm2022/yuuvis-client-framework-object-details.mjs +28 -28
  16. package/fesm2022/yuuvis-client-framework-object-flavor.mjs +18 -18
  17. package/fesm2022/yuuvis-client-framework-object-form.mjs +34 -34
  18. package/fesm2022/yuuvis-client-framework-object-preview.mjs +9 -9
  19. package/fesm2022/yuuvis-client-framework-object-relationship.mjs +73 -45
  20. package/fesm2022/yuuvis-client-framework-object-relationship.mjs.map +1 -1
  21. package/fesm2022/yuuvis-client-framework-object-summary.mjs +13 -13
  22. package/fesm2022/yuuvis-client-framework-object-versions.mjs +7 -7
  23. package/fesm2022/yuuvis-client-framework-pagination.mjs +3 -3
  24. package/fesm2022/yuuvis-client-framework-query-list.mjs +7 -7
  25. package/fesm2022/yuuvis-client-framework-renderer.mjs +101 -74
  26. package/fesm2022/yuuvis-client-framework-renderer.mjs.map +1 -1
  27. package/fesm2022/yuuvis-client-framework-sequence-list.mjs +4 -4
  28. package/fesm2022/yuuvis-client-framework-sequence-list.mjs.map +1 -1
  29. package/fesm2022/yuuvis-client-framework-simple-search.mjs +3 -3
  30. package/fesm2022/yuuvis-client-framework-smart-search.mjs +13 -13
  31. package/fesm2022/yuuvis-client-framework-sort.mjs +3 -3
  32. package/fesm2022/yuuvis-client-framework-tile-list.mjs +97 -61
  33. package/fesm2022/yuuvis-client-framework-tile-list.mjs.map +1 -1
  34. package/fesm2022/yuuvis-client-framework-token-search.mjs +7 -7
  35. package/fesm2022/yuuvis-client-framework-tree.mjs +9 -9
  36. package/fesm2022/yuuvis-client-framework-upload-progress.mjs +10 -10
  37. package/fesm2022/yuuvis-client-framework.mjs +25 -25
  38. package/lib/assets/i18n/de.json +10 -8
  39. package/lib/assets/i18n/en.json +10 -8
  40. package/package.json +10 -10
  41. package/types/yuuvis-client-framework-badges.d.ts +7 -0
  42. package/types/yuuvis-client-framework-forms.d.ts +28 -8
  43. package/types/yuuvis-client-framework-object-relationship.d.ts +6 -1
  44. package/types/yuuvis-client-framework-tile-list.d.ts +13 -1
@@ -9,7 +9,7 @@ import * as i1 from '@angular/material/icon';
9
9
  import { MatIconModule, MatIconRegistry } from '@angular/material/icon';
10
10
  import { YuvListModule } from '@yuuvis/client-framework/list';
11
11
  import { MatTooltip } from '@angular/material/tooltip';
12
- import { TranslateService as TranslateService$1, AppCacheService, ObjectLockingService, ClipboardService, DmsService, TranslatePipe, RetentionService, IdmService, SystemType, Utils } from '@yuuvis/client-core';
12
+ import { TranslateService as TranslateService$1, AppCacheService, ObjectLockingService, STORAGE_USERS_KEY, ClipboardService, DmsService, TranslatePipe, RetentionService, IdmService, SystemType, Utils } from '@yuuvis/client-core';
13
13
  import { of, map, forkJoin, switchMap } from 'rxjs';
14
14
  import { MAT_DIALOG_DATA, MatDialogRef, MatDialog } from '@angular/material/dialog';
15
15
  import { MatButtonModule } from '@angular/material/button';
@@ -21,11 +21,11 @@ import { YmtButtonDirective } from '@yuuvis/material';
21
21
  * Module for the actions library.
22
22
  */
23
23
  class ActionsModule {
24
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: ActionsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
25
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.12", ngImport: i0, type: ActionsModule, imports: [TranslateModule] }); }
26
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: ActionsModule, imports: [TranslateModule] }); }
24
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: ActionsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
25
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.20", ngImport: i0, type: ActionsModule, imports: [TranslateModule] }); }
26
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: ActionsModule, imports: [TranslateModule] }); }
27
27
  }
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: ActionsModule, decorators: [{
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: ActionsModule, decorators: [{
29
29
  type: NgModule,
30
30
  args: [{
31
31
  imports: [TranslateModule]
@@ -52,10 +52,10 @@ class ContextmenuComponent {
52
52
  onItemTrigger({ action }) {
53
53
  this.itemSelect.emit({ action });
54
54
  }
55
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: ContextmenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
56
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: ContextmenuComponent, isStandalone: true, selector: "yuv-contextmenu", inputs: { actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, selection: { classPropertyName: "selection", publicName: "selection", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemSelect: "itemSelect" }, providers: [MatTooltip], viewQueries: [{ propertyName: "cdkMenu", first: true, predicate: CdkMenu, descendants: true, isSignal: true }, { propertyName: "menuItems", predicate: CdkMenuItem, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"context-menu\" cdkMenu>\n @for (a of sortedActions(); track a.id) {\n <span [matTooltip]=\"a.description\" [matTooltipDisabled]=\"!a.description\">\n <div\n class=\"context-menu__item\"\n [class.context-menu__item--disabled]=\"a.disabled\"\n cdkMenuItem\n [cdkMenuItemDisabled]=\"a.disabled\"\n [attr.aria-label]=\"'Execute Action: ' + a.label\"\n (cdkMenuItemTriggered)=\"onItemTrigger({ action: a })\"\n >\n <mat-icon class=\"context-menu__item-icon ymt-icon--size-s\">{{ a.icon }}</mat-icon>\n {{ a.label }}\n </div>\n </span>\n }\n</div>\n", styles: [".context-menu{display:flex;flex-direction:column;background-color:var(--mat-sys-surface-container-low);border:var(--ymt-outline-width) solid var(--ymt-outline-variant);color:var(--ymt-on-surface);border-radius:var(--ymt-corner-s);padding:var(--ymt-spacing-xs) 0;letter-spacing:var(--ymt-font-body-tracking);max-height:300px;max-width:300px;overflow-y:auto;overflow-x:hidden}.context-menu>span{display:contents}.context-menu__item{all:unset;display:flex;align-items:center;gap:var(--ymt-spacing-s);cursor:pointer;font:var(--ymt-font-body);padding:var(--ymt-spacing-s) var(--ymt-spacing-m)}.context-menu__item:hover,.context-menu__item:focus{background-color:var(--mat-sys-surface-container-highest)}.context-menu__item.cdk-keyboard-focused:focus-visible{outline-offset:calc(var(--ymt-focus-indicator-size) * -2);outline:var(--ymt-focus-indicator-inner) solid var(--ymt-focus-indicator-size);box-shadow:inset 0 0 0 var(--ymt-focus-indicator-size) var(--ymt-focus-indicator-outer)}.context-menu__item--disabled{opacity:var(--ymt-disabled-opacity)}.context-menu__item-icon{align-items:flex-start}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: YuvListModule }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: CdkMenu, selector: "[cdkMenu]", outputs: ["closed"], exportAs: ["cdkMenu"] }, { kind: "directive", type: CdkMenuItem, selector: "[cdkMenuItem]", inputs: ["cdkMenuItemDisabled", "cdkMenuitemTypeaheadLabel"], outputs: ["cdkMenuItemTriggered"], exportAs: ["cdkMenuItem"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
55
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: ContextmenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
56
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: ContextmenuComponent, isStandalone: true, selector: "yuv-contextmenu", inputs: { actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, selection: { classPropertyName: "selection", publicName: "selection", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemSelect: "itemSelect" }, providers: [MatTooltip], viewQueries: [{ propertyName: "cdkMenu", first: true, predicate: CdkMenu, descendants: true, isSignal: true }, { propertyName: "menuItems", predicate: CdkMenuItem, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"context-menu\" cdkMenu>\n @for (a of sortedActions(); track a.id) {\n <span [matTooltip]=\"a.description\" [matTooltipDisabled]=\"!a.description\">\n <div\n class=\"context-menu__item\"\n [class.context-menu__item--disabled]=\"a.disabled\"\n cdkMenuItem\n [cdkMenuItemDisabled]=\"a.disabled\"\n [attr.aria-label]=\"'Execute Action: ' + a.label\"\n (cdkMenuItemTriggered)=\"onItemTrigger({ action: a })\"\n >\n <mat-icon class=\"context-menu__item-icon ymt-icon--size-s\">{{ a.icon }}</mat-icon>\n {{ a.label }}\n </div>\n </span>\n }\n</div>\n", styles: [".context-menu{display:flex;flex-direction:column;background-color:var(--mat-sys-surface-container-low);border:var(--ymt-outline-width) solid var(--ymt-outline-variant);color:var(--ymt-on-surface);border-radius:var(--ymt-corner-s);padding:var(--ymt-spacing-xs) 0;letter-spacing:var(--ymt-font-body-tracking);max-height:300px;max-width:300px;overflow-y:auto;overflow-x:hidden}.context-menu>span{display:contents}.context-menu__item{all:unset;display:flex;align-items:center;gap:var(--ymt-spacing-s);cursor:pointer;font:var(--ymt-font-body);padding:var(--ymt-spacing-s) var(--ymt-spacing-m)}.context-menu__item:hover,.context-menu__item:focus{background-color:var(--mat-sys-surface-container-highest)}.context-menu__item.cdk-keyboard-focused:focus-visible{outline-offset:calc(var(--ymt-focus-indicator-size) * -2);outline:var(--ymt-focus-indicator-inner) solid var(--ymt-focus-indicator-size);box-shadow:inset 0 0 0 var(--ymt-focus-indicator-size) var(--ymt-focus-indicator-outer)}.context-menu__item--disabled{opacity:var(--ymt-disabled-opacity)}.context-menu__item-icon{align-items:flex-start}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: YuvListModule }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: CdkMenu, selector: "[cdkMenu]", outputs: ["closed"], exportAs: ["cdkMenu"] }, { kind: "directive", type: CdkMenuItem, selector: "[cdkMenuItem]", inputs: ["cdkMenuItemDisabled", "cdkMenuitemTypeaheadLabel"], outputs: ["cdkMenuItemTriggered"], exportAs: ["cdkMenuItem"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
57
57
  }
58
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: ContextmenuComponent, decorators: [{
58
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: ContextmenuComponent, decorators: [{
59
59
  type: Component,
60
60
  args: [{ selector: 'yuv-contextmenu', imports: [CommonModule, MatIconModule, YuvListModule, A11yModule, CdkMenu, CdkMenuItem, MatTooltip], providers: [MatTooltip], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"context-menu\" cdkMenu>\n @for (a of sortedActions(); track a.id) {\n <span [matTooltip]=\"a.description\" [matTooltipDisabled]=\"!a.description\">\n <div\n class=\"context-menu__item\"\n [class.context-menu__item--disabled]=\"a.disabled\"\n cdkMenuItem\n [cdkMenuItemDisabled]=\"a.disabled\"\n [attr.aria-label]=\"'Execute Action: ' + a.label\"\n (cdkMenuItemTriggered)=\"onItemTrigger({ action: a })\"\n >\n <mat-icon class=\"context-menu__item-icon ymt-icon--size-s\">{{ a.icon }}</mat-icon>\n {{ a.label }}\n </div>\n </span>\n }\n</div>\n", styles: [".context-menu{display:flex;flex-direction:column;background-color:var(--mat-sys-surface-container-low);border:var(--ymt-outline-width) solid var(--ymt-outline-variant);color:var(--ymt-on-surface);border-radius:var(--ymt-corner-s);padding:var(--ymt-spacing-xs) 0;letter-spacing:var(--ymt-font-body-tracking);max-height:300px;max-width:300px;overflow-y:auto;overflow-x:hidden}.context-menu>span{display:contents}.context-menu__item{all:unset;display:flex;align-items:center;gap:var(--ymt-spacing-s);cursor:pointer;font:var(--ymt-font-body);padding:var(--ymt-spacing-s) var(--ymt-spacing-m)}.context-menu__item:hover,.context-menu__item:focus{background-color:var(--mat-sys-surface-container-highest)}.context-menu__item.cdk-keyboard-focused:focus-visible{outline-offset:calc(var(--ymt-focus-indicator-size) * -2);outline:var(--ymt-focus-indicator-inner) solid var(--ymt-focus-indicator-size);box-shadow:inset 0 0 0 var(--ymt-focus-indicator-size) var(--ymt-focus-indicator-outer)}.context-menu__item--disabled{opacity:var(--ymt-disabled-opacity)}.context-menu__item-icon{align-items:flex-start}\n"] }]
61
61
  }], ctorParameters: () => [], propDecorators: { actions: [{ type: i0.Input, args: [{ isSignal: true, alias: "actions", required: false }] }], selection: [{ type: i0.Input, args: [{ isSignal: true, alias: "selection", required: false }] }], itemSelect: [{ type: i0.Output, args: ["itemSelect"] }], cdkMenu: [{ type: i0.ViewChild, args: [i0.forwardRef(() => CdkMenu), { isSignal: true }] }], menuItems: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => CdkMenuItem), { isSignal: true }] }] } });
@@ -84,13 +84,13 @@ class YuvContextMenuTriggerDirective extends CdkContextMenuTrigger {
84
84
  _openOnContextMenu(event) {
85
85
  this.#contextMenuEvent.set(event);
86
86
  }
87
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: YuvContextMenuTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
88
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.12", type: YuvContextMenuTriggerDirective, isStandalone: true, selector: "[yuvContextMenuTrigger]", inputs: { menuTemplateRef: { classPropertyName: "menuTemplateRef", publicName: "yuvContextMenuTrigger", isSignal: false, isRequired: false, transformFunction: null }, triggerWhen: { classPropertyName: "triggerWhen", publicName: "yuvContextMenuTriggerWhen", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
87
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: YuvContextMenuTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
88
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.20", type: YuvContextMenuTriggerDirective, isStandalone: true, selector: "[yuvContextMenuTrigger]", inputs: { menuTemplateRef: { classPropertyName: "menuTemplateRef", publicName: "yuvContextMenuTrigger", isSignal: false, isRequired: false, transformFunction: null }, triggerWhen: { classPropertyName: "triggerWhen", publicName: "yuvContextMenuTriggerWhen", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
89
89
  { provide: MENU_TRIGGER, useExisting: YuvContextMenuTriggerDirective },
90
90
  { provide: MENU_STACK, useClass: MenuStack }
91
91
  ], exportAs: ["yuvContextMenuTrigger"], usesInheritance: true, ngImport: i0 }); }
92
92
  }
93
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: YuvContextMenuTriggerDirective, decorators: [{
93
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: YuvContextMenuTriggerDirective, decorators: [{
94
94
  type: Directive,
95
95
  args: [{
96
96
  selector: '[yuvContextMenuTrigger]',
@@ -156,19 +156,15 @@ class ActionsValidationService {
156
156
  this.translate = inject(TranslateService$1);
157
157
  this.#appCache = inject(AppCacheService);
158
158
  this.#objectLocking = inject(ObjectLockingService);
159
- /** Cache key used to retrieve the list of users from the application cache. */
160
- this.#STORAGE_USER_KEY = 'yuv.core.users.storage';
161
159
  }
162
160
  #appCache;
163
161
  #objectLocking;
164
- /** Cache key used to retrieve the list of users from the application cache. */
165
- #STORAGE_USER_KEY;
166
162
  /** @deprecated */
167
163
  checkDocumentLock(dmsObject) {
168
164
  const lockState = this.#objectLocking.getLockState(dmsObject);
169
165
  if (!lockState.locked || lockState.lockedByCurrentUser)
170
166
  return of({ state: false });
171
- return this.#appCache.getItem(this.#STORAGE_USER_KEY).pipe(map((users) => {
167
+ return this.#appCache.getItem(STORAGE_USERS_KEY).pipe(map((users) => {
172
168
  const lockUser = users?.find((user) => user.id === lockState.ownerId);
173
169
  const user = lockUser ? lockUser.title || lockUser.email || lockUser.id : null;
174
170
  const description = user
@@ -177,10 +173,10 @@ class ActionsValidationService {
177
173
  return { state: true, description };
178
174
  }));
179
175
  }
180
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: ActionsValidationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
181
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: ActionsValidationService, providedIn: 'root' }); }
176
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: ActionsValidationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
177
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: ActionsValidationService, providedIn: 'root' }); }
182
178
  }
183
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: ActionsValidationService, decorators: [{
179
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: ActionsValidationService, decorators: [{
184
180
  type: Injectable,
185
181
  args: [{
186
182
  providedIn: 'root'
@@ -300,10 +296,10 @@ class DeleteComponent {
300
296
  cancel() {
301
297
  this.#dialogRef.close();
302
298
  }
303
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: DeleteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
304
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: DeleteComponent, isStandalone: true, selector: "yuv-delete", ngImport: i0, template: "<yuv-dialog [headertitle]=\"'yuv.action-menu.action.delete.dms.object.label' | translate\">\n <main class=\"yuv-delete\" [ngClass]=\"{ deleting: deleting() }\">\n <mat-progress-bar mode=\"indeterminate\" class=\"progress-bar\"></mat-progress-bar>\n\n @if (errors().length) {\n <ul class=\"errors\">\n @for (e of errors(); track $index) {\n <li class=\"error\">\n <span class=\"subject\">{{ e.subject }}</span>\n <span class=\"message\">{{ e.message }}</span>\n </li>\n }\n </ul>\n } @else {\n <p>{{ 'yuv.action-menu.action.delete.dms.object.confirm.message' | translate }}</p>\n }\n </main>\n <footer class=\"form-buttons\">\n <button ymtButton=\"secondary\" [disabled]=\"deleting()\" (click)=\"cancel()\">\n {{ 'yuv.action-menu.action.delete.dms.object.confirm.cancel' | translate }}\n </button>\n\n <button ymtButton=\"primary\" [disabled]=\"deleting() || !!errors().length\" (click)=\"run()\">\n {{ 'yuv.action-menu.action.delete.dms.object.confirm.ok' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n", styles: [".yuv-delete{display:flex;flex-flow:column;justify-content:center;padding:var(--ymt-spacing-m);position:relative}.yuv-delete .progress-bar{position:absolute;inset-block-start:0;inset-inline-start:0;inset-inline-end:0}.yuv-delete:not(.deleting) .progress-bar{opacity:0}.yuv-delete p{margin:0}.yuv-delete ul.errors{list-style:none;margin:0;background-color:var(--ymt-danger-container);color:var(--ymt-on-danger-container);padding:var(--ymt-spacing-xs);border-radius:.5rem;display:flex;flex-flow:column;gap:.5rem}.yuv-delete ul.errors .error{display:grid;grid-template-rows:auto auto;grid-template-columns:auto 1fr;grid-template-areas:\"icon subject\" \"icon message\";row-gap:.2em;column-gap:1em;align-items:center}.yuv-delete ul.errors .error .subject{grid-area:subject;font-weight:700}.yuv-delete ul.errors .error .message{grid-area:message;font-weight:400;font-style:italic;display:block}.yuv-delete ul.errors .error:before{align-self:start;font-weight:700;grid-area:icon;content:\"!\";outline:2px solid currentColor;border-radius:2px;width:1em;display:grid;place-items:center}.yuv-delete .form-buttons{display:flex;flex-flow:row-reverse;justify-content:flex-end;justify-content:end;gap:var(--ymt-spacing-2xs);align-items:center;margin-block-start:var(--ymt-spacing-xl)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: DialogComponent, selector: "yuv-dialog", inputs: ["headertitle", "headertitel"] }, { kind: "component", type: MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: YmtButtonDirective, selector: "button[ymtButton], a[ymtButton]", inputs: ["ymtButton", "disabled", "aria-disabled", "disableRipple", "disabledInteractive", "button-size"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
299
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: DeleteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
300
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: DeleteComponent, isStandalone: true, selector: "yuv-delete", ngImport: i0, template: "<yuv-dialog [headertitle]=\"'yuv.action-menu.action.delete.dms.object.label' | translate\">\n <main class=\"yuv-delete\" [ngClass]=\"{ deleting: deleting() }\">\n <mat-progress-bar mode=\"indeterminate\" class=\"progress-bar\"></mat-progress-bar>\n\n @if (errors().length) {\n <ul class=\"errors\">\n @for (e of errors(); track $index) {\n <li class=\"error\">\n <span class=\"subject\">{{ e.subject }}</span>\n <span class=\"message\">{{ e.message }}</span>\n </li>\n }\n </ul>\n } @else {\n <p>{{ 'yuv.action-menu.action.delete.dms.object.confirm.message' | translate }}</p>\n }\n </main>\n <footer class=\"form-buttons\">\n <button ymtButton=\"secondary\" [disabled]=\"deleting()\" (click)=\"cancel()\">\n {{ 'yuv.action-menu.action.delete.dms.object.confirm.cancel' | translate }}\n </button>\n\n <button ymtButton=\"primary\" [disabled]=\"deleting() || !!errors().length\" (click)=\"run()\">\n {{ 'yuv.action-menu.action.delete.dms.object.confirm.ok' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n", styles: [".yuv-delete{display:flex;flex-flow:column;justify-content:center;padding:var(--ymt-spacing-m);position:relative}.yuv-delete .progress-bar{position:absolute;inset-block-start:0;inset-inline-start:0;inset-inline-end:0}.yuv-delete:not(.deleting) .progress-bar{opacity:0}.yuv-delete p{margin:0}.yuv-delete ul.errors{list-style:none;margin:0;background-color:var(--ymt-danger-container);color:var(--ymt-on-danger-container);padding:var(--ymt-spacing-xs);border-radius:.5rem;display:flex;flex-flow:column;gap:.5rem}.yuv-delete ul.errors .error{display:grid;grid-template-rows:auto auto;grid-template-columns:auto 1fr;grid-template-areas:\"icon subject\" \"icon message\";row-gap:.2em;column-gap:1em;align-items:center}.yuv-delete ul.errors .error .subject{grid-area:subject;font-weight:700}.yuv-delete ul.errors .error .message{grid-area:message;font-weight:400;font-style:italic;display:block}.yuv-delete ul.errors .error:before{align-self:start;font-weight:700;grid-area:icon;content:\"!\";outline:2px solid currentColor;border-radius:2px;width:1em;display:grid;place-items:center}.yuv-delete .form-buttons{display:flex;flex-flow:row-reverse;justify-content:flex-end;justify-content:end;gap:var(--ymt-spacing-2xs);align-items:center;margin-block-start:var(--ymt-spacing-xl)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: DialogComponent, selector: "yuv-dialog", inputs: ["headertitle", "headertitel"] }, { kind: "component", type: MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: YmtButtonDirective, selector: "button[ymtButton], a[ymtButton]", inputs: ["ymtButton", "disabled", "aria-disabled", "disableRipple", "disabledInteractive", "button-size"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
305
301
  }
306
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: DeleteComponent, decorators: [{
302
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: DeleteComponent, decorators: [{
307
303
  type: Component,
308
304
  args: [{ selector: 'yuv-delete', standalone: true, imports: [CommonModule, TranslatePipe, MatButtonModule, DialogComponent, MatProgressBar, YmtButtonDirective], template: "<yuv-dialog [headertitle]=\"'yuv.action-menu.action.delete.dms.object.label' | translate\">\n <main class=\"yuv-delete\" [ngClass]=\"{ deleting: deleting() }\">\n <mat-progress-bar mode=\"indeterminate\" class=\"progress-bar\"></mat-progress-bar>\n\n @if (errors().length) {\n <ul class=\"errors\">\n @for (e of errors(); track $index) {\n <li class=\"error\">\n <span class=\"subject\">{{ e.subject }}</span>\n <span class=\"message\">{{ e.message }}</span>\n </li>\n }\n </ul>\n } @else {\n <p>{{ 'yuv.action-menu.action.delete.dms.object.confirm.message' | translate }}</p>\n }\n </main>\n <footer class=\"form-buttons\">\n <button ymtButton=\"secondary\" [disabled]=\"deleting()\" (click)=\"cancel()\">\n {{ 'yuv.action-menu.action.delete.dms.object.confirm.cancel' | translate }}\n </button>\n\n <button ymtButton=\"primary\" [disabled]=\"deleting() || !!errors().length\" (click)=\"run()\">\n {{ 'yuv.action-menu.action.delete.dms.object.confirm.ok' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n", styles: [".yuv-delete{display:flex;flex-flow:column;justify-content:center;padding:var(--ymt-spacing-m);position:relative}.yuv-delete .progress-bar{position:absolute;inset-block-start:0;inset-inline-start:0;inset-inline-end:0}.yuv-delete:not(.deleting) .progress-bar{opacity:0}.yuv-delete p{margin:0}.yuv-delete ul.errors{list-style:none;margin:0;background-color:var(--ymt-danger-container);color:var(--ymt-on-danger-container);padding:var(--ymt-spacing-xs);border-radius:.5rem;display:flex;flex-flow:column;gap:.5rem}.yuv-delete ul.errors .error{display:grid;grid-template-rows:auto auto;grid-template-columns:auto 1fr;grid-template-areas:\"icon subject\" \"icon message\";row-gap:.2em;column-gap:1em;align-items:center}.yuv-delete ul.errors .error .subject{grid-area:subject;font-weight:700}.yuv-delete ul.errors .error .message{grid-area:message;font-weight:400;font-style:italic;display:block}.yuv-delete ul.errors .error:before{align-self:start;font-weight:700;grid-area:icon;content:\"!\";outline:2px solid currentColor;border-radius:2px;width:1em;display:grid;place-items:center}.yuv-delete .form-buttons{display:flex;flex-flow:row-reverse;justify-content:flex-end;justify-content:end;gap:var(--ymt-spacing-2xs);align-items:center;margin-block-start:var(--ymt-spacing-xl)}\n"] }]
309
305
  }] });
@@ -540,10 +536,10 @@ class ActionsService {
540
536
  : false;
541
537
  return matchesTypes || matchesSOTs || matchesPattern;
542
538
  }
543
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: ActionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
544
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: ActionsService, providedIn: 'root' }); }
539
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: ActionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
540
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: ActionsService, providedIn: 'root' }); }
545
541
  }
546
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: ActionsService, decorators: [{
542
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: ActionsService, decorators: [{
547
543
  type: Injectable,
548
544
  args: [{
549
545
  providedIn: 'root'
@@ -1 +1 @@
1
- {"version":3,"file":"yuuvis-client-framework-actions.mjs","sources":["../../../../../libs/yuuvis/client-framework/actions/src/lib/actions.module.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/components/contextmenu/contextmenu.component.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/components/contextmenu/contextmenu.component.html","../../../../../libs/yuuvis/client-framework/actions/src/lib/components/contextmenu/contextmenuTrigger.directive.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/models/actions.icon.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/models/actions.models.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/services/action.priority-levels.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/services/action.validation.service.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions/copy-action/copy-action.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions/cut-action/cut-action.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions/delete-action/delete/delete.component.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions/delete-action/delete/delete.component.html","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions/delete-action/delete-action.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions/download-action/download-action.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/services/actions.service.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/tokens/actions.token.ts","../../../../../libs/yuuvis/client-framework/actions/src/yuuvis-client-framework-actions.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\n\n/**\n * Module for the actions library.\n */\n@NgModule({\n imports: [TranslateModule]\n})\nexport class ActionsModule {}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\n\nimport { CdkMenu, CdkMenuItem } from '@angular/cdk/menu';\nimport { MatIconModule } from '@angular/material/icon';\nimport { YuvListModule } from '@yuuvis/client-framework/list';\n\nimport {\n afterRenderEffect,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n untracked,\n viewChild,\n viewChildren\n} from '@angular/core';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ContextMenuAction, ContextMenuItemSelectEvent } from './contextmenu.model';\n\n@Component({\n selector: 'yuv-contextmenu',\n imports: [CommonModule, MatIconModule, YuvListModule, A11yModule, CdkMenu, CdkMenuItem, MatTooltip],\n providers: [MatTooltip],\n templateUrl: './contextmenu.component.html',\n styleUrls: ['./contextmenu.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ContextmenuComponent {\n actions = input<ContextMenuAction[]>([]);\n selection = input<unknown[]>([]);\n itemSelect = output<ContextMenuItemSelectEvent>();\n private translate = inject(TranslateService);\n\n cdkMenu = viewChild.required(CdkMenu);\n menuItems = viewChildren<CdkMenuItem | null>(CdkMenuItem);\n\n sortedActions = computed(() =>\n [...this.actions()].sort((a, b) => a.label.localeCompare(b.label, this.translate.getCurrentLang()))\n );\n\n constructor() {\n afterRenderEffect(() => {\n //Focus First Item when @for is finished\n untracked(() => {\n //firstElement?.nativeElement.focus();\n this.cdkMenu().focusFirstItem('program');\n });\n });\n }\n\n onItemTrigger({ action }: ContextMenuItemSelectEvent): void {\n this.itemSelect.emit({ action });\n }\n}\n","<div class=\"context-menu\" cdkMenu>\n @for (a of sortedActions(); track a.id) {\n <span [matTooltip]=\"a.description\" [matTooltipDisabled]=\"!a.description\">\n <div\n class=\"context-menu__item\"\n [class.context-menu__item--disabled]=\"a.disabled\"\n cdkMenuItem\n [cdkMenuItemDisabled]=\"a.disabled\"\n [attr.aria-label]=\"'Execute Action: ' + a.label\"\n (cdkMenuItemTriggered)=\"onItemTrigger({ action: a })\"\n >\n <mat-icon class=\"context-menu__item-icon ymt-icon--size-s\">{{ a.icon }}</mat-icon>\n {{ a.label }}\n </div>\n </span>\n }\n</div>\n","import { CdkContextMenuTrigger, MENU_STACK, MENU_TRIGGER, MenuStack } from '@angular/cdk/menu';\nimport { Directive, effect, Input, input, signal, TemplateRef, untracked } from '@angular/core';\n\n@Directive({\n selector: '[yuvContextMenuTrigger]',\n exportAs: 'yuvContextMenuTrigger',\n standalone: true,\n providers: [\n { provide: MENU_TRIGGER, useExisting: YuvContextMenuTriggerDirective },\n { provide: MENU_STACK, useClass: MenuStack }\n ]\n})\nexport class YuvContextMenuTriggerDirective extends CdkContextMenuTrigger {\n @Input({ alias: 'yuvContextMenuTrigger' })\n override menuTemplateRef!: TemplateRef<unknown>;\n\n triggerWhen = input<boolean | null>(null, { alias: 'yuvContextMenuTriggerWhen' });\n\n #contextMenuEvent = signal<MouseEvent | null>(null);\n\n constructor() {\n super();\n\n effect(() => {\n // Only a fresh context-menu event may re-run this effect. triggerWhen is read\n // untracked so a later false -> true transition (e.g. actions repopulating after\n // navigating into a folder and selecting an item) can't replay a stale event and\n // reopen the menu without a right-click.\n const event = this.#contextMenuEvent();\n untracked(() => {\n const triggerWhen = this.triggerWhen();\n if (event && (triggerWhen || triggerWhen === null)) {\n super._openOnContextMenu(event);\n this.#contextMenuEvent.set(null); // consume the event so it can't be replayed\n }\n });\n });\n }\n\n override _openOnContextMenu(event: MouseEvent) {\n this.#contextMenuEvent.set(event);\n }\n}\n","export const ACTION_ICON = {\n download: 'download',\n delete: 'delete',\n copy: 'content_copy',\n cut: 'content_cut',\n manageFlavor: 'cards_star'\n}","import { DmsObject } from '@yuuvis/client-core';\nimport { Observable } from 'rxjs';\n\nexport type ActionClass = { \n new (...args: any[]): any \n};\n\nexport class AbstractContextAction {\n context?: ActionContext;\n constructor(context?: ActionContext) {\n this.context = context;\n }\n}\n\nexport interface BaseAction {\n /**\n * Equals the selector of the actions selector (will be set by the action service)\n */\n id: string;\n /**\n * label to be displayed inside the action menu\n */\n label: string;\n /**\n * description to be displayed inside the action menu\n */\n description?: string;\n /**\n * @ignore\n */\n icon: string;\n /**\n * actions priority defining the position of the action within the whole list of actions\n */\n priority: number;\n /**\n * group of actions the action should be part of ('common' or 'further')\n */\n group: string;\n /**\n * number of selected items supported by the action\n * (SelectionRange.SINGLE_SELECT, SelectionRange.MULTI_SELECT, SelectionRange.MULTI_SELECT_ONLY )\n */\n range: SelectionRange;\n\n /**\n * Types that are supported by the action\n */\n supports: ActionSupport;\n\n /**\n * Determining whether or not the action is executable for the given selection.\n * Controls visibility: when false, the action is hidden from the UI entirely.\n * @param item Current selection\n * @returns true if the action is executable for the current selection, false otherwise\n */\n isExecutable: (items: DmsObject[]) => Observable<boolean>;\n\n /**\n * Optional check whether the action should be disabled for the given selection.\n * Unlike isExecutable (which controls visibility), isDisabled controls whether\n * a visible action can be triggered. When absent, the action is never disabled.\n * @param items Current selection\n * @returns true if the action should be disabled, false otherwise\n */\n isDisabled?: (items: DmsObject[]) => Observable<boolean>;\n\n /**\n * Resolved disabled state for template binding. Set by ActionsService after\n * evaluating isDisabled(). Do not set manually on action classes.\n */\n disabled?: boolean;\n}\n\nexport interface ActionSupport {\n // object types\n types?: string[];\n // object types\n sots?: string[];\n // pattern to match the type name against\n pattern?: string;\n}\n\nexport interface ActionContext {\n /**\n * As actions deal with DmsObjects the subject property is the property that\n * should be used to display the name of the object. This may be used for\n * showing the name of the object in a confirmation/error dialog or similar.\n */\n subjectProperty?: string;\n /**\n * The appId is the id of the application that the action is executed in.\n */\n appId?: string;\n}\n\nexport interface Action extends BaseAction {\n run: (items: DmsObject[]) => Observable<boolean>;\n /**\n * Optional child actions. When present, this action renders as a sub-menu\n * trigger instead of executing `run`. Nesting can be arbitrarily deep.\n * An empty array is treated as \"no children\" (leaf action).\n */\n children?: Action[];\n}\n\nexport interface ActionOptions {\n context?: ActionContext;\n exclude?: string[] | RegExp;\n}\n\nexport enum SelectionRange {\n SINGLE_SELECT,\n MULTI_SELECT,\n MULTI_SELECT_ONLY,\n ANY\n}\n\nexport const BASE_ACTION = {\n copy: 'yuv.base.copy',\n cut: 'yuv.base.cut',\n download: 'yuv.base.download',\n delete: 'yuv.base.delete'\n};\n","export const ActionPriorityLevel = {\n LEVEL_1: 1,\n LEVEL_2: 2,\n LEVEL_3: 3,\n LEVEL_4: 4,\n LEVEL_5: 5,\n LEVEL_6: 6,\n LEVEL_7: 7,\n LEVEL_8: 8,\n LEVEL_9: 9,\n LEVEL_10: 10\n} as const;\n","import { inject, Injectable } from '@angular/core';\nimport { AppCacheService, DmsObject, ObjectLockingService, TranslateService, YuvUser } from '@yuuvis/client-core';\nimport { map, Observable, of } from 'rxjs';\n\n/**\n * Service responsible for validating actions on DMS objects.\n * Provides checks for document lock states and related user information.\n */\n/** @deprecated */\n@Injectable({\n providedIn: 'root'\n})\nexport class ActionsValidationService {\n private readonly translate = inject(TranslateService);\n readonly #appCache = inject(AppCacheService);\n readonly #objectLocking = inject(ObjectLockingService);\n\n /** Cache key used to retrieve the list of users from the application cache. */\n readonly #STORAGE_USER_KEY = 'yuv.core.users.storage';\n\n /** @deprecated */\n checkDocumentLock(dmsObject: DmsObject): Observable<{ state: boolean; description?: string }> {\n const lockState = this.#objectLocking.getLockState(dmsObject);\n if (!lockState.locked || lockState.lockedByCurrentUser) return of({ state: false });\n return this.#appCache.getItem<YuvUser[]>(this.#STORAGE_USER_KEY).pipe(\n map((users) => {\n const lockUser = users?.find((user) => user.id === lockState.ownerId);\n const user = lockUser ? lockUser.title || lockUser.email || lockUser.id : null;\n const description = user\n ? this.translate.instant('yuv.action-menu.action.unlock.description-locked-by-other', { user })\n : this.translate.instant('yuv.action-menu.action.unlock.description-locked-by-unknown-user');\n return { state: true, description };\n })\n );\n }\n}\n","import { inject } from '@angular/core';\nimport { ClipboardService, DmsObject, TranslateService } from '@yuuvis/client-core';\nimport { Observable, of } from 'rxjs';\nimport { AbstractContextAction, Action, ACTION_ICON, ActionSupport, BASE_ACTION, SelectionRange } from '../../models';\nimport { ActionPriorityLevel } from '../../services';\n\nexport class CopyAction extends AbstractContextAction implements Action {\n readonly #clipboardService = inject(ClipboardService);\n readonly #translate = inject(TranslateService);\n\n id = BASE_ACTION.copy;\n label = this.#translate.instant('yuv.action-menu.action.copy.dms.object.label');\n description = this.#translate.instant('yuv.action-menu.action.copy.dms.object.description');\n priority = ActionPriorityLevel.LEVEL_8;\n icon = ACTION_ICON.copy;\n group = 'common';\n range = SelectionRange.MULTI_SELECT;\n supports: ActionSupport = {\n pattern: '*'\n };\n\n isExecutable(items: DmsObject[]): Observable<boolean> {\n const notAllowed = items.some((item) => !item.permissions?.writeIndexData);\n return of(items.length > 0 && !notAllowed);\n }\n\n run(items: DmsObject[]): Observable<boolean> {\n this.#clipboardService.addObjects(items, 'copy', this.context?.appId);\n return of(true);\n }\n}\n","import { inject } from '@angular/core';\nimport { ClipboardService, DmsObject, TranslateService } from '@yuuvis/client-core';\nimport { Observable, of } from 'rxjs';\nimport { AbstractContextAction, Action, ACTION_ICON, ActionSupport, BASE_ACTION, SelectionRange } from '../../models';\nimport { ActionPriorityLevel } from '../../services';\n\nexport class CutAction extends AbstractContextAction implements Action {\n readonly #clipboardService = inject(ClipboardService);\n readonly #translate = inject(TranslateService);\n\n id = BASE_ACTION.cut;\n label = this.#translate.instant('yuv.action-menu.action.cut.dms.object.label');\n description = this.#translate.instant('yuv.action-menu.action.cut.dms.object.description');\n priority = ActionPriorityLevel.LEVEL_8;\n icon = ACTION_ICON.cut;\n group = 'common';\n range = SelectionRange.MULTI_SELECT;\n supports: ActionSupport = {\n pattern: '*'\n };\n\n isExecutable(items: DmsObject[]): Observable<boolean> {\n return of(\n items.length > 0 &&\n items.every(\n (item) => item.permissions?.writeContent && item.permissions.writeIndexData && item.permissions.deleteObject\n )\n );\n }\n\n run(items: DmsObject[]): Observable<boolean> {\n this.#clipboardService.addObjects(items, 'cut', this.context?.appId);\n return of(true);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, signal } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport {\n DmsObject,\n DmsService,\n ObjectDeleteError,\n ObjectDeleteResult,\n TranslatePipe,\n TranslateService\n} from '@yuuvis/client-core';\nimport { DialogComponent } from '@yuuvis/client-framework/common';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { ActionContext } from '../../../models';\n\n/**\n * @ignore\n */\n\n@Component({\n selector: 'yuv-delete',\n standalone: true,\n imports: [CommonModule, TranslatePipe, MatButtonModule, DialogComponent, MatProgressBar, YmtButtonDirective],\n templateUrl: './delete.component.html',\n styleUrls: ['./delete.component.scss']\n})\nexport class DeleteComponent {\n readonly #dmsService = inject(DmsService);\n private readonly translate = inject(TranslateService);\n #dialogData = inject<any>(MAT_DIALOG_DATA);\n readonly #dialogRef = inject(MatDialogRef<DeleteComponent>);\n\n errors = signal<\n {\n status: number;\n subject: string;\n message: string;\n }[]\n >([]);\n\n deleting = signal(false);\n deleteItems: DmsObject[] = this.#dialogData.items;\n context: ActionContext = this.#dialogData.context;\n\n run() {\n this.errors.set([]);\n if (this.deleteItems.length) {\n this.deleting.set(true);\n this.#dmsService\n .deleteDmsObjects(\n this.deleteItems.map((o) => ({\n id: o.id,\n subject: o.data[this.context.subjectProperty || o.id] as string\n }))\n )\n .subscribe({\n next: (res: ObjectDeleteResult[]) => {\n this.errors.set(\n res\n .filter((r) => !!r._error)\n .map((r: any) => ({\n status: r._error.status,\n subject: this.context?.subjectProperty ? r.properties[this.context.subjectProperty].value : r.id,\n message: this.#getErrorMessage(r._error)\n }))\n );\n !this.errors().length && this.#dialogRef.close();\n },\n error: (err: ObjectDeleteError) => {\n this.deleting.set(false);\n },\n complete: () => this.deleting.set(false)\n });\n }\n }\n\n #getErrorMessage(error: ObjectDeleteError): string {\n switch (error.status) {\n case 403:\n return this.translate.instant('yuv.action-menu.action.delete.error.403');\n case 404:\n return this.translate.instant('yuv.action-menu.action.delete.error.404');\n default:\n return this.translate.instant('yuv.action-menu.action.delete.error.default');\n }\n }\n\n cancel() {\n this.#dialogRef.close();\n }\n}\n","<yuv-dialog [headertitle]=\"'yuv.action-menu.action.delete.dms.object.label' | translate\">\n <main class=\"yuv-delete\" [ngClass]=\"{ deleting: deleting() }\">\n <mat-progress-bar mode=\"indeterminate\" class=\"progress-bar\"></mat-progress-bar>\n\n @if (errors().length) {\n <ul class=\"errors\">\n @for (e of errors(); track $index) {\n <li class=\"error\">\n <span class=\"subject\">{{ e.subject }}</span>\n <span class=\"message\">{{ e.message }}</span>\n </li>\n }\n </ul>\n } @else {\n <p>{{ 'yuv.action-menu.action.delete.dms.object.confirm.message' | translate }}</p>\n }\n </main>\n <footer class=\"form-buttons\">\n <button ymtButton=\"secondary\" [disabled]=\"deleting()\" (click)=\"cancel()\">\n {{ 'yuv.action-menu.action.delete.dms.object.confirm.cancel' | translate }}\n </button>\n\n <button ymtButton=\"primary\" [disabled]=\"deleting() || !!errors().length\" (click)=\"run()\">\n {{ 'yuv.action-menu.action.delete.dms.object.confirm.ok' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { inject } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DmsObject, IdmService, ObjectLockingService, RetentionService, TranslateService } from '@yuuvis/client-core';\nimport { map, Observable, of } from 'rxjs';\nimport { AbstractContextAction, Action, ACTION_ICON, ActionSupport, BASE_ACTION, SelectionRange } from '../../models';\nimport { ActionPriorityLevel } from '../../services';\nimport { DeleteComponent } from './delete/delete.component';\n\nexport class DeleteAction extends AbstractContextAction implements Action {\n readonly #translate = inject(TranslateService);\n readonly #dialog = inject(MatDialog);\n readonly #retention = inject(RetentionService);\n readonly #idmService = inject(IdmService);\n readonly #objectLocking = inject(ObjectLockingService);\n\n id = BASE_ACTION.delete;\n label = this.#translate.instant('yuv.action-menu.action.delete.dms.object.label');\n description = this.#translate.instant('yuv.action-menu.action.delete.dms.object.description');\n priority = ActionPriorityLevel.LEVEL_8;\n icon = ACTION_ICON.delete;\n group = 'common';\n range = SelectionRange.MULTI_SELECT;\n supports: ActionSupport = {\n pattern: '*'\n };\n\n isDisabled(items: DmsObject[]): Observable<boolean> {\n const lockState = this.#objectLocking.getLockState(items[0]);\n if (!lockState.locked) return of(false);\n return this.#idmService.getUserById(lockState.ownerId || '').pipe(\n map((user) => {\n const userName = user ? user.title || user.email || user.id : null;\n this.description = userName\n ? this.#translate.instant('yuv.action-menu.action.unlock.description-locked-by-other', { user: userName })\n : this.#translate.instant('yuv.action-menu.action.unlock.description-locked-by-unknown-user');\n return true;\n })\n );\n }\n\n isExecutable(items: DmsObject[]): Observable<boolean> {\n const dmsObject = items[0];\n return of(\n !!dmsObject.permissions &&\n dmsObject.permissions.deleteObject &&\n !this.#retention.getRetentionState(dmsObject).underRetention\n );\n }\n\n run(items: DmsObject[]): Observable<boolean> {\n this.#dialog.open(DeleteComponent, {\n data: {\n items,\n context: this.context\n }\n });\n return of(true);\n }\n}\n","import { inject } from '@angular/core';\nimport { DmsObject, DmsService, SystemType, TranslateService } from '@yuuvis/client-core';\nimport { Observable, of } from 'rxjs';\nimport { AbstractContextAction, Action, ACTION_ICON, ActionSupport, BASE_ACTION, SelectionRange } from '../../models';\nimport { ActionPriorityLevel } from '../../services';\n\nexport class DownloadAction extends AbstractContextAction implements Action {\n readonly #translate = inject(TranslateService);\n readonly #dmsService = inject(DmsService);\n\n id = BASE_ACTION.download;\n label = this.#translate.instant('yuv.action-menu.action.download.dms.object.content.label');\n description = this.#translate.instant('yuv.action-menu.action.download.dms.object.content.description');\n priority = ActionPriorityLevel.LEVEL_2;\n icon = ACTION_ICON.download;\n group = 'common';\n range = SelectionRange.MULTI_SELECT;\n supports: ActionSupport = {\n types: [SystemType.DOCUMENT]\n };\n\n isExecutable(selection: DmsObject[]): Observable<boolean> {\n const noContentMatch = (Array.isArray(selection) ? selection : [selection]).find((e) => !e.content);\n if (selection.length < 1) return of(false);\n return of(!noContentMatch);\n }\n\n run(selection: DmsObject[]): Observable<boolean> {\n this.#dmsService.downloadContent(Array.isArray(selection) ? selection : [selection]);\n return of(true);\n }\n}\n","import { Injectable, Injector, Signal, inject, runInInjectionContext } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { DmsObject, Utils } from '@yuuvis/client-core';\nimport { Observable, forkJoin, map, of, switchMap } from 'rxjs';\nimport { CopyAction } from '../actions/copy-action/copy-action';\nimport { CutAction } from '../actions/cut-action/cut-action';\nimport { DeleteAction } from '../actions/delete-action/delete-action';\nimport { DownloadAction } from '../actions/download-action/download-action';\nimport { ContextmenuComponent } from '../components/contextmenu/contextmenu.component';\nimport { Action, ActionClass, ActionContext, ActionOptions, BASE_ACTION } from '../models';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ActionsService {\n readonly injector = inject(Injector);\n #dialog = inject(MatDialog);\n readonly iconRegistry = inject(MatIconRegistry);\n\n private _registeredActions: Record<string, ActionClass> = {};\n\n /**\n * Registers actions that can be used in the application.\n * @param a Array of actions to register, each action must have an id and a\n * class that extends ActionClass\n */\n registerActions(actions: { id: string; action: ActionClass }[]): void {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n Array.isArray(actions) &&\n actions.forEach((action) => {\n this._registeredActions[action.id] = action.action;\n });\n }\n\n /**\n * Conceals actions that are no longer needed or should not be available.\n * This will remove the actions from the registered actions list.\n * @param actionIDs Array of action IDs to conceal\n */\n concealActions(actionIDs: string[]): void {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n Array.isArray(actionIDs) && actionIDs.forEach((id) => delete this._registeredActions[id]);\n }\n\n /**\n * Returns all actions that are executable for the given selection.\n * @param selection Array of DmsObjects to check for executable actions\n * @param options options to filter the actions\n * @returns Observable of actions that are executable for the given selection\n */\n getActions(selection: DmsObject[], options?: ActionOptions): Observable<Action[]> {\n // TODO: check if selection is empty or if nessasery at all\n // if (!selection || selection.length === 0) return of([]);\n const selections: Observable<{ action: Action; executable: boolean }>[] = this.getAvailableActions(options?.context)\n .filter((action) =>\n options?.exclude\n ? Array.isArray(options.exclude)\n ? !options.exclude.includes(action.id)\n : options.exclude instanceof RegExp\n ? !options.exclude.test(action.id)\n : true\n : true\n )\n .map((action: Action) =>\n action.isExecutable(selection).pipe(\n map((executable: boolean) => ({\n action,\n executable\n }))\n )\n );\n\n return forkJoin(selections).pipe(\n map((res: { action: Action; executable: boolean }[]) =>\n res.filter((result) => result.executable).map((executable) => executable.action)\n ),\n switchMap((actions: Action[]) => this.resolveDisabledState(actions, selection))\n );\n }\n\n /**\n * Get all available actions. This includes the default actions and all registered actions but\n * without checking if they are executable.\n * @param context Context passed to the actions\n * @returns Array of available actions\n */\n getAvailableActions(context?: ActionContext): Action[] {\n let actions: Action[] = [];\n\n runInInjectionContext(this.injector, () => {\n actions = [...Object.values(this._registeredActions).map((action: ActionClass) => new action(context))];\n });\n return actions;\n }\n\n getActionsForType(objectTypeId: string, context?: ActionContext): Action[] {\n return this.getAvailableActions(context).filter((action: Action) =>\n this.#actionsSupportsType(action, objectTypeId)\n );\n }\n\n getActionById(id: string, context?: ActionContext): Action | undefined {\n return this.getAvailableActions(context).find((action) => action.id === id);\n }\n\n getActionsById(ids: string[], context?: ActionContext): Action[] {\n return this.getAvailableActions(context).filter((action: Action) => ids.includes(action.id));\n }\n\n /**\n * Resolves the disabled state for the given actions against the given selection.\n * Sets the `disabled` property on each action instance.\n * @param actions Array of actions to resolve\n * @param selection Array of DmsObjects to check against\n * @returns Observable emitting the same actions with `disabled` set\n */\n resolveDisabledState(actions: Action[], selection: DmsObject[]): Observable<Action[]> {\n if (actions.length === 0) return of([]);\n\n const disabledChecks = actions.map((action: Action) => {\n const resolve$ = action.isDisabled\n ? action.isDisabled(selection).pipe(\n map((disabled: boolean) => {\n action.disabled = disabled;\n return action;\n })\n )\n : of(Object.assign(action, { disabled: false }));\n\n // Recursively resolve children\n if (action.children?.length) {\n return resolve$.pipe(\n switchMap((action) => this.resolveDisabledState(action.children!, selection).pipe(map(() => action)))\n );\n }\n return resolve$;\n });\n\n return forkJoin(disabledChecks);\n }\n\n openContextMenu(\n actions: Signal<Action[]>,\n callback: (action: Action) => void,\n overlayOrigin: { x: number; y: number }\n ): void {\n if (actions().length)\n this.#dialog.open(ContextmenuComponent, {\n data: { actions, callback },\n panelClass: 'context-menu-dialog'\n // position: { top: `${overlayOrigin.y}`, left: `${overlayOrigin.x}` }\n });\n const width = 10;\n const hight = 10;\n\n setTimeout(() => {\n const dialog = document.querySelector('.context-menu-dialog') as HTMLElement;\n\n const dialogWidth = dialog.offsetWidth;\n const dialogHeight = dialog.offsetHeight;\n const screenW = window.innerWidth;\n const screenH = window.innerHeight;\n\n let left = overlayOrigin.x;\n let top = overlayOrigin.y;\n if (left + dialogWidth > screenW) {\n left = screenW - dialogWidth - width;\n }\n if (top + dialogHeight > screenH) {\n top = screenH - dialogHeight - hight;\n }\n\n dialog.style.position = 'fixed';\n dialog.style.left = `${left}px`;\n dialog.style.top = `${top}px`;\n });\n }\n\n /**\n * Registers a set of default actions that are commonly used in the application.\n * These actions include delete, download, copy and cut. This method can be called\n * during the initialization of the application to ensure that these actions\n * are available for use.\n */\n registerDefaultActions(): void {\n this.registerActions([\n { id: BASE_ACTION.delete, action: DeleteAction },\n { id: BASE_ACTION.download, action: DownloadAction },\n { id: BASE_ACTION.copy, action: CopyAction },\n { id: BASE_ACTION.cut, action: CutAction }\n ]);\n }\n\n #actionsSupportsType(action: Action, objectTypeId: string): boolean {\n const matchesTypes = action.supports.types ? action.supports.types.includes(objectTypeId) : false;\n const matchesSOTs = action.supports.sots ? action.supports.sots.includes(objectTypeId) : false;\n const matchesPattern = action.supports.pattern\n ? Utils.patternToRegExp(action.supports.pattern).test(objectTypeId)\n : false;\n return matchesTypes || matchesSOTs || matchesPattern;\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { ActionContext } from '../models';\n\nexport const ACTION_CONTEXT_TOKEN = new InjectionToken<ActionContext>('action-context');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["TranslateService","i1"],"mappings":"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"}
1
+ {"version":3,"file":"yuuvis-client-framework-actions.mjs","sources":["../../../../../libs/yuuvis/client-framework/actions/src/lib/actions.module.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/components/contextmenu/contextmenu.component.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/components/contextmenu/contextmenu.component.html","../../../../../libs/yuuvis/client-framework/actions/src/lib/components/contextmenu/contextmenuTrigger.directive.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/models/actions.icon.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/models/actions.models.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/services/action.priority-levels.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/services/action.validation.service.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions/copy-action/copy-action.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions/cut-action/cut-action.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions/delete-action/delete/delete.component.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions/delete-action/delete/delete.component.html","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions/delete-action/delete-action.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions/download-action/download-action.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/services/actions.service.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/tokens/actions.token.ts","../../../../../libs/yuuvis/client-framework/actions/src/yuuvis-client-framework-actions.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\n\n/**\n * Module for the actions library.\n */\n@NgModule({\n imports: [TranslateModule]\n})\nexport class ActionsModule {}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\n\nimport { CdkMenu, CdkMenuItem } from '@angular/cdk/menu';\nimport { MatIconModule } from '@angular/material/icon';\nimport { YuvListModule } from '@yuuvis/client-framework/list';\n\nimport {\n afterRenderEffect,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n untracked,\n viewChild,\n viewChildren\n} from '@angular/core';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ContextMenuAction, ContextMenuItemSelectEvent } from './contextmenu.model';\n\n@Component({\n selector: 'yuv-contextmenu',\n imports: [CommonModule, MatIconModule, YuvListModule, A11yModule, CdkMenu, CdkMenuItem, MatTooltip],\n providers: [MatTooltip],\n templateUrl: './contextmenu.component.html',\n styleUrls: ['./contextmenu.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ContextmenuComponent {\n actions = input<ContextMenuAction[]>([]);\n selection = input<unknown[]>([]);\n itemSelect = output<ContextMenuItemSelectEvent>();\n private translate = inject(TranslateService);\n\n cdkMenu = viewChild.required(CdkMenu);\n menuItems = viewChildren<CdkMenuItem | null>(CdkMenuItem);\n\n sortedActions = computed(() =>\n [...this.actions()].sort((a, b) => a.label.localeCompare(b.label, this.translate.getCurrentLang()))\n );\n\n constructor() {\n afterRenderEffect(() => {\n //Focus First Item when @for is finished\n untracked(() => {\n //firstElement?.nativeElement.focus();\n this.cdkMenu().focusFirstItem('program');\n });\n });\n }\n\n onItemTrigger({ action }: ContextMenuItemSelectEvent): void {\n this.itemSelect.emit({ action });\n }\n}\n","<div class=\"context-menu\" cdkMenu>\n @for (a of sortedActions(); track a.id) {\n <span [matTooltip]=\"a.description\" [matTooltipDisabled]=\"!a.description\">\n <div\n class=\"context-menu__item\"\n [class.context-menu__item--disabled]=\"a.disabled\"\n cdkMenuItem\n [cdkMenuItemDisabled]=\"a.disabled\"\n [attr.aria-label]=\"'Execute Action: ' + a.label\"\n (cdkMenuItemTriggered)=\"onItemTrigger({ action: a })\"\n >\n <mat-icon class=\"context-menu__item-icon ymt-icon--size-s\">{{ a.icon }}</mat-icon>\n {{ a.label }}\n </div>\n </span>\n }\n</div>\n","import { CdkContextMenuTrigger, MENU_STACK, MENU_TRIGGER, MenuStack } from '@angular/cdk/menu';\nimport { Directive, effect, Input, input, signal, TemplateRef, untracked } from '@angular/core';\n\n@Directive({\n selector: '[yuvContextMenuTrigger]',\n exportAs: 'yuvContextMenuTrigger',\n standalone: true,\n providers: [\n { provide: MENU_TRIGGER, useExisting: YuvContextMenuTriggerDirective },\n { provide: MENU_STACK, useClass: MenuStack }\n ]\n})\nexport class YuvContextMenuTriggerDirective extends CdkContextMenuTrigger {\n @Input({ alias: 'yuvContextMenuTrigger' })\n override menuTemplateRef!: TemplateRef<unknown>;\n\n triggerWhen = input<boolean | null>(null, { alias: 'yuvContextMenuTriggerWhen' });\n\n #contextMenuEvent = signal<MouseEvent | null>(null);\n\n constructor() {\n super();\n\n effect(() => {\n // Only a fresh context-menu event may re-run this effect. triggerWhen is read\n // untracked so a later false -> true transition (e.g. actions repopulating after\n // navigating into a folder and selecting an item) can't replay a stale event and\n // reopen the menu without a right-click.\n const event = this.#contextMenuEvent();\n untracked(() => {\n const triggerWhen = this.triggerWhen();\n if (event && (triggerWhen || triggerWhen === null)) {\n super._openOnContextMenu(event);\n this.#contextMenuEvent.set(null); // consume the event so it can't be replayed\n }\n });\n });\n }\n\n override _openOnContextMenu(event: MouseEvent) {\n this.#contextMenuEvent.set(event);\n }\n}\n","export const ACTION_ICON = {\n download: 'download',\n delete: 'delete',\n copy: 'content_copy',\n cut: 'content_cut',\n manageFlavor: 'cards_star'\n}","import { DmsObject } from '@yuuvis/client-core';\nimport { Observable } from 'rxjs';\n\nexport type ActionClass = { \n new (...args: any[]): any \n};\n\nexport class AbstractContextAction {\n context?: ActionContext;\n constructor(context?: ActionContext) {\n this.context = context;\n }\n}\n\nexport interface BaseAction {\n /**\n * Equals the selector of the actions selector (will be set by the action service)\n */\n id: string;\n /**\n * label to be displayed inside the action menu\n */\n label: string;\n /**\n * description to be displayed inside the action menu\n */\n description?: string;\n /**\n * @ignore\n */\n icon: string;\n /**\n * actions priority defining the position of the action within the whole list of actions\n */\n priority: number;\n /**\n * group of actions the action should be part of ('common' or 'further')\n */\n group: string;\n /**\n * number of selected items supported by the action\n * (SelectionRange.SINGLE_SELECT, SelectionRange.MULTI_SELECT, SelectionRange.MULTI_SELECT_ONLY )\n */\n range: SelectionRange;\n\n /**\n * Types that are supported by the action\n */\n supports: ActionSupport;\n\n /**\n * Determining whether or not the action is executable for the given selection.\n * Controls visibility: when false, the action is hidden from the UI entirely.\n * @param item Current selection\n * @returns true if the action is executable for the current selection, false otherwise\n */\n isExecutable: (items: DmsObject[]) => Observable<boolean>;\n\n /**\n * Optional check whether the action should be disabled for the given selection.\n * Unlike isExecutable (which controls visibility), isDisabled controls whether\n * a visible action can be triggered. When absent, the action is never disabled.\n * @param items Current selection\n * @returns true if the action should be disabled, false otherwise\n */\n isDisabled?: (items: DmsObject[]) => Observable<boolean>;\n\n /**\n * Resolved disabled state for template binding. Set by ActionsService after\n * evaluating isDisabled(). Do not set manually on action classes.\n */\n disabled?: boolean;\n}\n\nexport interface ActionSupport {\n // object types\n types?: string[];\n // object types\n sots?: string[];\n // pattern to match the type name against\n pattern?: string;\n}\n\nexport interface ActionContext {\n /**\n * As actions deal with DmsObjects the subject property is the property that\n * should be used to display the name of the object. This may be used for\n * showing the name of the object in a confirmation/error dialog or similar.\n */\n subjectProperty?: string;\n /**\n * The appId is the id of the application that the action is executed in.\n */\n appId?: string;\n}\n\nexport interface Action extends BaseAction {\n run: (items: DmsObject[]) => Observable<boolean>;\n /**\n * Optional child actions. When present, this action renders as a sub-menu\n * trigger instead of executing `run`. Nesting can be arbitrarily deep.\n * An empty array is treated as \"no children\" (leaf action).\n */\n children?: Action[];\n}\n\nexport interface ActionOptions {\n context?: ActionContext;\n exclude?: string[] | RegExp;\n}\n\nexport enum SelectionRange {\n SINGLE_SELECT,\n MULTI_SELECT,\n MULTI_SELECT_ONLY,\n ANY\n}\n\nexport const BASE_ACTION = {\n copy: 'yuv.base.copy',\n cut: 'yuv.base.cut',\n download: 'yuv.base.download',\n delete: 'yuv.base.delete'\n};\n","export const ActionPriorityLevel = {\n LEVEL_1: 1,\n LEVEL_2: 2,\n LEVEL_3: 3,\n LEVEL_4: 4,\n LEVEL_5: 5,\n LEVEL_6: 6,\n LEVEL_7: 7,\n LEVEL_8: 8,\n LEVEL_9: 9,\n LEVEL_10: 10\n} as const;\n","import { inject, Injectable } from '@angular/core';\nimport {\n AppCacheService,\n DmsObject,\n ObjectLockingService,\n STORAGE_USERS_KEY,\n TranslateService,\n YuvUser\n} from '@yuuvis/client-core';\nimport { map, Observable, of } from 'rxjs';\n\n/**\n * Service responsible for validating actions on DMS objects.\n * Provides checks for document lock states and related user information.\n */\n/** @deprecated */\n@Injectable({\n providedIn: 'root'\n})\nexport class ActionsValidationService {\n private readonly translate = inject(TranslateService);\n readonly #appCache = inject(AppCacheService);\n readonly #objectLocking = inject(ObjectLockingService);\n\n /** @deprecated */\n checkDocumentLock(dmsObject: DmsObject): Observable<{ state: boolean; description?: string }> {\n const lockState = this.#objectLocking.getLockState(dmsObject);\n if (!lockState.locked || lockState.lockedByCurrentUser) return of({ state: false });\n return this.#appCache.getItem<YuvUser[]>(STORAGE_USERS_KEY).pipe(\n map((users) => {\n const lockUser = users?.find((user) => user.id === lockState.ownerId);\n const user = lockUser ? lockUser.title || lockUser.email || lockUser.id : null;\n const description = user\n ? this.translate.instant('yuv.action-menu.action.unlock.description-locked-by-other', { user })\n : this.translate.instant('yuv.action-menu.action.unlock.description-locked-by-unknown-user');\n return { state: true, description };\n })\n );\n }\n}\n","import { inject } from '@angular/core';\nimport { ClipboardService, DmsObject, TranslateService } from '@yuuvis/client-core';\nimport { Observable, of } from 'rxjs';\nimport { AbstractContextAction, Action, ACTION_ICON, ActionSupport, BASE_ACTION, SelectionRange } from '../../models';\nimport { ActionPriorityLevel } from '../../services';\n\nexport class CopyAction extends AbstractContextAction implements Action {\n readonly #clipboardService = inject(ClipboardService);\n readonly #translate = inject(TranslateService);\n\n id = BASE_ACTION.copy;\n label = this.#translate.instant('yuv.action-menu.action.copy.dms.object.label');\n description = this.#translate.instant('yuv.action-menu.action.copy.dms.object.description');\n priority = ActionPriorityLevel.LEVEL_8;\n icon = ACTION_ICON.copy;\n group = 'common';\n range = SelectionRange.MULTI_SELECT;\n supports: ActionSupport = {\n pattern: '*'\n };\n\n isExecutable(items: DmsObject[]): Observable<boolean> {\n const notAllowed = items.some((item) => !item.permissions?.writeIndexData);\n return of(items.length > 0 && !notAllowed);\n }\n\n run(items: DmsObject[]): Observable<boolean> {\n this.#clipboardService.addObjects(items, 'copy', this.context?.appId);\n return of(true);\n }\n}\n","import { inject } from '@angular/core';\nimport { ClipboardService, DmsObject, TranslateService } from '@yuuvis/client-core';\nimport { Observable, of } from 'rxjs';\nimport { AbstractContextAction, Action, ACTION_ICON, ActionSupport, BASE_ACTION, SelectionRange } from '../../models';\nimport { ActionPriorityLevel } from '../../services';\n\nexport class CutAction extends AbstractContextAction implements Action {\n readonly #clipboardService = inject(ClipboardService);\n readonly #translate = inject(TranslateService);\n\n id = BASE_ACTION.cut;\n label = this.#translate.instant('yuv.action-menu.action.cut.dms.object.label');\n description = this.#translate.instant('yuv.action-menu.action.cut.dms.object.description');\n priority = ActionPriorityLevel.LEVEL_8;\n icon = ACTION_ICON.cut;\n group = 'common';\n range = SelectionRange.MULTI_SELECT;\n supports: ActionSupport = {\n pattern: '*'\n };\n\n isExecutable(items: DmsObject[]): Observable<boolean> {\n return of(\n items.length > 0 &&\n items.every(\n (item) => item.permissions?.writeContent && item.permissions.writeIndexData && item.permissions.deleteObject\n )\n );\n }\n\n run(items: DmsObject[]): Observable<boolean> {\n this.#clipboardService.addObjects(items, 'cut', this.context?.appId);\n return of(true);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, signal } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport {\n DmsObject,\n DmsService,\n ObjectDeleteError,\n ObjectDeleteResult,\n TranslatePipe,\n TranslateService\n} from '@yuuvis/client-core';\nimport { DialogComponent } from '@yuuvis/client-framework/common';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { ActionContext } from '../../../models';\n\n/**\n * @ignore\n */\n\n@Component({\n selector: 'yuv-delete',\n standalone: true,\n imports: [CommonModule, TranslatePipe, MatButtonModule, DialogComponent, MatProgressBar, YmtButtonDirective],\n templateUrl: './delete.component.html',\n styleUrls: ['./delete.component.scss']\n})\nexport class DeleteComponent {\n readonly #dmsService = inject(DmsService);\n private readonly translate = inject(TranslateService);\n #dialogData = inject<any>(MAT_DIALOG_DATA);\n readonly #dialogRef = inject(MatDialogRef<DeleteComponent>);\n\n errors = signal<\n {\n status: number;\n subject: string;\n message: string;\n }[]\n >([]);\n\n deleting = signal(false);\n deleteItems: DmsObject[] = this.#dialogData.items;\n context: ActionContext = this.#dialogData.context;\n\n run() {\n this.errors.set([]);\n if (this.deleteItems.length) {\n this.deleting.set(true);\n this.#dmsService\n .deleteDmsObjects(\n this.deleteItems.map((o) => ({\n id: o.id,\n subject: o.data[this.context.subjectProperty || o.id] as string\n }))\n )\n .subscribe({\n next: (res: ObjectDeleteResult[]) => {\n this.errors.set(\n res\n .filter((r) => !!r._error)\n .map((r: any) => ({\n status: r._error.status,\n subject: this.context?.subjectProperty ? r.properties[this.context.subjectProperty].value : r.id,\n message: this.#getErrorMessage(r._error)\n }))\n );\n !this.errors().length && this.#dialogRef.close();\n },\n error: (err: ObjectDeleteError) => {\n this.deleting.set(false);\n },\n complete: () => this.deleting.set(false)\n });\n }\n }\n\n #getErrorMessage(error: ObjectDeleteError): string {\n switch (error.status) {\n case 403:\n return this.translate.instant('yuv.action-menu.action.delete.error.403');\n case 404:\n return this.translate.instant('yuv.action-menu.action.delete.error.404');\n default:\n return this.translate.instant('yuv.action-menu.action.delete.error.default');\n }\n }\n\n cancel() {\n this.#dialogRef.close();\n }\n}\n","<yuv-dialog [headertitle]=\"'yuv.action-menu.action.delete.dms.object.label' | translate\">\n <main class=\"yuv-delete\" [ngClass]=\"{ deleting: deleting() }\">\n <mat-progress-bar mode=\"indeterminate\" class=\"progress-bar\"></mat-progress-bar>\n\n @if (errors().length) {\n <ul class=\"errors\">\n @for (e of errors(); track $index) {\n <li class=\"error\">\n <span class=\"subject\">{{ e.subject }}</span>\n <span class=\"message\">{{ e.message }}</span>\n </li>\n }\n </ul>\n } @else {\n <p>{{ 'yuv.action-menu.action.delete.dms.object.confirm.message' | translate }}</p>\n }\n </main>\n <footer class=\"form-buttons\">\n <button ymtButton=\"secondary\" [disabled]=\"deleting()\" (click)=\"cancel()\">\n {{ 'yuv.action-menu.action.delete.dms.object.confirm.cancel' | translate }}\n </button>\n\n <button ymtButton=\"primary\" [disabled]=\"deleting() || !!errors().length\" (click)=\"run()\">\n {{ 'yuv.action-menu.action.delete.dms.object.confirm.ok' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { inject } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DmsObject, IdmService, ObjectLockingService, RetentionService, TranslateService } from '@yuuvis/client-core';\nimport { map, Observable, of } from 'rxjs';\nimport { AbstractContextAction, Action, ACTION_ICON, ActionSupport, BASE_ACTION, SelectionRange } from '../../models';\nimport { ActionPriorityLevel } from '../../services';\nimport { DeleteComponent } from './delete/delete.component';\n\nexport class DeleteAction extends AbstractContextAction implements Action {\n readonly #translate = inject(TranslateService);\n readonly #dialog = inject(MatDialog);\n readonly #retention = inject(RetentionService);\n readonly #idmService = inject(IdmService);\n readonly #objectLocking = inject(ObjectLockingService);\n\n id = BASE_ACTION.delete;\n label = this.#translate.instant('yuv.action-menu.action.delete.dms.object.label');\n description = this.#translate.instant('yuv.action-menu.action.delete.dms.object.description');\n priority = ActionPriorityLevel.LEVEL_8;\n icon = ACTION_ICON.delete;\n group = 'common';\n range = SelectionRange.MULTI_SELECT;\n supports: ActionSupport = {\n pattern: '*'\n };\n\n isDisabled(items: DmsObject[]): Observable<boolean> {\n const lockState = this.#objectLocking.getLockState(items[0]);\n if (!lockState.locked) return of(false);\n return this.#idmService.getUserById(lockState.ownerId || '').pipe(\n map((user) => {\n const userName = user ? user.title || user.email || user.id : null;\n this.description = userName\n ? this.#translate.instant('yuv.action-menu.action.unlock.description-locked-by-other', { user: userName })\n : this.#translate.instant('yuv.action-menu.action.unlock.description-locked-by-unknown-user');\n return true;\n })\n );\n }\n\n isExecutable(items: DmsObject[]): Observable<boolean> {\n const dmsObject = items[0];\n return of(\n !!dmsObject.permissions &&\n dmsObject.permissions.deleteObject &&\n !this.#retention.getRetentionState(dmsObject).underRetention\n );\n }\n\n run(items: DmsObject[]): Observable<boolean> {\n this.#dialog.open(DeleteComponent, {\n data: {\n items,\n context: this.context\n }\n });\n return of(true);\n }\n}\n","import { inject } from '@angular/core';\nimport { DmsObject, DmsService, SystemType, TranslateService } from '@yuuvis/client-core';\nimport { Observable, of } from 'rxjs';\nimport { AbstractContextAction, Action, ACTION_ICON, ActionSupport, BASE_ACTION, SelectionRange } from '../../models';\nimport { ActionPriorityLevel } from '../../services';\n\nexport class DownloadAction extends AbstractContextAction implements Action {\n readonly #translate = inject(TranslateService);\n readonly #dmsService = inject(DmsService);\n\n id = BASE_ACTION.download;\n label = this.#translate.instant('yuv.action-menu.action.download.dms.object.content.label');\n description = this.#translate.instant('yuv.action-menu.action.download.dms.object.content.description');\n priority = ActionPriorityLevel.LEVEL_2;\n icon = ACTION_ICON.download;\n group = 'common';\n range = SelectionRange.MULTI_SELECT;\n supports: ActionSupport = {\n types: [SystemType.DOCUMENT]\n };\n\n isExecutable(selection: DmsObject[]): Observable<boolean> {\n const noContentMatch = (Array.isArray(selection) ? selection : [selection]).find((e) => !e.content);\n if (selection.length < 1) return of(false);\n return of(!noContentMatch);\n }\n\n run(selection: DmsObject[]): Observable<boolean> {\n this.#dmsService.downloadContent(Array.isArray(selection) ? selection : [selection]);\n return of(true);\n }\n}\n","import { Injectable, Injector, Signal, inject, runInInjectionContext } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { DmsObject, Utils } from '@yuuvis/client-core';\nimport { Observable, forkJoin, map, of, switchMap } from 'rxjs';\nimport { CopyAction } from '../actions/copy-action/copy-action';\nimport { CutAction } from '../actions/cut-action/cut-action';\nimport { DeleteAction } from '../actions/delete-action/delete-action';\nimport { DownloadAction } from '../actions/download-action/download-action';\nimport { ContextmenuComponent } from '../components/contextmenu/contextmenu.component';\nimport { Action, ActionClass, ActionContext, ActionOptions, BASE_ACTION } from '../models';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ActionsService {\n readonly injector = inject(Injector);\n #dialog = inject(MatDialog);\n readonly iconRegistry = inject(MatIconRegistry);\n\n private _registeredActions: Record<string, ActionClass> = {};\n\n /**\n * Registers actions that can be used in the application.\n * @param a Array of actions to register, each action must have an id and a\n * class that extends ActionClass\n */\n registerActions(actions: { id: string; action: ActionClass }[]): void {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n Array.isArray(actions) &&\n actions.forEach((action) => {\n this._registeredActions[action.id] = action.action;\n });\n }\n\n /**\n * Conceals actions that are no longer needed or should not be available.\n * This will remove the actions from the registered actions list.\n * @param actionIDs Array of action IDs to conceal\n */\n concealActions(actionIDs: string[]): void {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n Array.isArray(actionIDs) && actionIDs.forEach((id) => delete this._registeredActions[id]);\n }\n\n /**\n * Returns all actions that are executable for the given selection.\n * @param selection Array of DmsObjects to check for executable actions\n * @param options options to filter the actions\n * @returns Observable of actions that are executable for the given selection\n */\n getActions(selection: DmsObject[], options?: ActionOptions): Observable<Action[]> {\n // TODO: check if selection is empty or if nessasery at all\n // if (!selection || selection.length === 0) return of([]);\n const selections: Observable<{ action: Action; executable: boolean }>[] = this.getAvailableActions(options?.context)\n .filter((action) =>\n options?.exclude\n ? Array.isArray(options.exclude)\n ? !options.exclude.includes(action.id)\n : options.exclude instanceof RegExp\n ? !options.exclude.test(action.id)\n : true\n : true\n )\n .map((action: Action) =>\n action.isExecutable(selection).pipe(\n map((executable: boolean) => ({\n action,\n executable\n }))\n )\n );\n\n return forkJoin(selections).pipe(\n map((res: { action: Action; executable: boolean }[]) =>\n res.filter((result) => result.executable).map((executable) => executable.action)\n ),\n switchMap((actions: Action[]) => this.resolveDisabledState(actions, selection))\n );\n }\n\n /**\n * Get all available actions. This includes the default actions and all registered actions but\n * without checking if they are executable.\n * @param context Context passed to the actions\n * @returns Array of available actions\n */\n getAvailableActions(context?: ActionContext): Action[] {\n let actions: Action[] = [];\n\n runInInjectionContext(this.injector, () => {\n actions = [...Object.values(this._registeredActions).map((action: ActionClass) => new action(context))];\n });\n return actions;\n }\n\n getActionsForType(objectTypeId: string, context?: ActionContext): Action[] {\n return this.getAvailableActions(context).filter((action: Action) =>\n this.#actionsSupportsType(action, objectTypeId)\n );\n }\n\n getActionById(id: string, context?: ActionContext): Action | undefined {\n return this.getAvailableActions(context).find((action) => action.id === id);\n }\n\n getActionsById(ids: string[], context?: ActionContext): Action[] {\n return this.getAvailableActions(context).filter((action: Action) => ids.includes(action.id));\n }\n\n /**\n * Resolves the disabled state for the given actions against the given selection.\n * Sets the `disabled` property on each action instance.\n * @param actions Array of actions to resolve\n * @param selection Array of DmsObjects to check against\n * @returns Observable emitting the same actions with `disabled` set\n */\n resolveDisabledState(actions: Action[], selection: DmsObject[]): Observable<Action[]> {\n if (actions.length === 0) return of([]);\n\n const disabledChecks = actions.map((action: Action) => {\n const resolve$ = action.isDisabled\n ? action.isDisabled(selection).pipe(\n map((disabled: boolean) => {\n action.disabled = disabled;\n return action;\n })\n )\n : of(Object.assign(action, { disabled: false }));\n\n // Recursively resolve children\n if (action.children?.length) {\n return resolve$.pipe(\n switchMap((action) => this.resolveDisabledState(action.children!, selection).pipe(map(() => action)))\n );\n }\n return resolve$;\n });\n\n return forkJoin(disabledChecks);\n }\n\n openContextMenu(\n actions: Signal<Action[]>,\n callback: (action: Action) => void,\n overlayOrigin: { x: number; y: number }\n ): void {\n if (actions().length)\n this.#dialog.open(ContextmenuComponent, {\n data: { actions, callback },\n panelClass: 'context-menu-dialog'\n // position: { top: `${overlayOrigin.y}`, left: `${overlayOrigin.x}` }\n });\n const width = 10;\n const hight = 10;\n\n setTimeout(() => {\n const dialog = document.querySelector('.context-menu-dialog') as HTMLElement;\n\n const dialogWidth = dialog.offsetWidth;\n const dialogHeight = dialog.offsetHeight;\n const screenW = window.innerWidth;\n const screenH = window.innerHeight;\n\n let left = overlayOrigin.x;\n let top = overlayOrigin.y;\n if (left + dialogWidth > screenW) {\n left = screenW - dialogWidth - width;\n }\n if (top + dialogHeight > screenH) {\n top = screenH - dialogHeight - hight;\n }\n\n dialog.style.position = 'fixed';\n dialog.style.left = `${left}px`;\n dialog.style.top = `${top}px`;\n });\n }\n\n /**\n * Registers a set of default actions that are commonly used in the application.\n * These actions include delete, download, copy and cut. This method can be called\n * during the initialization of the application to ensure that these actions\n * are available for use.\n */\n registerDefaultActions(): void {\n this.registerActions([\n { id: BASE_ACTION.delete, action: DeleteAction },\n { id: BASE_ACTION.download, action: DownloadAction },\n { id: BASE_ACTION.copy, action: CopyAction },\n { id: BASE_ACTION.cut, action: CutAction }\n ]);\n }\n\n #actionsSupportsType(action: Action, objectTypeId: string): boolean {\n const matchesTypes = action.supports.types ? action.supports.types.includes(objectTypeId) : false;\n const matchesSOTs = action.supports.sots ? action.supports.sots.includes(objectTypeId) : false;\n const matchesPattern = action.supports.pattern\n ? Utils.patternToRegExp(action.supports.pattern).test(objectTypeId)\n : false;\n return matchesTypes || matchesSOTs || matchesPattern;\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { ActionContext } from '../models';\n\nexport const ACTION_CONTEXT_TOKEN = new InjectionToken<ActionContext>('action-context');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["TranslateService","i1"],"mappings":";;;;;;;;;;;;;;;;;;;AAGA;;AAEG;MAIU,aAAa,CAAA;+GAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,YAFd,eAAe,CAAA,EAAA,CAAA,CAAA;AAEd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,YAFd,eAAe,CAAA,EAAA,CAAA,CAAA;;4FAEd,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,eAAe;AAC1B,iBAAA;;;MCuBY,oBAAoB,CAAA;AAa/B,IAAA,WAAA,GAAA;AAZA,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAsB,EAAE,8EAAC;AACxC,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAY,EAAE,gFAAC;QAChC,IAAA,CAAA,UAAU,GAAG,MAAM,EAA8B;AACzC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE5C,QAAA,IAAA,CAAA,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;AACrC,QAAA,IAAA,CAAA,SAAS,GAAG,YAAY,CAAqB,WAAW,gFAAC;AAEzD,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MACvB,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,CAAC,oFACpG;QAGC,iBAAiB,CAAC,MAAK;;YAErB,SAAS,CAAC,MAAK;;gBAEb,IAAI,CAAC,OAAO,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC;AAC1C,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEA,aAAa,CAAC,EAAE,MAAM,EAA8B,EAAA;QAClD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC;+GAzBW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EALpB,CAAC,UAAU,CAAC,mEAWM,OAAO,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EACS,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtC1D,6nBAiBA,EAAA,MAAA,EAAA,CAAA,wkCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDQY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,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,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,UAAU,+BAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,2BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,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,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAMvF,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;+BACE,iBAAiB,EAAA,OAAA,EAClB,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EAAA,SAAA,EACxF,CAAC,UAAU,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,6nBAAA,EAAA,MAAA,EAAA,CAAA,wkCAAA,CAAA,EAAA;AAQlB,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,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,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,OAAO,2FACS,WAAW,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE1BpD,MAAO,8BAA+B,SAAQ,qBAAqB,CAAA;AAMvE,IAAA,iBAAiB;AAEjB,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QALT,IAAA,CAAA,WAAW,GAAG,KAAK,CAAiB,IAAI,mFAAI,KAAK,EAAE,2BAA2B,EAAA,CAAG;AAEjF,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAoB,IAAI,wFAAC;QAKjD,MAAM,CAAC,MAAK;;;;;AAKV,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE;YACtC,SAAS,CAAC,MAAK;AACb,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;gBACtC,IAAI,KAAK,KAAK,WAAW,IAAI,WAAW,KAAK,IAAI,CAAC,EAAE;AAClD,oBAAA,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC;oBAC/B,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACnC;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAES,IAAA,kBAAkB,CAAC,KAAiB,EAAA;AAC3C,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;IACnC;+GA7BW,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAL9B;AACT,YAAA,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,8BAA8B,EAAE;AACtE,YAAA,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS;AAC3C,SAAA,EAAA,QAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAEU,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAT1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE;AACT,wBAAA,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,gCAAgC,EAAE;AACtE,wBAAA,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS;AAC3C;AACF,iBAAA;;sBAEE,KAAK;uBAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE;;;ACbpC,MAAM,WAAW,GAAG;AACvB,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,IAAI,EAAE,cAAc;AACpB,IAAA,GAAG,EAAE,aAAa;AAClB,IAAA,YAAY,EAAE;;;MCEL,qBAAqB,CAAA;AAEhC,IAAA,WAAA,CAAY,OAAuB,EAAA;AACjC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;IACxB;AACD;IAmGW;AAAZ,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,cAAA,CAAA,eAAA,CAAA,GAAA,CAAA,CAAA,GAAA,eAAa;AACb,IAAA,cAAA,CAAA,cAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAY;AACZ,IAAA,cAAA,CAAA,cAAA,CAAA,mBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,mBAAiB;AACjB,IAAA,cAAA,CAAA,cAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAG;AACL,CAAC,EALW,cAAc,KAAd,cAAc,GAAA,EAAA,CAAA,CAAA;AAOnB,MAAM,WAAW,GAAG;AACzB,IAAA,IAAI,EAAE,eAAe;AACrB,IAAA,GAAG,EAAE,cAAc;AACnB,IAAA,QAAQ,EAAE,mBAAmB;AAC7B,IAAA,MAAM,EAAE;;;AC1HH,MAAM,mBAAmB,GAAG;AACjC,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,QAAQ,EAAE;;;ACCZ;;;AAGG;AACH;MAIa,wBAAwB,CAAA;AAHrC,IAAA,WAAA,GAAA;AAImB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAACA,kBAAgB,CAAC;AAC5C,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC;AACnC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAiBvD,IAAA;AAlBU,IAAA,SAAS;AACT,IAAA,cAAc;;AAGvB,IAAA,iBAAiB,CAAC,SAAoB,EAAA;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC;AAC7D,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,mBAAmB;YAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACnF,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAY,iBAAiB,CAAC,CAAC,IAAI,CAC9D,GAAG,CAAC,CAAC,KAAK,KAAI;AACZ,YAAA,MAAM,QAAQ,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,OAAO,CAAC;YACrE,MAAM,IAAI,GAAG,QAAQ,GAAG,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,EAAE,GAAG,IAAI;YAC9E,MAAM,WAAW,GAAG;AAClB,kBAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,2DAA2D,EAAE,EAAE,IAAI,EAAE;kBAC5F,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kEAAkE,CAAC;AAC9F,YAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE;QACrC,CAAC,CAAC,CACH;IACH;+GAnBW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cAFvB,MAAM,EAAA,CAAA,CAAA;;4FAEP,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACZK,MAAO,UAAW,SAAQ,qBAAqB,CAAA;AAArD,IAAA,WAAA,GAAA;;AACW,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC5C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAACA,kBAAgB,CAAC;AAE9C,QAAA,IAAA,CAAA,EAAE,GAAG,WAAW,CAAC,IAAI;QACrB,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,8CAA8C,CAAC;QAC/E,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,oDAAoD,CAAC;AAC3F,QAAA,IAAA,CAAA,QAAQ,GAAG,mBAAmB,CAAC,OAAO;AACtC,QAAA,IAAA,CAAA,IAAI,GAAG,WAAW,CAAC,IAAI;QACvB,IAAA,CAAA,KAAK,GAAG,QAAQ;AAChB,QAAA,IAAA,CAAA,KAAK,GAAG,cAAc,CAAC,YAAY;AACnC,QAAA,IAAA,CAAA,QAAQ,GAAkB;AACxB,YAAA,OAAO,EAAE;SACV;IAWH;AAvBW,IAAA,iBAAiB;AACjB,IAAA,UAAU;AAanB,IAAA,YAAY,CAAC,KAAkB,EAAA;AAC7B,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC;QAC1E,OAAO,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;IAC5C;AAEA,IAAA,GAAG,CAAC,KAAkB,EAAA;AACpB,QAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;AACrE,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC;IACjB;AACD;;ACxBK,MAAO,SAAU,SAAQ,qBAAqB,CAAA;AAApD,IAAA,WAAA,GAAA;;AACW,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC5C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAACA,kBAAgB,CAAC;AAE9C,QAAA,IAAA,CAAA,EAAE,GAAG,WAAW,CAAC,GAAG;QACpB,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,6CAA6C,CAAC;QAC9E,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,mDAAmD,CAAC;AAC1F,QAAA,IAAA,CAAA,QAAQ,GAAG,mBAAmB,CAAC,OAAO;AACtC,QAAA,IAAA,CAAA,IAAI,GAAG,WAAW,CAAC,GAAG;QACtB,IAAA,CAAA,KAAK,GAAG,QAAQ;AAChB,QAAA,IAAA,CAAA,KAAK,GAAG,cAAc,CAAC,YAAY;AACnC,QAAA,IAAA,CAAA,QAAQ,GAAkB;AACxB,YAAA,OAAO,EAAE;SACV;IAeH;AA3BW,IAAA,iBAAiB;AACjB,IAAA,UAAU;AAanB,IAAA,YAAY,CAAC,KAAkB,EAAA;AAC7B,QAAA,OAAO,EAAE,CACP,KAAK,CAAC,MAAM,GAAG,CAAC;YACd,KAAK,CAAC,KAAK,CACT,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,YAAY,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,CAC7G,CACJ;IACH;AAEA,IAAA,GAAG,CAAC,KAAkB,EAAA;AACpB,QAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;AACpE,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC;IACjB;AACD;;ACjBD;;AAEG;MASU,eAAe,CAAA;AAP5B,IAAA,WAAA,GAAA;AAQW,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AACxB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAACA,kBAAgB,CAAC;AACrD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAM,eAAe,CAAC;AACjC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,EAAC,YAA6B,EAAC;AAE3D,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAMb,EAAE,6EAAC;AAEL,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,+EAAC;AACxB,QAAA,IAAA,CAAA,WAAW,GAAgB,IAAI,CAAC,WAAW,CAAC,KAAK;AACjD,QAAA,IAAA,CAAA,OAAO,GAAkB,IAAI,CAAC,WAAW,CAAC,OAAO;AAgDlD,IAAA;AA/DU,IAAA,WAAW;AAEpB,IAAA,WAAW;AACF,IAAA,UAAU;IAcnB,GAAG,GAAA;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACnB,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,YAAA,IAAI,CAAC;AACF,iBAAA,gBAAgB,CACf,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;gBAC3B,EAAE,EAAE,CAAC,CAAC,EAAE;AACR,gBAAA,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,CAAC,CAAC,EAAE;AACrD,aAAA,CAAC,CAAC;AAEJ,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,GAAyB,KAAI;AAClC,oBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CACb;yBACG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;AACxB,yBAAA,GAAG,CAAC,CAAC,CAAM,MAAM;AAChB,wBAAA,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;wBACvB,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,eAAe,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE;wBAChG,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM;qBACxC,CAAC,CAAC,CACN;AACD,oBAAA,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;gBAClD,CAAC;AACD,gBAAA,KAAK,EAAE,CAAC,GAAsB,KAAI;AAChC,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC1B,CAAC;gBACD,QAAQ,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK;AACxC,aAAA,CAAC;QACN;IACF;AAEA,IAAA,gBAAgB,CAAC,KAAwB,EAAA;AACvC,QAAA,QAAQ,KAAK,CAAC,MAAM;AAClB,YAAA,KAAK,GAAG;gBACN,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,yCAAyC,CAAC;AAC1E,YAAA,KAAK,GAAG;gBACN,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,yCAAyC,CAAC;AAC1E,YAAA;gBACE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,6CAA6C,CAAC;;IAElF;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;IACzB;+GA/DW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5B5B,gmCA2BA,EAAA,MAAA,EAAA,CAAA,0vCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDHY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAiB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,cAAc,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,EAAE,kBAAkB,kLAAnF,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAI1B,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,UAAA,EACV,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,kBAAkB,CAAC,EAAA,QAAA,EAAA,gmCAAA,EAAA,MAAA,EAAA,CAAA,0vCAAA,CAAA,EAAA;;;AEhBxG,MAAO,YAAa,SAAQ,qBAAqB,CAAA;AAAvD,IAAA,WAAA,GAAA;;AACW,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAACD,kBAAgB,CAAC;AACrC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC;AAC3B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACrC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAChC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAEtD,QAAA,IAAA,CAAA,EAAE,GAAG,WAAW,CAAC,MAAM;QACvB,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,gDAAgD,CAAC;QACjF,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,sDAAsD,CAAC;AAC7F,QAAA,IAAA,CAAA,QAAQ,GAAG,mBAAmB,CAAC,OAAO;AACtC,QAAA,IAAA,CAAA,IAAI,GAAG,WAAW,CAAC,MAAM;QACzB,IAAA,CAAA,KAAK,GAAG,QAAQ;AAChB,QAAA,IAAA,CAAA,KAAK,GAAG,cAAc,CAAC,YAAY;AACnC,QAAA,IAAA,CAAA,QAAQ,GAAkB;AACxB,YAAA,OAAO,EAAE;SACV;IAkCH;AAjDW,IAAA,UAAU;AACV,IAAA,OAAO;AACP,IAAA,UAAU;AACV,IAAA,WAAW;AACX,IAAA,cAAc;AAavB,IAAA,UAAU,CAAC,KAAkB,EAAA;AAC3B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,SAAS,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC;QACvC,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAC/D,GAAG,CAAC,CAAC,IAAI,KAAI;YACX,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI;YAClE,IAAI,CAAC,WAAW,GAAG;AACjB,kBAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,2DAA2D,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;kBACvG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,kEAAkE,CAAC;AAC/F,YAAA,OAAO,IAAI;QACb,CAAC,CAAC,CACH;IACH;AAEA,IAAA,YAAY,CAAC,KAAkB,EAAA;AAC7B,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC;AAC1B,QAAA,OAAO,EAAE,CACP,CAAC,CAAC,SAAS,CAAC,WAAW;YACrB,SAAS,CAAC,WAAW,CAAC,YAAY;YAClC,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,cAAc,CAC/D;IACH;AAEA,IAAA,GAAG,CAAC,KAAkB,EAAA;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE;AACjC,YAAA,IAAI,EAAE;gBACJ,KAAK;gBACL,OAAO,EAAE,IAAI,CAAC;AACf;AACF,SAAA,CAAC;AACF,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC;IACjB;AACD;;ACpDK,MAAO,cAAe,SAAQ,qBAAqB,CAAA;AAAzD,IAAA,WAAA,GAAA;;AACW,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAACA,kBAAgB,CAAC;AACrC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAEzC,QAAA,IAAA,CAAA,EAAE,GAAG,WAAW,CAAC,QAAQ;QACzB,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,0DAA0D,CAAC;QAC3F,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,gEAAgE,CAAC;AACvG,QAAA,IAAA,CAAA,QAAQ,GAAG,mBAAmB,CAAC,OAAO;AACtC,QAAA,IAAA,CAAA,IAAI,GAAG,WAAW,CAAC,QAAQ;QAC3B,IAAA,CAAA,KAAK,GAAG,QAAQ;AAChB,QAAA,IAAA,CAAA,KAAK,GAAG,cAAc,CAAC,YAAY;AACnC,QAAA,IAAA,CAAA,QAAQ,GAAkB;AACxB,YAAA,KAAK,EAAE,CAAC,UAAU,CAAC,QAAQ;SAC5B;IAYH;AAxBW,IAAA,UAAU;AACV,IAAA,WAAW;AAapB,IAAA,YAAY,CAAC,SAAsB,EAAA;AACjC,QAAA,MAAM,cAAc,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;AACnG,QAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC;AAC1C,QAAA,OAAO,EAAE,CAAC,CAAC,cAAc,CAAC;IAC5B;AAEA,IAAA,GAAG,CAAC,SAAsB,EAAA;QACxB,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC;AACpF,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC;IACjB;AACD;;MChBY,cAAc,CAAA;AAH3B,IAAA,WAAA,GAAA;AAIW,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACpC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC;AAClB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC;QAEvC,IAAA,CAAA,kBAAkB,GAAgC,EAAE;AAsL7D,IAAA;AAzLC,IAAA,OAAO;AAKP;;;;AAIG;AACH,IAAA,eAAe,CAAC,OAA8C,EAAA;;AAE5D,QAAA,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;AACpB,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;gBACzB,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM;AACpD,YAAA,CAAC,CAAC;IACN;AAEA;;;;AAIG;AACH,IAAA,cAAc,CAAC,SAAmB,EAAA;;QAEhC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,OAAO,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAC3F;AAEA;;;;;AAKG;IACH,UAAU,CAAC,SAAsB,EAAE,OAAuB,EAAA;;;QAGxD,MAAM,UAAU,GAA0D,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO;aAChH,MAAM,CAAC,CAAC,MAAM,KACb,OAAO,EAAE;cACL,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO;kBAC3B,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACrC,kBAAE,OAAO,CAAC,OAAO,YAAY;sBACzB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACjC,sBAAE;cACJ,IAAI;aAET,GAAG,CAAC,CAAC,MAAc,KAClB,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,IAAI,CACjC,GAAG,CAAC,CAAC,UAAmB,MAAM;YAC5B,MAAM;YACN;SACD,CAAC,CAAC,CACJ,CACF;QAEH,OAAO,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAC9B,GAAG,CAAC,CAAC,GAA8C,KACjD,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,MAAM,CAAC,CACjF,EACD,SAAS,CAAC,CAAC,OAAiB,KAAK,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAChF;IACH;AAEA;;;;;AAKG;AACH,IAAA,mBAAmB,CAAC,OAAuB,EAAA;QACzC,IAAI,OAAO,GAAa,EAAE;AAE1B,QAAA,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAK;YACxC,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,MAAmB,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACzG,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,OAAO;IAChB;IAEA,iBAAiB,CAAC,YAAoB,EAAE,OAAuB,EAAA;QAC7D,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,MAAc,KAC7D,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,YAAY,CAAC,CAChD;IACH;IAEA,aAAa,CAAC,EAAU,EAAE,OAAuB,EAAA;QAC/C,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IAC7E;IAEA,cAAc,CAAC,GAAa,EAAE,OAAuB,EAAA;QACnD,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,MAAc,KAAK,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9F;AAEA;;;;;;AAMG;IACH,oBAAoB,CAAC,OAAiB,EAAE,SAAsB,EAAA;AAC5D,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC;QAEvC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAc,KAAI;AACpD,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC;AACtB,kBAAE,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,CAC/B,GAAG,CAAC,CAAC,QAAiB,KAAI;AACxB,oBAAA,MAAM,CAAC,QAAQ,GAAG,QAAQ;AAC1B,oBAAA,OAAO,MAAM;AACf,gBAAA,CAAC,CAAC;AAEN,kBAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;;AAGlD,YAAA,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE;AAC3B,gBAAA,OAAO,QAAQ,CAAC,IAAI,CAClB,SAAS,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAS,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,CACtG;YACH;AACA,YAAA,OAAO,QAAQ;AACjB,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,QAAQ,CAAC,cAAc,CAAC;IACjC;AAEA,IAAA,eAAe,CACb,OAAyB,EACzB,QAAkC,EAClC,aAAuC,EAAA;QAEvC,IAAI,OAAO,EAAE,CAAC,MAAM;AAClB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE;AACtC,gBAAA,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;AAC3B,gBAAA,UAAU,EAAE;;AAEb,aAAA,CAAC;QACJ,MAAM,KAAK,GAAG,EAAE;QAChB,MAAM,KAAK,GAAG,EAAE;QAEhB,UAAU,CAAC,MAAK;YACd,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,sBAAsB,CAAgB;AAE5E,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW;AACtC,YAAA,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY;AACxC,YAAA,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU;AACjC,YAAA,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW;AAElC,YAAA,IAAI,IAAI,GAAG,aAAa,CAAC,CAAC;AAC1B,YAAA,IAAI,GAAG,GAAG,aAAa,CAAC,CAAC;AACzB,YAAA,IAAI,IAAI,GAAG,WAAW,GAAG,OAAO,EAAE;AAChC,gBAAA,IAAI,GAAG,OAAO,GAAG,WAAW,GAAG,KAAK;YACtC;AACA,YAAA,IAAI,GAAG,GAAG,YAAY,GAAG,OAAO,EAAE;AAChC,gBAAA,GAAG,GAAG,OAAO,GAAG,YAAY,GAAG,KAAK;YACtC;AAEA,YAAA,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO;YAC/B,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CAAA,EAAG,IAAI,IAAI;YAC/B,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAA,EAAG,GAAG,IAAI;AAC/B,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;AAKG;IACH,sBAAsB,GAAA;QACpB,IAAI,CAAC,eAAe,CAAC;YACnB,EAAE,EAAE,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE;YAChD,EAAE,EAAE,EAAE,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE;YACpD,EAAE,EAAE,EAAE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE;YAC5C,EAAE,EAAE,EAAE,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS;AACzC,SAAA,CAAC;IACJ;IAEA,oBAAoB,CAAC,MAAc,EAAE,YAAoB,EAAA;QACvD,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,KAAK;QACjG,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,KAAK;AAC9F,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC;AACrC,cAAE,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY;cAChE,KAAK;AACT,QAAA,OAAO,YAAY,IAAI,WAAW,IAAI,cAAc;IACtD;+GA1LW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA,CAAA;;4FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCXY,oBAAoB,GAAG,IAAI,cAAc,CAAgB,gBAAgB;;ACHtF;;AAEG;;;;"}
@@ -62,10 +62,10 @@ class AppBarComponent {
62
62
  this.dialogElement?.nativeElement.close();
63
63
  }
64
64
  }
65
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: AppBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
66
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: AppBarComponent, isStandalone: true, selector: "yuv-app-bar", inputs: { menuIcon: { classPropertyName: "menuIcon", publicName: "menuIcon", isSignal: true, isRequired: false, transformFunction: null }, appTitle: { classPropertyName: "appTitle", publicName: "appTitle", isSignal: true, isRequired: false, transformFunction: null }, appTitleRoute: { classPropertyName: "appTitleRoute", publicName: "appTitleRoute", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "has-menu" }, queries: [{ propertyName: "appBarSideNav", first: true, predicate: ["appBarSideNav"], descendants: true, read: TemplateRef }, { propertyName: "appBarActions", first: true, predicate: ["appBarActions"], descendants: true, read: TemplateRef }, { propertyName: "appBarPrimaryActions", first: true, predicate: ["appBarPrimaryActions"], descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "dialogElement", first: true, predicate: ["dialogEl"], descendants: true, read: ElementRef }], ngImport: i0, template: "@if (!!appBarSideNav) {\n <button class=\"menuIcon\" (click)=\"toggleSideNav()\">\n <yuv-icon [svg]=\"menuIcon()\"></yuv-icon>\n </button>\n} @else {\n <a class=\"app-title\" [routerLink]=\"appTitleRoute()\">\n <yuv-icon [svg]=\"menuIcon()\"></yuv-icon>\n </a>\n}\n<a class=\"app-title\" [routerLink]=\"appTitleRoute()\">{{ appTitle() }}</a>\n\n<div class=\"primary-actions\">\n <ng-container *ngTemplateOutlet=\"appBarPrimaryActions\"></ng-container>\n</div>\n<div class=\"actions\">\n <ng-container *ngTemplateOutlet=\"appBarActions\"></ng-container>\n</div>\n\n<dialog #dialogEl (click)=\"onDialogClick($event)\">\n <section>\n <ng-container *ngTemplateOutlet=\"appBarSideNav\"></ng-container>\n </section>\n</dialog>\n", styles: [":host{--app-bar-icon-size: 24px;--app-bar-button-padding: var(--ymt-spacing-s);--app-bar-sidenav-margin-start: 0;display:flex;gap:var(--ymt-spacing-m);align-items:center;background-color:var(--ymt-surface-panel)}:host:not(.has-menu){min-height:calc(var(--app-bar-icon-size) + var(--app-bar-button-padding) * 2);padding-inline-start:var(--ymt-spacing-m)}:host:not(.has-menu) .menuIcon{display:none}:host:not(.has-menu) .sidenav{display:none}:host .menuIcon{border:0;padding:var(--app-bar-button-padding);flex:0 0 auto}:host a.app-title{display:flex;align-items:center;justify-content:center;color:var(--ymt-text-color);text-decoration:none;flex:0 0 auto;border-radius:2px}:host a.app-title:active,:host a.app-title:focus-visible{outline:1px solid var(--ymt-text-color-subtle);outline-offset:.25em}:host .primary-actions{flex:0;display:flex;margin-inline:var(--ymt-spacing-m)}:host .actions{flex:1;display:flex;margin-inline-end:var(--ymt-spacing-m);justify-content:flex-end}:host dialog{max-height:100%;width:max-content;height:100%;inset-inline-start:var(--app-bar-sidenav-margin-start);margin:0;padding:0;box-sizing:border-box;outline:0;border:0}:host dialog::backdrop{background-color:var(--ymt-surface);opacity:.8;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}:host dialog>section{height:100%;overflow-y:auto;background-color:var(--ymt-surface);color:var(--ymt-text-color);border-inline-end:1px solid var(--ymt-outline-variant)}:host dialog[open]{animation:dialogAppear .2s ease-in-out}@keyframes dialogAppear{0%{opacity:0;transform:translate(-100%)}to{opacity:1;transform:translate(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: YuvIconComponent, selector: "yuv-icon", inputs: ["label", "svg", "svgSrc"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
65
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: AppBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
66
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: AppBarComponent, isStandalone: true, selector: "yuv-app-bar", inputs: { menuIcon: { classPropertyName: "menuIcon", publicName: "menuIcon", isSignal: true, isRequired: false, transformFunction: null }, appTitle: { classPropertyName: "appTitle", publicName: "appTitle", isSignal: true, isRequired: false, transformFunction: null }, appTitleRoute: { classPropertyName: "appTitleRoute", publicName: "appTitleRoute", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "has-menu" }, queries: [{ propertyName: "appBarSideNav", first: true, predicate: ["appBarSideNav"], descendants: true, read: TemplateRef }, { propertyName: "appBarActions", first: true, predicate: ["appBarActions"], descendants: true, read: TemplateRef }, { propertyName: "appBarPrimaryActions", first: true, predicate: ["appBarPrimaryActions"], descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "dialogElement", first: true, predicate: ["dialogEl"], descendants: true, read: ElementRef }], ngImport: i0, template: "@if (!!appBarSideNav) {\n <button class=\"menuIcon\" (click)=\"toggleSideNav()\">\n <yuv-icon [svg]=\"menuIcon()\"></yuv-icon>\n </button>\n} @else {\n <a class=\"app-title\" [routerLink]=\"appTitleRoute()\">\n <yuv-icon [svg]=\"menuIcon()\"></yuv-icon>\n </a>\n}\n<a class=\"app-title\" [routerLink]=\"appTitleRoute()\">{{ appTitle() }}</a>\n\n<div class=\"primary-actions\">\n <ng-container *ngTemplateOutlet=\"appBarPrimaryActions\"></ng-container>\n</div>\n<div class=\"actions\">\n <ng-container *ngTemplateOutlet=\"appBarActions\"></ng-container>\n</div>\n\n<dialog #dialogEl (click)=\"onDialogClick($event)\">\n <section>\n <ng-container *ngTemplateOutlet=\"appBarSideNav\"></ng-container>\n </section>\n</dialog>\n", styles: [":host{--app-bar-icon-size: 24px;--app-bar-button-padding: var(--ymt-spacing-s);--app-bar-sidenav-margin-start: 0;display:flex;gap:var(--ymt-spacing-m);align-items:center;background-color:var(--ymt-surface-panel)}:host:not(.has-menu){min-height:calc(var(--app-bar-icon-size) + var(--app-bar-button-padding) * 2);padding-inline-start:var(--ymt-spacing-m)}:host:not(.has-menu) .menuIcon{display:none}:host:not(.has-menu) .sidenav{display:none}:host .menuIcon{border:0;padding:var(--app-bar-button-padding);flex:0 0 auto}:host a.app-title{display:flex;align-items:center;justify-content:center;color:var(--ymt-text-color);text-decoration:none;flex:0 0 auto;border-radius:2px}:host a.app-title:active,:host a.app-title:focus-visible{outline:1px solid var(--ymt-text-color-subtle);outline-offset:.25em}:host .primary-actions{flex:0;display:flex;margin-inline:var(--ymt-spacing-m)}:host .actions{flex:1;display:flex;margin-inline-end:var(--ymt-spacing-m);justify-content:flex-end}:host dialog{max-height:100%;width:max-content;height:100%;inset-inline-start:var(--app-bar-sidenav-margin-start);margin:0;padding:0;box-sizing:border-box;outline:0;border:0}:host dialog::backdrop{background-color:var(--ymt-surface);opacity:.8;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}:host dialog>section{height:100%;overflow-y:auto;background-color:var(--ymt-surface);color:var(--ymt-text-color);border-inline-end:1px solid var(--ymt-outline-variant)}:host dialog[open]{animation:dialogAppear .2s ease-in-out}@keyframes dialogAppear{0%{opacity:0;transform:translate(-100%)}to{opacity:1;transform:translate(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: YuvIconComponent, selector: "yuv-icon", inputs: ["label", "svg", "svgSrc"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
67
67
  }
68
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: AppBarComponent, decorators: [{
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: AppBarComponent, decorators: [{
69
69
  type: Component,
70
70
  args: [{ selector: 'yuv-app-bar', standalone: true, imports: [CommonModule, YuvIconComponent, RouterModule], host: {
71
71
  class: 'has-menu'
@@ -22,14 +22,21 @@ class BadgeChipComponent {
22
22
  ? this.#translate.instant(current.labelKey)
23
23
  : tooltip;
24
24
  }, ...(ngDevMode ? [{ debugName: "tooltip" }] : /* istanbul ignore next */ []));
25
+ /**
26
+ * Accessible name for the icon-only variant. Without a label the chip renders nothing
27
+ * but an inert icon, so assistive technology has no name to announce — the tooltip is
28
+ * a description, not a name, and it is mouse-only anyway. When the label is visible it
29
+ * already names the chip, so no override is set.
30
+ */
31
+ this.ariaLabel = computed(() => (this.showLabel() ? null : this.#translate.instant(this.badge().labelKey)), ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
25
32
  }
26
33
  #translate;
27
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: BadgeChipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
28
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: BadgeChipComponent, isStandalone: true, selector: "yuv-badge-chip", inputs: { badge: { classPropertyName: "badge", publicName: "badge", isSignal: true, isRequired: true, transformFunction: null }, showLabel: { classPropertyName: "showLabel", publicName: "showLabel", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@let b = badge();\n\n<ymt-badge [severity]=\"b.severity ?? 'neutral'\" [matTooltip]=\"tooltip()\" class=\"badge-chip\">\n @if (b.svgIcon) {\n <mat-icon [svgIcon]=\"b.icon\" inert=\"true\" />\n } @else {\n <mat-icon inert=\"true\">{{ b.icon }}</mat-icon>\n }\n @if (showLabel()) {\n <span>{{ b.labelKey | translate }}</span>\n }\n</ymt-badge>\n", styles: [":host{display:flex}:host .badge-chip{gap:var(--ymt-spacing-xs);align-items:center;justify-content:center;padding:var(--ymt-spacing-xs);height:var(--ymt-spacing-xl)}:host .badge-chip mat-icon{width:var(--ymt-spacing-l);height:var(--ymt-spacing-m);font-size:var(--ymt-font-title-medium-size);line-height:var(--ymt-spacing-m)}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: YmtBadge, selector: "ymt-badge", inputs: ["severity", "outline", "aura"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
34
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: BadgeChipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
35
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: BadgeChipComponent, isStandalone: true, selector: "yuv-badge-chip", inputs: { badge: { classPropertyName: "badge", publicName: "badge", isSignal: true, isRequired: true, transformFunction: null }, showLabel: { classPropertyName: "showLabel", publicName: "showLabel", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@let b = badge();\n\n<ymt-badge\n [severity]=\"b.severity ?? 'neutral'\"\n [matTooltip]=\"tooltip()\"\n class=\"badge-chip\"\n [attr.role]=\"showLabel() ? null : 'img'\"\n [attr.aria-label]=\"ariaLabel()\"\n>\n @if (b.svgIcon) {\n <mat-icon [svgIcon]=\"b.icon\" inert=\"true\" />\n } @else {\n <mat-icon inert=\"true\">{{ b.icon }}</mat-icon>\n }\n @if (showLabel()) {\n <span>{{ b.labelKey | translate }}</span>\n }\n</ymt-badge>\n", styles: [":host{display:flex}:host .badge-chip{gap:var(--ymt-spacing-xs);align-items:center;justify-content:center;padding:var(--ymt-spacing-xs);height:var(--ymt-spacing-xl)}:host .badge-chip mat-icon{width:var(--ymt-spacing-l);height:var(--ymt-spacing-m);font-size:var(--ymt-font-title-medium-size);line-height:var(--ymt-spacing-m)}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: YmtBadge, selector: "ymt-badge", inputs: ["severity", "outline", "aura"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
29
36
  }
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: BadgeChipComponent, decorators: [{
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: BadgeChipComponent, decorators: [{
31
38
  type: Component,
32
- args: [{ selector: 'yuv-badge-chip', imports: [MatIconModule, MatTooltipModule, YmtBadge, TranslatePipe], template: "@let b = badge();\n\n<ymt-badge [severity]=\"b.severity ?? 'neutral'\" [matTooltip]=\"tooltip()\" class=\"badge-chip\">\n @if (b.svgIcon) {\n <mat-icon [svgIcon]=\"b.icon\" inert=\"true\" />\n } @else {\n <mat-icon inert=\"true\">{{ b.icon }}</mat-icon>\n }\n @if (showLabel()) {\n <span>{{ b.labelKey | translate }}</span>\n }\n</ymt-badge>\n", styles: [":host{display:flex}:host .badge-chip{gap:var(--ymt-spacing-xs);align-items:center;justify-content:center;padding:var(--ymt-spacing-xs);height:var(--ymt-spacing-xl)}:host .badge-chip mat-icon{width:var(--ymt-spacing-l);height:var(--ymt-spacing-m);font-size:var(--ymt-font-title-medium-size);line-height:var(--ymt-spacing-m)}\n"] }]
39
+ args: [{ selector: 'yuv-badge-chip', imports: [MatIconModule, MatTooltipModule, YmtBadge, TranslatePipe], template: "@let b = badge();\n\n<ymt-badge\n [severity]=\"b.severity ?? 'neutral'\"\n [matTooltip]=\"tooltip()\"\n class=\"badge-chip\"\n [attr.role]=\"showLabel() ? null : 'img'\"\n [attr.aria-label]=\"ariaLabel()\"\n>\n @if (b.svgIcon) {\n <mat-icon [svgIcon]=\"b.icon\" inert=\"true\" />\n } @else {\n <mat-icon inert=\"true\">{{ b.icon }}</mat-icon>\n }\n @if (showLabel()) {\n <span>{{ b.labelKey | translate }}</span>\n }\n</ymt-badge>\n", styles: [":host{display:flex}:host .badge-chip{gap:var(--ymt-spacing-xs);align-items:center;justify-content:center;padding:var(--ymt-spacing-xs);height:var(--ymt-spacing-xl)}:host .badge-chip mat-icon{width:var(--ymt-spacing-l);height:var(--ymt-spacing-m);font-size:var(--ymt-font-title-medium-size);line-height:var(--ymt-spacing-m)}\n"] }]
33
40
  }], propDecorators: { badge: [{ type: i0.Input, args: [{ isSignal: true, alias: "badge", required: true }] }], showLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLabel", required: false }] }] } });
34
41
 
35
42
  /**
@@ -327,10 +334,10 @@ class BadgeRegistryService {
327
334
  return evaluateRule(badge.rule, dmsObject);
328
335
  return false;
329
336
  }
330
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: BadgeRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
331
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: BadgeRegistryService, providedIn: 'root' }); }
337
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: BadgeRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
338
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: BadgeRegistryService, providedIn: 'root' }); }
332
339
  }
333
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: BadgeRegistryService, decorators: [{
340
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: BadgeRegistryService, decorators: [{
334
341
  type: Injectable,
335
342
  args: [{ providedIn: 'root' }]
336
343
  }] });
@@ -346,10 +353,10 @@ class BadgeSelectComponent {
346
353
  .filter((badge) => badge.variantOf === undefined), ...(ngDevMode ? [{ debugName: "badges" }] : /* istanbul ignore next */ []));
347
354
  }
348
355
  #registry;
349
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: BadgeSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
350
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: BadgeSelectComponent, isStandalone: true, selector: "yuv-tile-badge-select", inputs: { selectedBadgeIds: { classPropertyName: "selectedBadgeIds", publicName: "selectedBadgeIds", isSignal: true, isRequired: false, transformFunction: null }, bucket: { classPropertyName: "bucket", publicName: "bucket", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { badgeSelect: "badgeSelect" }, ngImport: i0, template: "<div class=\"badges\">\n @for (b of badges(); track b.id) {\n <button type=\"button\" [ngClass]=\"{ selected: selectedBadgeIds().includes(b.id) }\" (click)=\"badgeSelect.emit(b)\">\n @if (b.svgIcon) {\n <mat-icon [svgIcon]=\"b.icon\" inert=\"true\" />\n } @else {\n <mat-icon inert=\"true\">{{ b.icon }}</mat-icon>\n }\n <span>{{ b.labelKey | translate }}</span>\n </button>\n } @empty {\n <span class=\"empty\">\n {{ 'yuv.badge.empty.selection' | translate }}\n </span>\n }\n</div>\n", styles: [":host .badges{display:flex;flex-wrap:wrap;gap:var(--ymt-spacing-xs)}:host .badges button{border:0;display:inline-flex;gap:var(--ymt-spacing-xs);padding:var(--ymt-spacing-2xs) var(--ymt-spacing-xs);align-items:center;border-radius:var(--ymt-corner-s);background-color:var(--mat-sys-secondary-container);color:var(--mat-sys-on-secondary-container);cursor:pointer}:host .badges button.selected{background-color:var(--ymt-primary-container);color:var(--ymt-on-primary-container)}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
356
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: BadgeSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
357
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: BadgeSelectComponent, isStandalone: true, selector: "yuv-tile-badge-select", inputs: { selectedBadgeIds: { classPropertyName: "selectedBadgeIds", publicName: "selectedBadgeIds", isSignal: true, isRequired: false, transformFunction: null }, bucket: { classPropertyName: "bucket", publicName: "bucket", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { badgeSelect: "badgeSelect" }, ngImport: i0, template: "<div class=\"badges\">\n @for (b of badges(); track b.id) {\n <button type=\"button\" [ngClass]=\"{ selected: selectedBadgeIds().includes(b.id) }\" (click)=\"badgeSelect.emit(b)\">\n @if (b.svgIcon) {\n <mat-icon [svgIcon]=\"b.icon\" inert=\"true\" />\n } @else {\n <mat-icon inert=\"true\">{{ b.icon }}</mat-icon>\n }\n <span>{{ b.labelKey | translate }}</span>\n </button>\n } @empty {\n <span class=\"empty\">\n {{ 'yuv.badge.empty.selection' | translate }}\n </span>\n }\n</div>\n", styles: [":host .badges{display:flex;flex-wrap:wrap;gap:var(--ymt-spacing-xs)}:host .badges button{border:0;display:inline-flex;gap:var(--ymt-spacing-xs);padding:var(--ymt-spacing-2xs) var(--ymt-spacing-xs);align-items:center;border-radius:var(--ymt-corner-s);background-color:var(--mat-sys-secondary-container);color:var(--mat-sys-on-secondary-container);cursor:pointer}:host .badges button.selected{background-color:var(--ymt-primary-container);color:var(--ymt-on-primary-container)}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
351
358
  }
352
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: BadgeSelectComponent, decorators: [{
359
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: BadgeSelectComponent, decorators: [{
353
360
  type: Component,
354
361
  args: [{ selector: 'yuv-tile-badge-select', imports: [NgClass, MatIconModule, TranslateModule], template: "<div class=\"badges\">\n @for (b of badges(); track b.id) {\n <button type=\"button\" [ngClass]=\"{ selected: selectedBadgeIds().includes(b.id) }\" (click)=\"badgeSelect.emit(b)\">\n @if (b.svgIcon) {\n <mat-icon [svgIcon]=\"b.icon\" inert=\"true\" />\n } @else {\n <mat-icon inert=\"true\">{{ b.icon }}</mat-icon>\n }\n <span>{{ b.labelKey | translate }}</span>\n </button>\n } @empty {\n <span class=\"empty\">\n {{ 'yuv.badge.empty.selection' | translate }}\n </span>\n }\n</div>\n", styles: [":host .badges{display:flex;flex-wrap:wrap;gap:var(--ymt-spacing-xs)}:host .badges button{border:0;display:inline-flex;gap:var(--ymt-spacing-xs);padding:var(--ymt-spacing-2xs) var(--ymt-spacing-xs);align-items:center;border-radius:var(--ymt-corner-s);background-color:var(--mat-sys-secondary-container);color:var(--mat-sys-on-secondary-container);cursor:pointer}:host .badges button.selected{background-color:var(--ymt-primary-container);color:var(--ymt-on-primary-container)}\n"] }]
355
362
  }], propDecorators: { selectedBadgeIds: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedBadgeIds", required: false }] }], bucket: [{ type: i0.Input, args: [{ isSignal: true, alias: "bucket", required: false }] }], badgeSelect: [{ type: i0.Output, args: ["badgeSelect"] }] } });
@@ -366,10 +373,10 @@ class TileBadgesComponent {
366
373
  }), ...(ngDevMode ? [{ debugName: "activeBadges" }] : /* istanbul ignore next */ []));
367
374
  }
368
375
  #registry;
369
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: TileBadgesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
370
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: TileBadgesComponent, isStandalone: true, selector: "yuv-tile-badges", inputs: { dmsObject: { classPropertyName: "dmsObject", publicName: "dmsObject", isSignal: true, isRequired: true, transformFunction: null }, badgeIds: { classPropertyName: "badgeIds", publicName: "badgeIds", isSignal: true, isRequired: false, transformFunction: null }, bucket: { classPropertyName: "bucket", publicName: "bucket", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@for (b of activeBadges(); track $index) {\n <yuv-badge-chip [badge]=\"b\" />\n}\n", styles: [":host{display:inline-flex;gap:var(--ymt-spacing-2xs);flex-wrap:wrap}\n"], dependencies: [{ kind: "component", type: BadgeChipComponent, selector: "yuv-badge-chip", inputs: ["badge", "showLabel"] }] }); }
376
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: TileBadgesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
377
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: TileBadgesComponent, isStandalone: true, selector: "yuv-tile-badges", inputs: { dmsObject: { classPropertyName: "dmsObject", publicName: "dmsObject", isSignal: true, isRequired: true, transformFunction: null }, badgeIds: { classPropertyName: "badgeIds", publicName: "badgeIds", isSignal: true, isRequired: false, transformFunction: null }, bucket: { classPropertyName: "bucket", publicName: "bucket", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@for (b of activeBadges(); track $index) {\n <yuv-badge-chip [badge]=\"b\" />\n}\n", styles: [":host{display:inline-flex;gap:var(--ymt-spacing-2xs);flex-wrap:wrap}\n"], dependencies: [{ kind: "component", type: BadgeChipComponent, selector: "yuv-badge-chip", inputs: ["badge", "showLabel"] }] }); }
371
378
  }
372
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: TileBadgesComponent, decorators: [{
379
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: TileBadgesComponent, decorators: [{
373
380
  type: Component,
374
381
  args: [{ selector: 'yuv-tile-badges', imports: [BadgeChipComponent], template: "@for (b of activeBadges(); track $index) {\n <yuv-badge-chip [badge]=\"b\" />\n}\n", styles: [":host{display:inline-flex;gap:var(--ymt-spacing-2xs);flex-wrap:wrap}\n"] }]
375
382
  }], propDecorators: { dmsObject: [{ type: i0.Input, args: [{ isSignal: true, alias: "dmsObject", required: true }] }], badgeIds: [{ type: i0.Input, args: [{ isSignal: true, alias: "badgeIds", required: false }] }], bucket: [{ type: i0.Input, args: [{ isSignal: true, alias: "bucket", required: false }] }] } });