@yuuvis/client-framework 2.0.0-beta.5 → 2.0.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 (60) hide show
  1. package/fesm2022/yuuvis-client-framework-actions.mjs +16 -16
  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-app-bar.mjs.map +1 -1
  5. package/fesm2022/yuuvis-client-framework-autocomplete.mjs +7 -7
  6. package/fesm2022/yuuvis-client-framework-autocomplete.mjs.map +1 -1
  7. package/fesm2022/yuuvis-client-framework-clipboard.mjs +6 -6
  8. package/fesm2022/yuuvis-client-framework-clipboard.mjs.map +1 -1
  9. package/fesm2022/yuuvis-client-framework-common.mjs +66 -74
  10. package/fesm2022/yuuvis-client-framework-common.mjs.map +1 -1
  11. package/fesm2022/yuuvis-client-framework-datepicker.mjs +33 -32
  12. package/fesm2022/yuuvis-client-framework-datepicker.mjs.map +1 -1
  13. package/fesm2022/yuuvis-client-framework-forms.mjs +48 -48
  14. package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
  15. package/fesm2022/yuuvis-client-framework-icons.mjs +9 -9
  16. package/fesm2022/yuuvis-client-framework-icons.mjs.map +1 -1
  17. package/fesm2022/yuuvis-client-framework-list.mjs +31 -27
  18. package/fesm2022/yuuvis-client-framework-list.mjs.map +1 -1
  19. package/fesm2022/yuuvis-client-framework-master-details.mjs +7 -7
  20. package/fesm2022/yuuvis-client-framework-master-details.mjs.map +1 -1
  21. package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs +7 -7
  22. package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs.map +1 -1
  23. package/fesm2022/yuuvis-client-framework-metadata-form.mjs +15 -15
  24. package/fesm2022/yuuvis-client-framework-metadata-form.mjs.map +1 -1
  25. package/fesm2022/yuuvis-client-framework-object-details.mjs +26 -26
  26. package/fesm2022/yuuvis-client-framework-object-details.mjs.map +1 -1
  27. package/fesm2022/yuuvis-client-framework-object-flavor.mjs +24 -24
  28. package/fesm2022/yuuvis-client-framework-object-flavor.mjs.map +1 -1
  29. package/fesm2022/yuuvis-client-framework-object-form.mjs +28 -28
  30. package/fesm2022/yuuvis-client-framework-object-form.mjs.map +1 -1
  31. package/fesm2022/yuuvis-client-framework-object-preview.mjs +10 -10
  32. package/fesm2022/yuuvis-client-framework-object-preview.mjs.map +1 -1
  33. package/fesm2022/yuuvis-client-framework-object-summary.mjs +23 -23
  34. package/fesm2022/yuuvis-client-framework-object-summary.mjs.map +1 -1
  35. package/fesm2022/yuuvis-client-framework-overflow-menu.mjs +7 -7
  36. package/fesm2022/yuuvis-client-framework-overflow-menu.mjs.map +1 -1
  37. package/fesm2022/yuuvis-client-framework-pagination.mjs +3 -3
  38. package/fesm2022/yuuvis-client-framework-pagination.mjs.map +1 -1
  39. package/fesm2022/yuuvis-client-framework-panel.mjs +3 -3
  40. package/fesm2022/yuuvis-client-framework-panel.mjs.map +1 -1
  41. package/fesm2022/yuuvis-client-framework-popout.mjs +7 -7
  42. package/fesm2022/yuuvis-client-framework-popout.mjs.map +1 -1
  43. package/fesm2022/yuuvis-client-framework-renderer.mjs +34 -34
  44. package/fesm2022/yuuvis-client-framework-renderer.mjs.map +1 -1
  45. package/fesm2022/yuuvis-client-framework-sequence-list.mjs +3 -3
  46. package/fesm2022/yuuvis-client-framework-sequence-list.mjs.map +1 -1
  47. package/fesm2022/yuuvis-client-framework-simple-search.mjs +3 -3
  48. package/fesm2022/yuuvis-client-framework-simple-search.mjs.map +1 -1
  49. package/fesm2022/yuuvis-client-framework-split-view.mjs +10 -10
  50. package/fesm2022/yuuvis-client-framework-split-view.mjs.map +1 -1
  51. package/fesm2022/yuuvis-client-framework-tile-list.mjs +49 -41
  52. package/fesm2022/yuuvis-client-framework-tile-list.mjs.map +1 -1
  53. package/fesm2022/yuuvis-client-framework-tree.mjs +9 -9
  54. package/fesm2022/yuuvis-client-framework-tree.mjs.map +1 -1
  55. package/fesm2022/yuuvis-client-framework-upload-progress.mjs +6 -6
  56. package/fesm2022/yuuvis-client-framework-upload-progress.mjs.map +1 -1
  57. package/fesm2022/yuuvis-client-framework.mjs +4 -4
  58. package/fesm2022/yuuvis-client-framework.mjs.map +1 -1
  59. package/package.json +5 -5
  60. package/tile-list/lib/tile-list/tile-list.component.d.ts +2 -0
@@ -10,20 +10,20 @@ import { MatIconModule, MatIconRegistry } from '@angular/material/icon';
10
10
  import { ClipboardService, TranslateService, DmsService, TranslateModule as TranslateModule$1, RetentionService, SystemType, Utils } from '@yuuvis/client-core';
11
11
  import { of, map, forkJoin } from 'rxjs';
12
12
  import { DialogComponent } from '@yuuvis/client-framework/common';
13
- import * as i3 from '@angular/material/button';
14
13
  import { MatButtonModule } from '@angular/material/button';
15
14
  import { MatProgressBar } from '@angular/material/progress-bar';
16
- import * as i3$1 from '@angular/cdk/a11y';
15
+ import { YmtButtonDirective } from '@yuuvis/material';
16
+ import * as i3 from '@angular/cdk/a11y';
17
17
  import { A11yModule } from '@angular/cdk/a11y';
18
18
  import * as i2$1 from '@yuuvis/client-framework/list';
19
19
  import { YuvListModule } from '@yuuvis/client-framework/list';
20
20
 
