@yuuvis/client-framework 3.15.0 → 3.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/fesm2022/yuuvis-client-framework-actions.mjs +21 -25
  2. package/fesm2022/yuuvis-client-framework-actions.mjs.map +1 -1
  3. package/fesm2022/yuuvis-client-framework-app-bar.mjs +3 -3
  4. package/fesm2022/yuuvis-client-framework-badges.mjs +20 -13
  5. package/fesm2022/yuuvis-client-framework-badges.mjs.map +1 -1
  6. package/fesm2022/yuuvis-client-framework-breadcrumb.mjs +3 -3
  7. package/fesm2022/yuuvis-client-framework-clipboard.mjs +3 -3
  8. package/fesm2022/yuuvis-client-framework-datepicker.mjs +31 -31
  9. package/fesm2022/yuuvis-client-framework-forms.mjs +286 -178
  10. package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
  11. package/fesm2022/yuuvis-client-framework-icons.mjs +9 -9
  12. package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs +7 -7
  13. package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs.map +1 -1
  14. package/fesm2022/yuuvis-client-framework-metadata-form.mjs +18 -18
  15. package/fesm2022/yuuvis-client-framework-object-details.mjs +28 -28
  16. package/fesm2022/yuuvis-client-framework-object-flavor.mjs +18 -18
  17. package/fesm2022/yuuvis-client-framework-object-form.mjs +34 -34
  18. package/fesm2022/yuuvis-client-framework-object-preview.mjs +9 -9
  19. package/fesm2022/yuuvis-client-framework-object-relationship.mjs +73 -45
  20. package/fesm2022/yuuvis-client-framework-object-relationship.mjs.map +1 -1
  21. package/fesm2022/yuuvis-client-framework-object-summary.mjs +13 -13
  22. package/fesm2022/yuuvis-client-framework-object-versions.mjs +7 -7
  23. package/fesm2022/yuuvis-client-framework-pagination.mjs +3 -3
  24. package/fesm2022/yuuvis-client-framework-query-list.mjs +7 -7
  25. package/fesm2022/yuuvis-client-framework-renderer.mjs +101 -74
  26. package/fesm2022/yuuvis-client-framework-renderer.mjs.map +1 -1
  27. package/fesm2022/yuuvis-client-framework-sequence-list.mjs +4 -4
  28. package/fesm2022/yuuvis-client-framework-sequence-list.mjs.map +1 -1
  29. package/fesm2022/yuuvis-client-framework-simple-search.mjs +3 -3
  30. package/fesm2022/yuuvis-client-framework-smart-search.mjs +13 -13
  31. package/fesm2022/yuuvis-client-framework-sort.mjs +3 -3
  32. package/fesm2022/yuuvis-client-framework-tile-list.mjs +97 -61
  33. package/fesm2022/yuuvis-client-framework-tile-list.mjs.map +1 -1
  34. package/fesm2022/yuuvis-client-framework-token-search.mjs +7 -7
  35. package/fesm2022/yuuvis-client-framework-tree.mjs +9 -9
  36. package/fesm2022/yuuvis-client-framework-upload-progress.mjs +10 -10
  37. package/fesm2022/yuuvis-client-framework.mjs +25 -25
  38. package/lib/assets/i18n/de.json +10 -8
  39. package/lib/assets/i18n/en.json +10 -8
  40. package/package.json +10 -10
  41. package/types/yuuvis-client-framework-badges.d.ts +7 -0
  42. package/types/yuuvis-client-framework-forms.d.ts +28 -8
  43. package/types/yuuvis-client-framework-object-relationship.d.ts +6 -1
  44. package/types/yuuvis-client-framework-tile-list.d.ts +13 -1
@@ -468,10 +468,10 @@ class TokenSearchComponent {
468
468
  return base(['contains', 'like', 'eq']);
469
469
  }
470
470
  }
