@dereekb/dbx-web 12.4.5 → 12.5.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 (66) hide show
  1. package/esm2022/lib/action/action.confirm.directive.mjs +4 -4
  2. package/esm2022/lib/action/snackbar/action.snackbar.component.mjs +2 -2
  3. package/esm2022/lib/action/transition/transition.safety.dialog.component.mjs +2 -2
  4. package/esm2022/lib/button/button.component.mjs +46 -20
  5. package/esm2022/lib/button/progress/abstract.progress.button.directive.mjs +53 -7
  6. package/esm2022/lib/button/progress/bar.button.component.mjs +3 -3
  7. package/esm2022/lib/button/progress/button.progress.config.mjs +1 -1
  8. package/esm2022/lib/button/progress/spinner.button.component.mjs +3 -3
  9. package/esm2022/lib/extension/download/text/download.text.component.mjs +2 -2
  10. package/esm2022/lib/interaction/filter/filter.wrapper.component.mjs +2 -2
  11. package/esm2022/lib/interaction/index.mjs +2 -1
  12. package/esm2022/lib/interaction/popup/popup.controls.buttons.component.mjs +1 -1
  13. package/esm2022/lib/interaction/upload/abstract.upload.component.mjs +85 -0
  14. package/esm2022/lib/interaction/upload/index.mjs +8 -0
  15. package/esm2022/lib/interaction/upload/upload.accept.mjs +72 -0
  16. package/esm2022/lib/interaction/upload/upload.action.directive.mjs +36 -0
  17. package/esm2022/lib/interaction/upload/upload.action.mjs +18 -0
  18. package/esm2022/lib/interaction/upload/upload.area.component.mjs +138 -0
  19. package/esm2022/lib/interaction/upload/upload.button.component.mjs +81 -0
  20. package/esm2022/lib/interaction/upload/upload.component.mjs +116 -0
  21. package/esm2022/lib/layout/avatar/avatar.component.mjs +76 -0
  22. package/esm2022/lib/layout/avatar/avatar.mjs +7 -0
  23. package/esm2022/lib/layout/avatar/avatar.service.mjs +78 -0
  24. package/esm2022/lib/layout/avatar/avatar.view.component.mjs +89 -0
  25. package/esm2022/lib/layout/avatar/index.mjs +4 -0
  26. package/esm2022/lib/layout/content/content.pit.directive.mjs +34 -4
  27. package/esm2022/lib/layout/index.mjs +2 -1
  28. package/esm2022/lib/loading/basic-loading.component.mjs +32 -5
  29. package/esm2022/lib/loading/index.mjs +2 -1
  30. package/esm2022/lib/loading/loading.component.mjs +11 -4
  31. package/esm2022/lib/loading/loading.mjs +2 -0
  32. package/fesm2022/dereekb-dbx-web.mjs +930 -47
  33. package/fesm2022/dereekb-dbx-web.mjs.map +1 -1
  34. package/lib/action/action.confirm.directive.d.ts +1 -1
  35. package/lib/button/_button.scss +2 -1
  36. package/lib/button/button.component.d.ts +5 -1
  37. package/lib/button/progress/abstract.progress.button.directive.d.ts +9 -5
  38. package/lib/button/progress/button.progress.config.d.ts +6 -2
  39. package/lib/interaction/_interaction.scss +4 -0
  40. package/lib/interaction/index.d.ts +1 -0
  41. package/lib/interaction/upload/_upload.scss +100 -0
  42. package/lib/interaction/upload/abstract.upload.component.d.ts +54 -0
  43. package/lib/interaction/upload/index.d.ts +7 -0
  44. package/lib/interaction/upload/upload.accept.d.ts +87 -0
  45. package/lib/interaction/upload/upload.action.d.ts +17 -0
  46. package/lib/interaction/upload/upload.action.directive.d.ts +17 -0
  47. package/lib/interaction/upload/upload.area.component.d.ts +22 -0
  48. package/lib/interaction/upload/upload.button.component.d.ts +24 -0
  49. package/lib/interaction/upload/upload.component.d.ts +58 -0
  50. package/lib/layout/_layout.scss +4 -0
  51. package/lib/layout/avatar/_avatar.scss +102 -0
  52. package/lib/layout/avatar/avatar.component.d.ts +32 -0
  53. package/lib/layout/avatar/avatar.d.ts +54 -0
  54. package/lib/layout/avatar/avatar.service.d.ts +66 -0
  55. package/lib/layout/avatar/avatar.view.component.d.ts +24 -0
  56. package/lib/layout/avatar/index.d.ts +3 -0
  57. package/lib/layout/content/content.pit.directive.d.ts +6 -2
  58. package/lib/layout/index.d.ts +1 -0
  59. package/lib/loading/basic-loading.component.d.ts +13 -8
  60. package/lib/loading/index.d.ts +1 -0
  61. package/lib/loading/loading.component.d.ts +4 -3
  62. package/lib/loading/loading.d.ts +10 -0
  63. package/lib/style/_config.scss +17 -1
  64. package/lib/style/_root-variables.scss +4 -0
  65. package/lib/style/_variables.scss +8 -0
  66. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, input, inject, effect, Directive, NgModule, Component, output, computed, HostListener, InjectionToken, signal, ChangeDetectionStrategy, ElementRef, Injector, DestroyRef, viewChild, makeEnvironmentProviders, TemplateRef, SecurityContext, forwardRef, ViewContainerRef, ChangeDetectorRef, Inject, Renderer2 } from '@angular/core';
3
+ import { DASH_CHARACTER_PREFIX_INSTANCE, asPromise, cssClassesSet, isDefinedAndNotFalse, spaceSeparatedCssClasses, objectHasNoKeys, getValueFromGetter, firstValue, filterUndefinedValues, separateValues, splitFront, asDecisionFunction, SLASH_PATH_FILE_TYPE_SEPARATOR, filterMaybeArrayValues, mapIterable, toReadableError, isDefaultReadableError, MS_IN_SECOND, mergeObjects, build, ServerErrorResponse, UnauthorizedServerErrorResponse, makeTimer, MS_IN_MINUTE, toggleTimerRunning, unixTimeNumberForNow, ModelRelationUtility, encodeModelKeyTypePair, useIterableOrValue, modifier, maybeModifierMapToFunction, invertMaybeBoolean, isMaybeNot, isNotFalse, combineMaps, addModifiers, removeModifiers, applyBestFit, findNext, asArray, makeValuesGroupMap, compareWithMappedValuesFunction, splitCommaSeparatedStringToSet } from '@dereekb/util';
3
4
  import * as i1$2 from '@dereekb/dbx-core';
4
- import { AbstractSubscriptionDirective, AbstractTransitionWatcherDirective, DbxInjectionComponent, AbstractDbxActionValueGetterDirective, AbstractDbxButtonDirective, provideDbxButton, DbxCoreButtonModule, AbstractDbxActionHandlerDirective, FilterSourceDirective, provideActionStoreSource, isClickableFilterPreset, AbstractDbxAnchorDirective, expandClickableAnchorLinkTrees, DbxCoreFilterModule, DbxButton, DBX_INJECTION_COMPONENT_DATA, checkNgContentWrapperHasContent, DbxActionContextStoreSourceInstance, DbxActionSourceDirective, DbxActionSuccessHandlerDirective, DbxActionDirective, DbxActionValueStreamDirective, transformEmptyStringInputToUndefined, isIdleActionState, canTriggerAction, DbxCoreActionModule, DbxActionButtonDirective, onDbxAppAuth, SimpleStorageAccessorFactory, anchorTypeForAnchor, asSegueRef, AbstractTransitionDirective, DbxRouterService, AbstractIfDirective, isSegueRefActive } from '@dereekb/dbx-core';
5
- import { DASH_CHARACTER_PREFIX_INSTANCE, asPromise, cssClassesSet, spaceSeparatedCssClasses, isDefinedAndNotFalse, objectHasNoKeys, getValueFromGetter, firstValue, filterUndefinedValues, filterMaybeArrayValues, mapIterable, toReadableError, isDefaultReadableError, MS_IN_SECOND, mergeObjects, build, ServerErrorResponse, UnauthorizedServerErrorResponse, makeTimer, MS_IN_MINUTE, toggleTimerRunning, unixTimeNumberForNow, ModelRelationUtility, encodeModelKeyTypePair, useIterableOrValue, modifier, maybeModifierMapToFunction, invertMaybeBoolean, isMaybeNot, isNotFalse, combineMaps, addModifiers, removeModifiers, applyBestFit, findNext, asArray, makeValuesGroupMap, compareWithMappedValuesFunction, splitCommaSeparatedStringToSet } from '@dereekb/util';
5
+ import { AbstractSubscriptionDirective, AbstractTransitionWatcherDirective, DbxInjectionComponent, AbstractDbxActionValueGetterDirective, AbstractDbxButtonDirective, provideDbxButton, dbxActionWorkProgress, DbxCoreButtonModule, AbstractDbxActionHandlerDirective, FilterSourceDirective, provideActionStoreSource, isClickableFilterPreset, AbstractDbxAnchorDirective, expandClickableAnchorLinkTrees, DbxCoreFilterModule, DbxButton, DbxActionContextStoreSourceInstance, DBX_INJECTION_COMPONENT_DATA, checkNgContentWrapperHasContent, DbxActionSourceDirective, DbxActionSuccessHandlerDirective, DbxActionDirective, DbxActionValueStreamDirective, transformEmptyStringInputToUndefined, isIdleActionState, canTriggerAction, DbxCoreActionModule, DbxActionButtonDirective, onDbxAppAuth, SimpleStorageAccessorFactory, anchorTypeForAnchor, mergeStaticProviders, asSegueRef, AbstractTransitionDirective, DbxRouterService, AbstractIfDirective, isSegueRefActive } from '@dereekb/dbx-core';
6
6
  import { NgPopoverRef, NgOverlayContainerService } from 'ng-overlay-container';
7
7
  import { of, map, BehaviorSubject, distinctUntilChanged, shareReplay, delay, switchMap, combineLatest, Subject, first, startWith, filter, throttleTime, skip, defaultIfEmpty, delayWhen, timer, asyncScheduler, from, firstValueFrom, mergeMap, race, tap, catchError, merge, exhaustMap, distinct } from 'rxjs';
8
8
  import { filterMaybe, asObservable, LockSet, SubscriptionObject, distinctUntilItemsHaveDifferentValues, skipAllInitialMaybe, maybeValueFromObservableOrValue, switchMapMaybeLoadingContextStream, loadingStateContext, LoadingStateType, loadingStateType, successResult, valueFromFinishedLoadingState, mapForEach, switchMapMaybe, listLoadingStateContext, isLoadingStateFinishedLoading, startWithBeginLoading, initialize, isNot } from '@dereekb/rxjs';
@@ -1530,16 +1530,61 @@ class AbstractProgressButtonDirective extends AbstractSubscriptionDirective {
1530
1530
  return classes;
1531
1531
  });
1532
1532
  baseCssClasses$ = toObservable(this.baseCssClassSignal);
1533
- workingSignal = computed(() => (this.working() || this.configSignal()?.working) ?? false);
1534
- disabledSignal = computed(() => (this.disabled() || this.configSignal()?.disabled) ?? false);
1533
+ workingProgressSignal = computed(() => {
1534
+ const working = this.working();
1535
+ const config = this.configSignal();
1536
+ const configWorking = config?.working;
1537
+ const workingProgress = dbxActionWorkProgress([working, configWorking], config?.value);
1538
+ return workingProgress;
1539
+ });
1540
+ isWorkingSignal = computed(() => isDefinedAndNotFalse(this.workingProgressSignal()));
1541
+ workingValueSignal = computed(() => {
1542
+ const working = this.workingProgressSignal();
1543
+ let result;
1544
+ if (typeof working === 'number') {
1545
+ result = working;
1546
+ }
1547
+ return result;
1548
+ });
1549
+ modeSignal = computed(() => {
1550
+ const config = this.configSignal();
1551
+ const workingValue = this.workingValueSignal();
1552
+ const mode = config?.mode;
1553
+ let result;
1554
+ if (!mode) {
1555
+ if (workingValue != null) {
1556
+ result = 'determinate';
1557
+ }
1558
+ else {
1559
+ result = 'indeterminate';
1560
+ }
1561
+ }
1562
+ else {
1563
+ result = mode;
1564
+ }
1565
+ return result;
1566
+ });
1567
+ disabledSignal = computed(() => {
1568
+ const disabled = this.disabled();
1569
+ const configDisabled = this.configSignal()?.disabled;
1570
+ return disabled || configDisabled;
1571
+ });
1535
1572
  buttonTypeAttributeSignal = computed(() => {
1536
1573
  const options = this.configSignal();
1537
1574
  return options?.buttonTypeAttribute ?? options?.type;
1538
1575
  });