21
21
  class ActionsModule {
22
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ActionsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
23
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.1", ngImport: i0, type: ActionsModule, imports: [CommonModule, TranslateModule] }); }
24
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ActionsModule, imports: [CommonModule, TranslateModule] }); }
22
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: ActionsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
23
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.12", ngImport: i0, type: ActionsModule, imports: [CommonModule, TranslateModule] }); }
24
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: ActionsModule, imports: [CommonModule, TranslateModule] }); }
25
25
  }
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ActionsModule, decorators: [{
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: ActionsModule, decorators: [{
27
27
  type: NgModule,
28
28
  args: [{
29
29
  imports: [CommonModule, TranslateModule]
@@ -165,12 +165,12 @@ class DeleteComponent {
165
165
  cancel() {
166
166
  this.#dialogRef.close();
167
167
  }
168
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: DeleteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
169
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", type: DeleteComponent, isStandalone: true, selector: "yuv-delete", ngImport: i0, template: "<yuv-dialog [headertitel]=\"'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 mat-stroked-button [disabled]=\"deleting\" class=\"secondary\" (click)=\"cancel()\">\n {{ 'yuv.action-menu.action.delete.dms.object.confirm.cancel' | translate }}\n </button>\n\n <button mat-flat-button [disabled]=\"deleting() || !!errors().length\" class=\"primary\" (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.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TranslateModule$1 }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: DialogComponent, selector: "yuv-dialog", inputs: ["headertitel"] }, { kind: "component", type: MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }] }); }
168
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: DeleteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
169
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.12", type: DeleteComponent, isStandalone: true, selector: "yuv-delete", ngImport: i0, template: "<yuv-dialog [headertitel]=\"'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.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TranslateModule$1 }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: DialogComponent, selector: "yuv-dialog", inputs: ["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"] }] }); }
170
170
  }
171
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: DeleteComponent, decorators: [{
171
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: DeleteComponent, decorators: [{
172
172
  type: Component,
173
- args: [{ selector: 'yuv-delete', standalone: true, imports: [CommonModule, TranslateModule$1, MatButtonModule, DialogComponent, MatProgressBar], template: "<yuv-dialog [headertitel]=\"'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 mat-stroked-button [disabled]=\"deleting\" class=\"secondary\" (click)=\"cancel()\">\n {{ 'yuv.action-menu.action.delete.dms.object.confirm.cancel' | translate }}\n </button>\n\n <button mat-flat-button [disabled]=\"deleting() || !!errors().length\" class=\"primary\" (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"] }]
173
+ args: [{ selector: 'yuv-delete', standalone: true, imports: [CommonModule, TranslateModule$1, MatButtonModule, DialogComponent, MatProgressBar, YmtButtonDirective], template: "<yuv-dialog [headertitel]=\"'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"] }]
174
174
  }] });
175
175
 
176
176
  class DeleteAction extends AbstractContextAction {
@@ -245,10 +245,10 @@ class ContextmenuComponent {
245
245
  this.oRef?.close();
246
246
  this.callback(this.actions()[index[0]]);
247
247
  }
248
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ContextmenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
249
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", type: ContextmenuComponent, isStandalone: true, selector: "yuv-contextmenu", ngImport: i0, template: "<yuv-list (itemSelect)=\"onItemSelect($event)\" cdkTrapFocus>\n @for (a of actions(); track a.id) {\n <div yuvListItem>\n <mat-icon>{{ a.icon }}</mat-icon> {{ a.label }}\n </div>\n }\n</yuv-list>\n", styles: [":host{--contextmenu-item-padding: var(--ymt-spacing-xs);--contextmenu-item-icon-size: 20px}:host [yuvListItem]{cursor:pointer;border-width:0 0 1px 0;display:flex;align-items:center;padding:var(--contextmenu-item-padding);gap:calc(var(--contextmenu-item-padding) * 1.5)}:host [yuvListItem]:hover,:host [yuvListItem][aria-current=true]{background-color:var(--ymt-focus-background)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: YuvListModule }, { kind: "component", type: i2$1.ListComponent, selector: "yuv-list", inputs: ["multiselect", "selfHandleSelection", "disableSelection"], outputs: ["itemSelect", "itemFocus"] }, { kind: "directive", type: i2$1.ListItemDirective, selector: "[yuvListItem]", inputs: ["disabled", "active", "selected"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i3$1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }] }); }
248
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: ContextmenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
249
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.12", type: ContextmenuComponent, isStandalone: true, selector: "yuv-contextmenu", ngImport: i0, template: "<yuv-list (itemSelect)=\"onItemSelect($event)\" cdkTrapFocus>\n @for (a of actions(); track a.id) {\n <div yuvListItem>\n <mat-icon>{{ a.icon }}</mat-icon> {{ a.label }}\n </div>\n }\n</yuv-list>\n", styles: [":host{--contextmenu-item-padding: var(--ymt-spacing-xs);--contextmenu-item-icon-size: 20px}:host [yuvListItem]{cursor:pointer;border-width:0 0 1px 0;display:flex;align-items:center;padding:var(--contextmenu-item-padding);gap:calc(var(--contextmenu-item-padding) * 1.5)}:host [yuvListItem]:hover,:host [yuvListItem][aria-current=true]{background-color:var(--ymt-focus-background)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: YuvListModule }, { kind: "component", type: i2$1.ListComponent, selector: "yuv-list", inputs: ["multiselect", "selfHandleSelection", "disableSelection"], outputs: ["itemSelect", "itemFocus"] }, { kind: "directive", type: i2$1.ListItemDirective, selector: "[yuvListItem]", inputs: ["disabled", "active", "selected"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i3.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }] }); }
250
250
  }
251
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ContextmenuComponent, decorators: [{
251
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: ContextmenuComponent, decorators: [{
252
252
  type: Component,
253
253
  args: [{ selector: 'yuv-contextmenu', standalone: true, imports: [CommonModule, MatIconModule, YuvListModule, A11yModule], template: "<yuv-list (itemSelect)=\"onItemSelect($event)\" cdkTrapFocus>\n @for (a of actions(); track a.id) {\n <div yuvListItem>\n <mat-icon>{{ a.icon }}</mat-icon> {{ a.label }}\n </div>\n }\n</yuv-list>\n", styles: [":host{--contextmenu-item-padding: var(--ymt-spacing-xs);--contextmenu-item-icon-size: 20px}:host [yuvListItem]{cursor:pointer;border-width:0 0 1px 0;display:flex;align-items:center;padding:var(--contextmenu-item-padding);gap:calc(var(--contextmenu-item-padding) * 1.5)}:host [yuvListItem]:hover,:host [yuvListItem][aria-current=true]{background-color:var(--ymt-focus-background)}\n"] }]
254
254
  }] });
@@ -351,10 +351,10 @@ class ActionsService {
351
351
  _getDefaulActions(context) {
352
352
  return [new DeleteAction(context), new DownloadAction(context), new CopyAction(context), new CutAction(context)];
353
353
  }
354
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ActionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
355
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ActionsService, providedIn: 'root' }); }
354
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: ActionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
355
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: ActionsService, providedIn: 'root' }); }
356
356
  }