471
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: TokenSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
472
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: TokenSearchComponent, isStandalone: true, selector: "yuv-token-search", inputs: { types: { classPropertyName: "types", publicName: "types", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { queryChange: "queryChange" }, viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"search-bar\" (click)=\"onBarClick($event)\">\n <!-- Committed tokens -->\n @for (token of tokens(); track token.uid; let i = $index) {\n <button\n class=\"token\"\n [class.token--type]=\"token.kind === 'type'\"\n [class.token--field]=\"token.kind === 'field'\"\n [class.token--operator]=\"token.kind === 'operator'\"\n [class.token--value]=\"token.kind === 'value'\"\n [class.token--combinator]=\"token.kind === 'combinator'\"\n (click)=\"onTokenClick(i)\"\n [attr.aria-label]=\"token.label\"\n >\n @if (token.kind === 'type') {\n <mat-icon class=\"token__icon\">category</mat-icon>\n }\n @if (token.kind === 'field') {\n <mat-icon class=\"token__icon\">tune</mat-icon>\n }\n <span class=\"token__label\">{{ token.label }}</span>\n @if (token.kind !== 'combinator') {\n <span\n class=\"token__remove\"\n (click)=\"$event.stopPropagation(); removeTokenGroup(i)\"\n matTooltip=\"Remove\"\n >\n <mat-icon>close</mat-icon>\n </span>\n }\n </button>\n }\n\n <!-- Pending type pill -->\n @if (pendingTypeId()) {\n <span class=\"token token--type token--pending\">\n <mat-icon class=\"token__icon\">category</mat-icon>\n <span class=\"token__label\">{{ pendingTypeLabel() }}</span>\n </span>\n }\n\n <!-- Pending field pill -->\n @if (pendingField(); as field) {\n <span class=\"token token--field token--pending\">\n <mat-icon class=\"token__icon\">tune</mat-icon>\n <span class=\"token__label\">{{ field.label }}</span>\n </span>\n }\n\n <!-- Pending operator pill -->\n @if (pendingOperator(); as op) {\n <span class=\"token token--operator token--pending\">\n <span class=\"token__label\">{{ op.label }}</span>\n </span>\n }\n\n <!-- Single input -->\n <input\n #searchInput\n [formControl]=\"searchCtrl\"\n [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholderText()\"\n (keydown)=\"onKeydown($event)\"\n />\n</div>\n\n<!-- Autocomplete panel -->\n<mat-autocomplete #auto [displayWith]=\"displayFn\" (optionSelected)=\"onSuggestionSelected($event)\">\n @for (s of suggestions(); track s.id) {\n <mat-option [value]=\"s\">\n <div class=\"suggestion\">\n <mat-icon class=\"suggestion__icon\">\n @switch (s.kind) {\n @case ('type') { category }\n @case ('field') { tune }\n @case ('date-preset') { calendar_today }\n @default { manage_search }\n }\n </mat-icon>\n <span class=\"suggestion__label\">{{ s.label }}</span>\n @if (s.fieldType) {\n <span class=\"suggestion__type\">{{ s.fieldType }}</span>\n }\n </div>\n </mat-option>\n }\n</mat-autocomplete>\n", styles: [":host{display:block}.search-bar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--ymt-spacing-3xs);padding:var(--ymt-spacing-2xs) var(--ymt-spacing-s);border:1px solid var(--ymt-outline-variant);border-radius:var(--ymt-corner-l);background:var(--ymt-surface);min-height:44px;cursor:text;transition:border-color .15s}.search-bar:focus-within{border-color:var(--ymt-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--ymt-primary) 15%,transparent)}.search-bar input{flex:1 1 120px;min-width:120px;border:none;outline:none;background:transparent;font:inherit;font-size:.9em;padding:var(--ymt-spacing-2xs) 0}.search-bar input::placeholder{color:var(--ymt-text-color-subtle);opacity:.7}.token{display:inline-flex;align-items:center;gap:var(--ymt-spacing-4xs);height:28px;padding:0 var(--ymt-spacing-xs);border-radius:var(--ymt-corner-s);border:1px solid var(--ymt-outline-variant);background:var(--ymt-surface-container);font:inherit;font-size:.82em;cursor:pointer;white-space:nowrap;outline:none;transition:border-color .15s,background .15s}.token:hover{border-color:var(--ymt-outline)}.token:focus-visible{border-color:var(--ymt-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--ymt-primary) 25%,transparent)}.token--type{background:var(--ymt-primary-container);color:var(--ymt-on-primary-container);font-weight:500}.token--field{background:color-mix(in srgb,var(--ymt-primary) 10%,transparent);color:var(--ymt-primary);font-weight:500}.token--operator{background:var(--ymt-surface-container-high);color:var(--ymt-text-color-subtle);font-style:italic}.token--value{max-width:160px;overflow:hidden;text-overflow:ellipsis}.token--combinator{background:var(--ymt-surface-container-high);font-weight:600;font-size:.75em;letter-spacing:.04em;color:var(--ymt-text-color-subtle);border-color:transparent}.token--pending{opacity:.7;border-style:dashed;cursor:default}.token__icon{font-size:var(--ymt-sizing-xs);width:var(--ymt-sizing-xs);height:var(--ymt-sizing-xs);opacity:.8}.token__label{line-height:1}.token__remove{display:inline-flex;align-items:center;margin-left:var(--ymt-spacing-4xs);opacity:0;transition:opacity .1s,color .1s}.token__remove mat-icon{font-size:14px;width:14px;height:14px}.token:hover .token__remove{opacity:.6}.token__remove:hover{opacity:1;color:var(--ymt-error)}.suggestion{display:flex;align-items:center;gap:var(--ymt-spacing-xs)}.suggestion__icon{font-size:var(--ymt-sizing-s);width:var(--ymt-sizing-s);height:var(--ymt-sizing-s);opacity:.6}.suggestion__label{flex:1}.suggestion__type{font-size:.75em;opacity:.5;font-style:italic}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i2.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: i2.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i2.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
471
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: TokenSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
472
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: TokenSearchComponent, isStandalone: true, selector: "yuv-token-search", inputs: { types: { classPropertyName: "types", publicName: "types", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { queryChange: "queryChange" }, viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"search-bar\" (click)=\"onBarClick($event)\">\n <!-- Committed tokens -->\n @for (token of tokens(); track token.uid; let i = $index) {\n <button\n class=\"token\"\n [class.token--type]=\"token.kind === 'type'\"\n [class.token--field]=\"token.kind === 'field'\"\n [class.token--operator]=\"token.kind === 'operator'\"\n [class.token--value]=\"token.kind === 'value'\"\n [class.token--combinator]=\"token.kind === 'combinator'\"\n (click)=\"onTokenClick(i)\"\n [attr.aria-label]=\"token.label\"\n >\n @if (token.kind === 'type') {\n <mat-icon class=\"token__icon\">category</mat-icon>\n }\n @if (token.kind === 'field') {\n <mat-icon class=\"token__icon\">tune</mat-icon>\n }\n <span class=\"token__label\">{{ token.label }}</span>\n @if (token.kind !== 'combinator') {\n <span\n class=\"token__remove\"\n (click)=\"$event.stopPropagation(); removeTokenGroup(i)\"\n matTooltip=\"Remove\"\n >\n <mat-icon>close</mat-icon>\n </span>\n }\n </button>\n }\n\n <!-- Pending type pill -->\n @if (pendingTypeId()) {\n <span class=\"token token--type token--pending\">\n <mat-icon class=\"token__icon\">category</mat-icon>\n <span class=\"token__label\">{{ pendingTypeLabel() }}</span>\n </span>\n }\n\n <!-- Pending field pill -->\n @if (pendingField(); as field) {\n <span class=\"token token--field token--pending\">\n <mat-icon class=\"token__icon\">tune</mat-icon>\n <span class=\"token__label\">{{ field.label }}</span>\n </span>\n }\n\n <!-- Pending operator pill -->\n @if (pendingOperator(); as op) {\n <span class=\"token token--operator token--pending\">\n <span class=\"token__label\">{{ op.label }}</span>\n </span>\n }\n\n <!-- Single input -->\n <input\n #searchInput\n [formControl]=\"searchCtrl\"\n [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholderText()\"\n (keydown)=\"onKeydown($event)\"\n />\n</div>\n\n<!-- Autocomplete panel -->\n<mat-autocomplete #auto [displayWith]=\"displayFn\" (optionSelected)=\"onSuggestionSelected($event)\">\n @for (s of suggestions(); track s.id) {\n <mat-option [value]=\"s\">\n <div class=\"suggestion\">\n <mat-icon class=\"suggestion__icon\">\n @switch (s.kind) {\n @case ('type') { category }\n @case ('field') { tune }\n @case ('date-preset') { calendar_today }\n @default { manage_search }\n }\n </mat-icon>\n <span class=\"suggestion__label\">{{ s.label }}</span>\n @if (s.fieldType) {\n <span class=\"suggestion__type\">{{ s.fieldType }}</span>\n }\n </div>\n </mat-option>\n }\n</mat-autocomplete>\n", styles: [":host{display:block}.search-bar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--ymt-spacing-3xs);padding:var(--ymt-spacing-2xs) var(--ymt-spacing-s);border:1px solid var(--ymt-outline-variant);border-radius:var(--ymt-corner-l);background:var(--ymt-surface);min-height:44px;cursor:text;transition:border-color .15s}.search-bar:focus-within{border-color:var(--ymt-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--ymt-primary) 15%,transparent)}.search-bar input{flex:1 1 120px;min-width:120px;border:none;outline:none;background:transparent;font:inherit;font-size:.9em;padding:var(--ymt-spacing-2xs) 0}.search-bar input::placeholder{color:var(--ymt-text-color-subtle);opacity:.7}.token{display:inline-flex;align-items:center;gap:var(--ymt-spacing-4xs);height:28px;padding:0 var(--ymt-spacing-xs);border-radius:var(--ymt-corner-s);border:1px solid var(--ymt-outline-variant);background:var(--ymt-surface-container);font:inherit;font-size:.82em;cursor:pointer;white-space:nowrap;outline:none;transition:border-color .15s,background .15s}.token:hover{border-color:var(--ymt-outline)}.token:focus-visible{border-color:var(--ymt-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--ymt-primary) 25%,transparent)}.token--type{background:var(--ymt-primary-container);color:var(--ymt-on-primary-container);font-weight:500}.token--field{background:color-mix(in srgb,var(--ymt-primary) 10%,transparent);color:var(--ymt-primary);font-weight:500}.token--operator{background:var(--ymt-surface-container-high);color:var(--ymt-text-color-subtle);font-style:italic}.token--value{max-width:160px;overflow:hidden;text-overflow:ellipsis}.token--combinator{background:var(--ymt-surface-container-high);font-weight:600;font-size:.75em;letter-spacing:.04em;color:var(--ymt-text-color-subtle);border-color:transparent}.token--pending{opacity:.7;border-style:dashed;cursor:default}.token__icon{font-size:var(--ymt-sizing-xs);width:var(--ymt-sizing-xs);height:var(--ymt-sizing-xs);opacity:.8}.token__label{line-height:1}.token__remove{display:inline-flex;align-items:center;margin-left:var(--ymt-spacing-4xs);opacity:0;transition:opacity .1s,color .1s}.token__remove mat-icon{font-size:14px;width:14px;height:14px}.token:hover .token__remove{opacity:.6}.token__remove:hover{opacity:1;color:var(--ymt-error)}.suggestion{display:flex;align-items:center;gap:var(--ymt-spacing-xs)}.suggestion__icon{font-size:var(--ymt-sizing-s);width:var(--ymt-sizing-s);height:var(--ymt-sizing-s);opacity:.6}.suggestion__label{flex:1}.suggestion__type{font-size:.75em;opacity:.5;font-style:italic}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i2.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: i2.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i2.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
473
473
  }
474
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: TokenSearchComponent, decorators: [{
474
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: TokenSearchComponent, decorators: [{
475
475
  type: Component,
476
476
  args: [{ selector: 'yuv-token-search', imports: [
477
477
  ReactiveFormsModule,
@@ -483,11 +483,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImpo
483
483
 
484
484
  const cmp = [TokenSearchComponent];
485
485
  class YuvTokenSearchModule {
486
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: YuvTokenSearchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
487
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.12", ngImport: i0, type: YuvTokenSearchModule, imports: [TokenSearchComponent], exports: [TokenSearchComponent] }); }
488
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: YuvTokenSearchModule, imports: [cmp] }); }
486
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: YuvTokenSearchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
487
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.20", ngImport: i0, type: YuvTokenSearchModule, imports: [TokenSearchComponent], exports: [TokenSearchComponent] }); }
488
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: YuvTokenSearchModule, imports: [cmp] }); }
489
489
  }
490
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: YuvTokenSearchModule, decorators: [{
490
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: YuvTokenSearchModule, decorators: [{
491
491
  type: NgModule,
492
492
  args: [{
493
493
  imports: cmp,
@@ -92,10 +92,10 @@ class TreeService {
92
92
  this._resolveChildren(nodeIDs, n.children);
93
93
  });
94
94
  }
95
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: TreeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
96
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: TreeService }); }
95
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: TreeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
96
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: TreeService }); }
97
97
  }
98
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: TreeService, decorators: [{
98
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: TreeService, decorators: [{
99
99
  type: Injectable
100
100
  }] });
101
101
 
@@ -138,10 +138,10 @@ class TreeNodeComponent {
138
138
  ngOnDestroy() {
139
139
  this._subs.forEach((s) => s.unsubscribe());
140
140
  }
141
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: TreeNodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
142
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: TreeNodeComponent, isStandalone: true, selector: "yuv-tree-node", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, toggleIcon: { classPropertyName: "toggleIcon", publicName: "toggleIcon", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "treeitem" }, properties: { "class.focused": "focused", "attr.aria-selected": "selected", "attr.aria-expanded": "expanded" } }, ngImport: i0, template: "@if (node().children?.length) {\n <!-- toggle children button-->\n <!-- TODO: title should be i18n -->\n <button class=\"toggle\" (click)=\"toggleExpanded()\">\n <yuv-icon [svg]=\"toggleIcon()\"></yuv-icon>\n </button>\n}\n<div class=\"node-label\" [attr.node-id]=\"node().id\" [ngClass]=\"{ selectable: node().selectable }\" (click)=\"select($event)\">\n @if (node().icon) {\n <yuv-icon class=\"node-icon\" [svg]=\"node().icon!\"></yuv-icon>\n }\n <div class=\"label\">{{ node().label }}</div>\n</div>\n\n@if (node().expanded) {\n <div class=\"children\">\n @for (childNode of node().children; track $index) {\n <yuv-tree-node tabindex=\"0\" [toggleIcon]=\"toggleIcon()\" [node]=\"childNode\"></yuv-tree-node>\n }\n </div>\n}\n", styles: [":host-context(:focus).focused>.node-label{background-color:var(--ymt-focus-background);outline:1px solid var(--ymt-text-color-subtle);outline-offset:-3px}:host-context([selectable])[aria-selected=true]>.node-label{background-color:var(--ymt-selection-background)}:host-context([selectable])[aria-selected=true]>.node-label:hover{background-color:var(--ymt-selection-background)}:host{display:grid;grid-template-rows:auto auto;grid-template-columns:var(--toggle-icon-size) 1fr;grid-template-areas:\"toggle label\" \"child child\";align-items:center}:host .node-label{grid-area:label;display:flex;flex-flow:row nowrap;align-items:center}:host .node-label.selectable{cursor:pointer}:host .node-label:hover{background-color:var(--ymt-hover-background)}:host .node-label .label{padding:var(--node-padding);text-align:start;color:var(--ymt-text-color);background-color:transparent;-webkit-user-select:none;user-select:none;flex:1}:host .node-label .node-icon{color:var(--ymt-text-color-subtle)}:host .children{grid-area:child;padding-inline-start:var(--node-indent)}:host[aria-expanded=true] button.toggle{rotate:90deg}:host button.toggle{grid-area:toggle;border:0;padding:2px;border-radius:50%;justify-self:center;align-self:center}\n"], dependencies: [{ kind: "component", type: TreeNodeComponent, selector: "yuv-tree-node", inputs: ["node", "toggleIcon"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: YuvIconComponent, selector: "yuv-icon", inputs: ["label", "svg", "svgSrc"] }, { kind: "ngmodule", type: MatTooltipModule }] }); }
141
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: TreeNodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
142
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: TreeNodeComponent, isStandalone: true, selector: "yuv-tree-node", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, toggleIcon: { classPropertyName: "toggleIcon", publicName: "toggleIcon", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "treeitem" }, properties: { "class.focused": "focused", "attr.aria-selected": "selected", "attr.aria-expanded": "expanded" } }, ngImport: i0, template: "@if (node().children?.length) {\n <!-- toggle children button-->\n <!-- TODO: title should be i18n -->\n <button class=\"toggle\" (click)=\"toggleExpanded()\">\n <yuv-icon [svg]=\"toggleIcon()\"></yuv-icon>\n </button>\n}\n<div class=\"node-label\" [attr.node-id]=\"node().id\" [ngClass]=\"{ selectable: node().selectable }\" (click)=\"select($event)\">\n @if (node().icon) {\n <yuv-icon class=\"node-icon\" [svg]=\"node().icon!\"></yuv-icon>\n }\n <div class=\"label\">{{ node().label }}</div>\n</div>\n\n@if (node().expanded) {\n <div class=\"children\">\n @for (childNode of node().children; track $index) {\n <yuv-tree-node tabindex=\"0\" [toggleIcon]=\"toggleIcon()\" [node]=\"childNode\"></yuv-tree-node>\n }\n </div>\n}\n", styles: [":host-context(:focus).focused>.node-label{background-color:var(--ymt-focus-background);outline:1px solid var(--ymt-text-color-subtle);outline-offset:-3px}:host-context([selectable])[aria-selected=true]>.node-label{background-color:var(--ymt-selection-background)}:host-context([selectable])[aria-selected=true]>.node-label:hover{background-color:var(--ymt-selection-background)}:host{display:grid;grid-template-rows:auto auto;grid-template-columns:var(--toggle-icon-size) 1fr;grid-template-areas:\"toggle label\" \"child child\";align-items:center}:host .node-label{grid-area:label;display:flex;flex-flow:row nowrap;align-items:center}:host .node-label.selectable{cursor:pointer}:host .node-label:hover{background-color:var(--ymt-hover-background)}:host .node-label .label{padding:var(--node-padding);text-align:start;color:var(--ymt-text-color);background-color:transparent;-webkit-user-select:none;user-select:none;flex:1}:host .node-label .node-icon{color:var(--ymt-text-color-subtle)}:host .children{grid-area:child;padding-inline-start:var(--node-indent)}:host[aria-expanded=true] button.toggle{rotate:90deg}:host button.toggle{grid-area:toggle;border:0;padding:2px;border-radius:50%;justify-self:center;align-self:center}\n"], dependencies: [{ kind: "component", type: TreeNodeComponent, selector: "yuv-tree-node", inputs: ["node", "toggleIcon"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: YuvIconComponent, selector: "yuv-icon", inputs: ["label", "svg", "svgSrc"] }, { kind: "ngmodule", type: MatTooltipModule }] }); }
143
143
  }