1539
- buttonDisabledSignal = computed(() => this.workingSignal() || this.disabledSignal());
1540
- showProgressSignal = computed(() => this.workingSignal() && !this.disabledSignal());
1576
+ buttonDisabledSignal = computed(() => {
1577
+ const working = this.isWorkingSignal();
1578
+ const disabled = this.disabledSignal();
1579
+ return working || disabled;
1580
+ });
1581
+ showProgressSignal = computed(() => {
1582
+ const working = this.isWorkingSignal();
1583
+ const disabled = this.disabledSignal();
1584
+ return working && !disabled;
1585
+ });
1541
1586
  handleClick(event) {
1542
- const working = this.workingSignal();
1587
+ const working = this.isWorkingSignal();
1543
1588
  const disabled = this.disabledSignal();
1544
1589
  if (!working && !disabled) {
1545
1590
  this.btnClick.emit(event);
@@ -1560,11 +1605,11 @@ class DbxProgressBarButtonComponent extends AbstractProgressButtonDirective {
1560
1605
  buttonCss$ = this.baseCssClasses$.pipe(distinctUntilItemsHaveDifferentValues((x) => x[1]), map((x) => spaceSeparatedCssClasses(x[1])), shareReplay(1));
1561
1606
  buttonCssSignal = toSignal(this.buttonCss$);
1562
1607
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxProgressBarButtonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1563
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxProgressBarButtonComponent, isStandalone: true, selector: "dbx-progress-bar-button,dbx-bar-button", usesInheritance: true, ngImport: i0, template: "<button class=\"dbx-base-button dbx-progress-bar-button\" mat-button [type]=\"buttonTypeAttributeSignal()\" [color]=\"configSignal()?.buttonColor\" [ngClass]=\"buttonCssSignal()\" [ngStyle]=\"configSignal()?.customStyle\" [disabled]=\"buttonDisabledSignal()\">\n @if (configSignal()?.buttonIcon) {\n <mat-icon class=\"mat-button-icon\" [class.is-mat-icon]=\"!configSignal()?.buttonIcon?.fontSet!\" [ngClass]=\"configSignal()?.buttonIcon?.customClass!\" [fontSet]=\"configSignal()?.buttonIcon?.fontSet!\" [fontIcon]=\"configSignal()?.buttonIcon?.fontIcon!\" [color]=\"configSignal()?.buttonIcon?.color!\" [svgIcon]=\"configSignal()?.buttonIcon?.svgIcon!\" [inline]=\"configSignal()?.buttonIcon?.inline!\">\n {{ configSignal()?.buttonIcon?.fontSet! ? '' : configSignal()?.buttonIcon?.fontIcon! }}\n </mat-icon>\n }\n <span>\n {{ configSignal()?.text }}\n <ng-content></ng-content>\n </span>\n @if (showProgressSignal()) {\n <mat-progress-bar class=\"bar\" [color]=\"configSignal()?.barColor!\" [mode]=\"configSignal()?.mode!\" [value]=\"configSignal()?.value!\"></mat-progress-bar>\n }\n</button>\n", styles: [":host>button.dbx-progress-bar-button.mdc-button.mat-mdc-button.working{cursor:not-allowed}:host>button.dbx-progress-bar-button.mdc-button.mat-mdc-button.fullWidth{width:100%}:host>button.dbx-progress-bar-button.mdc-button.mat-mdc-button>::ng-deep .mdc-button__label{position:unset;display:flex;align-items:center}:host>button.dbx-progress-bar-button.mdc-button.mat-mdc-button>::ng-deep .mdc-button__label .bar{position:absolute;top:0;left:0}:host>button.dbx-progress-bar-button.mdc-button.mat-mdc-button>::ng-deep .mdc-button__label mat-icon{padding-right:5px}:host>button.dbx-progress-bar-button.mdc-button.mat-mdc-button>::ng-deep .mdc-button__label mat-icon.is-mat-icon{font-size:18px;position:relative;top:3px}\n", ":host button.mat-mdc-button .button-text{display:flex;align-items:center}:host button.mat-mdc-button mat-icon.mat-button-icon.mat-icon.mat-ligature-font[fontIcon]:before,:host button.mat-mdc-button mat-icon.mat-fab-icon.mat-icon.mat-ligature-font[fontIcon]:before{content:unset}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1608
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxProgressBarButtonComponent, isStandalone: true, selector: "dbx-progress-bar-button,dbx-bar-button", usesInheritance: true, ngImport: i0, template: "<button class=\"dbx-base-button dbx-progress-bar-button\" mat-button [type]=\"buttonTypeAttributeSignal()\" [color]=\"configSignal()?.buttonColor\" [ngClass]=\"buttonCssSignal()\" [ngStyle]=\"configSignal()?.customStyle\" [disabled]=\"buttonDisabledSignal()\">\n @if (configSignal()?.buttonIcon) {\n <mat-icon class=\"mat-button-icon\" [class.is-mat-icon]=\"!configSignal()?.buttonIcon?.fontSet!\" [ngClass]=\"configSignal()?.buttonIcon?.customClass!\" [fontSet]=\"configSignal()?.buttonIcon?.fontSet!\" [fontIcon]=\"configSignal()?.buttonIcon?.fontIcon!\" [color]=\"configSignal()?.buttonIcon?.color!\" [svgIcon]=\"configSignal()?.buttonIcon?.svgIcon!\" [inline]=\"configSignal()?.buttonIcon?.inline!\">\n {{ configSignal()?.buttonIcon?.fontSet! ? '' : configSignal()?.buttonIcon?.fontIcon! }}\n </mat-icon>\n }\n <span>\n {{ configSignal()?.text }}\n <ng-content></ng-content>\n </span>\n @if (showProgressSignal()) {\n <mat-progress-bar class=\"bar\" [color]=\"configSignal()?.barColor!\" [mode]=\"modeSignal()\" [value]=\"workingValueSignal()\"></mat-progress-bar>\n }\n</button>\n", styles: [":host>button.dbx-progress-bar-button.mdc-button.mat-mdc-button.working{cursor:not-allowed}:host>button.dbx-progress-bar-button.mdc-button.mat-mdc-button.fullWidth{width:100%}:host>button.dbx-progress-bar-button.mdc-button.mat-mdc-button>::ng-deep .mdc-button__label{position:unset;display:flex;align-items:center}:host>button.dbx-progress-bar-button.mdc-button.mat-mdc-button>::ng-deep .mdc-button__label .bar{position:absolute;top:0;left:0}:host>button.dbx-progress-bar-button.mdc-button.mat-mdc-button>::ng-deep .mdc-button__label mat-icon{padding-right:5px}:host>button.dbx-progress-bar-button.mdc-button.mat-mdc-button>::ng-deep .mdc-button__label mat-icon.is-mat-icon{font-size:18px;position:relative;top:3px}\n", ":host button.mat-mdc-button .button-text{display:flex;align-items:center}:host button.mat-mdc-button mat-icon.mat-button-icon.mat-icon.mat-ligature-font[fontIcon]:before,:host button.mat-mdc-button mat-icon.mat-fab-icon.mat-icon.mat-ligature-font[fontIcon]:before{content:unset}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1564
1609
  }
1565
1610
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxProgressBarButtonComponent, decorators: [{
1566
1611
  type: Component,
1567
- args: [{ selector: 'dbx-progress-bar-button,dbx-bar-button', imports: [MatButtonModule, MatIconModule, MatProgressBar, NgClass, NgStyle], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<button class=\"dbx-base-button dbx-progress-bar-button\" mat-button [type]=\"buttonTypeAttributeSignal()\" [color]=\"configSignal()?.buttonColor\" [ngClass]=\"buttonCssSignal()\" [ngStyle]=\"configSignal()?.customStyle\" [disabled]=\"buttonDisabledSignal()\">\n @if (configSignal()?.buttonIcon) {\n <mat-icon class=\"mat-button-icon\" [class.is-mat-icon]=\"!configSignal()?.buttonIcon?.fontSet!\" [ngClass]=\"configSignal()?.buttonIcon?.customClass!\" [fontSet]=\"configSignal()?.buttonIcon?.fontSet!\" [fontIcon]=\"configSignal()?.buttonIcon?.fontIcon!\" [color]=\"configSignal()?.buttonIcon?.color!\" [svgIcon]=\"configSignal()?.buttonIcon?.svgIcon!\" [inline]=\"configSignal()?.buttonIcon?.inline!\">\n {{ configSignal()?.buttonIcon?.fontSet! ? '' : configSignal()?.buttonIcon?.fontIcon! }}\n </mat-icon>\n }\n <span>\n {{ configSignal()?.text }}\n <ng-content></ng-content>\n </span>\n @if (showProgressSignal()) {\n <mat-progress-bar class=\"bar\" [color]=\"configSignal()?.barColor!\" [mode]=\"configSignal()?.mode!\" [value]=\"configSignal()?.value!\"></mat-progress-bar>\n }\n</button>\n", styles: [":host>button.dbx-progress-bar-button.mdc-button.mat-mdc-button.working{cursor:not-allowed}:host>button.dbx-progress-bar-button.mdc-button.mat-mdc-button.fullWidth{width:100%}:host>button.dbx-progress-bar-button.mdc-button.mat-mdc-button>::ng-deep .mdc-button__label{position:unset;display:flex;align-items:center}:host>button.dbx-progress-bar-button.mdc-button.mat-mdc-button>::ng-deep .mdc-button__label .bar{position:absolute;top:0;left:0}:host>button.dbx-progress-bar-button.mdc-button.mat-mdc-button>::ng-deep .mdc-button__label mat-icon{padding-right:5px}:host>button.dbx-progress-bar-button.mdc-button.mat-mdc-button>::ng-deep .mdc-button__label mat-icon.is-mat-icon{font-size:18px;position:relative;top:3px}\n", ":host button.mat-mdc-button .button-text{display:flex;align-items:center}:host button.mat-mdc-button mat-icon.mat-button-icon.mat-icon.mat-ligature-font[fontIcon]:before,:host button.mat-mdc-button mat-icon.mat-fab-icon.mat-icon.mat-ligature-font[fontIcon]:before{content:unset}\n"] }]
1612
+ args: [{ selector: 'dbx-progress-bar-button,dbx-bar-button', imports: [MatButtonModule, MatIconModule, MatProgressBar, NgClass, NgStyle], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<button class=\"dbx-base-button dbx-progress-bar-button\" mat-button [type]=\"buttonTypeAttributeSignal()\" [color]=\"configSignal()?.buttonColor\" [ngClass]=\"buttonCssSignal()\" [ngStyle]=\"configSignal()?.customStyle\" [disabled]=\"buttonDisabledSignal()\">\n @if (configSignal()?.buttonIcon) {\n <mat-icon class=\"mat-button-icon\" [class.is-mat-icon]=\"!configSignal()?.buttonIcon?.fontSet!\" [ngClass]=\"configSignal()?.buttonIcon?.customClass!\" [fontSet]=\"configSignal()?.buttonIcon?.fontSet!\" [fontIcon]=\"configSignal()?.buttonIcon?.fontIcon!\" [color]=\"configSignal()?.buttonIcon?.color!\" [svgIcon]=\"configSignal()?.buttonIcon?.svgIcon!\" [inline]=\"configSignal()?.buttonIcon?.inline!\">\n {{ configSignal()?.buttonIcon?.fontSet! ? '' : configSignal()?.buttonIcon?.fontIcon! }}\n </mat-icon>\n }\n <span>\n {{ configSignal()?.text }}\n <ng-content></ng-content>\n </span>\n @if (showProgressSignal()) {\n <mat-progress-bar class=\"bar\" [color]=\"configSignal()?.barColor!\" [mode]=\"modeSignal()\" [value]=\"workingValueSignal()\"></mat-progress-bar>\n }\n</button>\n", styles: [":host>button.dbx-progress-bar-button.mdc-button.mat-mdc-button.working{cursor:not-allowed}:host>button.dbx-progress-bar-button.mdc-button.mat-mdc-button.fullWidth{width:100%}:host>button.dbx-progress-bar-button.mdc-button.mat-mdc-button>::ng-deep .mdc-button__label{position:unset;display:flex;align-items:center}:host>button.dbx-progress-bar-button.mdc-button.mat-mdc-button>::ng-deep .mdc-button__label .bar{position:absolute;top:0;left:0}:host>button.dbx-progress-bar-button.mdc-button.mat-mdc-button>::ng-deep .mdc-button__label mat-icon{padding-right:5px}:host>button.dbx-progress-bar-button.mdc-button.mat-mdc-button>::ng-deep .mdc-button__label mat-icon.is-mat-icon{font-size:18px;position:relative;top:3px}\n", ":host button.mat-mdc-button .button-text{display:flex;align-items:center}:host button.mat-mdc-button mat-icon.mat-button-icon.mat-icon.mat-ligature-font[fontIcon]:before,:host button.mat-mdc-button mat-icon.mat-fab-icon.mat-icon.mat-ligature-font[fontIcon]:before{content:unset}\n"] }]
1568
1613
  }] });
1569
1614
 
1570
1615
  class DbxProgressSpinnerButtonComponent extends AbstractProgressButtonDirective {
@@ -1633,11 +1678,11 @@ class DbxProgressSpinnerButtonComponent extends AbstractProgressButtonDirective
1633
1678
  return hasCustomStyle ? { 'dbx-progress-spinner-custom': true } : undefined;
1634
1679
  });
1635
1680
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxProgressSpinnerButtonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1636
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxProgressSpinnerButtonComponent, isStandalone: true, selector: "dbx-progress-spinner-button,dbx-spinner-button", viewQueries: [{ propertyName: "buttonRef", first: true, predicate: ["button"], descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<button class=\"dbx-base-button dbx-progress-spinner-button\" #button mat-button [type]=\"buttonTypeAttributeSignal()\" [color]=\"configSignal()?.buttonColor\" [ngClass]=\"buttonCssSignal()\" [ngStyle]=\"configSignal()?.customStyle\" [disabled]=\"buttonDisabledSignal()\">\n @if (showTextSignal()) {\n @if (showTextButtonIconSignal()) {\n <mat-icon class=\"mat-button-icon\" [class.is-mat-icon]=\"!configSignal()?.buttonIcon?.fontSet\" [class.working]=\"showProgressSignal()\" [ngClass]=\"configSignal()?.buttonIcon?.customClass\" [fontSet]=\"configSignal()?.buttonIcon?.fontSet!\" [fontIcon]=\"configSignal()?.buttonIcon?.fontIcon!\" [color]=\"configSignal()?.buttonIcon?.color!\" [svgIcon]=\"configSignal()?.buttonIcon?.svgIcon!\">\n {{ configSignal()?.buttonIcon?.fontSet ? '' : configSignal()?.buttonIcon?.fontIcon }}\n </mat-icon>\n }\n <span class=\"button-text\" [class.working]=\"showProgressSignal()\">\n {{ configSignal()?.text }}\n <ng-content></ng-content>\n </span>\n }\n @if (showIconSignal()) {\n <!-- Use ng-container to prevent mat-icon from being a child of the button which changes the behavior -->\n <ng-container>\n <mat-icon class=\"mat-fab-icon\" [fontSet]=\"configSignal()?.buttonIcon?.fontSet!\" [fontIcon]=\"configSignal()?.buttonIcon?.fontIcon!\" [color]=\"configSignal()?.buttonIcon?.color!\" [svgIcon]=\"configSignal()?.buttonIcon?.svgIcon!\" [inline]=\"configSignal()?.fab && configSignal()?.buttonIcon?.inline!\">\n {{ configSignal()?.buttonIcon?.fontSet! ? '' : configSignal()?.buttonIcon?.fontIcon! }}\n </mat-icon>\n </ng-container>\n }\n @if (showProgressSignal()) {\n <mat-spinner class=\"spinner\" [diameter]=\"spinnerSizeSignal()\" [color]=\"configSignal()?.spinnerColor!\" [mode]=\"configSignal()?.mode!\" [value]=\"configSignal()?.value!\" [ngStyle]=\"customSpinnerStyleSignal()\" [ngClass]=\"customSpinnerStyleClassSignal()\" [class.working]=\"showProgressSignal()\"></mat-spinner>\n }\n</button>\n", styles: [":host button{min-height:36px;height:unset;outline:none}:host button.working{cursor:not-allowed}:host button ::ng-deep .mdc-button__label{display:flex;align-items:center;justify-content:center}:host button.mat-mdc-button.mat-mdc-icon-button{min-width:unset;--mdc-icon-button-icon-size: unset;--mat-text-button-with-icon-horizontal-padding: 0px;--mdc-icon-button-state-layer-size: 36px;border-radius:50%}:host button.mat-mdc-button.mat-mdc-icon-button .mat-mdc-progress-spinner{--mdc-icon-button-icon-size: 36px}:host button.mat-mdc-button.mat-mdc-icon-button.dbx-progress-spinner-fab{height:48px;--mdc-icon-button-state-layer-size: 48px}:host button.mat-mdc-button.mat-mdc-icon-button.dbx-progress-spinner-fab .mat-mdc-progress-spinner{--mdc-icon-button-icon-size: 48px}:host button.fullWidth{width:100%}:host button .mat-mdc-progress-spinner{position:absolute;opacity:0;transition:opacity .3s ease-in-out}:host button .mat-mdc-progress-spinner.working{opacity:1}:host button .dbx-progress-spinner-custom.mat-progress-spinner.mat-accent circle,:host button .dbx-progress-spinner-custom.mat-mdc-progress-spinner.mat-accent circle{stroke:unset!important}:host button .button-text{opacity:1;transition:opacity .3s ease-in-out}:host button .button-text.working{opacity:0}:host button mat-icon.mat-button-icon{padding-right:5px;transition:opacity .3s ease-in-out;font-size:1.125rem;height:1.125rem;width:1.125rem;margin-right:var(--mat-protected-button-icon-spacing, 8px)}:host button mat-icon.mat-button-icon.is-mat-icon{position:relative;left:3px}:host button mat-icon.mat-button-icon.working{opacity:0}\n", ":host button.mat-mdc-button .button-text{display:flex;align-items:center}:host button.mat-mdc-button mat-icon.mat-button-icon.mat-icon.mat-ligature-font[fontIcon]:before,:host button.mat-mdc-button mat-icon.mat-fab-icon.mat-icon.mat-ligature-font[fontIcon]:before{content:unset}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.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: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1681
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxProgressSpinnerButtonComponent, isStandalone: true, selector: "dbx-progress-spinner-button,dbx-spinner-button", viewQueries: [{ propertyName: "buttonRef", first: true, predicate: ["button"], descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<button class=\"dbx-base-button dbx-progress-spinner-button\" #button mat-button [type]=\"buttonTypeAttributeSignal()\" [color]=\"configSignal()?.buttonColor\" [ngClass]=\"buttonCssSignal()\" [ngStyle]=\"configSignal()?.customStyle\" [disabled]=\"buttonDisabledSignal()\">\n @if (showTextSignal()) {\n @if (showTextButtonIconSignal()) {\n <mat-icon class=\"mat-button-icon\" [class.is-mat-icon]=\"!configSignal()?.buttonIcon?.fontSet\" [class.working]=\"showProgressSignal()\" [ngClass]=\"configSignal()?.buttonIcon?.customClass\" [fontSet]=\"configSignal()?.buttonIcon?.fontSet!\" [fontIcon]=\"configSignal()?.buttonIcon?.fontIcon!\" [color]=\"configSignal()?.buttonIcon?.color!\" [svgIcon]=\"configSignal()?.buttonIcon?.svgIcon!\">\n {{ configSignal()?.buttonIcon?.fontSet ? '' : configSignal()?.buttonIcon?.fontIcon }}\n </mat-icon>\n }\n <span class=\"button-text\" [class.working]=\"showProgressSignal()\">\n {{ configSignal()?.text }}\n <ng-content></ng-content>\n </span>\n }\n @if (showIconSignal()) {\n <!-- Use ng-container to prevent mat-icon from being a child of the button which changes the behavior -->\n <ng-container>\n <mat-icon class=\"mat-fab-icon\" [fontSet]=\"configSignal()?.buttonIcon?.fontSet!\" [fontIcon]=\"configSignal()?.buttonIcon?.fontIcon!\" [color]=\"configSignal()?.buttonIcon?.color!\" [svgIcon]=\"configSignal()?.buttonIcon?.svgIcon!\" [inline]=\"configSignal()?.fab && configSignal()?.buttonIcon?.inline!\">\n {{ configSignal()?.buttonIcon?.fontSet! ? '' : configSignal()?.buttonIcon?.fontIcon! }}\n </mat-icon>\n </ng-container>\n }\n @if (showProgressSignal()) {\n <mat-spinner class=\"spinner\" [diameter]=\"spinnerSizeSignal()\" [color]=\"configSignal()?.spinnerColor!\" [mode]=\"modeSignal()\" [value]=\"workingValueSignal()\" [ngStyle]=\"customSpinnerStyleSignal()\" [ngClass]=\"customSpinnerStyleClassSignal()\" [class.working]=\"showProgressSignal()\"></mat-spinner>\n }\n</button>\n", styles: [":host button{min-height:36px;height:unset;outline:none}:host button.working{cursor:not-allowed}:host button ::ng-deep .mdc-button__label{display:flex;align-items:center;justify-content:center}:host button.mat-mdc-button.mat-mdc-icon-button{min-width:unset;--mdc-icon-button-icon-size: unset;--mat-text-button-with-icon-horizontal-padding: 0px;--mdc-icon-button-state-layer-size: 36px;border-radius:50%}:host button.mat-mdc-button.mat-mdc-icon-button .mat-mdc-progress-spinner{--mdc-icon-button-icon-size: 36px}:host button.mat-mdc-button.mat-mdc-icon-button.dbx-progress-spinner-fab{height:48px;--mdc-icon-button-state-layer-size: 48px}:host button.mat-mdc-button.mat-mdc-icon-button.dbx-progress-spinner-fab .mat-mdc-progress-spinner{--mdc-icon-button-icon-size: 48px}:host button.fullWidth{width:100%}:host button .mat-mdc-progress-spinner{position:absolute;opacity:0;transition:opacity .3s ease-in-out}:host button .mat-mdc-progress-spinner.working{opacity:1}:host button .dbx-progress-spinner-custom.mat-progress-spinner.mat-accent circle,:host button .dbx-progress-spinner-custom.mat-mdc-progress-spinner.mat-accent circle{stroke:unset!important}:host button .button-text{opacity:1;transition:opacity .3s ease-in-out}:host button .button-text.working{opacity:0}:host button mat-icon.mat-button-icon{padding-right:5px;transition:opacity .3s ease-in-out;font-size:1.125rem;height:1.125rem;width:1.125rem;margin-right:var(--mat-protected-button-icon-spacing, 8px)}:host button mat-icon.mat-button-icon.is-mat-icon{position:relative;left:3px}:host button mat-icon.mat-button-icon.working{opacity:0}\n", ":host button.mat-mdc-button .button-text{display:flex;align-items:center}:host button.mat-mdc-button mat-icon.mat-button-icon.mat-icon.mat-ligature-font[fontIcon]:before,:host button.mat-mdc-button mat-icon.mat-fab-icon.mat-icon.mat-ligature-font[fontIcon]:before{content:unset}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.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: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1637
1682
  }
1638
1683
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxProgressSpinnerButtonComponent, decorators: [{
1639
1684
  type: Component,
1640
- args: [{ selector: 'dbx-progress-spinner-button,dbx-spinner-button', imports: [MatButtonModule, MatIconModule, MatProgressSpinner, NgClass, NgStyle], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<button class=\"dbx-base-button dbx-progress-spinner-button\" #button mat-button [type]=\"buttonTypeAttributeSignal()\" [color]=\"configSignal()?.buttonColor\" [ngClass]=\"buttonCssSignal()\" [ngStyle]=\"configSignal()?.customStyle\" [disabled]=\"buttonDisabledSignal()\">\n @if (showTextSignal()) {\n @if (showTextButtonIconSignal()) {\n <mat-icon class=\"mat-button-icon\" [class.is-mat-icon]=\"!configSignal()?.buttonIcon?.fontSet\" [class.working]=\"showProgressSignal()\" [ngClass]=\"configSignal()?.buttonIcon?.customClass\" [fontSet]=\"configSignal()?.buttonIcon?.fontSet!\" [fontIcon]=\"configSignal()?.buttonIcon?.fontIcon!\" [color]=\"configSignal()?.buttonIcon?.color!\" [svgIcon]=\"configSignal()?.buttonIcon?.svgIcon!\">\n {{ configSignal()?.buttonIcon?.fontSet ? '' : configSignal()?.buttonIcon?.fontIcon }}\n </mat-icon>\n }\n <span class=\"button-text\" [class.working]=\"showProgressSignal()\">\n {{ configSignal()?.text }}\n <ng-content></ng-content>\n </span>\n }\n @if (showIconSignal()) {\n <!-- Use ng-container to prevent mat-icon from being a child of the button which changes the behavior -->\n <ng-container>\n <mat-icon class=\"mat-fab-icon\" [fontSet]=\"configSignal()?.buttonIcon?.fontSet!\" [fontIcon]=\"configSignal()?.buttonIcon?.fontIcon!\" [color]=\"configSignal()?.buttonIcon?.color!\" [svgIcon]=\"configSignal()?.buttonIcon?.svgIcon!\" [inline]=\"configSignal()?.fab && configSignal()?.buttonIcon?.inline!\">\n {{ configSignal()?.buttonIcon?.fontSet! ? '' : configSignal()?.buttonIcon?.fontIcon! }}\n </mat-icon>\n </ng-container>\n }\n @if (showProgressSignal()) {\n <mat-spinner class=\"spinner\" [diameter]=\"spinnerSizeSignal()\" [color]=\"configSignal()?.spinnerColor!\" [mode]=\"configSignal()?.mode!\" [value]=\"configSignal()?.value!\" [ngStyle]=\"customSpinnerStyleSignal()\" [ngClass]=\"customSpinnerStyleClassSignal()\" [class.working]=\"showProgressSignal()\"></mat-spinner>\n }\n</button>\n", styles: [":host button{min-height:36px;height:unset;outline:none}:host button.working{cursor:not-allowed}:host button ::ng-deep .mdc-button__label{display:flex;align-items:center;justify-content:center}:host button.mat-mdc-button.mat-mdc-icon-button{min-width:unset;--mdc-icon-button-icon-size: unset;--mat-text-button-with-icon-horizontal-padding: 0px;--mdc-icon-button-state-layer-size: 36px;border-radius:50%}:host button.mat-mdc-button.mat-mdc-icon-button .mat-mdc-progress-spinner{--mdc-icon-button-icon-size: 36px}:host button.mat-mdc-button.mat-mdc-icon-button.dbx-progress-spinner-fab{height:48px;--mdc-icon-button-state-layer-size: 48px}:host button.mat-mdc-button.mat-mdc-icon-button.dbx-progress-spinner-fab .mat-mdc-progress-spinner{--mdc-icon-button-icon-size: 48px}:host button.fullWidth{width:100%}:host button .mat-mdc-progress-spinner{position:absolute;opacity:0;transition:opacity .3s ease-in-out}:host button .mat-mdc-progress-spinner.working{opacity:1}:host button .dbx-progress-spinner-custom.mat-progress-spinner.mat-accent circle,:host button .dbx-progress-spinner-custom.mat-mdc-progress-spinner.mat-accent circle{stroke:unset!important}:host button .button-text{opacity:1;transition:opacity .3s ease-in-out}:host button .button-text.working{opacity:0}:host button mat-icon.mat-button-icon{padding-right:5px;transition:opacity .3s ease-in-out;font-size:1.125rem;height:1.125rem;width:1.125rem;margin-right:var(--mat-protected-button-icon-spacing, 8px)}:host button mat-icon.mat-button-icon.is-mat-icon{position:relative;left:3px}:host button mat-icon.mat-button-icon.working{opacity:0}\n", ":host button.mat-mdc-button .button-text{display:flex;align-items:center}:host button.mat-mdc-button mat-icon.mat-button-icon.mat-icon.mat-ligature-font[fontIcon]:before,:host button.mat-mdc-button mat-icon.mat-fab-icon.mat-icon.mat-ligature-font[fontIcon]:before{content:unset}\n"] }]
1685
+ args: [{ selector: 'dbx-progress-spinner-button,dbx-spinner-button', imports: [MatButtonModule, MatIconModule, MatProgressSpinner, NgClass, NgStyle], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<button class=\"dbx-base-button dbx-progress-spinner-button\" #button mat-button [type]=\"buttonTypeAttributeSignal()\" [color]=\"configSignal()?.buttonColor\" [ngClass]=\"buttonCssSignal()\" [ngStyle]=\"configSignal()?.customStyle\" [disabled]=\"buttonDisabledSignal()\">\n @if (showTextSignal()) {\n @if (showTextButtonIconSignal()) {\n <mat-icon class=\"mat-button-icon\" [class.is-mat-icon]=\"!configSignal()?.buttonIcon?.fontSet\" [class.working]=\"showProgressSignal()\" [ngClass]=\"configSignal()?.buttonIcon?.customClass\" [fontSet]=\"configSignal()?.buttonIcon?.fontSet!\" [fontIcon]=\"configSignal()?.buttonIcon?.fontIcon!\" [color]=\"configSignal()?.buttonIcon?.color!\" [svgIcon]=\"configSignal()?.buttonIcon?.svgIcon!\">\n {{ configSignal()?.buttonIcon?.fontSet ? '' : configSignal()?.buttonIcon?.fontIcon }}\n </mat-icon>\n }\n <span class=\"button-text\" [class.working]=\"showProgressSignal()\">\n {{ configSignal()?.text }}\n <ng-content></ng-content>\n </span>\n }\n @if (showIconSignal()) {\n <!-- Use ng-container to prevent mat-icon from being a child of the button which changes the behavior -->\n <ng-container>\n <mat-icon class=\"mat-fab-icon\" [fontSet]=\"configSignal()?.buttonIcon?.fontSet!\" [fontIcon]=\"configSignal()?.buttonIcon?.fontIcon!\" [color]=\"configSignal()?.buttonIcon?.color!\" [svgIcon]=\"configSignal()?.buttonIcon?.svgIcon!\" [inline]=\"configSignal()?.fab && configSignal()?.buttonIcon?.inline!\">\n {{ configSignal()?.buttonIcon?.fontSet! ? '' : configSignal()?.buttonIcon?.fontIcon! }}\n </mat-icon>\n </ng-container>\n }\n @if (showProgressSignal()) {\n <mat-spinner class=\"spinner\" [diameter]=\"spinnerSizeSignal()\" [color]=\"configSignal()?.spinnerColor!\" [mode]=\"modeSignal()\" [value]=\"workingValueSignal()\" [ngStyle]=\"customSpinnerStyleSignal()\" [ngClass]=\"customSpinnerStyleClassSignal()\" [class.working]=\"showProgressSignal()\"></mat-spinner>\n }\n</button>\n", styles: [":host button{min-height:36px;height:unset;outline:none}:host button.working{cursor:not-allowed}:host button ::ng-deep .mdc-button__label{display:flex;align-items:center;justify-content:center}:host button.mat-mdc-button.mat-mdc-icon-button{min-width:unset;--mdc-icon-button-icon-size: unset;--mat-text-button-with-icon-horizontal-padding: 0px;--mdc-icon-button-state-layer-size: 36px;border-radius:50%}:host button.mat-mdc-button.mat-mdc-icon-button .mat-mdc-progress-spinner{--mdc-icon-button-icon-size: 36px}:host button.mat-mdc-button.mat-mdc-icon-button.dbx-progress-spinner-fab{height:48px;--mdc-icon-button-state-layer-size: 48px}:host button.mat-mdc-button.mat-mdc-icon-button.dbx-progress-spinner-fab .mat-mdc-progress-spinner{--mdc-icon-button-icon-size: 48px}:host button.fullWidth{width:100%}:host button .mat-mdc-progress-spinner{position:absolute;opacity:0;transition:opacity .3s ease-in-out}:host button .mat-mdc-progress-spinner.working{opacity:1}:host button .dbx-progress-spinner-custom.mat-progress-spinner.mat-accent circle,:host button .dbx-progress-spinner-custom.mat-mdc-progress-spinner.mat-accent circle{stroke:unset!important}:host button .button-text{opacity:1;transition:opacity .3s ease-in-out}:host button .button-text.working{opacity:0}:host button mat-icon.mat-button-icon{padding-right:5px;transition:opacity .3s ease-in-out;font-size:1.125rem;height:1.125rem;width:1.125rem;margin-right:var(--mat-protected-button-icon-spacing, 8px)}:host button mat-icon.mat-button-icon.is-mat-icon{position:relative;left:3px}:host button mat-icon.mat-button-icon.working{opacity:0}\n", ":host button.mat-mdc-button .button-text{display:flex;align-items:center}:host button.mat-mdc-button mat-icon.mat-button-icon.mat-icon.mat-ligature-font[fontIcon]:before,:host button.mat-mdc-button mat-icon.mat-fab-icon.mat-icon.mat-ligature-font[fontIcon]:before{content:unset}\n"] }]
1641
1686
  }] });
1642
1687
 
1643
1688
  const importsAndExports$s = [DbxProgressSpinnerButtonComponent, DbxProgressBarButtonComponent];
@@ -1687,6 +1732,7 @@ var DbxButtonDisplayType;
1687
1732
  * Complex button that supports loading states.
1688
1733
  */
1689
1734
  class DbxButtonComponent extends AbstractDbxButtonDirective {
1735
+ bar = input(false, { transform: isDefinedAndNotFalse });
1690
1736
  type = input();
1691
1737
  buttonStyle = input();
1692
1738
  color = input(undefined);
@@ -1700,6 +1746,7 @@ class DbxButtonComponent extends AbstractDbxButtonDirective {
1700
1746
  flat = input(false, { transform: isDefinedAndNotFalse });
1701
1747
  iconOnly = input(false, { transform: isDefinedAndNotFalse });
1702
1748
  fab = input(false, { transform: isDefinedAndNotFalse });
1749
+ mode = input();
1703
1750
  typeSignal = computed(() => {
1704
1751
  const style = this.buttonStyle();
1705
1752
  let type = this.type() ?? style?.type;
@@ -1723,37 +1770,40 @@ class DbxButtonComponent extends AbstractDbxButtonDirective {
1723
1770
  configSignal = computed(() => {
1724
1771
  // configure custom style
1725
1772
  const customStyle = {};
1726
- const style = this.buttonStyle();
1727
- const customButtonColorValue = this.customButtonColor() ?? style?.customButtonColor;
1773
+ const buttonStyle = this.buttonStyle();
1774
+ const customButtonColorValue = this.customButtonColor() ?? buttonStyle?.customButtonColor;
1728
1775
  if (customButtonColorValue) {
1729
1776
  customStyle['background'] = customButtonColorValue;
1730
1777
  }
1731
- const customTextColorValue = this.customTextColor() ?? style?.customTextColor;
1778
+ const customTextColorValue = this.customTextColor() ?? buttonStyle?.customTextColor;
1732
1779
  if (customTextColorValue) {
1733
1780
  customStyle['color'] = customTextColorValue;
1734
1781
  }
1735
- const customSpinnerColorValue = this.customSpinnerColor() ?? style?.customSpinnerColor;
1782
+ const customSpinnerColorValue = this.customSpinnerColor() ?? buttonStyle?.customSpinnerColor;
1736
1783
  const customSpinnerColor = customSpinnerColorValue ?? customTextColorValue;
1737
- const buttonColor = this.color() ?? style?.color;
1738
- const spinnerColor = this.spinnerColor() ?? style?.spinnerColor ?? buttonColor;
1784
+ const buttonColor = this.color() ?? buttonStyle?.color;
1785
+ const spinnerColor = this.spinnerColor() ?? buttonStyle?.spinnerColor ?? buttonColor;
1739
1786
  const disabledSignalValue = this.disabledSignal();
1740
- const disabled = !this.workingSignal() && disabledSignalValue; // Only disabled if we're not working, in order to show the animation.
1787
+ const disabled = !this.isWorkingSignal() && disabledSignalValue; // Only disabled if we're not working, in order to show the animation.
1741
1788
  const iconValue = this.iconSignal();
1742
1789
  const buttonIcon = iconValue ? { fontIcon: iconValue } : undefined;
1743
1790
  const textValue = this.textSignal();
1744
1791
  const isIconOnlyButton = buttonIcon && !textValue;
1745
- const fab = this.fab() || style?.fab;
1792
+ const fab = this.fab() || buttonStyle?.fab;
1793
+ const mode = this.mode() ?? buttonStyle?.mode;
1794
+ const working = this.workingSignal();
1795
+ const buttonType = this.typeSignal();
1746
1796
  const config = {
1747
1797
  fab,
1748
- working: this.workingSignal(),
1798
+ working,
1749
1799
  buttonIcon,
1750
1800
  customStyle,
1751
1801
  customClass: 'dbx-button ' + (isIconOnlyButton ? 'dbx-button-no-text' : ''),
1752
1802
  text: textValue ?? '',
1753
- buttonType: this.typeSignal(),
1803
+ buttonType,
1754
1804
  buttonColor,
1755
1805
  barColor: 'accent',
1756
- mode: 'indeterminate',
1806
+ mode,
1757
1807
  spinnerColor,
1758
1808
  customSpinnerColor,
1759
1809
  disabled
@@ -1761,23 +1811,43 @@ class DbxButtonComponent extends AbstractDbxButtonDirective {
1761
1811
  return config;
1762
1812
  });
1763
1813
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxButtonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1764
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: DbxButtonComponent, isStandalone: true, selector: "dbx-button", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, buttonStyle: { classPropertyName: "buttonStyle", publicName: "buttonStyle", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, spinnerColor: { classPropertyName: "spinnerColor", publicName: "spinnerColor", isSignal: true, isRequired: false, transformFunction: null }, customButtonColor: { classPropertyName: "customButtonColor", publicName: "customButtonColor", isSignal: true, isRequired: false, transformFunction: null }, customTextColor: { classPropertyName: "customTextColor", publicName: "customTextColor", isSignal: true, isRequired: false, transformFunction: null }, customSpinnerColor: { classPropertyName: "customSpinnerColor", publicName: "customSpinnerColor", isSignal: true, isRequired: false, transformFunction: null }, basic: { classPropertyName: "basic", publicName: "basic", isSignal: true, isRequired: false, transformFunction: null }, raised: { classPropertyName: "raised", publicName: "raised", isSignal: true, isRequired: false, transformFunction: null }, stroked: { classPropertyName: "stroked", publicName: "stroked", isSignal: true, isRequired: false, transformFunction: null }, flat: { classPropertyName: "flat", publicName: "flat", isSignal: true, isRequired: false, transformFunction: null }, iconOnly: { classPropertyName: "iconOnly", publicName: "iconOnly", isSignal: true, isRequired: false, transformFunction: null }, fab: { classPropertyName: "fab", publicName: "fab", isSignal: true, isRequired: false, transformFunction: null } }, providers: provideDbxButton(DbxButtonComponent), usesInheritance: true, ngImport: i0, template: `
1765
- <dbx-progress-spinner-button (btnClick)="clickButton()" [config]="configSignal()">
1814
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxButtonComponent, isStandalone: true, selector: "dbx-button", inputs: { bar: { classPropertyName: "bar", publicName: "bar", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, buttonStyle: { classPropertyName: "buttonStyle", publicName: "buttonStyle", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, spinnerColor: { classPropertyName: "spinnerColor", publicName: "spinnerColor", isSignal: true, isRequired: false, transformFunction: null }, customButtonColor: { classPropertyName: "customButtonColor", publicName: "customButtonColor", isSignal: true, isRequired: false, transformFunction: null }, customTextColor: { classPropertyName: "customTextColor", publicName: "customTextColor", isSignal: true, isRequired: false, transformFunction: null }, customSpinnerColor: { classPropertyName: "customSpinnerColor", publicName: "customSpinnerColor", isSignal: true, isRequired: false, transformFunction: null }, basic: { classPropertyName: "basic", publicName: "basic", isSignal: true, isRequired: false, transformFunction: null }, raised: { classPropertyName: "raised", publicName: "raised", isSignal: true, isRequired: false, transformFunction: null }, stroked: { classPropertyName: "stroked", publicName: "stroked", isSignal: true, isRequired: false, transformFunction: null }, flat: { classPropertyName: "flat", publicName: "flat", isSignal: true, isRequired: false, transformFunction: null }, iconOnly: { classPropertyName: "iconOnly", publicName: "iconOnly", isSignal: true, isRequired: false, transformFunction: null }, fab: { classPropertyName: "fab", publicName: "fab", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null } }, providers: provideDbxButton(DbxButtonComponent), usesInheritance: true, ngImport: i0, template: `
1815
+ @if (bar()) {
1816
+ <dbx-progress-bar-button (btnClick)="clickButton()" [config]="configSignal()">
1817
+ <ng-template [ngTemplateOutlet]="content"></ng-template>
1818
+ </dbx-progress-bar-button>
1819
+ } @else {
1820
+ <dbx-progress-spinner-button (btnClick)="clickButton()" [config]="configSignal()">
1821
+ <ng-template [ngTemplateOutlet]="content"></ng-template>
1822
+ </dbx-progress-spinner-button>
1823
+ }
1824
+ <!-- Content -->
1825
+ <ng-template #content>
1766
1826
  <ng-content></ng-content>
1767
- </dbx-progress-spinner-button>
1768
- `, isInline: true, dependencies: [{ kind: "component", type: DbxProgressSpinnerButtonComponent, selector: "dbx-progress-spinner-button,dbx-spinner-button" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1827
+ </ng-template>
1828
+ `, isInline: true, dependencies: [{ kind: "component", type: DbxProgressSpinnerButtonComponent, selector: "dbx-progress-spinner-button,dbx-spinner-button" }, { kind: "component", type: DbxProgressBarButtonComponent, selector: "dbx-progress-bar-button,dbx-bar-button" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1769
1829
  }
1770
1830
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxButtonComponent, decorators: [{
1771
1831
  type: Component,
1772
1832
  args: [{
1773
1833
  selector: 'dbx-button',
1774
1834
  template: `
1775
- <dbx-progress-spinner-button (btnClick)="clickButton()" [config]="configSignal()">
1835
+ @if (bar()) {
1836
+ <dbx-progress-bar-button (btnClick)="clickButton()" [config]="configSignal()">
1837
+ <ng-template [ngTemplateOutlet]="content"></ng-template>
1838
+ </dbx-progress-bar-button>
1839
+ } @else {
1840
+ <dbx-progress-spinner-button (btnClick)="clickButton()" [config]="configSignal()">
1841
+ <ng-template [ngTemplateOutlet]="content"></ng-template>
1842
+ </dbx-progress-spinner-button>
1843
+ }
1844
+ <!-- Content -->
1845
+ <ng-template #content>
1776
1846
  <ng-content></ng-content>
1777
- </dbx-progress-spinner-button>
1847
+ </ng-template>
1778
1848
  `,
1779
1849
  providers: provideDbxButton(DbxButtonComponent),
1780
- imports: [DbxProgressSpinnerButtonComponent],
1850
+ imports: [DbxProgressSpinnerButtonComponent, DbxProgressBarButtonComponent, NgTemplateOutlet],
1781
1851
  changeDetection: ChangeDetectionStrategy.OnPush,
1782
1852
  standalone: true
1783
1853
  }]
@@ -1873,7 +1943,7 @@ class DbxFilterWrapperComponent extends AbstractDbxActionHandlerDirective {
1873
1943
  this.filterSourceDirective.resetFilter();
1874
1944
  }
1875
1945
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFilterWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1876
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxFilterWrapperComponent, isStandalone: true, selector: "dbx-filter-wrapper", inputs: { showButtons: { classPropertyName: "showButtons", publicName: "showButtons", isSignal: true, isRequired: false, transformFunction: null }, applyRaised: { classPropertyName: "applyRaised", publicName: "applyRaised", isSignal: true, isRequired: false, transformFunction: null }, applyIcon: { classPropertyName: "applyIcon", publicName: "applyIcon", isSignal: true, isRequired: false, transformFunction: null }, applyText: { classPropertyName: "applyText", publicName: "applyText", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideActionStoreSource(null)], usesInheritance: true, ngImport: i0, template: "<div class=\"dbx-filter-wrapper\">\n <div class=\"dbx-filter-wrapper-content\">\n <ng-content></ng-content>\n </div>\n @if (showButtons()) {\n <div fxLayout=\"row\">\n <dbx-button dbxActionButton [raised]=\"applyRaised()\" [text]=\"applyText()\" [icon]=\"applyIcon()\"></dbx-button>\n <div class=\"spacer\"></div>\n <button mat-icon-button (click)=\"resetFilter()\">\n <mat-icon>clear</mat-icon>\n </button>\n </div>\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: DbxButtonModule }, { kind: "directive", type: i1$2.DbxActionButtonDirective, selector: "[dbxActionButton]" }, { kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i5.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1946
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxFilterWrapperComponent, isStandalone: true, selector: "dbx-filter-wrapper", inputs: { showButtons: { classPropertyName: "showButtons", publicName: "showButtons", isSignal: true, isRequired: false, transformFunction: null }, applyRaised: { classPropertyName: "applyRaised", publicName: "applyRaised", isSignal: true, isRequired: false, transformFunction: null }, applyIcon: { classPropertyName: "applyIcon", publicName: "applyIcon", isSignal: true, isRequired: false, transformFunction: null }, applyText: { classPropertyName: "applyText", publicName: "applyText", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideActionStoreSource(null)], usesInheritance: true, ngImport: i0, template: "<div class=\"dbx-filter-wrapper\">\n <div class=\"dbx-filter-wrapper-content\">\n <ng-content></ng-content>\n </div>\n @if (showButtons()) {\n <div fxLayout=\"row\">\n <dbx-button dbxActionButton [raised]=\"applyRaised()\" [text]=\"applyText()\" [icon]=\"applyIcon()\"></dbx-button>\n <div class=\"spacer\"></div>\n <button mat-icon-button (click)=\"resetFilter()\">\n <mat-icon>clear</mat-icon>\n </button>\n </div>\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: DbxButtonModule }, { kind: "directive", type: i1$2.DbxActionButtonDirective, selector: "[dbxActionButton]" }, { kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["bar", "type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab", "mode"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i5.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1877
1947
  }
1878
1948
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFilterWrapperComponent, decorators: [{
1879
1949
  type: Component,
@@ -2639,7 +2709,7 @@ class DbxPopupControlButtonsComponent {
2639
2709
  }
2640
2710
  <dbx-button-spacer></dbx-button-spacer>
2641
2711
  <dbx-button [flat]="true" icon="close" color="warn" (buttonClick)="closeClicked()"></dbx-button>
2642
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: DbxButtonModule }, { kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab"] }, { kind: "directive", type: DbxButtonSpacerDirective, selector: "dbx-button-spacer,[dbxButtonSpacer]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2712
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: DbxButtonModule }, { kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["bar", "type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab", "mode"] }, { kind: "directive", type: DbxButtonSpacerDirective, selector: "dbx-button-spacer,[dbxButtonSpacer]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2643
2713
  }
2644
2714
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxPopupControlButtonsComponent, decorators: [{
2645
2715
  type: Component,
@@ -3303,6 +3373,521 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
3303
3373
  }]
3304
3374
  }] });
3305
3375
 
3376
+ class AbstractDbxFileUploadComponent {
3377
+ /**
3378
+ * Whether or not multiple files can be uploaded.
3379
+ */
3380
+ multiple = input(undefined, { transform: (x) => x === '' || x });
3381
+ /**
3382
+ * Accepted file types filter.
3383
+ */
3384
+ accept = input([]);
3385
+ /**
3386
+ * This disabled is input-only
3387
+ */
3388
+ disabled = input();
3389
+ /**
3390
+ * This working is input-only
3391
+ */
3392
+ working = input();
3393
+ /**
3394
+ * This signal is set by setMultiple
3395
+ */
3396
+ _multipleSignal = signal(undefined);
3397
+ /**
3398
+ * This signal is set by setAccept
3399
+ */
3400
+ _acceptSignal = signal(undefined);
3401
+ /**
3402
+ * This signal is set by setDisabled
3403
+ */
3404
+ _disabledSignal = signal(undefined);
3405
+ /**
3406
+ * This signal is set by setWorking
3407
+ */
3408
+ _workingSignal = signal(undefined);
3409
+ multipleSignal = computed(() => {
3410
+ const multipleInput = this.multiple();
3411
+ const multipleSignal = this._multipleSignal();
3412
+ return multipleSignal ?? multipleInput;
3413
+ });
3414
+ acceptSignal = computed(() => {
3415
+ const acceptInput = this.accept();
3416
+ const acceptSignal = this._acceptSignal();
3417
+ return acceptSignal ?? acceptInput;
3418
+ });
3419
+ disabledSignal = computed(() => {
3420
+ const disabledInput = this.disabled();
3421
+ const disabledSignal = this._disabledSignal();
3422
+ const workingSignal = this.isWorkingSignal();
3423
+ // disabled if any are true
3424
+ return disabledInput || disabledSignal || workingSignal;
3425
+ });
3426
+ workingSignal = computed(() => {
3427
+ const workingInput = this.working();
3428
+ const workingSignal = this._workingSignal();
3429
+ return workingSignal ?? workingInput;
3430
+ });
3431
+ isWorkingSignal = computed(() => {
3432
+ const working = this.workingSignal();
3433
+ return isDefinedAndNotFalse(working);
3434
+ });
3435
+ // MARK: DbxUploadActionCompatable
3436
+ setDisabled(disabled) {
3437
+ this._disabledSignal.set(disabled);
3438
+ }
3439
+ setWorking(working) {
3440
+ this._workingSignal.set(working);
3441
+ }
3442
+ setMultiple(multiple) {
3443
+ this._multipleSignal.set(multiple);
3444
+ }
3445
+ setAccept(accept) {
3446
+ this._acceptSignal.set(accept);
3447
+ }
3448
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AbstractDbxFileUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3449
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: AbstractDbxFileUploadComponent, isStandalone: true, inputs: { multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, working: { classPropertyName: "working", publicName: "working", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
3450
+ }
3451
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AbstractDbxFileUploadComponent, decorators: [{
3452
+ type: Directive,
3453
+ args: [{
3454
+ standalone: true
3455
+ }]
3456
+ }] });
3457
+
3458
+ /**
3459
+ * Returns a string that can be used as the "accept" attribute of a file input element.
3460
+ *
3461
+ * @param accept
3462
+ * @returns
3463
+ */
3464
+ function fileAcceptString(accept) {
3465
+ return typeof accept === 'string' ? accept : accept.join(',');
3466
+ }
3467
+ function fileAcceptFilterTypeStringArray(accept) {
3468
+ return typeof accept === 'string' ? accept.split(',').map((x) => x.trim()) : accept;
3469
+ }
3470
+ /**
3471
+ * Creates a FileArrayAcceptMatchFunction from the input.
3472
+ */
3473
+ function fileArrayAcceptMatchFunction(config) {
3474
+ const multiple = config.multiple ?? true;
3475
+ const isAcceptedFunction = typeof config.accept === 'function' ? config.accept : fileAcceptFunction(config.accept);
3476
+ return (input) => {
3477
+ const { included: acceptedType, excluded: rejectedType } = separateValues(input, isAcceptedFunction);
3478
+ let accepted = acceptedType;
3479
+ let rejected = rejectedType;
3480
+ if (!multiple) {
3481
+ const front = splitFront(acceptedType, 1);
3482
+ accepted = front.front;
3483
+ rejected = [...rejectedType, ...front.remaining];
3484
+ }
3485
+ return { multiple, input, accepted, rejected, acceptedType, rejectedType };
3486
+ };
3487
+ }
3488
+ /**
3489
+ * Creates a FileAcceptFunction from the input.
3490
+ *
3491
+ * @param accept
3492
+ * @returns
3493
+ */
3494
+ function fileAcceptFunction(accept) {
3495
+ const acceptList = fileAcceptFilterTypeStringArray(accept);
3496
+ let fileAcceptFunction;
3497
+ if (acceptList.length === 0) {
3498
+ fileAcceptFunction = asDecisionFunction(true);
3499
+ }
3500
+ else {
3501
+ const hasWildcard = acceptList.some((x) => x === '*');
3502
+ if (hasWildcard) {
3503
+ fileAcceptFunction = asDecisionFunction(true);
3504
+ }
3505
+ else {
3506
+ const isAcceptedFunctions = acceptList.map((x) => {
3507
+ if (x[0] === SLASH_PATH_FILE_TYPE_SEPARATOR) {
3508
+ // is a SlashPathTypedFileSuffix
3509
+ return (input) => input.name.endsWith(x);
3510
+ }
3511
+ else if (x.endsWith('/*')) {
3512
+ // is a MimeTypeWildcardWithoutParameters
3513
+ const mimeTypePrefix = x.slice(0, -2);
3514
+ return (input) => input.type.startsWith(mimeTypePrefix);
3515
+ }
3516
+ else {
3517
+ // treat as a MimeTypeWithoutParameters
3518
+ return (input) => input.type === x;
3519
+ }
3520
+ });
3521
+ fileAcceptFunction = (input) => {
3522
+ return isAcceptedFunctions.findIndex((x) => x(input)) !== -1;
3523
+ };
3524
+ }
3525
+ }
3526
+ return fileAcceptFunction;
3527
+ }
3528
+
3529
+ /**
3530
+ * Compatable interface for DbxUploadActionDirective.
3531
+ */
3532
+ class DbxFileUploadActionCompatable {
3533
+ }
3534
+ /**
3535
+ * Provides a DbxUploadActionCompatable for a given type.
3536
+ */
3537
+ function provideDbxFileUploadActionCompatable(sourceType) {
3538
+ return [
3539
+ {
3540
+ provide: DbxFileUploadActionCompatable,
3541
+ useExisting: forwardRef(() => sourceType)
3542
+ }
3543
+ ];
3544
+ }
3545
+
3546
+ class DbxFileUploadAreaComponent extends AbstractDbxFileUploadComponent {
3547
+ icon = input();
3548
+ text = input();
3549
+ hint = input();
3550
+ show = input(true);
3551
+ hintSignal = computed(() => {
3552
+ const hint = this.hint();
3553
+ return typeof hint === 'string' ? hint : hint === true ? 'Drag to upload' : null;
3554
+ });
3555
+ filesChanged = output();
3556
+ areaClicked = output();
3557
+ areaDragActiveChanged = output();
3558
+ dragOverStateSignal = signal(false);
3559
+ filesAcceptedFunctionSignal = computed(() => fileArrayAcceptMatchFunction({ multiple: this.multipleSignal() ?? false, accept: this.acceptSignal() }));
3560
+ onClick(evt) {
3561
+ evt.stopPropagation();
3562
+ if (!this.disabled()) {
3563
+ this.areaClicked.emit();
3564
+ }
3565
+ }
3566
+ onDragOver(evt) {
3567
+ evt.preventDefault();
3568
+ evt.stopPropagation();
3569
+ this.dragOverStateSignal.set(true);
3570
+ this.areaDragActiveChanged.emit(true);
3571
+ }
3572
+ onDragLeave(evt) {
3573
+ evt.preventDefault();
3574
+ evt.stopPropagation();
3575
+ this.dragOverStateSignal.set(false);
3576
+ this.areaDragActiveChanged.emit(false);
3577
+ }
3578
+ onDrop(evt) {
3579
+ evt.preventDefault();
3580
+ evt.stopPropagation();
3581
+ this.dragOverStateSignal.set(false);
3582
+ if (!this.disabled()) {
3583
+ const allFiles = evt.dataTransfer?.files;
3584
+ if (allFiles) {
3585
+ const matchResult = this.filesAcceptedFunctionSignal()(Array.from(allFiles));
3586
+ this.filesChanged.emit({ allFiles: matchResult.input, matchResult });
3587
+ }
3588
+ }
3589
+ }
3590
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFileUploadAreaComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
3591
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxFileUploadAreaComponent, isStandalone: true, selector: "dbx-file-upload-area", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, show: { classPropertyName: "show", publicName: "show", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filesChanged: "filesChanged", areaClicked: "areaClicked", areaDragActiveChanged: "areaDragActiveChanged" }, host: { listeners: { "click": "onClick($event)", "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)", "drop": "onDrop($event)" }, properties: { "class.dbx-file-upload-area-with-hint": "hintSignal()", "class.dbx-file-upload-area-disabled": "disabledSignal()", "class.dbx-file-upload-area-working": "isWorkingSignal()", "class.dbx-file-upload-area-drag-over": "!disabledSignal() && dragOverStateSignal()" }, classAttribute: "dbx-file-upload-area dbx-block" }, providers: provideDbxFileUploadActionCompatable(DbxFileUploadAreaComponent), usesInheritance: true, ngImport: i0, template: `
3592
+ @if (show()) {
3593
+ <div class="dbx-file-upload-area-content">
3594
+ <div class="dbx-file-upload-area-content-text">
3595
+ @if (icon() != null) {
3596
+ <mat-icon>{{ icon() }}</mat-icon>
3597
+ }
3598
+ @if (text() != null) {
3599
+ <span>{{ text() }}</span>
3600
+ }
3601
+ </div>
3602
+ <div class="dbx-file-upload-area-content-wrapped">
3603
+ <ng-template [ngTemplateOutlet]="contentTemplate"></ng-template>
3604
+ </div>
3605
+ </div>
3606
+ @if (hintSignal()) {
3607
+ <div class="dbx-file-upload-area-content-hint dbx-hint dbx-small">{{ hintSignal() }}</div>
3608
+ }
3609
+ } @else {
3610
+ <ng-template [ngTemplateOutlet]="contentTemplate"></ng-template>
3611
+ }
3612
+
3613
+ <!-- Content Template -->
3614
+ <ng-template #contentTemplate>
3615
+ <ng-content></ng-content>
3616
+ </ng-template>
3617
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3618
+ }
3619
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFileUploadAreaComponent, decorators: [{
3620
+ type: Component,
3621
+ args: [{
3622
+ selector: 'dbx-file-upload-area',
3623
+ template: `
3624
+ @if (show()) {
3625
+ <div class="dbx-file-upload-area-content">
3626
+ <div class="dbx-file-upload-area-content-text">
3627
+ @if (icon() != null) {
3628
+ <mat-icon>{{ icon() }}</mat-icon>
3629
+ }
3630
+ @if (text() != null) {
3631
+ <span>{{ text() }}</span>
3632
+ }
3633
+ </div>
3634
+ <div class="dbx-file-upload-area-content-wrapped">
3635
+ <ng-template [ngTemplateOutlet]="contentTemplate"></ng-template>
3636
+ </div>
3637
+ </div>
3638
+ @if (hintSignal()) {
3639
+ <div class="dbx-file-upload-area-content-hint dbx-hint dbx-small">{{ hintSignal() }}</div>
3640
+ }
3641
+ } @else {
3642
+ <ng-template [ngTemplateOutlet]="contentTemplate"></ng-template>
3643
+ }
3644
+
3645
+ <!-- Content Template -->
3646
+ <ng-template #contentTemplate>
3647
+ <ng-content></ng-content>
3648
+ </ng-template>
3649
+ `,
3650
+ host: {
3651
+ class: 'dbx-file-upload-area dbx-block',
3652
+ '[class.dbx-file-upload-area-with-hint]': 'hintSignal()',
3653
+ '[class.dbx-file-upload-area-disabled]': 'disabledSignal()',
3654
+ '[class.dbx-file-upload-area-working]': 'isWorkingSignal()',
3655
+ '[class.dbx-file-upload-area-drag-over]': '!disabledSignal() && dragOverStateSignal()'
3656
+ },
3657
+ providers: provideDbxFileUploadActionCompatable(DbxFileUploadAreaComponent),
3658
+ imports: [MatIconModule, NgTemplateOutlet],
3659
+ changeDetection: ChangeDetectionStrategy.OnPush,
3660
+ standalone: true
3661
+ }]
3662
+ }], propDecorators: { onClick: [{
3663
+ type: HostListener,
3664
+ args: ['click', ['$event']]
3665
+ }], onDragOver: [{
3666
+ type: HostListener,
3667
+ args: ['dragover', ['$event']]
3668
+ }], onDragLeave: [{
3669
+ type: HostListener,
3670
+ args: ['dragleave', ['$event']]
3671
+ }], onDrop: [{
3672
+ type: HostListener,
3673
+ args: ['drop', ['$event']]
3674
+ }] } });
3675
+
3676
+ class DbxFileUploadButtonComponent extends AbstractDbxFileUploadComponent {
3677
+ fileInput = viewChild.required('fileInput', { read: ElementRef });
3678
+ text = input();
3679
+ icon = input();
3680
+ buttonStyle = input();
3681
+ filesChanged = output();
3682
+ buttonAcceptSignal = computed(() => {
3683
+ const accept = this.acceptSignal();
3684
+ return typeof accept === 'function' ? undefined : fileAcceptString(accept);
3685
+ });
3686
+ buttonMultipleSignal = computed(() => this.multipleSignal() ?? false);
3687
+ filesAcceptedFunctionSignal = computed(() => {
3688
+ const accept = this.acceptSignal();
3689
+ const multiple = this.buttonMultipleSignal();
3690
+ return typeof accept === 'function' ? fileArrayAcceptMatchFunction({ multiple, accept }) : undefined;
3691
+ });
3692
+ /**
3693
+ * The HTML attribute should not be added if it is false, so we return null.
3694
+ */
3695
+ multipleAttributeSignal = computed(() => (this.buttonMultipleSignal() ? '' : null));
3696
+ openInput() {
3697
+ const inputRef = this.fileInput();
3698
+ const input = inputRef.nativeElement;
3699
+ const isDisabled = this.disabledSignal();
3700
+ if (!isDisabled) {
3701
+ input.click();
3702
+ }
3703
+ }
3704
+ fileInputChanged() {
3705
+ const inputRef = this.fileInput();
3706
+ const input = inputRef.nativeElement;
3707
+ const isDisabled = this.disabledSignal();
3708
+ if (!isDisabled) {
3709
+ const allFiles = input.files ? Array.from(input.files) : [];
3710
+ const fileAcceptFunction = this.filesAcceptedFunctionSignal();
3711
+ if (fileAcceptFunction) {
3712
+ const matchResult = fileAcceptFunction(allFiles);
3713
+ this.filesChanged.emit({ allFiles, matchResult });
3714
+ }
3715
+ else {
3716
+ // if not using a filesAcceptedFunction, then accept all files as the input should have filtered them
3717
+ const multiple = this.buttonMultipleSignal();
3718
+ this.filesChanged.emit({ allFiles, matchResult: { multiple, input: allFiles, accepted: allFiles, rejected: [], acceptedType: allFiles, rejectedType: [] } });
3719
+ }
3720
+ }
3721
+ // reset the input value
3722
+ if (input.value) {
3723
+ input.value = '';
3724
+ }
3725
+ }
3726
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFileUploadButtonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
3727
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.13", type: DbxFileUploadButtonComponent, isStandalone: true, selector: "dbx-file-upload-button", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, buttonStyle: { classPropertyName: "buttonStyle", publicName: "buttonStyle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filesChanged: "filesChanged" }, providers: provideDbxFileUploadActionCompatable(DbxFileUploadButtonComponent), viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
3728
+ <dbx-button [buttonStyle]="buttonStyle()" [text]="text()" [icon]="icon()" (buttonClick)="openInput()" [disabled]="disabledSignal()" [working]="workingSignal()">
3729
+ <ng-content></ng-content>
3730
+ </dbx-button>
3731
+ <input #fileInput hidden type="file" [attr.accept]="buttonAcceptSignal() ?? null" [attr.multiple]="multipleAttributeSignal() ? '' : null" (change)="fileInputChanged()" />
3732
+ `, isInline: true, dependencies: [{ kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["bar", "type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab", "mode"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3733
+ }
3734
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFileUploadButtonComponent, decorators: [{
3735
+ type: Component,
3736
+ args: [{
3737
+ selector: 'dbx-file-upload-button',
3738
+ template: `
3739
+ <dbx-button [buttonStyle]="buttonStyle()" [text]="text()" [icon]="icon()" (buttonClick)="openInput()" [disabled]="disabledSignal()" [working]="workingSignal()">
3740
+ <ng-content></ng-content>
3741
+ </dbx-button>
3742
+ <input #fileInput hidden type="file" [attr.accept]="buttonAcceptSignal() ?? null" [attr.multiple]="multipleAttributeSignal() ? '' : null" (change)="fileInputChanged()" />
3743
+ `,
3744
+ providers: provideDbxFileUploadActionCompatable(DbxFileUploadButtonComponent),
3745
+ imports: [DbxButtonComponent],
3746
+ changeDetection: ChangeDetectionStrategy.OnPush,
3747
+ standalone: true
3748
+ }]
3749
+ }] });
3750
+
3751
+ /**
3752
+ * Combines both the file upload area and button into a single component.
3753
+ */
3754
+ class DbxFileUploadComponent extends AbstractDbxFileUploadComponent {
3755
+ config = input();
3756
+ area = viewChild.required('area', { read: DbxFileUploadAreaComponent });
3757
+ button = viewChild.required('button', { read: DbxFileUploadButtonComponent });
3758
+ buttonStyle = input();
3759
+ mode = input();
3760
+ text = input(); // button text
3761
+ icon = input(); // button icon
3762
+ hint = input(); // area hint
3763
+ modeSignal = computed(() => {
3764
+ const config = this.config();
3765
+ const mode = this.mode();
3766
+ return config?.mode ?? mode ?? 'default';
3767
+ });
3768
+ showButtonSignal = computed(() => {
3769
+ const mode = this.modeSignal();
3770
+ return mode === 'button' || mode === 'default';
3771
+ });
3772
+ showAreaSignal = computed(() => {
3773
+ const mode = this.modeSignal();
3774
+ return mode === 'area' || mode === 'default';
3775
+ });
3776
+ clickAreaToUpload = input();
3777
+ clickAreaToUploadSignal = computed(() => {
3778
+ const config = this.config();
3779
+ const clickAreaToUpload = this.clickAreaToUpload();
3780
+ return config?.clickAreaToUpload ?? clickAreaToUpload;
3781
+ });
3782
+ buttonTextSignal = computed(() => {
3783
+ const config = this.config();
3784
+ const text = this.text();
3785
+ return config?.button?.text ?? text;
3786
+ });
3787
+ buttonIconSignal = computed(() => {
3788
+ const config = this.config();
3789
+ const icon = this.icon();
3790
+ return config?.button?.icon ?? icon;
3791
+ });
3792
+ areaTextSignal = computed(() => this.config()?.area?.text);
3793
+ areaIconSignal = computed(() => this.config()?.area?.icon);
3794
+ areaHintSignal = computed(() => {
3795
+ const config = this.config();
3796
+ const hint = this.hint();
3797
+ return config?.area?.hint ?? hint;
3798
+ });
3799
+ uploadMultipleSignal = computed(() => {
3800
+ const config = this.config();
3801
+ const multiple = this.multipleSignal();
3802
+ return multiple ?? config?.multiple;
3803
+ });
3804
+ uploadAcceptSignal = computed(() => {
3805
+ const config = this.config();
3806
+ const accept = this.acceptSignal();
3807
+ return accept ?? config?.accept;
3808
+ });
3809
+ filesChanged = output();
3810
+ areaClicked() {
3811
+ const clickAreaToUpload = this.clickAreaToUploadSignal();
3812
+ if (clickAreaToUpload) {
3813
+ const button = this.button();
3814
+ button.openInput();
3815
+ }
3816
+ }
3817
+ areaFilesChanged(event) {
3818
+ this.filesChanged.emit(event);
3819
+ }
3820
+ buttonFilesChanged(event) {
3821
+ this.filesChanged.emit(event);
3822
+ }
3823
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFileUploadComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
3824
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxFileUploadComponent, isStandalone: true, selector: "dbx-file-upload", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, buttonStyle: { classPropertyName: "buttonStyle", publicName: "buttonStyle", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, clickAreaToUpload: { classPropertyName: "clickAreaToUpload", publicName: "clickAreaToUpload", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filesChanged: "filesChanged" }, providers: provideDbxFileUploadActionCompatable(DbxFileUploadComponent), viewQueries: [{ propertyName: "area", first: true, predicate: ["area"], descendants: true, read: DbxFileUploadAreaComponent, isSignal: true }, { propertyName: "button", first: true, predicate: ["button"], descendants: true, read: DbxFileUploadButtonComponent, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
3825
+ <dbx-file-upload-area #area [show]="showAreaSignal()" [hint]="areaHintSignal()" [text]="areaTextSignal()" [icon]="areaIconSignal()" [accept]="acceptSignal()" [multiple]="multipleSignal()" (filesChanged)="areaFilesChanged($event)" (areaClicked)="areaClicked()" [disabled]="disabledSignal()" [working]="workingSignal()">
3826
+ <ng-content></ng-content>
3827
+ @if (showButtonSignal()) {
3828
+ <ng-template [ngTemplateOutlet]="buttonTemplate"></ng-template>
3829
+ }
3830
+ </dbx-file-upload-area>
3831
+ <!-- Button Template -->
3832
+ <ng-template #buttonTemplate>
3833
+ <dbx-file-upload-button #button [text]="buttonTextSignal()" [icon]="buttonIconSignal()" [accept]="acceptSignal()" [multiple]="multipleSignal()" (filesChanged)="buttonFilesChanged($event)" [disabled]="disabledSignal()" [working]="workingSignal()" [buttonStyle]="buttonStyle()"></dbx-file-upload-button>
3834
+ </ng-template>
3835
+ `, isInline: true, dependencies: [{ kind: "component", type: DbxFileUploadAreaComponent, selector: "dbx-file-upload-area", inputs: ["icon", "text", "hint", "show"], outputs: ["filesChanged", "areaClicked", "areaDragActiveChanged"] }, { kind: "component", type: DbxFileUploadButtonComponent, selector: "dbx-file-upload-button", inputs: ["text", "icon", "buttonStyle"], outputs: ["filesChanged"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3836
+ }
3837
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFileUploadComponent, decorators: [{
3838
+ type: Component,
3839
+ args: [{
3840
+ selector: 'dbx-file-upload',
3841
+ template: `
3842
+ <dbx-file-upload-area #area [show]="showAreaSignal()" [hint]="areaHintSignal()" [text]="areaTextSignal()" [icon]="areaIconSignal()" [accept]="acceptSignal()" [multiple]="multipleSignal()" (filesChanged)="areaFilesChanged($event)" (areaClicked)="areaClicked()" [disabled]="disabledSignal()" [working]="workingSignal()">
3843
+ <ng-content></ng-content>
3844
+ @if (showButtonSignal()) {
3845
+ <ng-template [ngTemplateOutlet]="buttonTemplate"></ng-template>
3846
+ }
3847
+ </dbx-file-upload-area>
3848
+ <!-- Button Template -->
3849
+ <ng-template #buttonTemplate>
3850
+ <dbx-file-upload-button #button [text]="buttonTextSignal()" [icon]="buttonIconSignal()" [accept]="acceptSignal()" [multiple]="multipleSignal()" (filesChanged)="buttonFilesChanged($event)" [disabled]="disabledSignal()" [working]="workingSignal()" [buttonStyle]="buttonStyle()"></dbx-file-upload-button>
3851
+ </ng-template>
3852
+ `,
3853
+ providers: provideDbxFileUploadActionCompatable(DbxFileUploadComponent),
3854
+ imports: [DbxFileUploadAreaComponent, DbxFileUploadButtonComponent, NgTemplateOutlet],
3855
+ changeDetection: ChangeDetectionStrategy.OnPush,
3856
+ standalone: true
3857
+ }]
3858
+ }] });
3859
+
3860
+ /**
3861
+ * Context used for linking a button to an ActionContext.
3862
+ */
3863
+ class DbxFileUploadActionSyncDirective {
3864
+ source = inject(DbxActionContextStoreSourceInstance);
3865
+ uploadCompatable = inject(DbxFileUploadActionCompatable);
3866
+ _workingSub = new SubscriptionObject();
3867
+ _disabledSub = new SubscriptionObject();
3868
+ ngOnInit() {
3869
+ this._workingSub.subscription = this.source.isWorkingOrWorkProgress$.subscribe((working) => {
3870
+ this.uploadCompatable.setWorking(working);
3871
+ });
3872
+ this._disabledSub.subscription = this.source.isDisabled$.subscribe((disabled) => {
3873
+ this.uploadCompatable.setDisabled(disabled);
3874
+ });
3875
+ }
3876
+ ngOnDestroy() {
3877
+ this._workingSub.destroy();
3878
+ this._disabledSub.destroy();
3879
+ }
3880
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFileUploadActionSyncDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3881
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: DbxFileUploadActionSyncDirective, isStandalone: true, selector: "[dbxFileUploadActionSync]", ngImport: i0 });
3882
+ }
3883
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFileUploadActionSyncDirective, decorators: [{
3884
+ type: Directive,
3885
+ args: [{
3886
+ selector: '[dbxFileUploadActionSync]',
3887
+ standalone: true
3888
+ }]
3889
+ }] });
3890
+
3306
3891
  class AbstractDbxErrorWidgetComponent {
3307
3892
  data = inject(DBX_INJECTION_COMPONENT_DATA);
3308
3893
  get code() {
@@ -3781,15 +4366,41 @@ class DbxBasicLoadingComponent {
3781
4366
  customError = viewChild('customError', { read: ElementRef });
3782
4367
  customLoading = viewChild('customLoading', { read: ElementRef });
3783
4368
  diameter = input();
3784
- mode = input('indeterminate');
4369
+ mode = input();
3785
4370
  color = input('primary');
3786
4371
  text = input();
3787
4372
  linear = input(false);
3788
4373
  show = input(true);
3789
4374
  loading = input();
3790
4375
  error = input();
3791
- stateSignal = computed(() => {
4376
+ loadingProgressSignal = computed(() => {
3792
4377
  const loading = this.loading();
4378
+ let result;
4379
+ if (typeof loading === 'number') {
4380
+ result = loading;
4381
+ }
4382
+ return result;
4383
+ });
4384
+ modeSignal = computed(() => {
4385
+ const mode = this.mode();
4386
+ const loadingProgress = this.loadingProgressSignal();
4387
+ let result;
4388
+ if (!mode) {
4389
+ if (loadingProgress != null) {
4390
+ result = 'determinate';
4391
+ }
4392
+ else {
4393
+ result = 'indeterminate';
4394
+ }
4395
+ }
4396
+ else {
4397
+ result = mode;
4398
+ }
4399
+ return result;
4400
+ });
4401
+ isLoadingSignal = computed(() => isDefinedAndNotFalse(this.loading()));
4402
+ stateSignal = computed(() => {
4403
+ const loading = this.isLoadingSignal();
3793
4404
  const error = this.error();
3794
4405
  const show = this.show() ?? true; // default to true if not defined
3795
4406
  let state;
@@ -3811,11 +4422,11 @@ class DbxBasicLoadingComponent {
3811
4422
  hasNoCustomErrorSignal = computed(() => !checkNgContentWrapperHasContent(this.customError()));
3812
4423
  hasNoCustomLoadingSignal = computed(() => !checkNgContentWrapperHasContent(this.customLoading()));
3813
4424
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxBasicLoadingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3814
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxBasicLoadingComponent, isStandalone: true, selector: "dbx-basic-loading", inputs: { diameter: { classPropertyName: "diameter", publicName: "diameter", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, linear: { classPropertyName: "linear", publicName: "linear", isSignal: true, isRequired: false, transformFunction: null }, show: { classPropertyName: "show", publicName: "show", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "customError", first: true, predicate: ["customError"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "customLoading", first: true, predicate: ["customLoading"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: "@switch (stateSignal()) {\n @case ('none') {\n <!-- Loading -->\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n }\n @case ('loading') {\n <!-- Loading -->\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n }\n @case ('content') {\n <!-- Content -->\n <ng-content></ng-content>\n }\n @case ('error') {\n <!-- Error -->\n <ng-container *ngTemplateOutlet=\"errorTemplate\"></ng-container>\n }\n}\n\n<ng-template #loadingTemplate>\n @if (hasNoCustomLoadingSignal()) {\n <dbx-loading-progress [mode]=\"mode()\" [color]=\"color()\" [text]=\"text()\" [linear]=\"linear()\" [diameter]=\"diameter()\"></dbx-loading-progress>\n }\n <div #customLoading>\n <ng-content select=\"[loading]\"></ng-content>\n </div>\n</ng-template>\n\n<ng-template #errorTemplate>\n @if (hasNoCustomErrorSignal()) {\n <dbx-error [error]=\"error()\"></dbx-error>\n }\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n <ng-content select=\"[errorAction]\"></ng-content>\n</ng-template>\n", dependencies: [{ kind: "component", type: DbxErrorComponent, selector: "dbx-error", inputs: ["error", "iconOnly"], outputs: ["popoverOpened"] }, { kind: "component", type: DbxLoadingProgressComponent, selector: "dbx-loading-progress", inputs: ["diameter", "text", "linear", "mode", "color", "value", "bufferValue"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4425
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxBasicLoadingComponent, isStandalone: true, selector: "dbx-basic-loading", inputs: { diameter: { classPropertyName: "diameter", publicName: "diameter", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, linear: { classPropertyName: "linear", publicName: "linear", isSignal: true, isRequired: false, transformFunction: null }, show: { classPropertyName: "show", publicName: "show", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "customError", first: true, predicate: ["customError"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "customLoading", first: true, predicate: ["customLoading"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: "@switch (stateSignal()) {\n @case ('none') {\n <!-- Loading -->\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n }\n @case ('loading') {\n <!-- Loading -->\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n }\n @case ('content') {\n <!-- Content -->\n <ng-content></ng-content>\n }\n @case ('error') {\n <!-- Error -->\n <ng-container *ngTemplateOutlet=\"errorTemplate\"></ng-container>\n }\n}\n\n<ng-template #loadingTemplate>\n @if (hasNoCustomLoadingSignal()) {\n <dbx-loading-progress [mode]=\"modeSignal()\" [value]=\"loadingProgressSignal()\" [color]=\"color()\" [text]=\"text()\" [linear]=\"linear()\" [diameter]=\"diameter()\"></dbx-loading-progress>\n }\n <div #customLoading>\n <ng-content select=\"[loading]\"></ng-content>\n </div>\n</ng-template>\n\n<ng-template #errorTemplate>\n @if (hasNoCustomErrorSignal()) {\n <dbx-error [error]=\"error()\"></dbx-error>\n }\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n <ng-content select=\"[errorAction]\"></ng-content>\n</ng-template>\n", dependencies: [{ kind: "component", type: DbxErrorComponent, selector: "dbx-error", inputs: ["error", "iconOnly"], outputs: ["popoverOpened"] }, { kind: "component", type: DbxLoadingProgressComponent, selector: "dbx-loading-progress", inputs: ["diameter", "text", "linear", "mode", "color", "value", "bufferValue"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3815
4426
  }
3816
4427
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxBasicLoadingComponent, decorators: [{
3817
4428
  type: Component,
3818
- args: [{ selector: 'dbx-basic-loading', imports: [DbxErrorComponent, DbxLoadingProgressComponent, NgTemplateOutlet], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "@switch (stateSignal()) {\n @case ('none') {\n <!-- Loading -->\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n }\n @case ('loading') {\n <!-- Loading -->\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n }\n @case ('content') {\n <!-- Content -->\n <ng-content></ng-content>\n }\n @case ('error') {\n <!-- Error -->\n <ng-container *ngTemplateOutlet=\"errorTemplate\"></ng-container>\n }\n}\n\n<ng-template #loadingTemplate>\n @if (hasNoCustomLoadingSignal()) {\n <dbx-loading-progress [mode]=\"mode()\" [color]=\"color()\" [text]=\"text()\" [linear]=\"linear()\" [diameter]=\"diameter()\"></dbx-loading-progress>\n }\n <div #customLoading>\n <ng-content select=\"[loading]\"></ng-content>\n </div>\n</ng-template>\n\n<ng-template #errorTemplate>\n @if (hasNoCustomErrorSignal()) {\n <dbx-error [error]=\"error()\"></dbx-error>\n }\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n <ng-content select=\"[errorAction]\"></ng-content>\n</ng-template>\n" }]
4429
+ args: [{ selector: 'dbx-basic-loading', imports: [DbxErrorComponent, DbxLoadingProgressComponent, NgTemplateOutlet], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "@switch (stateSignal()) {\n @case ('none') {\n <!-- Loading -->\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n }\n @case ('loading') {\n <!-- Loading -->\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n }\n @case ('content') {\n <!-- Content -->\n <ng-content></ng-content>\n }\n @case ('error') {\n <!-- Error -->\n <ng-container *ngTemplateOutlet=\"errorTemplate\"></ng-container>\n }\n}\n\n<ng-template #loadingTemplate>\n @if (hasNoCustomLoadingSignal()) {\n <dbx-loading-progress [mode]=\"modeSignal()\" [value]=\"loadingProgressSignal()\" [color]=\"color()\" [text]=\"text()\" [linear]=\"linear()\" [diameter]=\"diameter()\"></dbx-loading-progress>\n }\n <div #customLoading>\n <ng-content select=\"[loading]\"></ng-content>\n </div>\n</ng-template>\n\n<ng-template #errorTemplate>\n @if (hasNoCustomErrorSignal()) {\n <dbx-error [error]=\"error()\"></dbx-error>\n }\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n <ng-content select=\"[errorAction]\"></ng-content>\n</ng-template>\n" }]
3819
4430
  }] });
3820
4431
 
3821
4432
  /**
@@ -3829,7 +4440,7 @@ class DbxLoadingComponent {
3829
4440
  padding = input(false);
3830
4441
  show = input();
3831
4442
  text = input();
3832
- mode = input('indeterminate');
4443
+ mode = input();
3833
4444
  color = input('primary');
3834
4445
  diameter = input();
3835
4446
  linear = input();
@@ -3842,8 +4453,15 @@ class DbxLoadingComponent {
3842
4453
  stateSignal = computed(() => {
3843
4454
  const loading = this.loading();
3844
4455
  const error = this.error();
3845
- let loadingState = this.contextStreamSignal();
3846
- if (loadingState == null) {
4456
+ const contextStreamEvent = this.contextStreamSignal();
4457
+ let loadingState;
4458
+ if (contextStreamEvent) {
4459
+ loadingState = {
4460
+ loading: contextStreamEvent.loading === true ? (contextStreamEvent.loadingProgress ?? true) : false,
4461
+ error: contextStreamEvent.error
4462
+ };
4463
+ }
4464
+ else {
3847
4465
  loadingState = {
3848
4466
  loading: loading ?? false,
3849
4467
  error: error
@@ -4014,7 +4632,7 @@ class DbxActionSnackbarComponent extends AbstractSubscriptionDirective {
4014
4632
  this.snackbarRef.dismiss();
4015
4633
  };
4016
4634
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxActionSnackbarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
4017
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxActionSnackbarComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class=\"dbx-action-snackbar\" [ngClass]=\"snackbarStatusClassSignal()\">\n <span>{{ message }}</span>\n <dbx-spacer></dbx-spacer>\n @switch (completeSignal()) {\n @case (true) {\n <dbx-button (buttonClick)=\"dismiss()\" color=\"accent\" icon=\"done\" text=\"Success\"></dbx-button>\n }\n @case (false) {\n @if (hasAction) {\n <dbx-action dbxActionValue [dbxActionSource]=\"sourceInstanceSignal()\" [dbxActionSuccessHandler]=\"dismissAfterActionCompletes\">\n <dbx-button dbxActionButton color=\"warn\" [text]=\"button\"></dbx-button>\n </dbx-action>\n <dbx-button-spacer></dbx-button-spacer>\n }\n <dbx-button (buttonClick)=\"dismiss()\" color=\"accent\" icon=\"close\"></dbx-button>\n }\n }\n</div>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: DbxActionSourceDirective, selector: "[dbxActionSource]", inputs: ["dbxActionSource"] }, { kind: "directive", type: DbxActionSuccessHandlerDirective, selector: "[dbxActionSuccessHandler]", inputs: ["dbxActionSuccessHandler"] }, { kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab"] }, { kind: "directive", type: DbxButtonSpacerDirective, selector: "dbx-button-spacer,[dbxButtonSpacer]" }, { kind: "directive", type: DbxSpacerDirective, selector: "dbx-spacer, [dbxSpacer]" }, { kind: "directive", type: DbxActionDirective, selector: "dbx-action,[dbxAction],dbx-action-context,[dbxActionContext]", exportAs: ["action", "dbxAction"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4635
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxActionSnackbarComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class=\"dbx-action-snackbar\" [ngClass]=\"snackbarStatusClassSignal()\">\n <span>{{ message }}</span>\n <dbx-spacer></dbx-spacer>\n @switch (completeSignal()) {\n @case (true) {\n <dbx-button (buttonClick)=\"dismiss()\" color=\"accent\" icon=\"done\" text=\"Success\"></dbx-button>\n }\n @case (false) {\n @if (hasAction) {\n <dbx-action dbxActionValue [dbxActionSource]=\"sourceInstanceSignal()\" [dbxActionSuccessHandler]=\"dismissAfterActionCompletes\">\n <dbx-button dbxActionButton color=\"warn\" [text]=\"button\"></dbx-button>\n </dbx-action>\n <dbx-button-spacer></dbx-button-spacer>\n }\n <dbx-button (buttonClick)=\"dismiss()\" color=\"accent\" icon=\"close\"></dbx-button>\n }\n }\n</div>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: DbxActionSourceDirective, selector: "[dbxActionSource]", inputs: ["dbxActionSource"] }, { kind: "directive", type: DbxActionSuccessHandlerDirective, selector: "[dbxActionSuccessHandler]", inputs: ["dbxActionSuccessHandler"] }, { kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["bar", "type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab", "mode"] }, { kind: "directive", type: DbxButtonSpacerDirective, selector: "dbx-button-spacer,[dbxButtonSpacer]" }, { kind: "directive", type: DbxSpacerDirective, selector: "dbx-spacer, [dbxSpacer]" }, { kind: "directive", type: DbxActionDirective, selector: "dbx-action,[dbxAction],dbx-action-context,[dbxActionContext]", exportAs: ["action", "dbxAction"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4018
4636
  }
4019
4637
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxActionSnackbarComponent, decorators: [{
4020
4638
  type: Component,
@@ -4341,7 +4959,7 @@ class DbxActionUIRouterTransitionSafetyDialogComponent extends AbstractDialogDir
4341
4959
  <dbx-button-spacer></dbx-button-spacer>
4342
4960
  </ng-container>
4343
4961
  </dbx-prompt-confirm>
4344
- `, isInline: true, dependencies: [{ kind: "component", type: DbxPromptConfirmComponent, selector: "dbx-prompt-confirm", inputs: ["config"], outputs: ["confirm", "cancel"] }, { kind: "component", type: DbxErrorComponent, selector: "dbx-error", inputs: ["error", "iconOnly"], outputs: ["popoverOpened"] }, { kind: "directive", type: DbxActionErrorDirective, selector: "[dbxActionError]" }, { kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab"] }, { kind: "directive", type: DbxButtonSpacerDirective, selector: "dbx-button-spacer,[dbxButtonSpacer]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4962
+ `, isInline: true, dependencies: [{ kind: "component", type: DbxPromptConfirmComponent, selector: "dbx-prompt-confirm", inputs: ["config"], outputs: ["confirm", "cancel"] }, { kind: "component", type: DbxErrorComponent, selector: "dbx-error", inputs: ["error", "iconOnly"], outputs: ["popoverOpened"] }, { kind: "directive", type: DbxActionErrorDirective, selector: "[dbxActionError]" }, { kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["bar", "type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab", "mode"] }, { kind: "directive", type: DbxButtonSpacerDirective, selector: "dbx-button-spacer,[dbxButtonSpacer]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4345
4963
  }
4346
4964
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxActionUIRouterTransitionSafetyDialogComponent, decorators: [{
4347
4965
  type: Component,
@@ -4520,14 +5138,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
4520
5138
  class DbxActionConfirmDirective extends AbstractPromptConfirmDirective {
4521
5139
  source = inject((DbxActionContextStoreSourceInstance), { host: true });
4522
5140
  dbxActionConfirm = input(undefined, { transform: transformEmptyStringInputToUndefined });
4523
- _sourceSubscription = new SubscriptionObject();
5141
+ _sourceSub = new SubscriptionObject();
4524
5142
  ngOnInit() {
4525
- this._sourceSubscription.subscription = this.source.triggered$.subscribe(() => {
5143
+ this._sourceSub.subscription = this.source.triggered$.subscribe(() => {
4526
5144
  this.showDialog();
4527
5145
  });
4528
5146
  }
4529
5147
  ngOnDestroy() {
4530
- this._sourceSubscription.destroy();
5148
+ this._sourceSub.destroy();
4531
5149
  }
4532
5150
  getDefaultDialogConfig() {
4533
5151
  return this.dbxActionConfirm();
@@ -5269,7 +5887,7 @@ class DbxDownloadTextViewComponent extends AbstractSubscriptionDirective {
5269
5887
  }));
5270
5888
  };
5271
5889
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxDownloadTextViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
5272
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxDownloadTextViewComponent, isStandalone: true, selector: "dbx-download-text-view", inputs: { loadingText: { classPropertyName: "loadingText", publicName: "loadingText", isSignal: true, isRequired: false, transformFunction: null }, linear: { classPropertyName: "linear", publicName: "linear", isSignal: true, isRequired: false, transformFunction: null }, showTitle: { classPropertyName: "showTitle", publicName: "showTitle", isSignal: true, isRequired: false, transformFunction: null }, showPreview: { classPropertyName: "showPreview", publicName: "showPreview", isSignal: true, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, contentState: { classPropertyName: "contentState", publicName: "contentState", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "downloadButton", first: true, predicate: ["downloadButton"], descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"dbx-download-text-view\">\n <dbx-loading [context]=\"context\" [linear]=\"linear()\" [text]=\"loadingText()\">\n <ng-container *ngTemplateOutlet=\"contentView\"></ng-container>\n </dbx-loading>\n</div>\n\n<!-- Template -->\n<ng-template #contentView>\n <div class=\"dbx-download-text-view-content\">\n @if (showTitle()) {\n <div class=\"dbx-download-text-view-content-title dbx-mb2 mat-subtitle-2\">{{ fileNameSignal() }}</div>\n }\n @if (showPreview()) {\n <div class=\"dbx-download-text-preview dbx-json dbx-content-pit dbx-content-pit-scrollable dbx-mb3\">{{ contentDataSignal() }}</div>\n }\n <div class=\"dbx-download-text-view-actions\">\n <dbx-button dbxAction dbxActionValue [raised]=\"true\" [dbxActionHandler]=\"handleCopyToClipboard\" icon=\"content_copy\" dbxActionButton text=\"Copy To Clipboard\"></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n <a #downloadButton [href]=\"fileUrlSignal()\" [attr.download]=\"fileNameSignal()\"><dbx-button icon=\"download\" text=\"Download\" [raised]=\"true\" [working]=\"!downloadReadySignal()\" [disabled]=\"!downloadReadySignal()\"></dbx-button></a>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: DbxLoadingComponent, selector: "dbx-loading", inputs: ["padding", "show", "text", "mode", "color", "diameter", "linear", "loading", "error", "context"] }, { kind: "ngmodule", type: DbxActionModule }, { kind: "directive", type: i1$2.DbxActionDirective, selector: "dbx-action,[dbxAction],dbx-action-context,[dbxActionContext]", exportAs: ["action", "dbxAction"] }, { kind: "directive", type: i1$2.DbxActionHandlerDirective, selector: "[dbxActionHandler]", inputs: ["dbxActionHandler"] }, { kind: "directive", type: i1$2.DbxActionValueDirective, selector: "dbxActionValue,[dbxActionValue]", inputs: ["dbxActionValue"] }, { kind: "directive", type: i1$2.DbxActionButtonDirective, selector: "[dbxActionButton]" }, { kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab"] }, { kind: "directive", type: DbxButtonSpacerDirective, selector: "dbx-button-spacer,[dbxButtonSpacer]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
5890
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxDownloadTextViewComponent, isStandalone: true, selector: "dbx-download-text-view", inputs: { loadingText: { classPropertyName: "loadingText", publicName: "loadingText", isSignal: true, isRequired: false, transformFunction: null }, linear: { classPropertyName: "linear", publicName: "linear", isSignal: true, isRequired: false, transformFunction: null }, showTitle: { classPropertyName: "showTitle", publicName: "showTitle", isSignal: true, isRequired: false, transformFunction: null }, showPreview: { classPropertyName: "showPreview", publicName: "showPreview", isSignal: true, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, contentState: { classPropertyName: "contentState", publicName: "contentState", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "downloadButton", first: true, predicate: ["downloadButton"], descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"dbx-download-text-view\">\n <dbx-loading [context]=\"context\" [linear]=\"linear()\" [text]=\"loadingText()\">\n <ng-container *ngTemplateOutlet=\"contentView\"></ng-container>\n </dbx-loading>\n</div>\n\n<!-- Template -->\n<ng-template #contentView>\n <div class=\"dbx-download-text-view-content\">\n @if (showTitle()) {\n <div class=\"dbx-download-text-view-content-title dbx-mb2 mat-subtitle-2\">{{ fileNameSignal() }}</div>\n }\n @if (showPreview()) {\n <div class=\"dbx-download-text-preview dbx-json dbx-content-pit dbx-content-pit-scrollable dbx-mb3\">{{ contentDataSignal() }}</div>\n }\n <div class=\"dbx-download-text-view-actions\">\n <dbx-button dbxAction dbxActionValue [raised]=\"true\" [dbxActionHandler]=\"handleCopyToClipboard\" icon=\"content_copy\" dbxActionButton text=\"Copy To Clipboard\"></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n <a #downloadButton [href]=\"fileUrlSignal()\" [attr.download]=\"fileNameSignal()\"><dbx-button icon=\"download\" text=\"Download\" [raised]=\"true\" [working]=\"!downloadReadySignal()\" [disabled]=\"!downloadReadySignal()\"></dbx-button></a>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: DbxLoadingComponent, selector: "dbx-loading", inputs: ["padding", "show", "text", "mode", "color", "diameter", "linear", "loading", "error", "context"] }, { kind: "ngmodule", type: DbxActionModule }, { kind: "directive", type: i1$2.DbxActionDirective, selector: "dbx-action,[dbxAction],dbx-action-context,[dbxActionContext]", exportAs: ["action", "dbxAction"] }, { kind: "directive", type: i1$2.DbxActionHandlerDirective, selector: "[dbxActionHandler]", inputs: ["dbxActionHandler"] }, { kind: "directive", type: i1$2.DbxActionValueDirective, selector: "dbxActionValue,[dbxActionValue]", inputs: ["dbxActionValue"] }, { kind: "directive", type: i1$2.DbxActionButtonDirective, selector: "[dbxActionButton]" }, { kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["bar", "type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab", "mode"] }, { kind: "directive", type: DbxButtonSpacerDirective, selector: "dbx-button-spacer,[dbxButtonSpacer]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
5273
5891
  }
5274
5892
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxDownloadTextViewComponent, decorators: [{
5275
5893
  type: Component,
@@ -6409,6 +7027,241 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
6409
7027
 
6410
7028
  // export * from './calendar'; // nothing to export
6411
7029
 
7030
+ // MARK: Injection Token
7031
+ /**
7032
+ * Injection token for the avatar context data.
7033
+ */
7034
+ const DBX_AVATAR_CONTEXT_DATA_TOKEN = new InjectionToken('DbxAvatarContextData');
7035
+
7036
+ /**
7037
+ * Component that displays an avatar image. It has a configurable default avatar.
7038
+ */
7039
+ class DbxAvatarViewComponent {
7040
+ defaultContext = inject(DBX_AVATAR_CONTEXT_DATA_TOKEN, { optional: true });
7041
+ avatarService = inject(DbxAvatarViewService);
7042
+ defaultAvatarUrl = this.avatarService.defaultAvatarUrl;
7043
+ avatarUrl = input();
7044
+ avatarErrorUrlSignal = signal(null);
7045
+ avatarStyle = input();
7046
+ avatarIcon = input();
7047
+ avatarUrlSignal = computed(() => {
7048
+ const directUrl = this.avatarUrl();
7049
+ const contextUrl = this.defaultContext?.url;
7050
+ let url = directUrl ?? contextUrl ?? this.defaultAvatarUrl ?? null;
7051
+ // if the error url is true or matches the url, then the url is invalid.
7052
+ const errorUrl = this.avatarErrorUrlSignal();
7053
+ if (errorUrl === true || errorUrl === url) {
7054
+ url = null;
7055
+ }
7056
+ return url;
7057
+ });
7058
+ hasAvatarSignal = computed(() => !!this.avatarUrlSignal());
7059
+ missingAvatarSignal = computed(() => !this.hasAvatarSignal());
7060
+ avatarStyleClassSignal = computed(() => {
7061
+ return this.avatarStyle() ?? this.defaultContext?.style ?? 'circle';
7062
+ });
7063
+ avatarIconSignal = computed(() => {
7064
+ let icon = this.avatarIcon() ?? this.defaultContext?.icon;
7065
+ if (!icon && this.avatarErrorUrlSignal()) {
7066
+ icon = this.avatarService.defaultAvatarErrorIcon;
7067
+ }
7068
+ else {
7069
+ icon = icon ?? this.avatarService.defaultAvatarIcon;
7070
+ }
7071
+ return icon ?? 'person';
7072
+ });
7073
+ onAvatarImageError(event) {
7074
+ if (event.target) {
7075
+ const target = event.target;
7076
+ this.avatarErrorUrlSignal.set(target.src);
7077
+ }
7078
+ else {
7079
+ this.avatarErrorUrlSignal.set(true);
7080
+ }
7081
+ }
7082
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxAvatarViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7083
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxAvatarViewComponent, isStandalone: true, selector: "dbx-avatar-view", inputs: { avatarUrl: { classPropertyName: "avatarUrl", publicName: "avatarUrl", isSignal: true, isRequired: false, transformFunction: null }, avatarStyle: { classPropertyName: "avatarStyle", publicName: "avatarStyle", isSignal: true, isRequired: false, transformFunction: null }, avatarIcon: { classPropertyName: "avatarIcon", publicName: "avatarIcon", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.dbx-avatar-view-circle": "avatarStyleClassSignal() === \"circle\"", "class.dbx-avatar-view-square": "avatarStyleClassSignal() === \"square\"", "class.dbx-avatar-view-with-avatar": "hasAvatarSignal()", "class.dbx-avatar-view-no-avatar": "missingAvatarSignal()" }, classAttribute: "dbx-avatar-view" }, ngImport: i0, template: `
7084
+ @if (avatarUrlSignal()) {
7085
+ <img (error)="onAvatarImageError($event)" class="dbx-avatar-view-img" [src]="avatarUrlSignal()!" alt="." loading="lazy" decoding="async" />
7086
+ } @else {
7087
+ <div class="dbx-avatar-view-fallback" aria-hidden="true">
7088
+ <mat-icon>{{ avatarIconSignal() }}</mat-icon>
7089
+ </div>
7090
+ }
7091
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7092
+ }
7093
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxAvatarViewComponent, decorators: [{
7094
+ type: Component,
7095
+ args: [{
7096
+ selector: 'dbx-avatar-view',
7097
+ template: `
7098
+ @if (avatarUrlSignal()) {
7099
+ <img (error)="onAvatarImageError($event)" class="dbx-avatar-view-img" [src]="avatarUrlSignal()!" alt="." loading="lazy" decoding="async" />
7100
+ } @else {
7101
+ <div class="dbx-avatar-view-fallback" aria-hidden="true">
7102
+ <mat-icon>{{ avatarIconSignal() }}</mat-icon>
7103
+ </div>
7104
+ }
7105
+ `,
7106
+ host: {
7107
+ class: 'dbx-avatar-view',
7108
+ '[class.dbx-avatar-view-circle]': 'avatarStyleClassSignal() === "circle"',
7109
+ '[class.dbx-avatar-view-square]': 'avatarStyleClassSignal() === "square"',
7110
+ '[class.dbx-avatar-view-with-avatar]': 'hasAvatarSignal()',
7111
+ '[class.dbx-avatar-view-no-avatar]': 'missingAvatarSignal()'
7112
+ },
7113
+ imports: [MatIconModule],
7114
+ changeDetection: ChangeDetectionStrategy.OnPush,
7115
+ standalone: true
7116
+ }]
7117
+ }] });
7118
+
7119
+ /**
7120
+ * Configuration for a DbxAvatarViewService.
7121
+ */
7122
+ class DbxAvatarViewServiceConfig {
7123
+ /**
7124
+ * The default avatar URL to use in DbxAvatarViewComponent if no other url is available
7125
+ */
7126
+ defaultAvatarUrl;
7127
+ /**
7128
+ * The default fallback icon to use when no avatar image is provided.
7129
+ */
7130
+ defaultAvatarIcon;
7131
+ /**
7132
+ * The default fallback icon to use when an avatar image is provided but fails to load.
7133
+ */
7134
+ defaultAvatarErrorIcon;
7135
+ /**
7136
+ * Overrides the default avatar component.
7137
+ */
7138
+ defaultAvatarComponentConfig;
7139
+ /**
7140
+ * Custom function that returns a DbxInjectionComponentConfig for the given context.
7141
+ */
7142
+ avatarComponentForContext;
7143
+ }
7144
+ /**
7145
+ * Service for registering avatars.
7146
+ */
7147
+ class DbxAvatarViewService {
7148
+ _serviceConfig = inject(DbxAvatarViewServiceConfig, { optional: true });
7149
+ _defaultAvatarUrl = this._serviceConfig?.defaultAvatarUrl;
7150
+ _defaultAvatarIcon = this._serviceConfig?.defaultAvatarIcon ?? 'person';
7151
+ _defaultAvatarErrorIcon;
7152
+ _defaultAvatarComponentConfig = this._serviceConfig?.defaultAvatarComponentConfig ?? {
7153
+ componentClass: DbxAvatarViewComponent
7154
+ };
7155
+ _avatarComponentForContext = this._serviceConfig?.avatarComponentForContext;
7156
+ avatarComponentForContext(context) {
7157
+ let config = this._defaultAvatarComponentConfig;
7158
+ if (this._avatarComponentForContext) {
7159
+ config = this._avatarComponentForContext(context) ?? config;
7160
+ }
7161
+ return config;
7162
+ }
7163
+ get defaultAvatarUrl() {
7164
+ return this._defaultAvatarUrl;
7165
+ }
7166
+ get defaultAvatarIcon() {
7167
+ return this._defaultAvatarIcon;
7168
+ }
7169
+ get defaultAvatarErrorIcon() {
7170
+ return this._defaultAvatarErrorIcon;
7171
+ }
7172
+ setDefaultAvatarUrl(url) {
7173
+ this._defaultAvatarUrl = url;
7174
+ }
7175
+ setDefaultAvatarIcon(icon) {
7176
+ this._defaultAvatarIcon = icon;
7177
+ }
7178
+ setDefaultAvatarErrorIcon(icon) {
7179
+ this._defaultAvatarErrorIcon = icon;
7180
+ }
7181
+ setDefaultAvatarComponentConfig(config) {
7182
+ this._defaultAvatarComponentConfig = config;
7183
+ }
7184
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxAvatarViewService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7185
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxAvatarViewService, providedIn: 'root' });
7186
+ }
7187
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxAvatarViewService, decorators: [{
7188
+ type: Injectable,
7189
+ args: [{
7190
+ providedIn: 'root'
7191
+ }]
7192
+ }] });
7193
+
7194
+ /**
7195
+ * Component that displays an avatar based on the input context.
7196
+ */
7197
+ class DbxAvatarComponent {
7198
+ injector = inject(Injector);
7199
+ avatarService = inject(DbxAvatarViewService);
7200
+ context = input();
7201
+ avatarSelector = input();
7202
+ avatarUid = input();
7203
+ avatarUrl = input();
7204
+ avatarKey = input();
7205
+ avatarIcon = input();
7206
+ avatarStyle = input();
7207
+ avatarSize = input(undefined);
7208
+ contextSignal = computed(() => {
7209
+ const inputContext = this.context();
7210
+ const selector = this.avatarSelector() ?? inputContext?.selector;
7211
+ const uid = this.avatarUid() ?? inputContext?.uid;
7212
+ const url = this.avatarUrl() ?? inputContext?.url;
7213
+ const key = this.avatarKey() ?? inputContext?.key;
7214
+ const icon = this.avatarIcon() ?? inputContext?.icon;
7215
+ const style = this.avatarStyle() ?? inputContext?.style;
7216
+ const context = {
7217
+ selector,
7218
+ uid,
7219
+ url,
7220
+ key,
7221
+ icon,
7222
+ style
7223
+ };
7224
+ return context;
7225
+ });
7226
+ configSignal = computed(() => {
7227
+ const context = this.contextSignal();
7228
+ const returnedConfig = this.avatarService.avatarComponentForContext(context);
7229
+ const dataProvider = {
7230
+ provide: DBX_AVATAR_CONTEXT_DATA_TOKEN,
7231
+ useValue: context
7232
+ };
7233
+ const injector = Injector.create({
7234
+ parent: this.injector,
7235
+ providers: mergeStaticProviders(dataProvider, returnedConfig.providers)
7236
+ });
7237
+ const config = {
7238
+ ...returnedConfig,
7239
+ injector
7240
+ };
7241
+ return config;
7242
+ });
7243
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxAvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7244
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: DbxAvatarComponent, isStandalone: true, selector: "dbx-avatar", inputs: { context: { classPropertyName: "context", publicName: "context", isSignal: true, isRequired: false, transformFunction: null }, avatarSelector: { classPropertyName: "avatarSelector", publicName: "avatarSelector", isSignal: true, isRequired: false, transformFunction: null }, avatarUid: { classPropertyName: "avatarUid", publicName: "avatarUid", isSignal: true, isRequired: false, transformFunction: null }, avatarUrl: { classPropertyName: "avatarUrl", publicName: "avatarUrl", isSignal: true, isRequired: false, transformFunction: null }, avatarKey: { classPropertyName: "avatarKey", publicName: "avatarKey", isSignal: true, isRequired: false, transformFunction: null }, avatarIcon: { classPropertyName: "avatarIcon", publicName: "avatarIcon", isSignal: true, isRequired: false, transformFunction: null }, avatarStyle: { classPropertyName: "avatarStyle", publicName: "avatarStyle", isSignal: true, isRequired: false, transformFunction: null }, avatarSize: { classPropertyName: "avatarSize", publicName: "avatarSize", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.dbx-avatar-small": "avatarSize() === 'small'", "class.dbx-avatar-large": "avatarSize() === 'large'" } }, ngImport: i0, template: `
7245
+ <dbx-injection [config]="configSignal()"></dbx-injection>
7246
+ `, isInline: true, dependencies: [{ kind: "component", type: DbxInjectionComponent, selector: "dbx-injection, [dbxInjection], [dbx-injection]", inputs: ["config", "template"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7247
+ }
7248
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxAvatarComponent, decorators: [{
7249
+ type: Component,
7250
+ args: [{
7251
+ selector: 'dbx-avatar',
7252
+ template: `
7253
+ <dbx-injection [config]="configSignal()"></dbx-injection>
7254
+ `,
7255
+ imports: [DbxInjectionComponent],
7256
+ host: {
7257
+ '[class.dbx-avatar-small]': `avatarSize() === 'small'`,
7258
+ '[class.dbx-avatar-large]': `avatarSize() === 'large'`
7259
+ },
7260
+ changeDetection: ChangeDetectionStrategy.OnPush,
7261
+ standalone: true
7262
+ }]
7263
+ }] });
7264
+
6412
7265
  /**
6413
7266
  * Acts as a wrapper for content distributed along a bar.
6414
7267
  */
@@ -8202,8 +9055,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
8202
9055
  */
8203
9056
  class DbxContentPitDirective {
8204
9057
  scrollable = input();
9058
+ scrollableHeightSignal = computed(() => {
9059
+ let scrollable = this.scrollable();
9060
+ let scrollableHeight;
9061
+ if (typeof scrollable === 'boolean') {
9062
+ scrollable = scrollable ? 'medium' : undefined; // defaults to medium
9063
+ }
9064
+ if (scrollable) {
9065
+ if (typeof scrollable === 'string') {
9066
+ switch (scrollable) {
9067
+ case 'small':
9068
+ scrollable = 120;
9069
+ break;
9070
+ case 'medium':
9071
+ scrollable = 320;
9072
+ break;
9073
+ case 'large':
9074
+ scrollable = 460;
9075
+ break;
9076
+ default:
9077
+ scrollableHeight = scrollable; // use as-is
9078
+ break;
9079
+ }
9080
+ }
9081
+ if (typeof scrollable === 'number') {
9082
+ scrollableHeight = `${scrollable}px`;
9083
+ }
9084
+ }
9085
+ return scrollableHeight ?? null;
9086
+ });
8205
9087
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxContentPitDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
8206
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: DbxContentPitDirective, isStandalone: true, selector: "dbx-content-pit, [dbxContentPit]", inputs: { scrollable: { classPropertyName: "scrollable", publicName: "scrollable", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.dbx-content-pit-scrollable": "scrollable()" }, classAttribute: "d-block dbx-content-pit" }, ngImport: i0 });
9088
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: DbxContentPitDirective, isStandalone: true, selector: "dbx-content-pit, [dbxContentPit]", inputs: { scrollable: { classPropertyName: "scrollable", publicName: "scrollable", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.dbx-content-pit-scrollable": "scrollableHeightSignal() != null", "style.max-height": "scrollableHeightSignal()" }, classAttribute: "d-block dbx-content-pit" }, ngImport: i0 });
8207
9089
  }
8208
9090
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxContentPitDirective, decorators: [{
8209
9091
  type: Directive,
@@ -8211,7 +9093,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
8211
9093
  selector: 'dbx-content-pit, [dbxContentPit]',
8212
9094
  host: {
8213
9095
  class: 'd-block dbx-content-pit',
8214
- '[class.dbx-content-pit-scrollable]': 'scrollable()'
9096
+ '[class.dbx-content-pit-scrollable]': 'scrollableHeightSignal() != null',
9097
+ '[style.max-height]': 'scrollableHeightSignal()'
8215
9098
  },
8216
9099
  standalone: true
8217
9100
  }]
@@ -9769,5 +10652,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
9769
10652
  * Generated bundle index. Do not edit.
9770
10653
  */
9771
10654
 
9772
- export { APP_POPUP_MINIMIZED_WIDTH, APP_POPUP_NORMAL_HEIGHT, APP_POPUP_NORMAL_WIDTH, AbstractDbxErrorWidgetComponent, AbstractDbxListGridViewDirective, AbstractDbxListViewDirective, AbstractDbxListWrapperDirective, AbstractDbxPartialPresetFilterMenuDirective, AbstractDbxSegueAnchorDirective, AbstractDbxSelectionListViewDirective, AbstractDbxSelectionListWrapperDirective, AbstractDbxValueListItemModifierDirective, AbstractDbxValueListViewDirective, AbstractDbxValueListViewItemComponent, AbstractDbxWidgetComponent, AbstractDialogDirective, AbstractFilterPopoverButtonDirective, AbstractPopoverDirective, AbstractPopoverRefDirective, AbstractPopoverRefWithEventsDirective, AbstractPopupDirective, AbstractPromptConfirmDirective, CompactContextStore, CompactMode, DBX_ACTION_SNACKBAR_DEFAULTS, DBX_ACTION_SNACKBAR_SERVICE_CONFIG, DBX_DARK_STYLE_CLASS_SUFFIX, DBX_IFRAME_COMPONENT_TEMPLATE, DBX_LIST_DEFAULT_SCROLL_DISTANCE, DBX_LIST_DEFAULT_THROTTLE_SCROLL, DBX_LIST_ITEM_DEFAULT_DISABLE_FUNCTION, DBX_LIST_ITEM_DISABLE_RIPPLE_LIST_ITEM_MODIFIER_KEY, DBX_LIST_ITEM_IS_SELECTED_ITEM_MODIFIER_KEY, DBX_LIST_VIEW_DEFAULT_META_ICON, DBX_MODEL_VIEW_TRACKER_STORAGE_ACCESSOR_TOKEN, DBX_PROGRESS_BUTTON_GLOBAL_CONFIG, DBX_ROUTER_ANCHOR_COMPONENTS, DBX_ROUTER_VALUE_LIST_ITEM_MODIFIER_KEY, DBX_STYLE_DEFAULT_CONFIG_TOKEN, DBX_THEME_COLORS, DBX_THEME_COLORS_EXTRA, DBX_THEME_COLORS_EXTRA_SECONDARY, DBX_THEME_COLORS_MAIN, DBX_VALUE_LIST_VIEW_ITEM, DEFAULT_DBX_ERROR_SNACKBAR_CONFIG, DEFAULT_DBX_LIST_GRID_VIEW_DIRECTIVE_TEMPLATE, DEFAULT_DBX_LIST_ITEM_IS_SELECTED_FUNCTION, DEFAULT_DBX_PROMPT_CONFIRM_DIALOG_CONFIG, DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE, DEFAULT_DBX_SELECTION_VALUE_LIST_DIRECTIVE_TEMPLATE, DEFAULT_DBX_SIDENAV_MENU_ICON, DEFAULT_DBX_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE, DEFAULT_DBX_VALUE_LIST_CONFIG_MAP_VALUES, DEFAULT_DBX_VALUE_LIST_GRID_DIRECTIVE_TEMPLATE, DEFAULT_ERROR_POPOVER_KEY, DEFAULT_ERROR_WIDGET_CODE, DEFAULT_FILTER_POPOVER_KEY, DEFAULT_LIST_GRID_SIZE_CONFIG, DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE, DEFAULT_LIST_WRAPPER_DIRECTIVE_TEMPLATE, DEFAULT_LOADING_PROGRESS_DIAMETER, DEFAULT_SCREEN_MEDIA_SERVICE_CONFIG, DEFAULT_SNACKBAR_DIRECTIVE_DURATION, DEFAULT_TWO_COLUMNS_MIN_RIGHT_WIDTH, DEFAULT_VALUE_LIST_VIEW_CONTENT_COMPONENT_TRACK_BY_FUNCTION, DbxActionConfirmDirective, DbxActionDialogDirective, DbxActionErrorDirective, DbxActionKeyTriggerDirective, DbxActionLoadingContextDirective, DbxActionModule, DbxActionPopoverDirective, DbxActionSnackbarComponent, DbxActionSnackbarDirective, DbxActionSnackbarErrorDirective, DbxActionSnackbarModule, DbxActionSnackbarService, DbxActionTransitionSafetyDirective, DbxActionUIRouterTransitionModule, DbxActionUIRouterTransitionSafetyDialogComponent, DbxAnchorComponent, DbxAnchorContentComponent, DbxAnchorIconComponent, DbxAnchorListComponent, DbxAngularRouterSegueAnchorComponent, DbxBarDirective, DbxBarHeaderComponent, DbxBarLayoutModule, DbxBasicLoadingComponent, DbxBlockLayoutModule, DbxBodyDirective, DbxButtonComponent, DbxButtonDisplayType, DbxButtonModule, DbxButtonSpacerDirective, DbxCardBoxComponent, DbxCardBoxContainerDirective, DbxCardBoxLayoutModule, DbxChipDirective, DbxColorDirective, DbxColumnLayoutModule, DbxCompactDirective, DbxCompactLayoutModule, DbxContentBorderDirective, DbxContentBoxDirective, DbxContentContainerDirective, DbxContentDirective, DbxContentElevateDirective, DbxContentLayoutModule, DbxContentPageDirective, DbxContentPitDirective, DbxDetailBlockComponent, DbxDetailBlockHeaderComponent, DbxDialogContentCloseComponent, DbxDialogContentDirective, DbxDialogContentFooterComponent, DbxDialogInteractionModule, DbxDialogModule, DbxDownloadTextModule, DbxDownloadTextViewComponent, DbxErrorComponent, DbxErrorDefaultErrorWidgetComponent, DbxErrorDetailsComponent, DbxErrorPopoverComponent, DbxErrorSnackbarComponent, DbxErrorSnackbarService, DbxErrorViewComponent, DbxErrorWidgetService, DbxErrorWidgetViewComponent, DbxFilterInteractionModule, DbxFilterPopoverButtonComponent, DbxFilterPopoverComponent, DbxFilterWrapperComponent, DbxFlagComponent, DbxFlagLayoutModule, DbxFlagPromptComponent, DbxFlexGroupDirective, DbxFlexLayoutModule, DbxFlexSizeDirective, DbxIconButtonComponent, DbxIconButtonModule, DbxIconItemComponent, DbxIconSpacerDirective, DbxIfSidenavDisplayModeDirective, DbxIframeComponent, DbxInteractionModule, DbxIntroActionSectionComponent, DbxKeypressModule, DbxLabelBlockComponent, DbxLayoutModule, DbxLinkComponent, DbxLinkifyComponent, DbxListComponent, DbxListEmptyContentComponent, DbxListGridViewDirectiveImportsModule, DbxListInternalContentDirective, DbxListItemAnchorModifierDirective, DbxListItemDisableRippleModifierDirective, DbxListItemIsSelectedModifierDirective, DbxListLayoutModule, DbxListModifierModule, DbxListModule, DbxListTitleGroupDirective, DbxListView, DbxListViewMetaIconComponent, DbxListViewWrapper, DbxListWrapperComponentImportsModule, DbxLoadingComponent, DbxLoadingErrorDirective, DbxLoadingModule, DbxLoadingProgressComponent, DbxModelObjectStateService, actions as DbxModelStateActions, model_actions as DbxModelStateModelActions, DbxModelTrackerService, DbxModelTypesService, DbxModelViewTrackerStorage, DbxNavbarComponent, DbxNumberWithLimitComponent, DbxOneColumnComponent, DbxOneColumnLayoutModule, DbxPagebarComponent, DbxPartialPresetFilterListComponent, DbxPartialPresetFilterMenuComponent, DbxPopoverCloseButtonComponent, DbxPopoverComponent, DbxPopoverComponentController, DbxPopoverContentComponent, DbxPopoverController, DbxPopoverControlsDirective, DbxPopoverCoordinatorComponent, DbxPopoverCoordinatorService, DbxPopoverHeaderComponent, DbxPopoverInteractionContentModule, DbxPopoverInteractionModule, DbxPopoverScrollContentDirective, DbxPopoverService, DbxPopupComponent, DbxPopupComponentController, DbxPopupContentComponent, DbxPopupControlButtonsComponent, DbxPopupController, DbxPopupControlsComponent, DbxPopupCoordinatorComponent, DbxPopupCoordinatorService, DbxPopupInteractionModule, DbxPopupService, DbxPopupWindowState, DbxPresetFilterListComponent, DbxPresetFilterMenuComponent, DbxProgressBarButtonComponent, DbxProgressButtonsModule, DbxProgressSpinnerButtonComponent, DbxPromptBoxDirective, DbxPromptComponent, DbxPromptConfirm, DbxPromptConfirmButtonDirective, DbxPromptConfirmComponent, DbxPromptConfirmDialogComponent, DbxPromptConfirmDirective, DbxPromptModule, DbxPromptPageComponent, DbxReadableErrorModule, DbxResizedDirective, DbxRouterAnchorListModule, DbxRouterAnchorModule, DbxRouterLayoutModule, DbxRouterListModule, DbxRouterNavbarModule, DbxRouterSidenavModule, DbxRouterWebProviderConfig, DbxScreenMediaService, DbxScreenMediaServiceConfig, DbxSectionComponent, DbxSectionHeaderComponent, DbxSectionLayoutModule, DbxSectionPageComponent, DbxSelectionValueListViewComponent, DbxSelectionValueListViewComponentImportsModule, DbxSelectionValueListViewContentComponent, DbxSetStyleDirective, DbxSidenavButtonComponent, DbxSidenavComponent, DbxSidenavPageComponent, DbxSidenavPagebarComponent, DbxSpacerDirective, DbxStepComponent, DbxStepLayoutModule, DbxStructureDirective, DbxStructureModule, DbxStyleBodyDirective, DbxStyleDirective, DbxStyleLayoutModule, DbxStyleService, DbxSubSectionComponent, DbxTextChipsComponent, DbxTextModule, DbxTwoBlockComponent, DbxTwoColumnBackDirective, DbxTwoColumnColumnHeadDirective, DbxTwoColumnComponent, DbxTwoColumnContextDirective, DbxTwoColumnFullLeftDirective, DbxTwoColumnLayoutModule, DbxTwoColumnRightComponent, DbxTwoColumnSrefDirective, DbxTwoColumnSrefShowRightDirective, DbxUIRouterSegueAnchorComponent, DbxUnitedStatesAddressComponent, DbxValueListGridSizeDirective, DbxValueListGridViewComponent, DbxValueListGridViewContentComponent, DbxValueListItemModifier, DbxValueListItemModifierDirective, DbxValueListView, DbxValueListViewComponent, DbxValueListViewComponentImportsModule, DbxValueListViewContentComponent, DbxValueListViewContentGroupComponent, DbxValueListViewGroupDelegate, DbxWebModule, DbxWidgetListGridComponent, DbxWidgetListGridViewComponent, DbxWidgetListGridViewItemComponent, DbxWidgetModule, DbxWidgetService, DbxWidgetViewComponent, DbxWindowKeyDownListenerDirective, PopoverPositionStrategy, PopupGlobalPositionStrategy, SCREEN_MEDIA_WIDTH_TYPE_SIZE_MAP, SideNavDisplayMode, TRACK_BY_MODEL_ID, TRACK_BY_MODEL_KEY, TwoColumnsContextStore, UNKNOWN_ERROR_WIDGET_CODE, addConfigToValueListItems, allDbxModelViewTrackerEventModelKeys, allDbxModelViewTrackerEventSetModelKeys, catchErrorServerParams, compactModeFromInput, compareScreenMediaWidthTypes, convertServerErrorParams, convertToPOJOServerErrorResponse, convertToServerErrorResponse, dbxColorBackground, dbxListGridViewDirectiveImportsAndExports, dbxPresetFilterMenuButtonIconObservable, dbxPresetFilterMenuButtonTextObservable, dbxStyleClassCleanSuffix, dbxValueListItemDecisionFunction, defaultDbxModelViewTrackerStorageAccessorFactory, defaultDbxValueListViewGroupDelegate, defaultDbxValueListViewGroupValuesFunction, disableRightClickInCdkBackdrop, index as fromDbxModel, listItemModifier, makeDbxActionSnackbarDisplayConfigGeneratorFunction, mapCompactModeObs, mapValuesToValuesListItemConfigObs, index$1 as onDbxModel, provideDbxListView, provideDbxListViewWrapper, provideDbxModelService, provideDbxProgressButtonGlobalConfig, provideDbxPromptConfirm, provideDbxRouterWebAngularRouterProviderConfig, provideDbxRouterWebUiRouterProviderConfig, provideDbxScreenMediaService, provideDbxStyleService, provideDbxValueListView, provideDbxValueListViewGroupDelegate, provideDbxValueListViewModifier, provideTwoColumnsContext, resizeSignal, sanitizeDbxDialogContentConfig, screenMediaWidthTypeIsActive, trackByModelKeyRef, trackByUniqueIdentifier };
10655
+ export { APP_POPUP_MINIMIZED_WIDTH, APP_POPUP_NORMAL_HEIGHT, APP_POPUP_NORMAL_WIDTH, AbstractDbxErrorWidgetComponent, AbstractDbxFileUploadComponent, AbstractDbxListGridViewDirective, AbstractDbxListViewDirective, AbstractDbxListWrapperDirective, AbstractDbxPartialPresetFilterMenuDirective, AbstractDbxSegueAnchorDirective, AbstractDbxSelectionListViewDirective, AbstractDbxSelectionListWrapperDirective, AbstractDbxValueListItemModifierDirective, AbstractDbxValueListViewDirective, AbstractDbxValueListViewItemComponent, AbstractDbxWidgetComponent, AbstractDialogDirective, AbstractFilterPopoverButtonDirective, AbstractPopoverDirective, AbstractPopoverRefDirective, AbstractPopoverRefWithEventsDirective, AbstractPopupDirective, AbstractPromptConfirmDirective, CompactContextStore, CompactMode, DBX_ACTION_SNACKBAR_DEFAULTS, DBX_ACTION_SNACKBAR_SERVICE_CONFIG, DBX_AVATAR_CONTEXT_DATA_TOKEN, DBX_DARK_STYLE_CLASS_SUFFIX, DBX_IFRAME_COMPONENT_TEMPLATE, DBX_LIST_DEFAULT_SCROLL_DISTANCE, DBX_LIST_DEFAULT_THROTTLE_SCROLL, DBX_LIST_ITEM_DEFAULT_DISABLE_FUNCTION, DBX_LIST_ITEM_DISABLE_RIPPLE_LIST_ITEM_MODIFIER_KEY, DBX_LIST_ITEM_IS_SELECTED_ITEM_MODIFIER_KEY, DBX_LIST_VIEW_DEFAULT_META_ICON, DBX_MODEL_VIEW_TRACKER_STORAGE_ACCESSOR_TOKEN, DBX_PROGRESS_BUTTON_GLOBAL_CONFIG, DBX_ROUTER_ANCHOR_COMPONENTS, DBX_ROUTER_VALUE_LIST_ITEM_MODIFIER_KEY, DBX_STYLE_DEFAULT_CONFIG_TOKEN, DBX_THEME_COLORS, DBX_THEME_COLORS_EXTRA, DBX_THEME_COLORS_EXTRA_SECONDARY, DBX_THEME_COLORS_MAIN, DBX_VALUE_LIST_VIEW_ITEM, DEFAULT_DBX_ERROR_SNACKBAR_CONFIG, DEFAULT_DBX_LIST_GRID_VIEW_DIRECTIVE_TEMPLATE, DEFAULT_DBX_LIST_ITEM_IS_SELECTED_FUNCTION, DEFAULT_DBX_PROMPT_CONFIRM_DIALOG_CONFIG, DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE, DEFAULT_DBX_SELECTION_VALUE_LIST_DIRECTIVE_TEMPLATE, DEFAULT_DBX_SIDENAV_MENU_ICON, DEFAULT_DBX_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE, DEFAULT_DBX_VALUE_LIST_CONFIG_MAP_VALUES, DEFAULT_DBX_VALUE_LIST_GRID_DIRECTIVE_TEMPLATE, DEFAULT_ERROR_POPOVER_KEY, DEFAULT_ERROR_WIDGET_CODE, DEFAULT_FILTER_POPOVER_KEY, DEFAULT_LIST_GRID_SIZE_CONFIG, DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE, DEFAULT_LIST_WRAPPER_DIRECTIVE_TEMPLATE, DEFAULT_LOADING_PROGRESS_DIAMETER, DEFAULT_SCREEN_MEDIA_SERVICE_CONFIG, DEFAULT_SNACKBAR_DIRECTIVE_DURATION, DEFAULT_TWO_COLUMNS_MIN_RIGHT_WIDTH, DEFAULT_VALUE_LIST_VIEW_CONTENT_COMPONENT_TRACK_BY_FUNCTION, DbxActionConfirmDirective, DbxActionDialogDirective, DbxActionErrorDirective, DbxActionKeyTriggerDirective, DbxActionLoadingContextDirective, DbxActionModule, DbxActionPopoverDirective, DbxActionSnackbarComponent, DbxActionSnackbarDirective, DbxActionSnackbarErrorDirective, DbxActionSnackbarModule, DbxActionSnackbarService, DbxActionTransitionSafetyDirective, DbxActionUIRouterTransitionModule, DbxActionUIRouterTransitionSafetyDialogComponent, DbxAnchorComponent, DbxAnchorContentComponent, DbxAnchorIconComponent, DbxAnchorListComponent, DbxAngularRouterSegueAnchorComponent, DbxAvatarComponent, DbxAvatarViewService, DbxAvatarViewServiceConfig, DbxBarDirective, DbxBarHeaderComponent, DbxBarLayoutModule, DbxBasicLoadingComponent, DbxBlockLayoutModule, DbxBodyDirective, DbxButtonComponent, DbxButtonDisplayType, DbxButtonModule, DbxButtonSpacerDirective, DbxCardBoxComponent, DbxCardBoxContainerDirective, DbxCardBoxLayoutModule, DbxChipDirective, DbxColorDirective, DbxColumnLayoutModule, DbxCompactDirective, DbxCompactLayoutModule, DbxContentBorderDirective, DbxContentBoxDirective, DbxContentContainerDirective, DbxContentDirective, DbxContentElevateDirective, DbxContentLayoutModule, DbxContentPageDirective, DbxContentPitDirective, DbxDetailBlockComponent, DbxDetailBlockHeaderComponent, DbxDialogContentCloseComponent, DbxDialogContentDirective, DbxDialogContentFooterComponent, DbxDialogInteractionModule, DbxDialogModule, DbxDownloadTextModule, DbxDownloadTextViewComponent, DbxErrorComponent, DbxErrorDefaultErrorWidgetComponent, DbxErrorDetailsComponent, DbxErrorPopoverComponent, DbxErrorSnackbarComponent, DbxErrorSnackbarService, DbxErrorViewComponent, DbxErrorWidgetService, DbxErrorWidgetViewComponent, DbxFileUploadActionCompatable, DbxFileUploadActionSyncDirective, DbxFileUploadAreaComponent, DbxFileUploadButtonComponent, DbxFileUploadComponent, DbxFilterInteractionModule, DbxFilterPopoverButtonComponent, DbxFilterPopoverComponent, DbxFilterWrapperComponent, DbxFlagComponent, DbxFlagLayoutModule, DbxFlagPromptComponent, DbxFlexGroupDirective, DbxFlexLayoutModule, DbxFlexSizeDirective, DbxIconButtonComponent, DbxIconButtonModule, DbxIconItemComponent, DbxIconSpacerDirective, DbxIfSidenavDisplayModeDirective, DbxIframeComponent, DbxInteractionModule, DbxIntroActionSectionComponent, DbxKeypressModule, DbxLabelBlockComponent, DbxLayoutModule, DbxLinkComponent, DbxLinkifyComponent, DbxListComponent, DbxListEmptyContentComponent, DbxListGridViewDirectiveImportsModule, DbxListInternalContentDirective, DbxListItemAnchorModifierDirective, DbxListItemDisableRippleModifierDirective, DbxListItemIsSelectedModifierDirective, DbxListLayoutModule, DbxListModifierModule, DbxListModule, DbxListTitleGroupDirective, DbxListView, DbxListViewMetaIconComponent, DbxListViewWrapper, DbxListWrapperComponentImportsModule, DbxLoadingComponent, DbxLoadingErrorDirective, DbxLoadingModule, DbxLoadingProgressComponent, DbxModelObjectStateService, actions as DbxModelStateActions, model_actions as DbxModelStateModelActions, DbxModelTrackerService, DbxModelTypesService, DbxModelViewTrackerStorage, DbxNavbarComponent, DbxNumberWithLimitComponent, DbxOneColumnComponent, DbxOneColumnLayoutModule, DbxPagebarComponent, DbxPartialPresetFilterListComponent, DbxPartialPresetFilterMenuComponent, DbxPopoverCloseButtonComponent, DbxPopoverComponent, DbxPopoverComponentController, DbxPopoverContentComponent, DbxPopoverController, DbxPopoverControlsDirective, DbxPopoverCoordinatorComponent, DbxPopoverCoordinatorService, DbxPopoverHeaderComponent, DbxPopoverInteractionContentModule, DbxPopoverInteractionModule, DbxPopoverScrollContentDirective, DbxPopoverService, DbxPopupComponent, DbxPopupComponentController, DbxPopupContentComponent, DbxPopupControlButtonsComponent, DbxPopupController, DbxPopupControlsComponent, DbxPopupCoordinatorComponent, DbxPopupCoordinatorService, DbxPopupInteractionModule, DbxPopupService, DbxPopupWindowState, DbxPresetFilterListComponent, DbxPresetFilterMenuComponent, DbxProgressBarButtonComponent, DbxProgressButtonsModule, DbxProgressSpinnerButtonComponent, DbxPromptBoxDirective, DbxPromptComponent, DbxPromptConfirm, DbxPromptConfirmButtonDirective, DbxPromptConfirmComponent, DbxPromptConfirmDialogComponent, DbxPromptConfirmDirective, DbxPromptModule, DbxPromptPageComponent, DbxReadableErrorModule, DbxResizedDirective, DbxRouterAnchorListModule, DbxRouterAnchorModule, DbxRouterLayoutModule, DbxRouterListModule, DbxRouterNavbarModule, DbxRouterSidenavModule, DbxRouterWebProviderConfig, DbxScreenMediaService, DbxScreenMediaServiceConfig, DbxSectionComponent, DbxSectionHeaderComponent, DbxSectionLayoutModule, DbxSectionPageComponent, DbxSelectionValueListViewComponent, DbxSelectionValueListViewComponentImportsModule, DbxSelectionValueListViewContentComponent, DbxSetStyleDirective, DbxSidenavButtonComponent, DbxSidenavComponent, DbxSidenavPageComponent, DbxSidenavPagebarComponent, DbxSpacerDirective, DbxStepComponent, DbxStepLayoutModule, DbxStructureDirective, DbxStructureModule, DbxStyleBodyDirective, DbxStyleDirective, DbxStyleLayoutModule, DbxStyleService, DbxSubSectionComponent, DbxTextChipsComponent, DbxTextModule, DbxTwoBlockComponent, DbxTwoColumnBackDirective, DbxTwoColumnColumnHeadDirective, DbxTwoColumnComponent, DbxTwoColumnContextDirective, DbxTwoColumnFullLeftDirective, DbxTwoColumnLayoutModule, DbxTwoColumnRightComponent, DbxTwoColumnSrefDirective, DbxTwoColumnSrefShowRightDirective, DbxUIRouterSegueAnchorComponent, DbxUnitedStatesAddressComponent, DbxValueListGridSizeDirective, DbxValueListGridViewComponent, DbxValueListGridViewContentComponent, DbxValueListItemModifier, DbxValueListItemModifierDirective, DbxValueListView, DbxValueListViewComponent, DbxValueListViewComponentImportsModule, DbxValueListViewContentComponent, DbxValueListViewContentGroupComponent, DbxValueListViewGroupDelegate, DbxWebModule, DbxWidgetListGridComponent, DbxWidgetListGridViewComponent, DbxWidgetListGridViewItemComponent, DbxWidgetModule, DbxWidgetService, DbxWidgetViewComponent, DbxWindowKeyDownListenerDirective, PopoverPositionStrategy, PopupGlobalPositionStrategy, SCREEN_MEDIA_WIDTH_TYPE_SIZE_MAP, SideNavDisplayMode, TRACK_BY_MODEL_ID, TRACK_BY_MODEL_KEY, TwoColumnsContextStore, UNKNOWN_ERROR_WIDGET_CODE, addConfigToValueListItems, allDbxModelViewTrackerEventModelKeys, allDbxModelViewTrackerEventSetModelKeys, catchErrorServerParams, compactModeFromInput, compareScreenMediaWidthTypes, convertServerErrorParams, convertToPOJOServerErrorResponse, convertToServerErrorResponse, dbxColorBackground, dbxListGridViewDirectiveImportsAndExports, dbxPresetFilterMenuButtonIconObservable, dbxPresetFilterMenuButtonTextObservable, dbxStyleClassCleanSuffix, dbxValueListItemDecisionFunction, defaultDbxModelViewTrackerStorageAccessorFactory, defaultDbxValueListViewGroupDelegate, defaultDbxValueListViewGroupValuesFunction, disableRightClickInCdkBackdrop, fileAcceptFilterTypeStringArray, fileAcceptFunction, fileAcceptString, fileArrayAcceptMatchFunction, index as fromDbxModel, listItemModifier, makeDbxActionSnackbarDisplayConfigGeneratorFunction, mapCompactModeObs, mapValuesToValuesListItemConfigObs, index$1 as onDbxModel, provideDbxFileUploadActionCompatable, provideDbxListView, provideDbxListViewWrapper, provideDbxModelService, provideDbxProgressButtonGlobalConfig, provideDbxPromptConfirm, provideDbxRouterWebAngularRouterProviderConfig, provideDbxRouterWebUiRouterProviderConfig, provideDbxScreenMediaService, provideDbxStyleService, provideDbxValueListView, provideDbxValueListViewGroupDelegate, provideDbxValueListViewModifier, provideTwoColumnsContext, resizeSignal, sanitizeDbxDialogContentConfig, screenMediaWidthTypeIsActive, trackByModelKeyRef, trackByUniqueIdentifier };
9773
10656
  //# sourceMappingURL=dereekb-dbx-web.mjs.map