357
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ActionsService, decorators: [{
357
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: ActionsService, decorators: [{
358
358
  type: Injectable,
359
359
  args: [{
360
360
  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/actions.icon.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions.interface.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/components/contextmenu/contextmenu.component.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/components/contextmenu/contextmenu.component.html","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions.service.ts","../../../../../libs/yuuvis/client-framework/actions/src/yuuvis-client-framework-actions.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@NgModule({\n imports: [CommonModule, TranslateModule]\n})\nexport class ActionsModule {}\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 * @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\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\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","import { inject } from '@angular/core';\nimport { ClipboardService, DmsObject, TranslateService } from '@yuuvis/client-core';\nimport { Observable, of } from 'rxjs';\nimport { ACTION_ICON } from '../../actions.icon';\nimport { AbstractContextAction, Action, ActionSupport, BASE_ACTION, SelectionRange } from '../../actions.interface';\n\nexport class CopyAction extends AbstractContextAction implements Action {\n private clipboardService = inject(ClipboardService);\n private 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 = 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[]) {\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 { ACTION_ICON } from '../../actions.icon';\nimport { AbstractContextAction, Action, ActionSupport, BASE_ACTION, SelectionRange } from '../../actions.interface';\n\nexport class CutAction extends AbstractContextAction implements Action {\n private clipboardService = inject(ClipboardService);\n private 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 = 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[]) {\n return of(items.length > 0 && items.every((item) => item.permissions?.writeContent && item.permissions?.writeIndexData && item.permissions?.deleteObject));\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 { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { DmsObject, DmsService, ObjectDeleteError, ObjectDeleteResult, TranslateModule, TranslateService } from '@yuuvis/client-core';\nimport { ActionContext } from '../../../actions.interface';\nimport { DialogComponent } from '@yuuvis/client-framework/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatProgressBar } from '@angular/material/progress-bar';\n\n/**\n * @ignore\n */\n\n@Component({\n selector: 'yuv-delete',\n standalone: true,\n imports: [CommonModule, TranslateModule, MatButtonModule, DialogComponent, MatProgressBar],\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 [headertitel]=\"'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 mat-stroked-button [disabled]=\"deleting\" class=\"secondary\" (click)=\"cancel()\">\n {{ 'yuv.action-menu.action.delete.dms.object.confirm.cancel' | translate }}\n </button>\n\n <button mat-flat-button [disabled]=\"deleting() || !!errors().length\" class=\"primary\" (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, RetentionService, TranslateService } from '@yuuvis/client-core';\nimport { Observable, of } from 'rxjs';\nimport { ACTION_ICON } from '../../actions.icon';\nimport { AbstractContextAction, Action, ActionSupport, BASE_ACTION, SelectionRange } from '../../actions.interface';\nimport { DeleteComponent } from './delete/delete.component';\n\nexport class DeleteAction extends AbstractContextAction implements Action {\n private translate = inject(TranslateService);\n #dialog = inject(MatDialog);\n private retention = inject(RetentionService);\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 = 8;\n icon = ACTION_ICON.delete;\n group = 'common';\n range = SelectionRange.MULTI_SELECT;\n supports: ActionSupport = {\n pattern: '*'\n };\n\n isExecutable(items: DmsObject[]) {\n const e = items[0];\n return of(e && !!e.permissions && e.permissions.deleteObject && !this.retention.getRetentionState(e).underRetention);\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 { ACTION_ICON } from '../../actions.icon';\nimport { AbstractContextAction, Action, ActionSupport, BASE_ACTION, SelectionRange } from '../../actions.interface';\n\nexport class DownloadAction extends AbstractContextAction implements Action {\n private translate = inject(TranslateService);\n private 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 = 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[]) {\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 { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, Signal } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { YuvListModule } from '@yuuvis/client-framework/list';\nimport { Action } from '../../actions.interface';\n\n@Component({\n selector: 'yuv-contextmenu',\n standalone: true,\n imports: [CommonModule, MatIconModule, YuvListModule, A11yModule],\n templateUrl: './contextmenu.component.html',\n styleUrl: './contextmenu.component.scss'\n})\nexport class ContextmenuComponent {\n oRef = inject(MatDialogRef);\n data = inject(MAT_DIALOG_DATA);\n\n actions: Signal<Action[]> = this.data.actions;\n callback: (action: Action) => void = this.data.callback;\n\n onItemSelect(index: number[]) {\n this.oRef?.close();\n this.callback(this.actions()[index[0]]);\n }\n}\n","<yuv-list (itemSelect)=\"onItemSelect($event)\" cdkTrapFocus>\n @for (a of actions(); track a.id) {\n <div yuvListItem>\n <mat-icon>{{ a.icon }}</mat-icon> {{ a.label }}\n </div>\n }\n</yuv-list>\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 } from 'rxjs';\nimport { Action, ActionClass, ActionContext, ActionOptions } from './actions.interface';\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';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ActionsService {\n private readonly injector = inject(Injector);\n private dialog = inject(MatDialog);\n readonly iconRegistry = inject(MatIconRegistry);\n\n private _registeredActions: Record<string, ActionClass> = {};\n\n registerActions(a: { id: string; action: ActionClass }[]) {\n Array.isArray(a) &&\n a.forEach((a) => {\n this._registeredActions[a.id] = a.action;\n });\n }\n\n concealActions(actionIDs: string[]) {\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 s: Observable<{ action: Action; executable: boolean }>[] = this.getAvailableActions(options?.context)\n .filter((ac) =>\n options?.exclude\n ? Array.isArray(options.exclude)\n ? !options.exclude.includes(ac.id)\n : options.exclude instanceof RegExp\n ? !options.exclude.test(ac.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(s).pipe(map((res: { action: Action; executable: boolean }[]) => res.filter((r) => r.executable).map((r) => r.action)));\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 a: Action[] = [];\n\n runInInjectionContext(this.injector, () => {\n a = [...this._getDefaulActions(context), ...Object.values(this._registeredActions).map((ac: ActionClass) => new ac(context))];\n });\n return a;\n }\n\n getActionsForType(objectTypeId: string, context?: ActionContext): Action[] {\n return this.getAvailableActions(context).filter((a: Action) => this._actionsSupportsType(a, objectTypeId));\n }\n\n getActionById(id: string, context?: ActionContext): Action | undefined {\n return this.getAvailableActions(context).find((a) => a.id === id);\n }\n\n getActionsById(ids: string[], context?: ActionContext): Action[] {\n return this.getAvailableActions(context).filter((a) => ids.includes(a.id));\n }\n\n openContextMenu(actions: Signal<Action[]>, callback: (action: Action) => void, overlayOrigin: { x: number; y: number }) {\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\n setTimeout(() => {\n const dialog = document.querySelector('.context-menu-dialog') as HTMLElement;\n if (dialog) {\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 - 10;\n }\n if (top + dialogHeight > screenH) {\n top = screenH - dialogHeight - 10;\n }\n\n dialog.style.position = 'fixed';\n dialog.style.left = `${left}px`;\n dialog.style.top = `${top}px`;\n }\n });\n }\n\n private _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 ? Utils.patternToRegExp(action.supports.pattern).test(objectTypeId) : false;\n return matchesTypes || matchesSOTs || matchesPattern;\n }\n\n private _getDefaulActions(context?: ActionContext): Action[] {\n return [new DeleteAction(context), new DownloadAction(context), new CopyAction(context), new CutAction(context)];\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["TranslateModule","i1","i2","i3"],"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/actions.icon.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions.interface.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/components/contextmenu/contextmenu.component.ts","../../../../../libs/yuuvis/client-framework/actions/src/lib/components/contextmenu/contextmenu.component.html","../../../../../libs/yuuvis/client-framework/actions/src/lib/actions.service.ts","../../../../../libs/yuuvis/client-framework/actions/src/yuuvis-client-framework-actions.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@NgModule({\n imports: [CommonModule, TranslateModule]\n})\nexport class ActionsModule {}\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 * @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\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\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","import { inject } from '@angular/core';\nimport { ClipboardService, DmsObject, TranslateService } from '@yuuvis/client-core';\nimport { Observable, of } from 'rxjs';\nimport { ACTION_ICON } from '../../actions.icon';\nimport { AbstractContextAction, Action, ActionSupport, BASE_ACTION, SelectionRange } from '../../actions.interface';\n\nexport class CopyAction extends AbstractContextAction implements Action {\n private clipboardService = inject(ClipboardService);\n private 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 = 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[]) {\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 { ACTION_ICON } from '../../actions.icon';\nimport { AbstractContextAction, Action, ActionSupport, BASE_ACTION, SelectionRange } from '../../actions.interface';\n\nexport class CutAction extends AbstractContextAction implements Action {\n private clipboardService = inject(ClipboardService);\n private 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 = 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[]) {\n return of(items.length > 0 && items.every((item) => item.permissions?.writeContent && item.permissions?.writeIndexData && item.permissions?.deleteObject));\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 { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { DmsObject, DmsService, ObjectDeleteError, ObjectDeleteResult, TranslateModule, TranslateService } from '@yuuvis/client-core';\nimport { ActionContext } from '../../../actions.interface';\nimport { DialogComponent } from '@yuuvis/client-framework/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { YmtButtonDirective } from '@yuuvis/material';\n\n/**\n * @ignore\n */\n\n@Component({\n selector: 'yuv-delete',\n standalone: true,\n imports: [CommonModule, TranslateModule, 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 [headertitel]=\"'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, RetentionService, TranslateService } from '@yuuvis/client-core';\nimport { Observable, of } from 'rxjs';\nimport { ACTION_ICON } from '../../actions.icon';\nimport { AbstractContextAction, Action, ActionSupport, BASE_ACTION, SelectionRange } from '../../actions.interface';\nimport { DeleteComponent } from './delete/delete.component';\n\nexport class DeleteAction extends AbstractContextAction implements Action {\n private translate = inject(TranslateService);\n #dialog = inject(MatDialog);\n private retention = inject(RetentionService);\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 = 8;\n icon = ACTION_ICON.delete;\n group = 'common';\n range = SelectionRange.MULTI_SELECT;\n supports: ActionSupport = {\n pattern: '*'\n };\n\n isExecutable(items: DmsObject[]) {\n const e = items[0];\n return of(e && !!e.permissions && e.permissions.deleteObject && !this.retention.getRetentionState(e).underRetention);\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 { ACTION_ICON } from '../../actions.icon';\nimport { AbstractContextAction, Action, ActionSupport, BASE_ACTION, SelectionRange } from '../../actions.interface';\n\nexport class DownloadAction extends AbstractContextAction implements Action {\n private translate = inject(TranslateService);\n private 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 = 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[]) {\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 { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, Signal } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { YuvListModule } from '@yuuvis/client-framework/list';\nimport { Action } from '../../actions.interface';\n\n@Component({\n selector: 'yuv-contextmenu',\n standalone: true,\n imports: [CommonModule, MatIconModule, YuvListModule, A11yModule],\n templateUrl: './contextmenu.component.html',\n styleUrl: './contextmenu.component.scss'\n})\nexport class ContextmenuComponent {\n oRef = inject(MatDialogRef);\n data = inject(MAT_DIALOG_DATA);\n\n actions: Signal<Action[]> = this.data.actions;\n callback: (action: Action) => void = this.data.callback;\n\n onItemSelect(index: number[]) {\n this.oRef?.close();\n this.callback(this.actions()[index[0]]);\n }\n}\n","<yuv-list (itemSelect)=\"onItemSelect($event)\" cdkTrapFocus>\n @for (a of actions(); track a.id) {\n <div yuvListItem>\n <mat-icon>{{ a.icon }}</mat-icon> {{ a.label }}\n </div>\n }\n</yuv-list>\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 } from 'rxjs';\nimport { Action, ActionClass, ActionContext, ActionOptions } from './actions.interface';\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';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ActionsService {\n private readonly injector = inject(Injector);\n private dialog = inject(MatDialog);\n readonly iconRegistry = inject(MatIconRegistry);\n\n private _registeredActions: Record<string, ActionClass> = {};\n\n registerActions(a: { id: string; action: ActionClass }[]) {\n Array.isArray(a) &&\n a.forEach((a) => {\n this._registeredActions[a.id] = a.action;\n });\n }\n\n concealActions(actionIDs: string[]) {\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 s: Observable<{ action: Action; executable: boolean }>[] = this.getAvailableActions(options?.context)\n .filter((ac) =>\n options?.exclude\n ? Array.isArray(options.exclude)\n ? !options.exclude.includes(ac.id)\n : options.exclude instanceof RegExp\n ? !options.exclude.test(ac.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(s).pipe(map((res: { action: Action; executable: boolean }[]) => res.filter((r) => r.executable).map((r) => r.action)));\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 a: Action[] = [];\n\n runInInjectionContext(this.injector, () => {\n a = [...this._getDefaulActions(context), ...Object.values(this._registeredActions).map((ac: ActionClass) => new ac(context))];\n });\n return a;\n }\n\n getActionsForType(objectTypeId: string, context?: ActionContext): Action[] {\n return this.getAvailableActions(context).filter((a: Action) => this._actionsSupportsType(a, objectTypeId));\n }\n\n getActionById(id: string, context?: ActionContext): Action | undefined {\n return this.getAvailableActions(context).find((a) => a.id === id);\n }\n\n getActionsById(ids: string[], context?: ActionContext): Action[] {\n return this.getAvailableActions(context).filter((a) => ids.includes(a.id));\n }\n\n openContextMenu(actions: Signal<Action[]>, callback: (action: Action) => void, overlayOrigin: { x: number; y: number }) {\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\n setTimeout(() => {\n const dialog = document.querySelector('.context-menu-dialog') as HTMLElement;\n if (dialog) {\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 - 10;\n }\n if (top + dialogHeight > screenH) {\n top = screenH - dialogHeight - 10;\n }\n\n dialog.style.position = 'fixed';\n dialog.style.left = `${left}px`;\n dialog.style.top = `${top}px`;\n }\n });\n }\n\n private _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 ? Utils.patternToRegExp(action.supports.pattern).test(objectTypeId) : false;\n return matchesTypes || matchesSOTs || matchesPattern;\n }\n\n private _getDefaulActions(context?: ActionContext): Action[] {\n return [new DeleteAction(context), new DownloadAction(context), new CopyAction(context), new CutAction(context)];\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["TranslateModule","i1","i2"],"mappings":"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"}
@@ -58,10 +58,10 @@ class AppBarComponent {
58
58
  this.dialogElement?.nativeElement.close();
59
59
  }
60
60
  }
61
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AppBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
62
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", type: AppBarComponent, isStandalone: true, selector: "yuv-app-bar", inputs: { menuIcon: "menuIcon", appTitle: "appTitle", appTitleRoute: "appTitleRoute" }, host: { properties: { "class.has-menu": "this.appBarSideNav" } }, 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"] }] }); }
61
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: AppBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
62
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.12", type: AppBarComponent, isStandalone: true, selector: "yuv-app-bar", inputs: { menuIcon: "menuIcon", appTitle: "appTitle", appTitleRoute: "appTitleRoute" }, host: { properties: { "class.has-menu": "this.appBarSideNav" } }, 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"] }] }); }
63
63
  }