144
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: TreeNodeComponent, decorators: [{
144
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: TreeNodeComponent, decorators: [{
145
145
  type: Component,
146
146
  args: [{ selector: 'yuv-tree-node', standalone: true, imports: [CommonModule, YuvIconComponent, MatTooltipModule], host: {
147
147
  role: 'treeitem',
@@ -274,10 +274,10 @@ class TreeComponent {
274
274
  ngOnDestroy() {
275
275
  this._observer.disconnect();
276
276
  }
277
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: TreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
278
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: TreeComponent, isStandalone: true, selector: "yuv-tree", inputs: { tree: { classPropertyName: "tree", publicName: "tree", isSignal: true, isRequired: true, transformFunction: null }, multiselect: { classPropertyName: "multiselect", publicName: "multiselect", isSignal: true, isRequired: false, transformFunction: null }, selectedNodes: { classPropertyName: "selectedNodes", publicName: "selectedNodes", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { selectionChange: "selectionChange" }, host: { attributes: { "role": "tree" }, listeners: { "keydown": "onKeydown($event)" }, properties: { "class.selectable": "selectable", "attr.tabindex": "tabindex" }, classAttribute: "yuv-tree" }, providers: [TreeService], ngImport: i0, template: "@for (node of tree().nodes; track node.id) {\n <yuv-tree-node tabindex=\"0\" [node]=\"node\"></yuv-tree-node>\n}\n", styles: [":host{--toggle-icon-size: 18px;--node-padding: var(--ymt-spacing-xs);--node-indent: var(--toggle-icon-size)}\n"], dependencies: [{ kind: "component", type: TreeNodeComponent, selector: "yuv-tree-node", inputs: ["node", "toggleIcon"] }] }); }
277
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: TreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
278
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: TreeComponent, isStandalone: true, selector: "yuv-tree", inputs: { tree: { classPropertyName: "tree", publicName: "tree", isSignal: true, isRequired: true, transformFunction: null }, multiselect: { classPropertyName: "multiselect", publicName: "multiselect", isSignal: true, isRequired: false, transformFunction: null }, selectedNodes: { classPropertyName: "selectedNodes", publicName: "selectedNodes", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { selectionChange: "selectionChange" }, host: { attributes: { "role": "tree" }, listeners: { "keydown": "onKeydown($event)" }, properties: { "class.selectable": "selectable", "attr.tabindex": "tabindex" }, classAttribute: "yuv-tree" }, providers: [TreeService], ngImport: i0, template: "@for (node of tree().nodes; track node.id) {\n <yuv-tree-node tabindex=\"0\" [node]=\"node\"></yuv-tree-node>\n}\n", styles: [":host{--toggle-icon-size: 18px;--node-padding: var(--ymt-spacing-xs);--node-indent: var(--toggle-icon-size)}\n"], dependencies: [{ kind: "component", type: TreeNodeComponent, selector: "yuv-tree-node", inputs: ["node", "toggleIcon"] }] }); }
279
279
  }
280
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: TreeComponent, decorators: [{
280
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: TreeComponent, decorators: [{
281
281
  type: Component,
282
282
  args: [{ selector: 'yuv-tree', standalone: true, imports: [TreeNodeComponent], providers: [TreeService], host: {
283
283
  class: 'yuv-tree',
@@ -38,10 +38,10 @@ class UploadProgressOverlayComponent {
38
38
  return this.translate.instant('yuv.upload-progress-overlay.error.default');
39
39
  }
40
40
  }
41
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: UploadProgressOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
42
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: UploadProgressOverlayComponent, isStandalone: true, selector: "yuv-upload-progress-overlay", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick" }, ngImport: i0, template: "<ul>\n @for (item of _items(); track item.id) {\n @let progress = item.progress | async;\n <li [ngClass]=\"{ err: !!item.err, done: !!item.result }\" [style.--progress]=\"progress + '%'\">\n <button mat-icon-button class=\"remove\" (click)=\"remove(item.id)\">\n <mat-icon [ngClass]=\"{ err: !!item.err }\">close</mat-icon>\n </button>\n\n @if (!item.result) {\n <div class=\"name\">{{ item.filename }}\n @if(item.err) {\n <span class=\"error\">{{item.err.message}}</span>\n }\n </div>\n <div class=\"progress\">\n @if (progress && progress < 100) {\n <div class=\"percentage\">{{ progress }}</div>\n }\n @else if(item.err) {\n <mat-icon class=\"error\">warning</mat-icon>\n }\n @else {\n <mat-progress-spinner mode=\"indeterminate\" class=\"ymt-progress-spinner--tiny\"></mat-progress-spinner>\n }\n </div>\n } @else {\n <div class=\"result-items\">\n @for (res of item.result; track $index) {\n <div class=\"result-item\">\n <div class=\"name\" (click)=\"itemClick.emit(res)\">\n {{ res.label }}\n </div>\n </div>\n }\n </div>\n <mat-icon class=\"done\">check</mat-icon>\n }\n </li>\n }\n</ul>\n", styles: [":host ul{list-style:none;padding:0;margin:var(--ymt-spacing-xs) 0}:host li{--hover-background: transparent;display:grid;grid-template-columns:1fr auto auto;grid-template-rows:auto;cursor:default;grid-template-areas:\"result progress action\";align-items:center;padding:var(--ymt-spacing-2xs) var(--ymt-spacing-2xs) var(--ymt-spacing-2xs) var(--ymt-spacing-xs);gap:.5em;margin-block-end:1px;background:linear-gradient(90deg,rgb(from var(--ymt-primary) r g b/.1) 0%,rgb(from var(--ymt-primary) r g b/.3) var(--progress),var(--hover-background) var(--progress));transition:background-color .3s ease-in-out}:host li.done{background:var(--hover-background)}:host li:hover{--hover-background: var(--ymt-hover-background)}:host li .name{grid-area:result;max-width:35ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host li .name .error{color:var(--ymt-text-color-subtle);display:block;font-style:italic;max-width:35ch}:host li .progress{grid-area:progress}:host li .percentage{font-family:monospace;padding:var(--ymt-spacing-2xs) var(--ymt-spacing-m);font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle);align-self:center}:host li .percentage:after{content:\"%\"}:host li mat-icon.done{--icon-size: 18px;fill:var(--ymt-primary)}:host li .remove{grid-area:action}:host li .remove mat-icon{color:var(--ymt-text-color-subtle)}:host .result-items{grid-area:result}:host .result-items .result-item{cursor:pointer}:host mat-icon{--icon-size: 18px;border-radius:4px}:host mat-icon.done{background-color:var(--ymt-primary);color:var(--ymt-on-primary)}:host mat-icon.error{color:var(--ymt-danger)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
41
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: UploadProgressOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
42
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: UploadProgressOverlayComponent, isStandalone: true, selector: "yuv-upload-progress-overlay", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick" }, ngImport: i0, template: "<ul>\n @for (item of _items(); track item.id) {\n @let progress = item.progress | async;\n <li [ngClass]=\"{ err: !!item.err, done: !!item.result }\" [style.--progress]=\"progress + '%'\">\n <button mat-icon-button class=\"remove\" (click)=\"remove(item.id)\">\n <mat-icon [ngClass]=\"{ err: !!item.err }\">close</mat-icon>\n </button>\n\n @if (!item.result) {\n <div class=\"name\">{{ item.filename }}\n @if(item.err) {\n <span class=\"error\">{{item.err.message}}</span>\n }\n </div>\n <div class=\"progress\">\n @if (progress && progress < 100) {\n <div class=\"percentage\">{{ progress }}</div>\n }\n @else if(item.err) {\n <mat-icon class=\"error\">warning</mat-icon>\n }\n @else {\n <mat-progress-spinner mode=\"indeterminate\" class=\"ymt-progress-spinner--tiny\"></mat-progress-spinner>\n }\n </div>\n } @else {\n <div class=\"result-items\">\n @for (res of item.result; track $index) {\n <div class=\"result-item\">\n <div class=\"name\" (click)=\"itemClick.emit(res)\">\n {{ res.label }}\n </div>\n </div>\n }\n </div>\n <mat-icon class=\"done\">check</mat-icon>\n }\n </li>\n }\n</ul>\n", styles: [":host ul{list-style:none;padding:0;margin:var(--ymt-spacing-xs) 0}:host li{--hover-background: transparent;display:grid;grid-template-columns:1fr auto auto;grid-template-rows:auto;cursor:default;grid-template-areas:\"result progress action\";align-items:center;padding:var(--ymt-spacing-2xs) var(--ymt-spacing-2xs) var(--ymt-spacing-2xs) var(--ymt-spacing-xs);gap:.5em;margin-block-end:1px;background:linear-gradient(90deg,rgb(from var(--ymt-primary) r g b/.1) 0%,rgb(from var(--ymt-primary) r g b/.3) var(--progress),var(--hover-background) var(--progress));transition:background-color .3s ease-in-out}:host li.done{background:var(--hover-background)}:host li:hover{--hover-background: var(--ymt-hover-background)}:host li .name{grid-area:result;max-width:35ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host li .name .error{color:var(--ymt-text-color-subtle);display:block;font-style:italic;max-width:35ch}:host li .progress{grid-area:progress}:host li .percentage{font-family:monospace;padding:var(--ymt-spacing-2xs) var(--ymt-spacing-m);font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle);align-self:center}:host li .percentage:after{content:\"%\"}:host li mat-icon.done{--icon-size: 18px;fill:var(--ymt-primary)}:host li .remove{grid-area:action}:host li .remove mat-icon{color:var(--ymt-text-color-subtle)}:host .result-items{grid-area:result}:host .result-items .result-item{cursor:pointer}:host mat-icon{--icon-size: 18px;border-radius:4px}:host mat-icon.done{background-color:var(--ymt-primary);color:var(--ymt-on-primary)}:host mat-icon.error{color:var(--ymt-danger)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
43
43
  }
44
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: UploadProgressOverlayComponent, decorators: [{
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: UploadProgressOverlayComponent, decorators: [{
45
45
  type: Component,
46
46
  args: [{ selector: 'yuv-upload-progress-overlay', standalone: true, imports: [CommonModule, MatButtonModule, MatIconModule, MatProgressSpinner], template: "<ul>\n @for (item of _items(); track item.id) {\n @let progress = item.progress | async;\n <li [ngClass]=\"{ err: !!item.err, done: !!item.result }\" [style.--progress]=\"progress + '%'\">\n <button mat-icon-button class=\"remove\" (click)=\"remove(item.id)\">\n <mat-icon [ngClass]=\"{ err: !!item.err }\">close</mat-icon>\n </button>\n\n @if (!item.result) {\n <div class=\"name\">{{ item.filename }}\n @if(item.err) {\n <span class=\"error\">{{item.err.message}}</span>\n }\n </div>\n <div class=\"progress\">\n @if (progress && progress < 100) {\n <div class=\"percentage\">{{ progress }}</div>\n }\n @else if(item.err) {\n <mat-icon class=\"error\">warning</mat-icon>\n }\n @else {\n <mat-progress-spinner mode=\"indeterminate\" class=\"ymt-progress-spinner--tiny\"></mat-progress-spinner>\n }\n </div>\n } @else {\n <div class=\"result-items\">\n @for (res of item.result; track $index) {\n <div class=\"result-item\">\n <div class=\"name\" (click)=\"itemClick.emit(res)\">\n {{ res.label }}\n </div>\n </div>\n }\n </div>\n <mat-icon class=\"done\">check</mat-icon>\n }\n </li>\n }\n</ul>\n", styles: [":host ul{list-style:none;padding:0;margin:var(--ymt-spacing-xs) 0}:host li{--hover-background: transparent;display:grid;grid-template-columns:1fr auto auto;grid-template-rows:auto;cursor:default;grid-template-areas:\"result progress action\";align-items:center;padding:var(--ymt-spacing-2xs) var(--ymt-spacing-2xs) var(--ymt-spacing-2xs) var(--ymt-spacing-xs);gap:.5em;margin-block-end:1px;background:linear-gradient(90deg,rgb(from var(--ymt-primary) r g b/.1) 0%,rgb(from var(--ymt-primary) r g b/.3) var(--progress),var(--hover-background) var(--progress));transition:background-color .3s ease-in-out}:host li.done{background:var(--hover-background)}:host li:hover{--hover-background: var(--ymt-hover-background)}:host li .name{grid-area:result;max-width:35ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host li .name .error{color:var(--ymt-text-color-subtle);display:block;font-style:italic;max-width:35ch}:host li .progress{grid-area:progress}:host li .percentage{font-family:monospace;padding:var(--ymt-spacing-2xs) var(--ymt-spacing-m);font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle);align-self:center}:host li .percentage:after{content:\"%\"}:host li mat-icon.done{--icon-size: 18px;fill:var(--ymt-primary)}:host li .remove{grid-area:action}:host li .remove mat-icon{color:var(--ymt-text-color-subtle)}:host .result-items{grid-area:result}:host .result-items .result-item{cursor:pointer}:host mat-icon{--icon-size: 18px;border-radius:4px}:host mat-icon.done{background-color:var(--ymt-primary);color:var(--ymt-on-primary)}:host mat-icon.error{color:var(--ymt-danger)}\n"] }]
47
47
  }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }] } });
@@ -93,10 +93,10 @@ class UploadProgressComponent {
93
93
  close() {
94
94
  this.filteredItems().forEach((item) => this.#uploadService.cancelItem(item.id));
95
95
  }
96
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: UploadProgressComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
97
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: UploadProgressComponent, isStandalone: true, selector: "yuv-upload-progress", inputs: { scopes: { classPropertyName: "scopes", publicName: "scopes", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { resultItemClick: "resultItemClick" }, host: { properties: { "class.expanded": "expanded" } }, ngImport: i0, template: "@let items = filteredItems();\n@if (items.length) {\n @let completed = completedUp$ | async;\n\n <div class=\"upload-progress\">\n <header>\n <h4>\n @if (!completed) {\n {{ 'yuv.upload-progress.header.uploading' | translate: { count: items.length } }}\n } @else {\n {{ 'yuv.upload-progress.header.uploaded' | translate: { count: items.length } }}\n }\n </h4>\n <button mat-icon-button (click)=\"expanded = !expanded\">\n <mat-icon class=\"toggle\">keyboard_arrow_down</mat-icon>\n </button>\n <button mat-icon-button (click)=\"close()\">\n <mat-icon class=\"toggle\">clear</mat-icon>\n </button>\n </header>\n @if (expanded) {\n <yuv-upload-progress-overlay [items]=\"items\" (itemClick)=\"resultItemClick.emit($event)\" />\n }\n </div>\n}\n", styles: [":host{--upload-progress-background-header: var(--ymt-surface-panel);--upload-progress-background-main: var(--ymt-surface-panel);--upload-progress-border-color: var(--ymt-surface-panel);--upload-progress-outline: 4px solid rgb(from var(--ymt-outline-variant) r g b / .9);--upload-progress-border-radius: var(--ymt-spacing-2xs);position:absolute;inset-block-end:var(--ymt-spacing-m);inset-inline-end:var(--ymt-spacing-m);z-index:1000}:host .upload-progress{display:flex;flex-flow:column;background-color:var(--upload-progress-background-main);border:1px solid var(--upload-progress-border-color);border-radius:var(--upload-progress-border-radius);outline:var(--upload-progress-outline);min-width:250px;max-height:30vh;overflow:hidden;animation:appear .3s ease-in-out}:host .toggle{rotate:180deg}:host.expanded .toggle{rotate:0deg}:host header{display:flex;align-items:center;gap:var(--ymt-spacing-2xs);background-color:var(--upload-progress-background-header);padding:var(--ymt-spacing-2xs)}:host header h4{margin:0;padding:0 var(--ymt-spacing-xs);flex:1}:host yuv-upload-progress-overlay{overflow-y:auto}@keyframes appear{0%{opacity:0;transform:translateY(var(--ymt-spacing-m))}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: UploadProgressOverlayComponent, selector: "yuv-upload-progress-overlay", inputs: ["items"], outputs: ["itemClick"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
96
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: UploadProgressComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
97
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: UploadProgressComponent, isStandalone: true, selector: "yuv-upload-progress", inputs: { scopes: { classPropertyName: "scopes", publicName: "scopes", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { resultItemClick: "resultItemClick" }, host: { properties: { "class.expanded": "expanded" } }, ngImport: i0, template: "@let items = filteredItems();\n@if (items.length) {\n @let completed = completedUp$ | async;\n\n <div class=\"upload-progress\">\n <header>\n <h4>\n @if (!completed) {\n {{ 'yuv.upload-progress.header.uploading' | translate: { count: items.length } }}\n } @else {\n {{ 'yuv.upload-progress.header.uploaded' | translate: { count: items.length } }}\n }\n </h4>\n <button mat-icon-button (click)=\"expanded = !expanded\">\n <mat-icon class=\"toggle\">keyboard_arrow_down</mat-icon>\n </button>\n <button mat-icon-button (click)=\"close()\">\n <mat-icon class=\"toggle\">clear</mat-icon>\n </button>\n </header>\n @if (expanded) {\n <yuv-upload-progress-overlay [items]=\"items\" (itemClick)=\"resultItemClick.emit($event)\" />\n }\n </div>\n}\n", styles: [":host{--upload-progress-background-header: var(--ymt-surface-panel);--upload-progress-background-main: var(--ymt-surface-panel);--upload-progress-border-color: var(--ymt-surface-panel);--upload-progress-outline: 4px solid rgb(from var(--ymt-outline-variant) r g b / .9);--upload-progress-border-radius: var(--ymt-spacing-2xs);position:absolute;inset-block-end:var(--ymt-spacing-m);inset-inline-end:var(--ymt-spacing-m);z-index:1000}:host .upload-progress{display:flex;flex-flow:column;background-color:var(--upload-progress-background-main);border:1px solid var(--upload-progress-border-color);border-radius:var(--upload-progress-border-radius);outline:var(--upload-progress-outline);min-width:250px;max-height:30vh;overflow:hidden;animation:appear .3s ease-in-out}:host .toggle{rotate:180deg}:host.expanded .toggle{rotate:0deg}:host header{display:flex;align-items:center;gap:var(--ymt-spacing-2xs);background-color:var(--upload-progress-background-header);padding:var(--ymt-spacing-2xs)}:host header h4{margin:0;padding:0 var(--ymt-spacing-xs);flex:1}:host yuv-upload-progress-overlay{overflow-y:auto}@keyframes appear{0%{opacity:0;transform:translateY(var(--ymt-spacing-m))}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: UploadProgressOverlayComponent, selector: "yuv-upload-progress-overlay", inputs: ["items"], outputs: ["itemClick"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
98
98
  }
99
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: UploadProgressComponent, decorators: [{
99
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: UploadProgressComponent, decorators: [{
100
100
  type: Component,
101
101
  args: [{ selector: 'yuv-upload-progress', standalone: true, imports: [CommonModule, MatButtonModule, MatIconModule, TranslatePipe, UploadProgressOverlayComponent], changeDetection: ChangeDetectionStrategy.OnPush, host: {
102
102
  '[class.expanded]': 'expanded'
@@ -107,11 +107,11 @@ const cmp = [
107
107
  UploadProgressComponent
108
108
  ];
109
109
  class YuvUploadProgressModule {
110
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: YuvUploadProgressModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
111
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.12", ngImport: i0, type: YuvUploadProgressModule, imports: [UploadProgressComponent], exports: [UploadProgressComponent] }); }
112
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: YuvUploadProgressModule, imports: [cmp] }); }
110
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: YuvUploadProgressModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
111
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.20", ngImport: i0, type: YuvUploadProgressModule, imports: [UploadProgressComponent], exports: [UploadProgressComponent] }); }
112
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: YuvUploadProgressModule, imports: [cmp] }); }
113
113
  }
114
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: YuvUploadProgressModule, decorators: [{
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: YuvUploadProgressModule, decorators: [{
115
115
  type: NgModule,
116
116
  args: [{
117
117
  imports: [cmp],
@@ -601,10 +601,10 @@ class HaloFocusService {
601
601
  this.#stopTracking();
602
602
  }
603
603
  };
604
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: HaloFocusService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
605
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: HaloFocusService, providedIn: 'root' }); }
604
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: HaloFocusService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
605
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: HaloFocusService, providedIn: 'root' }); }
606
606
  }
607
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: HaloFocusService, decorators: [{
607
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: HaloFocusService, decorators: [{
608
608
  type: Injectable,
609
609
  args: [{
610
610
  providedIn: 'root'
@@ -1033,10 +1033,10 @@ class HaloUtilityService {
1033
1033
  haloElement.style.height = `${height}px`;
1034
1034
  haloElement.style.borderRadius = cs.borderRadius || '8px';
1035
1035
  }
1036
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: HaloUtilityService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1037
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: HaloUtilityService }); }
1036
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: HaloUtilityService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1037
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: HaloUtilityService }); }
1038
1038
  }
1039
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: HaloUtilityService, decorators: [{
1039
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: HaloUtilityService, decorators: [{
1040
1040
  type: Injectable
1041
1041
  }] });
1042
1042
 
@@ -1146,10 +1146,10 @@ class PwaUpdateService {
1146
1146
  .catch(() => false)
1147
1147
  .finally(() => document.location.reload());
1148
1148
  }
1149
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: PwaUpdateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1150
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: PwaUpdateService, providedIn: 'root' }); }
1149
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: PwaUpdateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1150
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: PwaUpdateService, providedIn: 'root' }); }
1151
1151
  }
1152
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: PwaUpdateService, decorators: [{
1152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: PwaUpdateService, decorators: [{
1153
1153
  type: Injectable,
1154
1154
  args: [{ providedIn: 'root' }]
1155
1155
  }] });
@@ -1191,10 +1191,10 @@ class SessionExpiryDialogComponent {
1191
1191
  // eslint-disable-next-line @typescript-eslint/no-magic-numbers
1192
1192
  return Math.max(0, Math.ceil((this.#data.expiresAt - Date.now()) / 1000));
1193
1193
  }
1194
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: SessionExpiryDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1195
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.12", type: SessionExpiryDialogComponent, isStandalone: true, selector: "yuv-session-expiry-dialog", ngImport: i0, template: "<yuv-dialog [headertitle]=\"'yuv.session.expires.title' | translate\">\n <main>{{ 'yuv.session.expires.message' | translate: { seconds: remainingSeconds() } }}</main>\n <footer>\n <button ymtButton=\"primary\" type=\"button\" (click)=\"extend()\">\n {{ 'yuv.session.extend.action' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n", styles: ["main{padding:var(--ymt-spacing-m)}\n"], dependencies: [{ kind: "component", type: DialogComponent, selector: "yuv-dialog", inputs: ["headertitle", "headertitel"] }, { kind: "directive", type: YmtButtonDirective, selector: "button[ymtButton], a[ymtButton]", inputs: ["ymtButton", "disabled", "aria-disabled", "disableRipple", "disabledInteractive", "button-size"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1194
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: SessionExpiryDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1195
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.20", type: SessionExpiryDialogComponent, isStandalone: true, selector: "yuv-session-expiry-dialog", ngImport: i0, template: "<yuv-dialog [headertitle]=\"'yuv.session.expires.title' | translate\">\n <main>{{ 'yuv.session.expires.message' | translate: { seconds: remainingSeconds() } }}</main>\n <footer>\n <button ymtButton=\"primary\" type=\"button\" (click)=\"extend()\">\n {{ 'yuv.session.extend.action' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n", styles: ["main{padding:var(--ymt-spacing-m)}\n"], dependencies: [{ kind: "component", type: DialogComponent, selector: "yuv-dialog", inputs: ["headertitle", "headertitel"] }, { kind: "directive", type: YmtButtonDirective, selector: "button[ymtButton], a[ymtButton]", inputs: ["ymtButton", "disabled", "aria-disabled", "disableRipple", "disabledInteractive", "button-size"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1196
1196
  }
1197
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: SessionExpiryDialogComponent, decorators: [{
1197
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: SessionExpiryDialogComponent, decorators: [{
1198
1198
  type: Component,
1199
1199
  args: [{ selector: 'yuv-session-expiry-dialog', imports: [DialogComponent, YmtButtonDirective, TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<yuv-dialog [headertitle]=\"'yuv.session.expires.title' | translate\">\n <main>{{ 'yuv.session.expires.message' | translate: { seconds: remainingSeconds() } }}</main>\n <footer>\n <button ymtButton=\"primary\" type=\"button\" (click)=\"extend()\">\n {{ 'yuv.session.extend.action' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n", styles: ["main{padding:var(--ymt-spacing-m)}\n"] }]
1200
1200
  }], ctorParameters: () => [] });
@@ -1524,10 +1524,10 @@ class SessionService {
1524
1524
  this.#activityWindowEnd$?.unsubscribe();
1525
1525
  this.#logoutTimer$?.unsubscribe();
1526
1526
  }
1527
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: SessionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1528
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: SessionService, providedIn: 'root' }); }
1527
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: SessionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1528
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: SessionService, providedIn: 'root' }); }
1529
1529
  }
1530
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: SessionService, decorators: [{
1530
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: SessionService, decorators: [{
1531
1531
  type: Injectable,
1532
1532
  args: [{ providedIn: 'root' }]
1533
1533
  }] });
@@ -1581,10 +1581,10 @@ class SnackBarService {
1581
1581
  panelClass: ['yuv-snack-bar', 'level-' + options.level]
1582
1582
  });
1583
1583
  }
1584
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: SnackBarService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1585
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: SnackBarService, providedIn: 'root' }); }
1584
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: SnackBarService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1585
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: SnackBarService, providedIn: 'root' }); }
1586
1586
  }
1587
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: SnackBarService, decorators: [{
1587
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: SnackBarService, decorators: [{
1588
1588
  type: Injectable,
1589
1589
  args: [{
1590
1590
  providedIn: 'root'
@@ -1610,8 +1610,8 @@ class SnackBarComponent {
1610
1610
  this.#snackBarRef.dismiss();
1611
1611
  }
1612
1612
  }
1613
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: SnackBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1614
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: SnackBarComponent, isStandalone: true, selector: "yuv-snack-bar-component", host: { properties: { "class.info": "level() === 'info'", "class.success": "level() === 'success'", "class.warning": "level() === 'warning'", "class.danger": "level() === 'danger'" } }, ngImport: i0, template: `
1613
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: SnackBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1614
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: SnackBarComponent, isStandalone: true, selector: "yuv-snack-bar-component", host: { properties: { "class.info": "level() === 'info'", "class.success": "level() === 'success'", "class.warning": "level() === 'warning'", "class.danger": "level() === 'danger'" } }, ngImport: i0, template: `
1615
1615
  @let a = action();
1616
1616
  <span
1617
1617
  matSnackBarLabel
@@ -1630,7 +1630,7 @@ class SnackBarComponent {
1630
1630
  }
1631
1631
  `, isInline: true, styles: [":host{display:flex}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatSnackBarLabel, selector: "[matSnackBarLabel]" }, { kind: "directive", type: MatSnackBarActions, selector: "[matSnackBarActions]" }, { kind: "directive", type: MatSnackBarAction, selector: "[matSnackBarAction]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1632
1632
  }
1633
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: SnackBarComponent, decorators: [{
1633
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: SnackBarComponent, decorators: [{
1634
1634
  type: Component,
1635
1635
  args: [{ selector: 'yuv-snack-bar-component', template: `
1636
1636
  @let a = action();
@@ -1830,11 +1830,11 @@ function provideSession(sessionDuration) {
1830
1830
  }
1831
1831
 
1832
1832
  class YuuvisClientFrameworkModule {
1833
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: YuuvisClientFrameworkModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1834
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.12", ngImport: i0, type: YuuvisClientFrameworkModule, imports: [CommonModule] }); }
1835
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: YuuvisClientFrameworkModule, imports: [CommonModule] }); }
1833
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: YuuvisClientFrameworkModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1834
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.20", ngImport: i0, type: YuuvisClientFrameworkModule, imports: [CommonModule] }); }
1835
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: YuuvisClientFrameworkModule, imports: [CommonModule] }); }
1836
1836
  }
1837
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: YuuvisClientFrameworkModule, decorators: [{
1837
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: YuuvisClientFrameworkModule, decorators: [{
1838
1838
  type: NgModule,
1839
1839
  args: [{
1840
1840
  imports: [CommonModule],
@@ -53,6 +53,7 @@
53
53
  "yuv.form.element.datetime.calendar.today": "Heute",
54
54
  "yuv.form.element.organization-set.classify.icon.title": "Gruppe",
55
55
  "yuv.form.element.organization.classify.icon.title": "Benutzer",
56
+ "yuv.form.element.organization.freetext.tooltip": "Freitext – kein aufgelöster Benutzer bzw. keine Gruppe",
56
57
  "yuv.form.element.reference.classify.icon.title": "Referenz",
57
58
  "yuv.form.element.reference.open.title": "Referenziertes Objekt öffnen",
58
59
  "yuv.form.element.range-select-date.custom.overlay.button.apply": "Anwenden",
@@ -137,12 +138,12 @@
137
138
  "yuv.object-versions.tabs.indexdata.title": "Metadaten",
138
139
  "yuv.audit.label.create.metadata": "Objekt wurde erstellt",
139
140
  "yuv.audit.label.create.metadata.withcontent": "Objekt wurde mit Dokumentdatei erstellt",
140
- "yuv.audit.label.create.relationship": "Beziehung wurde erstellt",
141
+ "yuv.audit.label.create.relationship": "Verknüpfung wurde erstellt",
141
142
  "yuv.audit.label.create.tag": "Tag wurde erstellt",
142
143
  "yuv.audit.label.delete": "Objekt wurde gelöscht",
143
144
  "yuv.audit.label.delete.content": "Dokumentdatei wurde gelöscht",
144
145
  "yuv.audit.label.delete.marked": "Objekt wurde zur Löschung vorgesehen",
145
- "yuv.audit.label.delete.relationship": "Beziehung wurde gelöscht",
146
+ "yuv.audit.label.delete.relationship": "Verknüpfung wurde gelöscht",
146
147
  "yuv.audit.label.delete.tag": "Tag wurde gelöscht",
147
148
  "yuv.audit.label.delete.version": "Dokumentversion wurde gelöscht",
148
149
  "yuv.audit.label.get.content": "Dokumentdatei wurde gelesen",
@@ -156,7 +157,7 @@
156
157
  "yuv.audit.label.update.metadata.withcontent": "Metadaten und Dokumentdatei wurden geändert",
157
158
  "yuv.audit.label.update.move": "Objekt wurde verschoben",
158
159
  "yuv.audit.label.update.move.content": "Dokumentdatei wurde verschoben",
159
- "yuv.audit.label.update.relationship": "Beziehung wurde geändert",
160
+ "yuv.audit.label.update.relationship": "Verknüpfung wurde geändert",
160
161
  "yuv.audit.label.update.restore": "Alte Version wurde wiederhergestellt",
161
162
  "yuv.audit.label.update.restore.more": "Wiederhergestellt aus Version {{version}}",
162
163
  "yuv.audit.label.update.tag": "Tag wurde geändert",
@@ -171,18 +172,14 @@
171
172
  "yuv.smart-search.add-type": "Suchen…",
172
173
  "yuv.smart-search.cancel": "Abbrechen",
173
174
  "yuv.smart-search.combinator.and": "UND",
174
- "yuv.smart-search.combinator.or": "ODER",
175
175
  "yuv.smart-search.combinator.as-well-as": "sowie",
176
+ "yuv.smart-search.combinator.or": "ODER",
176
177
  "yuv.smart-search.condition.edit-aria": "Bedingung bearbeiten: {{label}}",
177
178
  "yuv.smart-search.condition.mark-dynamic": "Als auszufüllendes Feld festlegen",
178
179
  "yuv.smart-search.condition.remove": "Bedingung entfernen",
179
180
  "yuv.smart-search.condition.unmark-dynamic": "Aus auszufüllenden Feldern entfernen",
180
181
  "yuv.smart-search.condition.unset-value": "Kein Wert gesetzt",
181
182
  "yuv.smart-search.confirm": "Bestätigen",
182
- "yuv.smart-search.mode.empty": "Keine auszufüllenden Felder. Markieren Sie Bedingungen mit dem Blitz-Symbol, um sie hier hinzuzufügen.",
183
- "yuv.smart-search.mode.essentials": "Kompakt",
184
- "yuv.smart-search.mode.full": "Vollständige Suche",
185
- "yuv.smart-search.mode.label": "Suchmodus",
186
183
  "yuv.smart-search.date-preset.this-month": "Dieser Monat",
187
184
  "yuv.smart-search.date-preset.this-week": "Diese Woche",
188
185
  "yuv.smart-search.date-preset.this-year": "Dieses Jahr",
@@ -196,6 +193,10 @@
196
193
  "yuv.smart-search.fulltext.scope.metadata": "Nur Metadaten",
197
194
  "yuv.smart-search.fulltext.types.all": "Alle Typen",
198
195
  "yuv.smart-search.fulltext.types.label": "Auf Typen einschränken",
196
+ "yuv.smart-search.mode.empty": "Keine auszufüllenden Felder. Markieren Sie Bedingungen mit dem Blitz-Symbol, um sie hier hinzuzufügen.",
197
+ "yuv.smart-search.mode.essentials": "Kompakt",
198
+ "yuv.smart-search.mode.full": "Vollständige Suche",
199
+ "yuv.smart-search.mode.label": "Suchmodus",
199
200
  "yuv.smart-search.operator.change": "Operator ändern",
200
201
  "yuv.smart-search.operator.empty": "ist leer",
201
202
  "yuv.smart-search.operator.eq-false": "= falsch",
@@ -213,6 +214,7 @@
213
214
  "yuv.sort.tooltip": "Sortieren",
214
215
  "yuv.action.empty.selection": "",
215
216
  "yuv.tile-config.button.close": "Schließen",
217
+ "yuv.tile-config.error.title-required": "Ein Titel-Attribut ist erforderlich. Wählen Sie ein Attribut für den Titel aus.",
216
218
  "yuv.tile-config.button.reset": "Zurücksetzen",
217
219
  "yuv.tile-config.button.save": "Änderungen speichern",
218
220
  "yuv.tile-config.icon-select.pick": "Icon auswählen",
@@ -38,6 +38,7 @@
38
38
  "yuv.clipboard.text.cut.multiple": "{{count}} elements cut out",
39
39
  "yuv.clipboard.text.cut.single": "1 element cut out",
40
40
  "yuv.calendar.time.label": "Time",
41
+ "yuv.form.element.catalog.option.none": "No selection",
41
42
  "yuv.form.element.data.grid.add-row.button.tooltip": "Add row",
42
43
  "yuv.form.element.data.grid.add.headline": "Add new row",
43
44
  "yuv.form.element.data.grid.edit": "Edit",
@@ -49,10 +50,10 @@
49
50
  "yuv.form.element.data.grid.row.button.actions.tooltip": "Open actions menu",
50
51
  "yuv.form.element.datetime.calendar.cancel": "Cancel",
51
52
  "yuv.form.element.datetime.calendar.select": "Select",
52
- "yuv.form.element.catalog.option.none": "No selection",
53
53
  "yuv.form.element.datetime.calendar.today": "Today",
54
54
  "yuv.form.element.organization-set.classify.icon.title": "Group",
55
55
  "yuv.form.element.organization.classify.icon.title": "User",
56
+ "yuv.form.element.organization.freetext.tooltip": "Free text – not a resolved user or group",
56
57
  "yuv.form.element.reference.classify.icon.title": "Reference",
57
58
  "yuv.form.element.reference.open.title": "Open referenced object",
58
59
  "yuv.form.element.range-select-date.custom.overlay.button.apply": "Apply",
@@ -142,7 +143,7 @@
142
143
  "yuv.audit.label.delete": "Object was deleted",
143
144
  "yuv.audit.label.delete.content": "Document file was deleted",
144
145
  "yuv.audit.label.delete.marked": "Object was marked for deletion",
145
- "yuv.audit.label.delete.relationship": "Relationship was deleted",
146
+ "yuv.audit.label.delete.relationship": "Link was deleted",
146
147
  "yuv.audit.label.delete.tag": "Tag was deleted",
147
148
  "yuv.audit.label.delete.version": "Document version was deleted",
148
149
  "yuv.audit.label.get.content": "Document file was read",
@@ -156,7 +157,7 @@
156
157
  "yuv.audit.label.update.metadata.withcontent": "Metadata and document file were changed",
157
158
  "yuv.audit.label.update.move": "Object was moved",
158
159
  "yuv.audit.label.update.move.content": "Document file was moved",
159
- "yuv.audit.label.update.relationship": "Relationship was changed",
160
+ "yuv.audit.label.update.relationship": "Link was changed",
160
161
  "yuv.audit.label.update.restore": "An old version was restored",
161
162
  "yuv.audit.label.update.restore.more": "Restored from version {{version}}",
162
163
  "yuv.audit.label.update.tag": "Tag was changed",
@@ -171,18 +172,14 @@
171
172
  "yuv.smart-search.add-type": "Search...",
172
173
  "yuv.smart-search.cancel": "Cancel",
173
174
  "yuv.smart-search.combinator.and": "AND",
174
- "yuv.smart-search.combinator.or": "OR",
175
175
  "yuv.smart-search.combinator.as-well-as": "as well as",
176
+ "yuv.smart-search.combinator.or": "OR",
176
177
  "yuv.smart-search.condition.edit-aria": "Edit condition: {{label}}",
177
178
  "yuv.smart-search.condition.mark-dynamic": "Make this an input field",
178
179
  "yuv.smart-search.condition.remove": "Remove condition",
179
180
  "yuv.smart-search.condition.unmark-dynamic": "Remove from input fields",
180
181
  "yuv.smart-search.condition.unset-value": "Value not set",
181
182
  "yuv.smart-search.confirm": "Confirm",
182
- "yuv.smart-search.mode.empty": "No input fields available. Mark conditions with the lightning icon to add them here.",
183
- "yuv.smart-search.mode.essentials": "Essentials",
184
- "yuv.smart-search.mode.full": "Full search",
185
- "yuv.smart-search.mode.label": "Search mode",
186
183
  "yuv.smart-search.date-preset.this-month": "This month",
187
184
  "yuv.smart-search.date-preset.this-week": "This week",
188
185
  "yuv.smart-search.date-preset.this-year": "This year",
@@ -196,6 +193,10 @@
196
193
  "yuv.smart-search.fulltext.scope.metadata": "Metadata only",
197
194
  "yuv.smart-search.fulltext.types.all": "All types",
198
195
  "yuv.smart-search.fulltext.types.label": "Limit to types",
196
+ "yuv.smart-search.mode.empty": "No input fields available. Mark conditions with the lightning icon to add them here.",
197
+ "yuv.smart-search.mode.essentials": "Essentials",
198
+ "yuv.smart-search.mode.full": "Full search",
199
+ "yuv.smart-search.mode.label": "Search mode",
199
200
  "yuv.smart-search.operator.change": "Modify operator",
200
201
  "yuv.smart-search.operator.empty": "is empty",
201
202
  "yuv.smart-search.operator.eq-false": "= false",
@@ -213,6 +214,7 @@
213
214
  "yuv.sort.tooltip": "Sort",
214
215
  "yuv.action.empty.selection": "",
215
216
  "yuv.tile-config.button.close": "Close",
217
+ "yuv.tile-config.error.title-required": "A title attribute is required. Select an attribute for the title slot.",
216
218
  "yuv.tile-config.button.reset": "Reset",
217
219
  "yuv.tile-config.button.save": "Save changes",
218
220
  "yuv.tile-config.icon-select.pick": "Select icon",
package/package.json CHANGED
@@ -1,24 +1,24 @@
1
1
  {
2
2
  "name": "@yuuvis/client-framework",
3
- "version": "3.15.0",
3
+ "version": "3.17.0",
4
4
  "author": "OPTIMAL SYSTEMS GmbH <npm@optimal-systems.de>",
5
5
  "license": "MIT",
6
6
  "peerDependencies": {
7
- "@angular/cdk": "^21.2.7",
8
- "@angular/common": "^21.2.9",
9
- "@angular/core": "^21.2.9",
7
+ "@angular/cdk": "^21.2.14",
8
+ "@angular/common": "^21.2.19",
9
+ "@angular/core": "^21.2.19",
10
10
  "angular-gridster2": "^21.0.1",
11
- "@yuuvis/client-core": "^3.15.0",
12
- "@yuuvis/client-shell-core": "^3.15.0",
13
- "@yuuvis/client-components": "^3.15.0",
11
+ "@yuuvis/client-core": "^3.17.0",
12
+ "@yuuvis/client-shell-core": "^3.17.0",
13
+ "@yuuvis/client-components": "^3.17.0",
14
14
  "ng-dynamic-component": "^10.8.2",
15
15
  "modern-normalize": "^3.0.1"
16
16
  },
17
17
  "dependencies": {
18
- "@angular/material": "^21.2.7",
18
+ "@angular/material": "^21.2.14",
19
19
  "@ngrx/signals": "^21.1.0",
20
- "@yuuvis/material": "^3.15.0",
21
- "@yuuvis/media-viewer": "^3.0.6",
20
+ "@yuuvis/material": "^3.17.0",
21
+ "@yuuvis/media-viewer": "^4.0.0",
22
22
  "angular-split": "^20.0.0",
23
23
  "vis-network": "^10.0.2",
24
24
  "tslib": "^2.3.0"
@@ -38,6 +38,13 @@ declare class BadgeChipComponent {
38
38
  badge: _angular_core.InputSignal<Badge>;
39
39
  showLabel: _angular_core.InputSignal<boolean>;
40
40
  readonly tooltip: _angular_core.Signal<string>;
41
+ /**
42
+ * Accessible name for the icon-only variant. Without a label the chip renders nothing
43
+ * but an inert icon, so assistive technology has no name to announce — the tooltip is
44
+ * a description, not a name, and it is mouse-only anyway. When the label is visible it
45
+ * already names the chip, so no override is set.
46
+ */
47
+ readonly ariaLabel: _angular_core.Signal<string | null>;
41
48
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<BadgeChipComponent, never>;
42
49
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<BadgeChipComponent, "yuv-badge-chip", never, { "badge": { "alias": "badge"; "required": true; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
43
50
  }