64
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AppBarComponent, decorators: [{
64
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: AppBarComponent, decorators: [{
65
65
  type: Component,
66
66
  args: [{ selector: 'yuv-app-bar', standalone: true, imports: [CommonModule, YuvIconComponent, RouterModule], 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"] }]
67
67
  }], propDecorators: { dialogElement: [{
@@ -1 +1 @@
1
- {"version":3,"file":"yuuvis-client-framework-app-bar.mjs","sources":["../../../../../libs/yuuvis/client-framework/app-bar/src/lib/app-bar.component.ts","../../../../../libs/yuuvis/client-framework/app-bar/src/lib/app-bar.component.html","../../../../../libs/yuuvis/client-framework/app-bar/src/yuuvis-client-framework-app-bar.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, ContentChild, ElementRef, HostBinding, Input, TemplateRef, ViewChild } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { YuvIconComponent } from '@yuuvis/client-framework/icons';\n\n/**\n * Application bar for yuuvis Momentum apps.\n *\n * Adding a `#appBarSideNav` template to the components body will show a menu icon\n * that opens its content in a sidenav element.\n *\n * Adding a `#appBarActions` template to the component will add its content to\n * the actions section (at the end of the app bar).\n *\n * @example\n * <yuv-app-bar title=\"MyMomentumApp\">\n * <ng-template #appBarSideNav>\n * ... content supposed to end up in a sidenav ...\n * </ng-template>\n * <ng-template #appBarPrimaryActions>\n * ... content supposed to end up in the app bars primary actions section ...\n * </ng-template>\n * <ng-template #appBarActions>\n * ... content supposed to end up in the app bars actions section ...\n * </ng-template>\n * </yuv-app-bar>\n */\n@Component({\n selector: 'yuv-app-bar',\n standalone: true,\n imports: [CommonModule, YuvIconComponent, RouterModule],\n templateUrl: './app-bar.component.html',\n styleUrls: ['./app-bar.component.scss']\n})\nexport class AppBarComponent {\n @ViewChild('dialogEl', { read: ElementRef }) dialogElement: ElementRef<HTMLDialogElement> | null = null;\n @HostBinding('class.has-menu')\n @ContentChild('appBarSideNav', { read: TemplateRef })\n appBarSideNav: TemplateRef<any> | null = null;\n @ContentChild('appBarActions', { read: TemplateRef }) appBarActions: TemplateRef<any> | null = null;\n @ContentChild('appBarPrimaryActions', { read: TemplateRef }) appBarPrimaryActions: TemplateRef<any> | null = null;\n\n /**\n * Menu icon SVG. By default this will be the hamburger menu icon\n */\n @Input() menuIcon =\n '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 -960 960 960\" width=\"24\"><path d=\"M140.001-254.616v-59.999h679.998v59.999H140.001Zm0-195.385v-59.998h679.998v59.998H140.001Zm0-195.384v-59.999h679.998v59.999H140.001Z\"/></svg>';\n /**\n * App title visible in the app beside the menu\n */\n @Input() appTitle?: string;\n /**\n * Where to route to, when the title is clicked. Defaults to '/'\n */\n @Input() appTitleRoute?: string = './';\n\n sidenavVisible = false;\n\n toggleSideNav() {\n const dialogEl = this.dialogElement!.nativeElement;\n if (!dialogEl.hasAttribute('open')) dialogEl.showModal();\n else dialogEl.close();\n\n // this.dialogElement!.nativeElement.showModal()\n // this.sidenavVisible = !this.sidenavVisible\n }\n\n onDialogClick(e: MouseEvent) {\n if ((e.target as HTMLElement).nodeName === 'DIALOG') {\n this.dialogElement?.nativeElement.close();\n }\n }\n}\n","@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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"yuuvis-client-framework-app-bar.mjs","sources":["../../../../../libs/yuuvis/client-framework/app-bar/src/lib/app-bar.component.ts","../../../../../libs/yuuvis/client-framework/app-bar/src/lib/app-bar.component.html","../../../../../libs/yuuvis/client-framework/app-bar/src/yuuvis-client-framework-app-bar.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, ContentChild, ElementRef, HostBinding, Input, TemplateRef, ViewChild } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { YuvIconComponent } from '@yuuvis/client-framework/icons';\n\n/**\n * Application bar for yuuvis Momentum apps.\n *\n * Adding a `#appBarSideNav` template to the components body will show a menu icon\n * that opens its content in a sidenav element.\n *\n * Adding a `#appBarActions` template to the component will add its content to\n * the actions section (at the end of the app bar).\n *\n * @example\n * <yuv-app-bar title=\"MyMomentumApp\">\n * <ng-template #appBarSideNav>\n * ... content supposed to end up in a sidenav ...\n * </ng-template>\n * <ng-template #appBarPrimaryActions>\n * ... content supposed to end up in the app bars primary actions section ...\n * </ng-template>\n * <ng-template #appBarActions>\n * ... content supposed to end up in the app bars actions section ...\n * </ng-template>\n * </yuv-app-bar>\n */\n@Component({\n selector: 'yuv-app-bar',\n standalone: true,\n imports: [CommonModule, YuvIconComponent, RouterModule],\n templateUrl: './app-bar.component.html',\n styleUrls: ['./app-bar.component.scss']\n})\nexport class AppBarComponent {\n @ViewChild('dialogEl', { read: ElementRef }) dialogElement: ElementRef<HTMLDialogElement> | null = null;\n @HostBinding('class.has-menu')\n @ContentChild('appBarSideNav', { read: TemplateRef })\n appBarSideNav: TemplateRef<any> | null = null;\n @ContentChild('appBarActions', { read: TemplateRef }) appBarActions: TemplateRef<any> | null = null;\n @ContentChild('appBarPrimaryActions', { read: TemplateRef }) appBarPrimaryActions: TemplateRef<any> | null = null;\n\n /**\n * Menu icon SVG. By default this will be the hamburger menu icon\n */\n @Input() menuIcon =\n '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 -960 960 960\" width=\"24\"><path d=\"M140.001-254.616v-59.999h679.998v59.999H140.001Zm0-195.385v-59.998h679.998v59.998H140.001Zm0-195.384v-59.999h679.998v59.999H140.001Z\"/></svg>';\n /**\n * App title visible in the app beside the menu\n */\n @Input() appTitle?: string;\n /**\n * Where to route to, when the title is clicked. Defaults to '/'\n */\n @Input() appTitleRoute?: string = './';\n\n sidenavVisible = false;\n\n toggleSideNav() {\n const dialogEl = this.dialogElement!.nativeElement;\n if (!dialogEl.hasAttribute('open')) dialogEl.showModal();\n else dialogEl.close();\n\n // this.dialogElement!.nativeElement.showModal()\n // this.sidenavVisible = !this.sidenavVisible\n }\n\n onDialogClick(e: MouseEvent) {\n if ((e.target as HTMLElement).nodeName === 'DIALOG') {\n this.dialogElement?.nativeElement.close();\n }\n }\n}\n","@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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -179,10 +179,10 @@ class AutocompleteComponent extends AbstractMatFormField {
179
179
  ngOnDestroy() {
180
180
  super.onNgOnDestroy();
181
181
  }
182
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AutocompleteComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
183
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", type: AutocompleteComponent, isStandalone: true, selector: "yuv-autocomplete", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, busy: { classPropertyName: "busy", publicName: "busy", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, distinctValues: { classPropertyName: "distinctValues", publicName: "distinctValues", isSignal: true, isRequired: false, transformFunction: null }, addOnBlur: { classPropertyName: "addOnBlur", publicName: "addOnBlur", isSignal: true, isRequired: false, transformFunction: null }, minLength: { classPropertyName: "minLength", publicName: "minLength", isSignal: true, isRequired: false, transformFunction: null }, maxItems: { classPropertyName: "maxItems", publicName: "maxItems", isSignal: true, isRequired: false, transformFunction: null }, forceSelection: { classPropertyName: "forceSelection", publicName: "forceSelection", isSignal: true, isRequired: false, transformFunction: null }, autocompleteValues: { classPropertyName: "autocompleteValues", publicName: "autocompleteValues", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { autocompleteFnc: "autocompleteFnc" }, host: { attributes: { "attr.aria-disabled": "disabled" } }, providers: [{ provide: MatFormFieldControl, useExisting: AutocompleteComponent }], queries: [{ propertyName: "chipTemplate", first: true, predicate: ["chipTemplate"], descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "optionTemplate", first: true, predicate: ["optionTemplate"], descendants: true, read: TemplateRef, isSignal: true }], viewQueries: [{ propertyName: "matAutocomplete", first: true, predicate: ["auto"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (multiple()) {\n <mat-chip-grid #chipGrid [attr.aria-label]=\"ariaLabel()\" [formControl]=\"chipsControl\">\n @for (v of value; track $index) {\n <mat-chip-row (removed)=\"removeItem(v)\">\n {{ v.label || v.value || v }}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n </mat-chip-grid>\n\n <input\n [disabled]=\"!!chipsInputDisabled()\"\n type=\"text\"\n (blur)=\"onInputBlur()\"\n [placeholder]=\"placeholder || ''\"\n [formControl]=\"inputControl\"\n [matAutocomplete]=\"auto\"\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (matChipInputTokenEnd)=\"add($event)\"\n />\n} @else {\n <input type=\"text\" matInput [placeholder]=\"placeholder || ''\" [attr.aria-label]=\"ariaLabel()\" [formControl]=\"inputControl\" [matAutocomplete]=\"auto\" />\n}\n@if (busy()) {\n <mat-spinner [diameter]=\"16\"></mat-spinner>\n}\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"acOptionSelected($event)\"\n (optionActivated)=\"acOptionActivated($event)\"\n (closed)=\"acPanelClosed()\"\n [displayWith]=\"displayFn\"\n>\n @for (option of _acValues(); track option.label) {\n <mat-option [value]=\"option\">\n <ng-container *ngTemplateOutlet=\"optionTemplate() || null; context: { $implicit: option }\"></ng-container>\n @if (!optionTemplate()) {\n {{ option.label }}\n }\n </mat-option>\n }\n</mat-autocomplete>\n", styles: [":host{display:inline-flex;position:relative}:host input{background-color:transparent;border:0;width:100%;font-family:var(--mdc-chip-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mdc-chip-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mdc-chip-label-text-size, var(--mat-sys-label-large-size));font-weight:var(--mdc-chip-label-text-weight, var(--mat-sys-label-large-weight));letter-spacing:var(--mdc-chip-label-text-tracking, var(--mat-sys-label-large-tracking))}:host mat-spinner{align-self:center;position:absolute;inset-inline-end:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i2.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i2.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i2.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i2.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
182
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: AutocompleteComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
183
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.12", type: AutocompleteComponent, isStandalone: true, selector: "yuv-autocomplete", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, busy: { classPropertyName: "busy", publicName: "busy", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, distinctValues: { classPropertyName: "distinctValues", publicName: "distinctValues", isSignal: true, isRequired: false, transformFunction: null }, addOnBlur: { classPropertyName: "addOnBlur", publicName: "addOnBlur", isSignal: true, isRequired: false, transformFunction: null }, minLength: { classPropertyName: "minLength", publicName: "minLength", isSignal: true, isRequired: false, transformFunction: null }, maxItems: { classPropertyName: "maxItems", publicName: "maxItems", isSignal: true, isRequired: false, transformFunction: null }, forceSelection: { classPropertyName: "forceSelection", publicName: "forceSelection", isSignal: true, isRequired: false, transformFunction: null }, autocompleteValues: { classPropertyName: "autocompleteValues", publicName: "autocompleteValues", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { autocompleteFnc: "autocompleteFnc" }, host: { attributes: { "attr.aria-disabled": "disabled" } }, providers: [{ provide: MatFormFieldControl, useExisting: AutocompleteComponent }], queries: [{ propertyName: "chipTemplate", first: true, predicate: ["chipTemplate"], descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "optionTemplate", first: true, predicate: ["optionTemplate"], descendants: true, read: TemplateRef, isSignal: true }], viewQueries: [{ propertyName: "matAutocomplete", first: true, predicate: ["auto"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (multiple()) {\n <mat-chip-grid #chipGrid [attr.aria-label]=\"ariaLabel()\" [formControl]=\"chipsControl\">\n @for (v of value; track $index) {\n <mat-chip-row (removed)=\"removeItem(v)\">\n {{ v.label || v.value || v }}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n </mat-chip-grid>\n\n <input\n [disabled]=\"!!chipsInputDisabled()\"\n type=\"text\"\n (blur)=\"onInputBlur()\"\n [placeholder]=\"placeholder || ''\"\n [formControl]=\"inputControl\"\n [matAutocomplete]=\"auto\"\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (matChipInputTokenEnd)=\"add($event)\"\n />\n} @else {\n <input type=\"text\" matInput [placeholder]=\"placeholder || ''\" [attr.aria-label]=\"ariaLabel()\" [formControl]=\"inputControl\" [matAutocomplete]=\"auto\" />\n}\n@if (busy()) {\n <mat-spinner [diameter]=\"16\"></mat-spinner>\n}\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"acOptionSelected($event)\"\n (optionActivated)=\"acOptionActivated($event)\"\n (closed)=\"acPanelClosed()\"\n [displayWith]=\"displayFn\"\n>\n @for (option of _acValues(); track option.label) {\n <mat-option [value]=\"option\">\n <ng-container *ngTemplateOutlet=\"optionTemplate() || null; context: { $implicit: option }\"></ng-container>\n @if (!optionTemplate()) {\n {{ option.label }}\n }\n </mat-option>\n }\n</mat-autocomplete>\n", styles: [":host{display:inline-flex;position:relative}:host input{background-color:transparent;border:0;width:100%;font-family:var(--mdc-chip-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mdc-chip-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mdc-chip-label-text-size, var(--mat-sys-label-large-size));font-weight:var(--mdc-chip-label-text-weight, var(--mat-sys-label-large-weight));letter-spacing:var(--mdc-chip-label-text-tracking, var(--mat-sys-label-large-tracking))}:host mat-spinner{align-self:center;position:absolute;inset-inline-end:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i2.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i2.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i2.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i2.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
184
184
  }
185
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AutocompleteComponent, decorators: [{
185
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: AutocompleteComponent, decorators: [{
186
186
  type: Component,
187
187
  args: [{ selector: 'yuv-autocomplete', imports: [CommonModule, MatChipsModule, MatIconModule, MatInputModule, MatProgressSpinnerModule, MatAutocompleteModule, ReactiveFormsModule], changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: MatFormFieldControl, useExisting: AutocompleteComponent }], host: {
188
188
  'attr.aria-disabled': 'disabled'
@@ -190,11 +190,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImpor
190
190
  }] });
191
191
 
192
192
  class YuvAutocompleteModule {
193
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: YuvAutocompleteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
194
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.1", ngImport: i0, type: YuvAutocompleteModule, imports: [AutocompleteComponent], exports: [AutocompleteComponent] }); }
195
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: YuvAutocompleteModule, imports: [AutocompleteComponent] }); }
193
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: YuvAutocompleteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
194
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.12", ngImport: i0, type: YuvAutocompleteModule, imports: [AutocompleteComponent], exports: [AutocompleteComponent] }); }
195
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: YuvAutocompleteModule, imports: [AutocompleteComponent] }); }
196
196
  }
197
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: YuvAutocompleteModule, decorators: [{
197
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: YuvAutocompleteModule, decorators: [{
198
198
  type: NgModule,
199
199
  args: [{
200
200
  imports: [AutocompleteComponent],
@@ -1 +1 @@
1
- {"version":3,"file":"yuuvis-client-framework-autocomplete.mjs","sources":["../../../../../libs/yuuvis/client-framework/autocomplete/src/lib/autocomplete.component.ts","../../../../../libs/yuuvis/client-framework/autocomplete/src/lib/autocomplete.component.html","../../../../../libs/yuuvis/client-framework/autocomplete/src/lib/autocomplete.module.ts","../../../../../libs/yuuvis/client-framework/autocomplete/src/yuuvis-client-framework-autocomplete.ts"],"sourcesContent":["import { COMMA, ENTER } from '@angular/cdk/keycodes';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n effect,\n inject,\n input,\n OnDestroy,\n OnInit,\n output,\n signal,\n TemplateRef,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocomplete, MatAutocompleteActivatedEvent, MatAutocompleteModule, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { MatChipInputEvent, MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { AbstractMatFormField, injectNgControl } from '@yuuvis/client-framework/common';\nimport { debounceTime, filter } from 'rxjs/operators';\nimport { AutocompleteItem } from './autocomplete.interface';\n\n@Component({\n selector: 'yuv-autocomplete',\n imports: [CommonModule, MatChipsModule, MatIconModule, MatInputModule, MatProgressSpinnerModule, MatAutocompleteModule, ReactiveFormsModule],\n templateUrl: './autocomplete.component.html',\n styleUrl: './autocomplete.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: MatFormFieldControl, useExisting: AutocompleteComponent }],\n host: {\n 'attr.aria-disabled': 'disabled'\n }\n})\nexport class AutocompleteComponent extends AbstractMatFormField<AutocompleteItem[]> implements ControlValueAccessor, OnInit, OnDestroy {\n #dRef = inject(DestroyRef);\n\n ariaLabel = input<string>('');\n\n matAutocomplete = viewChild.required<MatAutocomplete>('auto');\n /**\n * Template to be used for rendering selected items in multiselect (multiple=\"true\") mode\n */\n chipTemplate = contentChild('chipTemplate', { read: TemplateRef });\n optionTemplate = contentChild('optionTemplate', { read: TemplateRef });\n\n /**\n * Show a loading spinner\n */\n busy = input<boolean>(false);\n /**\n * Enable multiple values\n */\n multiple = input<boolean>(false);\n /**\n * Force distinct values (only applicable for multiselect)\n */\n distinctValues = input<boolean>(true);\n /**\n * Add user inputs to the list of values when the user leaves the\n * control without entering (only applicable for multiselect)\n */\n addOnBlur = input<boolean>(false);\n /**\n * Minimum number of characters entered to trigger suggestions\n */\n minLength = input<number>(2);\n /**\n * Maximum number of items when multiple is true. -1 means no limit.\n */\n maxItems = input<number>(-1);\n /**\n * Setting this to `true` will not allow values that are not contained in the suggestions list. The input\n * will be cleared on blur if no value from the list has been selected. Also values are only emitted when a\n * list item has been selected (usually every key stroke is changing the form controls value)\n */\n forceSelection = input<boolean>(false);\n\n _acValues = signal<AutocompleteItem[]>([]);\n autocompleteValues = input<AutocompleteItem[]>([]);\n #acValueEffect = effect(() => {\n const acv =\n this.multiple() && this.distinctValues()\n ? this.autocompleteValues().filter((v) => !(this.value || []).some((i) => i.label === v.label))\n : this.autocompleteValues();\n this._acValues.set(acv);\n });\n autocompleteFnc = output<string>();\n\n // value = signal<AutocompleteItem[]>([]);\n chipsInputDisabled = computed(() => this.multiple() && this.maxItems() !== -1 && this.value && this.value.length >= this.maxItems());\n chipsControl = new FormControl<AutocompleteItem[]>([]);\n inputControl = new FormControl<AutocompleteItem | string>('', {\n nonNullable: true\n });\n\n override ngControl = injectNgControl(this);\n\n displayFn(i: AutocompleteItem): string {\n return i?.label;\n }\n\n #activeAutocompleteValue = signal<AutocompleteItem | null>(null);\n\n acOptionSelected(event: MatAutocompleteSelectedEvent): void {\n if (this.multiple()) {\n this.value = [...(this.value || []), event.option.value];\n this.inputControl.setValue('');\n } else {\n this.value = event.option.value;\n }\n this._onChange(this.value);\n event.option.deselect();\n this._acValues.set([]);\n }\n\n acOptionActivated(event: MatAutocompleteActivatedEvent): void {\n if (event.option) this.#activeAutocompleteValue.set(event.option.value);\n }\n\n acPanelClosed() {\n this.#activeAutocompleteValue.set(null);\n this._acValues.set([]);\n }\n\n // multiple selection\n readonly separatorKeysCodes: number[] = [ENTER, COMMA];\n\n // triggered when the user presses enter or comma\n add(event: MatChipInputEvent): void {\n if (this.#activeAutocompleteValue()) return;\n\n const value = (event.value || '').trim();\n const isDistinct = !(this.value || []).some((i) => i.label === value);\n if ((!this.distinctValues() || isDistinct) && value.length > 0) {\n this.value = [...(this.value || []), { label: value, value }];\n this._onChange(this.value);\n }\n // Clear the input value\n this.inputControl.setValue('');\n this.matAutocomplete().showPanel = false;\n }\n\n onInputBlur() {\n if (!this.multiple()) return;\n // need to timeout because clicking on the option will trigger the blur event before the click event\n // and the input value will be cleared before the option is selected\n setTimeout(() => {\n const iv = this.inputControl.value as string;\n if (iv && iv.length > 0 && this.addOnBlur()) {\n const match = this.autocompleteValues().find((i) => i.label === iv);\n if (this.forceSelection() && match) {\n this.value = this.multiple() ? [...(this.value || []), match] : [match];\n this._onChange(this.value);\n } else if (!this.forceSelection()) {\n const v = { label: iv, value: iv };\n this.value = this.multiple() ? [...(this.value || []), v] : [v];\n this._onChange(this.value);\n }\n }\n this.inputControl.setValue('');\n this._acValues.set([]);\n }, 500);\n }\n\n removeItem(item: AutocompleteItem) {\n this.value = (this.value || []).filter((i) => i !== item);\n this._onChange(this.value);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onChange: (value: readonly AutocompleteItem[] | null) => void = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onTouched = () => {};\n\n writeValue(value: readonly AutocompleteItem[] | AutocompleteItem): void {\n if (!this.multiple()) {\n this.value = [value as AutocompleteItem];\n this.inputControl.patchValue(value as AutocompleteItem, { emitEvent: false });\n } else {\n this.value = structuredClone(value) as AutocompleteItem[];\n }\n }\n registerOnChange(fn: (value: readonly AutocompleteItem[] | null) => void): void {\n this._onChange = fn;\n }\n // eslint-disable-next-line @typescript-eslint/ban-types\n registerOnTouched(fn: () => {}): void {\n this._onTouched = fn;\n }\n\n ngOnInit(): void {\n this.inputControl.valueChanges\n .pipe(\n filter((value) => !!value && (value as string).length >= this.minLength()),\n debounceTime(300),\n takeUntilDestroyed(this.#dRef)\n )\n .subscribe((value) => {\n this.autocompleteFnc.emit((value as string) || '');\n });\n }\n\n ngOnDestroy(): void {\n super.onNgOnDestroy();\n }\n}\n","@if (multiple()) {\n <mat-chip-grid #chipGrid [attr.aria-label]=\"ariaLabel()\" [formControl]=\"chipsControl\">\n @for (v of value; track $index) {\n <mat-chip-row (removed)=\"removeItem(v)\">\n {{ v.label || v.value || v }}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n </mat-chip-grid>\n\n <input\n [disabled]=\"!!chipsInputDisabled()\"\n type=\"text\"\n (blur)=\"onInputBlur()\"\n [placeholder]=\"placeholder || ''\"\n [formControl]=\"inputControl\"\n [matAutocomplete]=\"auto\"\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (matChipInputTokenEnd)=\"add($event)\"\n />\n} @else {\n <input type=\"text\" matInput [placeholder]=\"placeholder || ''\" [attr.aria-label]=\"ariaLabel()\" [formControl]=\"inputControl\" [matAutocomplete]=\"auto\" />\n}\n@if (busy()) {\n <mat-spinner [diameter]=\"16\"></mat-spinner>\n}\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"acOptionSelected($event)\"\n (optionActivated)=\"acOptionActivated($event)\"\n (closed)=\"acPanelClosed()\"\n [displayWith]=\"displayFn\"\n>\n @for (option of _acValues(); track option.label) {\n <mat-option [value]=\"option\">\n <ng-container *ngTemplateOutlet=\"optionTemplate() || null; context: { $implicit: option }\"></ng-container>\n @if (!optionTemplate()) {\n {{ option.label }}\n }\n </mat-option>\n }\n</mat-autocomplete>\n","import { NgModule } from '@angular/core';\nimport { AutocompleteComponent } from './autocomplete.component';\n\n@NgModule({\n imports: [AutocompleteComponent],\n exports: [AutocompleteComponent]\n})\nexport class YuvAutocompleteModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"yuuvis-client-framework-autocomplete.mjs","sources":["../../../../../libs/yuuvis/client-framework/autocomplete/src/lib/autocomplete.component.ts","../../../../../libs/yuuvis/client-framework/autocomplete/src/lib/autocomplete.component.html","../../../../../libs/yuuvis/client-framework/autocomplete/src/lib/autocomplete.module.ts","../../../../../libs/yuuvis/client-framework/autocomplete/src/yuuvis-client-framework-autocomplete.ts"],"sourcesContent":["import { COMMA, ENTER } from '@angular/cdk/keycodes';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n effect,\n inject,\n input,\n OnDestroy,\n OnInit,\n output,\n signal,\n TemplateRef,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocomplete, MatAutocompleteActivatedEvent, MatAutocompleteModule, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { MatChipInputEvent, MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { AbstractMatFormField, injectNgControl } from '@yuuvis/client-framework/common';\nimport { debounceTime, filter } from 'rxjs/operators';\nimport { AutocompleteItem } from './autocomplete.interface';\n\n@Component({\n selector: 'yuv-autocomplete',\n imports: [CommonModule, MatChipsModule, MatIconModule, MatInputModule, MatProgressSpinnerModule, MatAutocompleteModule, ReactiveFormsModule],\n templateUrl: './autocomplete.component.html',\n styleUrl: './autocomplete.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: MatFormFieldControl, useExisting: AutocompleteComponent }],\n host: {\n 'attr.aria-disabled': 'disabled'\n }\n})\nexport class AutocompleteComponent extends AbstractMatFormField<AutocompleteItem[]> implements ControlValueAccessor, OnInit, OnDestroy {\n #dRef = inject(DestroyRef);\n\n ariaLabel = input<string>('');\n\n matAutocomplete = viewChild.required<MatAutocomplete>('auto');\n /**\n * Template to be used for rendering selected items in multiselect (multiple=\"true\") mode\n */\n chipTemplate = contentChild('chipTemplate', { read: TemplateRef });\n optionTemplate = contentChild('optionTemplate', { read: TemplateRef });\n\n /**\n * Show a loading spinner\n */\n busy = input<boolean>(false);\n /**\n * Enable multiple values\n */\n multiple = input<boolean>(false);\n /**\n * Force distinct values (only applicable for multiselect)\n */\n distinctValues = input<boolean>(true);\n /**\n * Add user inputs to the list of values when the user leaves the\n * control without entering (only applicable for multiselect)\n */\n addOnBlur = input<boolean>(false);\n /**\n * Minimum number of characters entered to trigger suggestions\n */\n minLength = input<number>(2);\n /**\n * Maximum number of items when multiple is true. -1 means no limit.\n */\n maxItems = input<number>(-1);\n /**\n * Setting this to `true` will not allow values that are not contained in the suggestions list. The input\n * will be cleared on blur if no value from the list has been selected. Also values are only emitted when a\n * list item has been selected (usually every key stroke is changing the form controls value)\n */\n forceSelection = input<boolean>(false);\n\n _acValues = signal<AutocompleteItem[]>([]);\n autocompleteValues = input<AutocompleteItem[]>([]);\n #acValueEffect = effect(() => {\n const acv =\n this.multiple() && this.distinctValues()\n ? this.autocompleteValues().filter((v) => !(this.value || []).some((i) => i.label === v.label))\n : this.autocompleteValues();\n this._acValues.set(acv);\n });\n autocompleteFnc = output<string>();\n\n // value = signal<AutocompleteItem[]>([]);\n chipsInputDisabled = computed(() => this.multiple() && this.maxItems() !== -1 && this.value && this.value.length >= this.maxItems());\n chipsControl = new FormControl<AutocompleteItem[]>([]);\n inputControl = new FormControl<AutocompleteItem | string>('', {\n nonNullable: true\n });\n\n override ngControl = injectNgControl(this);\n\n displayFn(i: AutocompleteItem): string {\n return i?.label;\n }\n\n #activeAutocompleteValue = signal<AutocompleteItem | null>(null);\n\n acOptionSelected(event: MatAutocompleteSelectedEvent): void {\n if (this.multiple()) {\n this.value = [...(this.value || []), event.option.value];\n this.inputControl.setValue('');\n } else {\n this.value = event.option.value;\n }\n this._onChange(this.value);\n event.option.deselect();\n this._acValues.set([]);\n }\n\n acOptionActivated(event: MatAutocompleteActivatedEvent): void {\n if (event.option) this.#activeAutocompleteValue.set(event.option.value);\n }\n\n acPanelClosed() {\n this.#activeAutocompleteValue.set(null);\n this._acValues.set([]);\n }\n\n // multiple selection\n readonly separatorKeysCodes: number[] = [ENTER, COMMA];\n\n // triggered when the user presses enter or comma\n add(event: MatChipInputEvent): void {\n if (this.#activeAutocompleteValue()) return;\n\n const value = (event.value || '').trim();\n const isDistinct = !(this.value || []).some((i) => i.label === value);\n if ((!this.distinctValues() || isDistinct) && value.length > 0) {\n this.value = [...(this.value || []), { label: value, value }];\n this._onChange(this.value);\n }\n // Clear the input value\n this.inputControl.setValue('');\n this.matAutocomplete().showPanel = false;\n }\n\n onInputBlur() {\n if (!this.multiple()) return;\n // need to timeout because clicking on the option will trigger the blur event before the click event\n // and the input value will be cleared before the option is selected\n setTimeout(() => {\n const iv = this.inputControl.value as string;\n if (iv && iv.length > 0 && this.addOnBlur()) {\n const match = this.autocompleteValues().find((i) => i.label === iv);\n if (this.forceSelection() && match) {\n this.value = this.multiple() ? [...(this.value || []), match] : [match];\n this._onChange(this.value);\n } else if (!this.forceSelection()) {\n const v = { label: iv, value: iv };\n this.value = this.multiple() ? [...(this.value || []), v] : [v];\n this._onChange(this.value);\n }\n }\n this.inputControl.setValue('');\n this._acValues.set([]);\n }, 500);\n }\n\n removeItem(item: AutocompleteItem) {\n this.value = (this.value || []).filter((i) => i !== item);\n this._onChange(this.value);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onChange: (value: readonly AutocompleteItem[] | null) => void = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onTouched = () => {};\n\n writeValue(value: readonly AutocompleteItem[] | AutocompleteItem): void {\n if (!this.multiple()) {\n this.value = [value as AutocompleteItem];\n this.inputControl.patchValue(value as AutocompleteItem, { emitEvent: false });\n } else {\n this.value = structuredClone(value) as AutocompleteItem[];\n }\n }\n registerOnChange(fn: (value: readonly AutocompleteItem[] | null) => void): void {\n this._onChange = fn;\n }\n // eslint-disable-next-line @typescript-eslint/ban-types\n registerOnTouched(fn: () => {}): void {\n this._onTouched = fn;\n }\n\n ngOnInit(): void {\n this.inputControl.valueChanges\n .pipe(\n filter((value) => !!value && (value as string).length >= this.minLength()),\n debounceTime(300),\n takeUntilDestroyed(this.#dRef)\n )\n .subscribe((value) => {\n this.autocompleteFnc.emit((value as string) || '');\n });\n }\n\n ngOnDestroy(): void {\n super.onNgOnDestroy();\n }\n}\n","@if (multiple()) {\n <mat-chip-grid #chipGrid [attr.aria-label]=\"ariaLabel()\" [formControl]=\"chipsControl\">\n @for (v of value; track $index) {\n <mat-chip-row (removed)=\"removeItem(v)\">\n {{ v.label || v.value || v }}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n </mat-chip-grid>\n\n <input\n [disabled]=\"!!chipsInputDisabled()\"\n type=\"text\"\n (blur)=\"onInputBlur()\"\n [placeholder]=\"placeholder || ''\"\n [formControl]=\"inputControl\"\n [matAutocomplete]=\"auto\"\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (matChipInputTokenEnd)=\"add($event)\"\n />\n} @else {\n <input type=\"text\" matInput [placeholder]=\"placeholder || ''\" [attr.aria-label]=\"ariaLabel()\" [formControl]=\"inputControl\" [matAutocomplete]=\"auto\" />\n}\n@if (busy()) {\n <mat-spinner [diameter]=\"16\"></mat-spinner>\n}\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"acOptionSelected($event)\"\n (optionActivated)=\"acOptionActivated($event)\"\n (closed)=\"acPanelClosed()\"\n [displayWith]=\"displayFn\"\n>\n @for (option of _acValues(); track option.label) {\n <mat-option [value]=\"option\">\n <ng-container *ngTemplateOutlet=\"optionTemplate() || null; context: { $implicit: option }\"></ng-container>\n @if (!optionTemplate()) {\n {{ option.label }}\n }\n </mat-option>\n }\n</mat-autocomplete>\n","import { NgModule } from '@angular/core';\nimport { AutocompleteComponent } from './autocomplete.component';\n\n@NgModule({\n imports: [AutocompleteComponent],\n exports: [AutocompleteComponent]\n})\nexport class YuvAutocompleteModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}