@dereekb/dbx-web 13.6.13 → 13.6.14

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.
@@ -1,8 +1,8 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, input, inject, effect, Directive, NgModule, ChangeDetectionStrategy, Component, output, computed, HostListener, ElementRef, Injector, DestroyRef, signal, viewChild, InjectionToken, makeEnvironmentProviders, TemplateRef, model, SecurityContext, forwardRef, ViewContainerRef, booleanAttribute, Renderer2 } from '@angular/core';
2
+ import { Injectable, input, inject, effect, Directive, NgModule, ChangeDetectionStrategy, Component, output, computed, HostListener, ElementRef, Injector, DestroyRef, signal, InjectionToken, viewChild, makeEnvironmentProviders, TemplateRef, model, SecurityContext, forwardRef, ViewContainerRef, booleanAttribute, Renderer2 } from '@angular/core';
3
3
  import { asPromise, cssClassesSet, isDefinedAndNotFalse, DASH_CHARACTER_PREFIX_INSTANCE, cssTokenVar, 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, unixDateTimeSecondsNumberForNow, ModelRelationUtility, encodeModelKeyTypePair, useIterableOrValue, safeCompareEquality, addMilliseconds, isPast, asArray, slashPathDetails, mimeTypeForFileExtension, slashPathDirectoryTree, isMaybeNot, isNotFalse, modifier, combineMaps, addModifiers, removeModifiers, applyBestFit, findNext, maybeModifierMapToFunction, makeValuesGroupMap, compareWithMappedValuesFunction, invertMaybeBoolean, splitCommaSeparatedStringToSet, ZIP_FILE_MIME_TYPE, cachedGetter, sortByNumberFunction } from '@dereekb/util';
4
4
  import * as i1$2 from '@dereekb/dbx-core';
5
- import { completeOnDestroy, clean, AbstractTransitionWatcherDirective, DbxInjectionComponent, AbstractDbxActionValueGetterDirective, cleanSubscription, AbstractDbxButtonDirective, provideDbxButton, dbxActionWorkProgress, hasNonTrivialChildNodes, DbxCoreButtonModule, AbstractDbxActionHandlerDirective, FilterSourceDirective, provideActionStoreSource, isClickableFilterPreset, AbstractDbxAnchorDirective, expandClickableAnchorLinkTrees, DbxCoreFilterModule, DbxButton, DbxActionContextStoreSourceInstance, cleanSubscriptionWithLockSet, DBX_INJECTION_COMPONENT_DATA, checkNgContentWrapperHasContent, cleanLoadingContext, DbxActionSourceDirective, DbxActionSuccessHandlerDirective, DbxActionDirective, transformEmptyStringInputToUndefined, isIdleActionState, canTriggerAction, DbxCoreActionModule, DbxActionButtonDirective, onDbxAppAuth, SimpleStorageAccessorFactory, mergeStaticProviders, asSegueRef, AbstractTransitionDirective, DbxRouterService, AbstractIfDirective, isSegueRefActive, anchorTypeForAnchor } from '@dereekb/dbx-core';
5
+ import { completeOnDestroy, clean, AbstractTransitionWatcherDirective, DbxInjectionComponent, AbstractDbxActionValueGetterDirective, cleanSubscription, dbxActionWorkProgress, AbstractDbxButtonDirective, hasNonTrivialChildNodes, provideDbxButton, DbxCoreButtonModule, AbstractDbxActionHandlerDirective, FilterSourceDirective, provideActionStoreSource, isClickableFilterPreset, AbstractDbxAnchorDirective, expandClickableAnchorLinkTrees, DbxCoreFilterModule, DbxButton, DbxActionContextStoreSourceInstance, cleanSubscriptionWithLockSet, DBX_INJECTION_COMPONENT_DATA, checkNgContentWrapperHasContent, cleanLoadingContext, DbxActionSourceDirective, DbxActionSuccessHandlerDirective, DbxActionDirective, transformEmptyStringInputToUndefined, isIdleActionState, canTriggerAction, DbxCoreActionModule, DbxActionButtonDirective, onDbxAppAuth, SimpleStorageAccessorFactory, mergeStaticProviders, asSegueRef, AbstractTransitionDirective, DbxRouterService, AbstractIfDirective, isSegueRefActive, anchorTypeForAnchor } from '@dereekb/dbx-core';
6
6
  import { NgPopoverRef, NgOverlayContainerService } from 'ng-overlay-container';
7
7
  import { of, map, BehaviorSubject, distinctUntilChanged, shareReplay, delay, Subject, first, startWith, filter, throttleTime, skip, defaultIfEmpty, combineLatest, switchMap, delayWhen, timer, asyncScheduler, from, firstValueFrom, mergeMap, race, tap, catchError, distinct, merge, exhaustMap } from 'rxjs';
8
8
  import { LockSet, filterMaybe, distinctUntilItemsHaveDifferentValues, skipAllInitialMaybe, maybeValueFromObservableOrValue, switchMapMaybeLoadingContextStream, LoadingStateType, loadingStateType, successResult, valueFromFinishedLoadingState, loadingStateContext, initialize, asObservable, isNot, mapForEach, SubscriptionObject, switchMapMaybe, listLoadingStateContext, isLoadingStateFinishedLoading, startWithBeginLoading, loadingStateFromObs, errorResult, beginLoading, distinctUntilHasDifferentValues } from '@dereekb/rxjs';
@@ -13,7 +13,7 @@ import * as i1$1 from '@angular/material/button';
13
13
  import { MatIconButton, MatButtonModule } from '@angular/material/button';
14
14
  import * as i1 from '@angular/material/icon';
15
15
  import { MatIconModule, MatIcon } from '@angular/material/icon';
16
- import { NgClass, NgTemplateOutlet, NgStyle, JsonPipe, DatePipe } from '@angular/common';
16
+ import { NgClass, NgStyle, NgTemplateOutlet, JsonPipe, DatePipe } from '@angular/common';
17
17
  import { Overlay, GlobalPositionStrategy } from '@angular/cdk/overlay';
18
18
  import { MatDivider } from '@angular/material/divider';
19
19
  import { MatProgressBar } from '@angular/material/progress-bar';
@@ -1505,122 +1505,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.3", ngImpor
1505
1505
  type: Directive
1506
1506
  }], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: false }] }] } });
1507
1507
 
1508
- /**
1509
- * Lightweight button that renders as either an icon-only Material icon button or a text button
1510
- * with an icon prefix, depending on whether text is provided.
1511
- *
1512
- * @deprecated Use `dbx-button` instead. For icon-only buttons use `<dbx-button icon="settings" iconOnly>`.
1513
- * For icon+text buttons use `<dbx-button icon="settings" text="Label">`. The `dbx-button` component
1514
- * supports all the same inputs plus working/loading states, colors, and button style variants.
1515
- *
1516
- * @example
1517
- * ```html
1518
- * <dbx-icon-button icon="settings" (buttonClick)="openSettings()"></dbx-icon-button>
1519
- * ```
1520
- *
1521
- * @example
1522
- * ```html
1523
- * <dbx-icon-button icon="add" text="Add Item" (buttonClick)="addItem()"></dbx-icon-button>
1524
- * ```
1525
- */
1526
- class DbxIconButtonComponent extends AbstractDbxButtonDirective {
1527
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.3", ngImport: i0, type: DbxIconButtonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1528
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.3", type: DbxIconButtonComponent, isStandalone: true, selector: "dbx-icon-button", host: { classAttribute: "dbx-icon-button" }, providers: provideDbxButton(DbxIconButtonComponent), usesInheritance: true, ngImport: i0, template: `
1529
- @switch (buttonDisplayTypeSignal()) {
1530
- @case ('text_button') {
1531
- <button mat-button class="mat-unthemed" [disabled]="disabledSignal()" [attr.aria-label]="ariaLabel()" (click)="clickButton()">
1532
- @if (iconSignal()) {
1533
- <mat-icon class="dbx-icon-spacer">{{ iconSignal() }}</mat-icon>
1534
- }
1535
- <span>{{ textSignal() }}</span>
1536
- <ng-container *ngTemplateOutlet="content"></ng-container>
1537
- </button>
1538
- }
1539
- @case ('icon_button') {
1540
- <button mat-icon-button [disabled]="disabledSignal()" [attr.aria-label]="ariaLabel() || iconSignal()" (click)="clickButton()">
1541
- <mat-icon aria-hidden="true">{{ iconSignal() }}</mat-icon>
1542
- <ng-container *ngTemplateOutlet="content"></ng-container>
1543
- </button>
1544
- }
1545
- }
1546
- <ng-template #content>
1547
- <ng-content></ng-content>
1548
- </ng-template>
1549
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i1$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { 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 });
1550
- }
1551
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.3", ngImport: i0, type: DbxIconButtonComponent, decorators: [{
1552
- type: Component,
1553
- args: [{
1554
- selector: 'dbx-icon-button',
1555
- template: `
1556
- @switch (buttonDisplayTypeSignal()) {
1557
- @case ('text_button') {
1558
- <button mat-button class="mat-unthemed" [disabled]="disabledSignal()" [attr.aria-label]="ariaLabel()" (click)="clickButton()">
1559
- @if (iconSignal()) {
1560
- <mat-icon class="dbx-icon-spacer">{{ iconSignal() }}</mat-icon>
1561
- }
1562
- <span>{{ textSignal() }}</span>
1563
- <ng-container *ngTemplateOutlet="content"></ng-container>
1564
- </button>
1565
- }
1566
- @case ('icon_button') {
1567
- <button mat-icon-button [disabled]="disabledSignal()" [attr.aria-label]="ariaLabel() || iconSignal()" (click)="clickButton()">
1568
- <mat-icon aria-hidden="true">{{ iconSignal() }}</mat-icon>
1569
- <ng-container *ngTemplateOutlet="content"></ng-container>
1570
- </button>
1571
- }
1572
- }
1573
- <ng-template #content>
1574
- <ng-content></ng-content>
1575
- </ng-template>
1576
- `,
1577
- providers: provideDbxButton(DbxIconButtonComponent),
1578
- host: {
1579
- class: 'dbx-icon-button'
1580
- },
1581
- imports: [MatButtonModule, MatIconModule, MatIconButton, NgTemplateOutlet],
1582
- changeDetection: ChangeDetectionStrategy.OnPush,
1583
- standalone: true
1584
- }]
1585
- }] });
1586
-
1587
- const DEFAULT_FILTER_POPOVER_BUTTON_DISPLAY_CONTENT = {
1588
- icon: 'filter_list'
1589
- };
1590
- /**
1591
- * Renders an icon button that opens a filter popover when clicked.
1592
- *
1593
- * @example
1594
- * ```html
1595
- * <dbx-filter-popover-button [config]="filterConfig" [buttonDisplay]="{ icon: 'filter_alt' }"></dbx-filter-popover-button>
1596
- * ```
1597
- */
1598
- class DbxFilterPopoverButtonComponent extends AbstractFilterPopoverButtonDirective {
1599
- buttonElement = viewChild('button', { ...(ngDevMode ? { debugName: "buttonElement" } : /* istanbul ignore next */ {}), read: ElementRef });
1600
- disabled = input(...(ngDevMode ? [undefined, { debugName: "disabled" }] : /* istanbul ignore next */ []));
1601
- buttonDisplay = input(DEFAULT_FILTER_POPOVER_BUTTON_DISPLAY_CONTENT, { ...(ngDevMode ? { debugName: "buttonDisplay" } : /* istanbul ignore next */ {}), transform: (x) => x ?? DEFAULT_FILTER_POPOVER_BUTTON_DISPLAY_CONTENT });
1602
- showFilterPopover() {
1603
- const origin = this.buttonElement()?.nativeElement;
1604
- this.showPopover(origin);
1605
- }
1606
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.3", ngImport: i0, type: DbxFilterPopoverButtonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1607
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.3", type: DbxFilterPopoverButtonComponent, isStandalone: true, selector: "dbx-filter-popover-button", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, buttonDisplay: { classPropertyName: "buttonDisplay", publicName: "buttonDisplay", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "buttonElement", first: true, predicate: ["button"], descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
1608
- <dbx-icon-button #button (buttonClick)="showFilterPopover()" [buttonDisplay]="buttonDisplay()" [disabled]="disabled()"></dbx-icon-button>
1609
- `, isInline: true, dependencies: [{ kind: "component", type: DbxIconButtonComponent, selector: "dbx-icon-button" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1610
- }
1611
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.3", ngImport: i0, type: DbxFilterPopoverButtonComponent, decorators: [{
1612
- type: Component,
1613
- args: [{
1614
- selector: 'dbx-filter-popover-button',
1615
- template: `
1616
- <dbx-icon-button #button (buttonClick)="showFilterPopover()" [buttonDisplay]="buttonDisplay()" [disabled]="disabled()"></dbx-icon-button>
1617
- `,
1618
- imports: [DbxIconButtonComponent],
1619
- changeDetection: ChangeDetectionStrategy.OnPush,
1620
- standalone: true
1621
- }]
1622
- }], propDecorators: { buttonElement: [{ type: i0.ViewChild, args: ['button', { ...{ read: ElementRef }, isSignal: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], buttonDisplay: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonDisplay", required: false }] }] } });
1623
-
1624
1508
  /**
1625
1509
  * Injection token for providing a global array of progress button configurations.
1626
1510
  */
@@ -2273,6 +2157,124 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.3", ngImpor
2273
2157
  }]
2274
2158
  }], ctorParameters: () => [], propDecorators: { bar: [{ type: i0.Input, args: [{ isSignal: true, alias: "bar", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], buttonStyle: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonStyle", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], spinnerColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "spinnerColor", required: false }] }], customButtonColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "customButtonColor", required: false }] }], customTextColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "customTextColor", required: false }] }], customSpinnerColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "customSpinnerColor", required: false }] }], basic: [{ type: i0.Input, args: [{ isSignal: true, alias: "basic", required: false }] }], tonal: [{ type: i0.Input, args: [{ isSignal: true, alias: "tonal", required: false }] }], raised: [{ type: i0.Input, args: [{ isSignal: true, alias: "raised", required: false }] }], stroked: [{ type: i0.Input, args: [{ isSignal: true, alias: "stroked", required: false }] }], flat: [{ type: i0.Input, args: [{ isSignal: true, alias: "flat", required: false }] }], iconOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconOnly", required: false }] }], fab: [{ type: i0.Input, args: [{ isSignal: true, alias: "fab", required: false }] }], allowClickPropagation: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowClickPropagation", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }] } });
2275
2159
 
2160
+ const DEFAULT_FILTER_POPOVER_BUTTON_DISPLAY_CONTENT = {
2161
+ icon: 'filter_list'
2162
+ };
2163
+ /**
2164
+ * Renders an icon button that opens a filter popover when clicked.
2165
+ *
2166
+ * @example
2167
+ * ```html
2168
+ * <dbx-filter-popover-button [config]="filterConfig" [buttonDisplay]="{ icon: 'filter_alt' }"></dbx-filter-popover-button>
2169
+ * ```
2170
+ */
2171
+ class DbxFilterPopoverButtonComponent extends AbstractFilterPopoverButtonDirective {
2172
+ buttonElement = viewChild('button', { ...(ngDevMode ? { debugName: "buttonElement" } : /* istanbul ignore next */ {}), read: ElementRef });
2173
+ disabled = input(...(ngDevMode ? [undefined, { debugName: "disabled" }] : /* istanbul ignore next */ []));
2174
+ buttonDisplay = input(DEFAULT_FILTER_POPOVER_BUTTON_DISPLAY_CONTENT, { ...(ngDevMode ? { debugName: "buttonDisplay" } : /* istanbul ignore next */ {}), transform: (x) => x ?? DEFAULT_FILTER_POPOVER_BUTTON_DISPLAY_CONTENT });
2175
+ showFilterPopover() {
2176
+ const origin = this.buttonElement()?.nativeElement;
2177
+ this.showPopover(origin);
2178
+ }
2179
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.3", ngImport: i0, type: DbxFilterPopoverButtonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
2180
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.3", type: DbxFilterPopoverButtonComponent, isStandalone: true, selector: "dbx-filter-popover-button", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, buttonDisplay: { classPropertyName: "buttonDisplay", publicName: "buttonDisplay", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "buttonElement", first: true, predicate: ["button"], descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
2181
+ <dbx-button #button (buttonClick)="showFilterPopover()" [buttonDisplay]="buttonDisplay()" [disabled]="disabled()" iconOnly></dbx-button>
2182
+ `, isInline: true, dependencies: [{ kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["bar", "type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "tonal", "raised", "stroked", "flat", "iconOnly", "fab", "allowClickPropagation", "mode"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2183
+ }
2184
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.3", ngImport: i0, type: DbxFilterPopoverButtonComponent, decorators: [{
2185
+ type: Component,
2186
+ args: [{
2187
+ selector: 'dbx-filter-popover-button',
2188
+ template: `
2189
+ <dbx-button #button (buttonClick)="showFilterPopover()" [buttonDisplay]="buttonDisplay()" [disabled]="disabled()" iconOnly></dbx-button>
2190
+ `,
2191
+ imports: [DbxButtonComponent],
2192
+ changeDetection: ChangeDetectionStrategy.OnPush,
2193
+ standalone: true
2194
+ }]
2195
+ }], propDecorators: { buttonElement: [{ type: i0.ViewChild, args: ['button', { ...{ read: ElementRef }, isSignal: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], buttonDisplay: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonDisplay", required: false }] }] } });
2196
+
2197
+ /**
2198
+ * Lightweight button that renders as either an icon-only Material icon button or a text button
2199
+ * with an icon prefix, depending on whether text is provided.
2200
+ *
2201
+ * @deprecated Use `dbx-button` instead. For icon-only buttons use `<dbx-button icon="settings" iconOnly>`.
2202
+ * For icon+text buttons use `<dbx-button icon="settings" text="Label">`. The `dbx-button` component
2203
+ * supports all the same inputs plus working/loading states, colors, and button style variants.
2204
+ *
2205
+ * @example
2206
+ * ```html
2207
+ * <dbx-icon-button icon="settings" (buttonClick)="openSettings()"></dbx-icon-button>
2208
+ * ```
2209
+ *
2210
+ * @example
2211
+ * ```html
2212
+ * <dbx-icon-button icon="add" text="Add Item" (buttonClick)="addItem()"></dbx-icon-button>
2213
+ * ```
2214
+ */
2215
+ class DbxIconButtonComponent extends AbstractDbxButtonDirective {
2216
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.3", ngImport: i0, type: DbxIconButtonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
2217
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.3", type: DbxIconButtonComponent, isStandalone: true, selector: "dbx-icon-button", host: { classAttribute: "dbx-icon-button" }, providers: provideDbxButton(DbxIconButtonComponent), usesInheritance: true, ngImport: i0, template: `
2218
+ @switch (buttonDisplayTypeSignal()) {
2219
+ @case ('text_button') {
2220
+ <button mat-button class="mat-unthemed" [disabled]="disabledSignal()" [attr.aria-label]="ariaLabel()" (click)="clickButton()">
2221
+ @if (iconSignal()) {
2222
+ <mat-icon class="dbx-icon-spacer">{{ iconSignal() }}</mat-icon>
2223
+ }
2224
+ <span>{{ textSignal() }}</span>
2225
+ <ng-container *ngTemplateOutlet="content"></ng-container>
2226
+ </button>
2227
+ }
2228
+ @case ('icon_button') {
2229
+ <button mat-icon-button [disabled]="disabledSignal()" [attr.aria-label]="ariaLabel() || iconSignal()" (click)="clickButton()">
2230
+ <mat-icon aria-hidden="true">{{ iconSignal() }}</mat-icon>
2231
+ <ng-container *ngTemplateOutlet="content"></ng-container>
2232
+ </button>
2233
+ }
2234
+ }
2235
+ <ng-template #content>
2236
+ <ng-content></ng-content>
2237
+ </ng-template>
2238
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i1$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { 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 });
2239
+ }
2240
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.3", ngImport: i0, type: DbxIconButtonComponent, decorators: [{
2241
+ type: Component,
2242
+ args: [{
2243
+ selector: 'dbx-icon-button',
2244
+ template: `
2245
+ @switch (buttonDisplayTypeSignal()) {
2246
+ @case ('text_button') {
2247
+ <button mat-button class="mat-unthemed" [disabled]="disabledSignal()" [attr.aria-label]="ariaLabel()" (click)="clickButton()">
2248
+ @if (iconSignal()) {
2249
+ <mat-icon class="dbx-icon-spacer">{{ iconSignal() }}</mat-icon>
2250
+ }
2251
+ <span>{{ textSignal() }}</span>
2252
+ <ng-container *ngTemplateOutlet="content"></ng-container>
2253
+ </button>
2254
+ }
2255
+ @case ('icon_button') {
2256
+ <button mat-icon-button [disabled]="disabledSignal()" [attr.aria-label]="ariaLabel() || iconSignal()" (click)="clickButton()">
2257
+ <mat-icon aria-hidden="true">{{ iconSignal() }}</mat-icon>
2258
+ <ng-container *ngTemplateOutlet="content"></ng-container>
2259
+ </button>
2260
+ }
2261
+ }
2262
+ <ng-template #content>
2263
+ <ng-content></ng-content>
2264
+ </ng-template>
2265
+ `,
2266
+ // eslint-disable-next-line @typescript-eslint/no-deprecated -- self-reference in the deprecated component
2267
+ providers: provideDbxButton(DbxIconButtonComponent),
2268
+ host: {
2269
+ class: 'dbx-icon-button'
2270
+ },
2271
+ imports: [MatButtonModule, MatIconModule, MatIconButton, NgTemplateOutlet],
2272
+ changeDetection: ChangeDetectionStrategy.OnPush,
2273
+ standalone: true
2274
+ }]
2275
+ }] });
2276
+
2277
+ /* eslint-disable @typescript-eslint/no-deprecated -- this module wraps the deprecated component */
2276
2278
  /**
2277
2279
  * @deprecated Use `dbx-button` instead of `dbx-icon-button`. See {@link DbxIconButtonComponent} for migration guidance.
2278
2280
  */
@@ -2291,6 +2293,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.3", ngImpor
2291
2293
 
2292
2294
  const importsAndExports$m = [
2293
2295
  DbxCoreButtonModule,
2296
+ // eslint-disable-next-line @typescript-eslint/no-deprecated -- re-exported for backward compatibility
2294
2297
  DbxIconButtonComponent,
2295
2298
  // buttons
2296
2299
  DbxButtonComponent,
@@ -2306,6 +2309,7 @@ const importsAndExports$m = [
2306
2309
  class DbxButtonModule {
2307
2310
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.3", ngImport: i0, type: DbxButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2308
2311
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.3", ngImport: i0, type: DbxButtonModule, imports: [DbxCoreButtonModule,
2312
+ // eslint-disable-next-line @typescript-eslint/no-deprecated -- re-exported for backward compatibility
2309
2313
  DbxIconButtonComponent,
2310
2314
  // buttons
2311
2315
  DbxButtonComponent,
@@ -2313,6 +2317,7 @@ class DbxButtonModule {
2313
2317
  // progress
2314
2318
  DbxProgressSpinnerButtonComponent,
2315
2319
  DbxProgressBarButtonComponent], exports: [DbxCoreButtonModule,
2320
+ // eslint-disable-next-line @typescript-eslint/no-deprecated -- re-exported for backward compatibility
2316
2321
  DbxIconButtonComponent,
2317
2322
  // buttons
2318
2323
  DbxButtonComponent,
@@ -2321,6 +2326,7 @@ class DbxButtonModule {
2321
2326
  DbxProgressSpinnerButtonComponent,
2322
2327
  DbxProgressBarButtonComponent] });
2323
2328
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.3", ngImport: i0, type: DbxButtonModule, imports: [DbxCoreButtonModule,
2329
+ // eslint-disable-next-line @typescript-eslint/no-deprecated -- re-exported for backward compatibility
2324
2330
  DbxIconButtonComponent,
2325
2331
  // buttons
2326
2332
  DbxButtonComponent,
@@ -9755,13 +9761,13 @@ class DbxNavbarComponent extends AbstractTransitionDirective {
9755
9761
  hasNoAnchorsSignal = toSignal(this.hasNoAnchors$);
9756
9762
  nextRotateAnchorSignal = toSignal(this.nextRotateAnchor$);
9757
9763
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.3", ngImport: i0, type: DbxNavbarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
9758
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.3", type: DbxNavbarComponent, isStandalone: true, selector: "dbx-navbar", inputs: { showMenuCaret: { classPropertyName: "showMenuCaret", publicName: "showMenuCaret", isSignal: true, isRequired: false, transformFunction: null }, navAlign: { classPropertyName: "navAlign", publicName: "navAlign", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, defaultIcon: { classPropertyName: "defaultIcon", publicName: "defaultIcon", isSignal: true, isRequired: false, transformFunction: null }, defaultText: { classPropertyName: "defaultText", publicName: "defaultText", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, buttonMode: { classPropertyName: "buttonMode", publicName: "buttonMode", isSignal: true, isRequired: false, transformFunction: null }, breakpoint: { classPropertyName: "breakpoint", publicName: "breakpoint", isSignal: true, isRequired: false, transformFunction: null }, anchors: { classPropertyName: "anchors", publicName: "anchors", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "dbx-navbar" }, usesInheritance: true, ngImport: i0, template: "@switch (modeSignal()) {\n @case ('bar') {\n <!-- Bar -->\n <nav mat-tab-nav-bar [tabPanel]=\"tabPanel\" [attr.mat-align-tabs]=\"navAlign()\" aria-label=\"Main navigation\">\n @for (x of anchorsSignal(); track x.anchor) {\n <dbx-anchor [anchor]=\"x.anchor\">\n <a mat-tab-link [active]=\"x.selected\" [attr.aria-current]=\"x.selected ? 'page' : null\">{{ x.anchor.title }}</a>\n </dbx-anchor>\n }\n </nav>\n <mat-tab-nav-panel #tabPanel></mat-tab-nav-panel>\n }\n @default {\n <!-- Button -->\n @switch (buttonMode()) {\n <!-- Menu -->\n @case ('menu') {\n <dbx-icon-button class=\"nav-menu-button\" aria-label=\"open navigation\" [buttonDisplay]=\"buttonDisplaySignal()\" [matMenuTriggerFor]=\"menu\" [disabled]=\"hasNoAnchorsSignal()\">\n @if (showMenuCaret()) {\n <mat-icon aria-hidden=\"true\">arrow_drop_down</mat-icon>\n }\n </dbx-icon-button>\n <mat-menu #menu>\n @for (x of anchorsSignal(); track x) {\n <dbx-anchor [anchor]=\"x.anchor\">\n <button mat-menu-item [ngClass]=\"x.selected ? 'active' : ''\" [attr.aria-current]=\"x.selected ? 'page' : null\">\n @if (x.anchor.icon) {\n <mat-icon aria-hidden=\"true\">{{ x.anchor.icon }}</mat-icon>\n }\n {{ x.anchor.title }}\n </button>\n </dbx-anchor>\n }\n </mat-menu>\n }\n <!-- Rotate -->\n @case ('rotate') {\n <dbx-anchor [anchor]=\"nextRotateAnchorSignal()?.anchor\">\n <dbx-icon-button class=\"nav-menu-button\" aria-label=\"open navigation\" [buttonDisplay]=\"buttonDisplaySignal()\" [disabled]=\"hasNoAnchorsSignal()\"></dbx-icon-button>\n </dbx-anchor>\n }\n }\n }\n}\n", dependencies: [{ kind: "component", type: DbxAnchorComponent, selector: "dbx-anchor, [dbx-anchor]", inputs: ["block"] }, { kind: "component", type: MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["fitInkBarToContent", "mat-stretch-tabs", "animationDuration", "backgroundColor", "disableRipple", "color", "tabPanel"], exportAs: ["matTabNavBar", "matTabNav"] }, { kind: "component", type: MatTabNavPanel, selector: "mat-tab-nav-panel", inputs: ["id"], exportAs: ["matTabNavPanel"] }, { kind: "component", type: MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["active", "disabled", "disableRipple", "tabIndex", "id"], exportAs: ["matTabLink"] }, { kind: "component", type: DbxIconButtonComponent, selector: "dbx-icon-button" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
9764
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.3", type: DbxNavbarComponent, isStandalone: true, selector: "dbx-navbar", inputs: { showMenuCaret: { classPropertyName: "showMenuCaret", publicName: "showMenuCaret", isSignal: true, isRequired: false, transformFunction: null }, navAlign: { classPropertyName: "navAlign", publicName: "navAlign", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, defaultIcon: { classPropertyName: "defaultIcon", publicName: "defaultIcon", isSignal: true, isRequired: false, transformFunction: null }, defaultText: { classPropertyName: "defaultText", publicName: "defaultText", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, buttonMode: { classPropertyName: "buttonMode", publicName: "buttonMode", isSignal: true, isRequired: false, transformFunction: null }, breakpoint: { classPropertyName: "breakpoint", publicName: "breakpoint", isSignal: true, isRequired: false, transformFunction: null }, anchors: { classPropertyName: "anchors", publicName: "anchors", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "dbx-navbar" }, usesInheritance: true, ngImport: i0, template: "@switch (modeSignal()) {\n @case ('bar') {\n <!-- Bar -->\n <nav mat-tab-nav-bar [tabPanel]=\"tabPanel\" [attr.mat-align-tabs]=\"navAlign()\" aria-label=\"Main navigation\">\n @for (x of anchorsSignal(); track x.anchor) {\n <dbx-anchor [anchor]=\"x.anchor\">\n <a mat-tab-link [active]=\"x.selected\" [attr.aria-current]=\"x.selected ? 'page' : null\">{{ x.anchor.title }}</a>\n </dbx-anchor>\n }\n </nav>\n <mat-tab-nav-panel #tabPanel></mat-tab-nav-panel>\n }\n @default {\n <!-- Button -->\n @switch (buttonMode()) {\n <!-- Menu -->\n @case ('menu') {\n <dbx-button class=\"nav-menu-button\" ariaLabel=\"open navigation\" [buttonDisplay]=\"buttonDisplaySignal()\" [matMenuTriggerFor]=\"menu\" [disabled]=\"hasNoAnchorsSignal()\">\n @if (showMenuCaret()) {\n <mat-icon aria-hidden=\"true\">arrow_drop_down</mat-icon>\n }\n </dbx-button>\n <mat-menu #menu>\n @for (x of anchorsSignal(); track x) {\n <dbx-anchor [anchor]=\"x.anchor\">\n <button mat-menu-item [ngClass]=\"x.selected ? 'active' : ''\" [attr.aria-current]=\"x.selected ? 'page' : null\">\n @if (x.anchor.icon) {\n <mat-icon aria-hidden=\"true\">{{ x.anchor.icon }}</mat-icon>\n }\n {{ x.anchor.title }}\n </button>\n </dbx-anchor>\n }\n </mat-menu>\n }\n <!-- Rotate -->\n @case ('rotate') {\n <dbx-anchor [anchor]=\"nextRotateAnchorSignal()?.anchor\">\n <dbx-button class=\"nav-menu-button\" ariaLabel=\"open navigation\" [buttonDisplay]=\"buttonDisplaySignal()\" [disabled]=\"hasNoAnchorsSignal()\"></dbx-button>\n </dbx-anchor>\n }\n }\n }\n}\n", dependencies: [{ kind: "component", type: DbxAnchorComponent, selector: "dbx-anchor, [dbx-anchor]", inputs: ["block"] }, { kind: "component", type: MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["fitInkBarToContent", "mat-stretch-tabs", "animationDuration", "backgroundColor", "disableRipple", "color", "tabPanel"], exportAs: ["matTabNavBar", "matTabNav"] }, { kind: "component", type: MatTabNavPanel, selector: "mat-tab-nav-panel", inputs: ["id"], exportAs: ["matTabNavPanel"] }, { kind: "component", type: MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["active", "disabled", "disableRipple", "tabIndex", "id"], exportAs: ["matTabLink"] }, { kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["bar", "type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "tonal", "raised", "stroked", "flat", "iconOnly", "fab", "allowClickPropagation", "mode"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
9759
9765
  }
9760
9766
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.3", ngImport: i0, type: DbxNavbarComponent, decorators: [{
9761
9767
  type: Component,
9762
9768
  args: [{ selector: 'dbx-navbar', host: {
9763
9769
  class: 'dbx-navbar'
9764
- }, imports: [DbxAnchorComponent, MatTabNav, MatTabNavPanel, MatTabLink, DbxIconButtonComponent, MatIconModule, MatMenu, MatMenuItem, NgClass, MatMenuTrigger], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "@switch (modeSignal()) {\n @case ('bar') {\n <!-- Bar -->\n <nav mat-tab-nav-bar [tabPanel]=\"tabPanel\" [attr.mat-align-tabs]=\"navAlign()\" aria-label=\"Main navigation\">\n @for (x of anchorsSignal(); track x.anchor) {\n <dbx-anchor [anchor]=\"x.anchor\">\n <a mat-tab-link [active]=\"x.selected\" [attr.aria-current]=\"x.selected ? 'page' : null\">{{ x.anchor.title }}</a>\n </dbx-anchor>\n }\n </nav>\n <mat-tab-nav-panel #tabPanel></mat-tab-nav-panel>\n }\n @default {\n <!-- Button -->\n @switch (buttonMode()) {\n <!-- Menu -->\n @case ('menu') {\n <dbx-icon-button class=\"nav-menu-button\" aria-label=\"open navigation\" [buttonDisplay]=\"buttonDisplaySignal()\" [matMenuTriggerFor]=\"menu\" [disabled]=\"hasNoAnchorsSignal()\">\n @if (showMenuCaret()) {\n <mat-icon aria-hidden=\"true\">arrow_drop_down</mat-icon>\n }\n </dbx-icon-button>\n <mat-menu #menu>\n @for (x of anchorsSignal(); track x) {\n <dbx-anchor [anchor]=\"x.anchor\">\n <button mat-menu-item [ngClass]=\"x.selected ? 'active' : ''\" [attr.aria-current]=\"x.selected ? 'page' : null\">\n @if (x.anchor.icon) {\n <mat-icon aria-hidden=\"true\">{{ x.anchor.icon }}</mat-icon>\n }\n {{ x.anchor.title }}\n </button>\n </dbx-anchor>\n }\n </mat-menu>\n }\n <!-- Rotate -->\n @case ('rotate') {\n <dbx-anchor [anchor]=\"nextRotateAnchorSignal()?.anchor\">\n <dbx-icon-button class=\"nav-menu-button\" aria-label=\"open navigation\" [buttonDisplay]=\"buttonDisplaySignal()\" [disabled]=\"hasNoAnchorsSignal()\"></dbx-icon-button>\n </dbx-anchor>\n }\n }\n }\n}\n" }]
9770
+ }, imports: [DbxAnchorComponent, MatTabNav, MatTabNavPanel, MatTabLink, DbxButtonComponent, MatIconModule, MatMenu, MatMenuItem, NgClass, MatMenuTrigger], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "@switch (modeSignal()) {\n @case ('bar') {\n <!-- Bar -->\n <nav mat-tab-nav-bar [tabPanel]=\"tabPanel\" [attr.mat-align-tabs]=\"navAlign()\" aria-label=\"Main navigation\">\n @for (x of anchorsSignal(); track x.anchor) {\n <dbx-anchor [anchor]=\"x.anchor\">\n <a mat-tab-link [active]=\"x.selected\" [attr.aria-current]=\"x.selected ? 'page' : null\">{{ x.anchor.title }}</a>\n </dbx-anchor>\n }\n </nav>\n <mat-tab-nav-panel #tabPanel></mat-tab-nav-panel>\n }\n @default {\n <!-- Button -->\n @switch (buttonMode()) {\n <!-- Menu -->\n @case ('menu') {\n <dbx-button class=\"nav-menu-button\" ariaLabel=\"open navigation\" [buttonDisplay]=\"buttonDisplaySignal()\" [matMenuTriggerFor]=\"menu\" [disabled]=\"hasNoAnchorsSignal()\">\n @if (showMenuCaret()) {\n <mat-icon aria-hidden=\"true\">arrow_drop_down</mat-icon>\n }\n </dbx-button>\n <mat-menu #menu>\n @for (x of anchorsSignal(); track x) {\n <dbx-anchor [anchor]=\"x.anchor\">\n <button mat-menu-item [ngClass]=\"x.selected ? 'active' : ''\" [attr.aria-current]=\"x.selected ? 'page' : null\">\n @if (x.anchor.icon) {\n <mat-icon aria-hidden=\"true\">{{ x.anchor.icon }}</mat-icon>\n }\n {{ x.anchor.title }}\n </button>\n </dbx-anchor>\n }\n </mat-menu>\n }\n <!-- Rotate -->\n @case ('rotate') {\n <dbx-anchor [anchor]=\"nextRotateAnchorSignal()?.anchor\">\n <dbx-button class=\"nav-menu-button\" ariaLabel=\"open navigation\" [buttonDisplay]=\"buttonDisplaySignal()\" [disabled]=\"hasNoAnchorsSignal()\"></dbx-button>\n </dbx-anchor>\n }\n }\n }\n}\n" }]
9765
9771
  }], propDecorators: { showMenuCaret: [{ type: i0.Input, args: [{ isSignal: true, alias: "showMenuCaret", required: false }] }], navAlign: [{ type: i0.Input, args: [{ isSignal: true, alias: "navAlign", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], defaultIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultIcon", required: false }] }], defaultText: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultText", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], buttonMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonMode", required: false }] }], breakpoint: [{ type: i0.Input, args: [{ isSignal: true, alias: "breakpoint", required: false }] }], anchors: [{ type: i0.Input, args: [{ isSignal: true, alias: "anchors", required: false }] }] } });
9766
9772
 
9767
9773
  /**
@@ -9799,9 +9805,16 @@ class DbxSidenavComponent extends AbstractTransitionWatcherDirective {
9799
9805
  _sidenavSub = cleanSubscription();
9800
9806
  _screenMediaService = inject(DbxScreenMediaService);
9801
9807
  color = input(undefined, ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
9808
+ position = input('start', ...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
9809
+ /**
9810
+ * Overrides the responsive display mode. When set, the sidenav ignores screen-width breakpoints and uses this mode instead.
9811
+ *
9812
+ * Set to `'mobile'` to keep the sidenav always hidden as an overlay that only opens when toggled.
9813
+ */
9814
+ displayMode = input(undefined, ...(ngDevMode ? [{ debugName: "displayMode" }] : /* istanbul ignore next */ []));
9802
9815
  sidenav = viewChild.required(MatSidenav);
9803
9816
  anchors = input(...(ngDevMode ? [undefined, { debugName: "anchors" }] : /* istanbul ignore next */ []));
9804
- mode$ = this._screenMediaService.widthType$.pipe(distinctUntilChanged(), map((width) => {
9817
+ responsiveMode$ = this._screenMediaService.widthType$.pipe(distinctUntilChanged(), map((width) => {
9805
9818
  let mode;
9806
9819
  switch (width) {
9807
9820
  case 'micro':
@@ -9820,9 +9833,13 @@ class DbxSidenavComponent extends AbstractTransitionWatcherDirective {
9820
9833
  }
9821
9834
  return mode;
9822
9835
  }), distinctUntilChanged(), shareReplay(1));
9836
+ _displayMode$ = toObservable(this.displayMode);
9837
+ mode$ = combineLatest([this.responsiveMode$, this._displayMode$]).pipe(map(([responsive, override]) => override ?? responsive), distinctUntilChanged(), shareReplay(1));
9823
9838
  modeSignal = toSignal(this.mode$);
9824
9839
  disableBackdropSignal = computed(() => this.modeSignal() !== SideNavDisplayMode.MOBILE, ...(ngDevMode ? [{ debugName: "disableBackdropSignal" }] : /* istanbul ignore next */ []));
9825
9840
  sizeCssClassSignal = computed(() => `dbx-sidenav-${this.modeSignal()}`, ...(ngDevMode ? [{ debugName: "sizeCssClassSignal" }] : /* istanbul ignore next */ []));
9841
+ positionCssClassSignal = computed(() => (this.position() === 'end' ? 'dbx-sidenav-end' : 'dbx-sidenav-start'), ...(ngDevMode ? [{ debugName: "positionCssClassSignal" }] : /* istanbul ignore next */ []));
9842
+ cssClassesSignal = computed(() => `${this.sizeCssClassSignal()} ${this.positionCssClassSignal()}`, ...(ngDevMode ? [{ debugName: "cssClassesSignal" }] : /* istanbul ignore next */ []));
9826
9843
  state$ = this.mode$.pipe(map((mode) => {
9827
9844
  let drawer = 'over';
9828
9845
  let open = true;
@@ -9894,9 +9911,9 @@ class DbxSidenavComponent extends AbstractTransitionWatcherDirective {
9894
9911
  }
9895
9912
  }
9896
9913
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.3", ngImport: i0, type: DbxSidenavComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
9897
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.3", type: DbxSidenavComponent, isStandalone: true, selector: "dbx-sidenav", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, anchors: { classPropertyName: "anchors", publicName: "anchors", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "sidenav", first: true, predicate: MatSidenav, descendants: true, isSignal: true }], exportAs: ["sidenav"], usesInheritance: true, ngImport: i0, template: `
9898
- <mat-sidenav-container class="dbx-sidenav" [ngClass]="sizeCssClassSignal()">
9899
- <mat-sidenav [dbxColor]="color()" [disableClose]="disableBackdropSignal()" [mode]="drawerSignal()">
9914
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.3", type: DbxSidenavComponent, isStandalone: true, selector: "dbx-sidenav", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, displayMode: { classPropertyName: "displayMode", publicName: "displayMode", isSignal: true, isRequired: false, transformFunction: null }, anchors: { classPropertyName: "anchors", publicName: "anchors", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "sidenav", first: true, predicate: MatSidenav, descendants: true, isSignal: true }], exportAs: ["sidenav"], usesInheritance: true, ngImport: i0, template: `
9915
+ <mat-sidenav-container class="dbx-sidenav" [ngClass]="cssClassesSignal()">
9916
+ <mat-sidenav [dbxColor]="color()" [position]="position()" [disableClose]="disableBackdropSignal()" [mode]="drawerSignal()">
9900
9917
  <ng-content select="[top]"></ng-content>
9901
9918
  <dbx-anchor-list class="dbx-sidenav-anchor-list" [anchors]="anchors()"></dbx-anchor-list>
9902
9919
  <span class="spacer"></span>
@@ -9915,8 +9932,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.3", ngImpor
9915
9932
  selector: 'dbx-sidenav',
9916
9933
  exportAs: 'sidenav',
9917
9934
  template: `
9918
- <mat-sidenav-container class="dbx-sidenav" [ngClass]="sizeCssClassSignal()">
9919
- <mat-sidenav [dbxColor]="color()" [disableClose]="disableBackdropSignal()" [mode]="drawerSignal()">
9935
+ <mat-sidenav-container class="dbx-sidenav" [ngClass]="cssClassesSignal()">
9936
+ <mat-sidenav [dbxColor]="color()" [position]="position()" [disableClose]="disableBackdropSignal()" [mode]="drawerSignal()">
9920
9937
  <ng-content select="[top]"></ng-content>
9921
9938
  <dbx-anchor-list class="dbx-sidenav-anchor-list" [anchors]="anchors()"></dbx-anchor-list>
9922
9939
  <span class="spacer"></span>
@@ -9932,7 +9949,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.3", ngImpor
9932
9949
  changeDetection: ChangeDetectionStrategy.OnPush,
9933
9950
  standalone: true
9934
9951
  }]
9935
- }], propDecorators: { color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], sidenav: [{ type: i0.ViewChild, args: [i0.forwardRef(() => MatSidenav), { isSignal: true }] }], anchors: [{ type: i0.Input, args: [{ isSignal: true, alias: "anchors", required: false }] }] } });
9952
+ }], propDecorators: { color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], displayMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayMode", required: false }] }], sidenav: [{ type: i0.ViewChild, args: [i0.forwardRef(() => MatSidenav), { isSignal: true }] }], anchors: [{ type: i0.Input, args: [{ isSignal: true, alias: "anchors", required: false }] }] } });
9936
9953
 
9937
9954
  /**
9938
9955
  * Default icon displayed on the sidenav toggle button.
@@ -13976,6 +13993,9 @@ class DbxTextChipsComponent {
13976
13993
  chips = input(...(ngDevMode ? [undefined, { debugName: "chips" }] : /* istanbul ignore next */ []));
13977
13994
  /**
13978
13995
  * Returns the themed background CSS class for a chip's color.
13996
+ *
13997
+ * @param chip - the chip to get the color class for
13998
+ * @returns the CSS class name for the chip's background color, or empty string if no color
13979
13999
  */
13980
14000
  chipColorClass(chip) {
13981
14001
  return chip.color ? dbxColorBackground(chip.color) : '';
@@ -14522,11 +14542,11 @@ class DbxZipBlobPreviewComponent {
14522
14542
  this.selectedNodeSignal.set(selectedNode?.parent);
14523
14543
  };
14524
14544
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.3", ngImport: i0, type: DbxZipBlobPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
14525
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.3", type: DbxZipBlobPreviewComponent, isStandalone: true, selector: "dbx-zip-blob-preview", inputs: { blob: { classPropertyName: "blob", publicName: "blob", isSignal: true, isRequired: false, transformFunction: null }, downloadFileName: { classPropertyName: "downloadFileName", publicName: "downloadFileName", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<dbx-loading [context]=\"context\">\n <div class=\"dbx-flex-bar dbx-zip-blob-preview-toolbar\">\n <dbx-icon-button [disabled]=\"!selectedNodeSignal()\" icon=\"arrow_upward\" text=\"Back\" (click)=\"backClicked()\"></dbx-icon-button>\n <dbx-button-spacer></dbx-button-spacer>\n <dbx-icon-button [disabled]=\"!selectedNodeSignal()\" icon=\"home\" text=\"Home\" (click)=\"homeClicked()\"></dbx-icon-button>\n <dbx-spacer></dbx-spacer>\n @if (downloadZipFileBlobButtonConfigSignal()) {\n <dbx-download-blob-button [config]=\"downloadZipFileBlobButtonConfigSignal()\"></dbx-download-blob-button>\n }\n </div>\n <dbx-bar-header class=\"dbx-zip-blob-preview-header\" [icon]=\"selectedNodeIconSignal()\" [text]=\"selectedNodePathSignal()\"></dbx-bar-header>\n <div class=\"dbx-zip-blob-preview-content\">\n @switch (mode()) {\n @case ('view_directory') {\n <dbx-zip-preview-file-entry-list [state]=\"listEntriesState$\" [dbxListTitleGroup]=\"listTitleGroupDelegate\" [dbxListItemModifier] [dbxListItemAnchorModifier]=\"makeEntryAnchor\"></dbx-zip-preview-file-entry-list>\n }\n @case ('view_entry') {\n <dbx-embed class=\"dbx-zip-blob-preview-content-embed\" [blob]=\"selectedFileEntryBlobSignal()\"></dbx-embed>\n }\n }\n </div>\n</dbx-loading>\n", dependencies: [{ kind: "ngmodule", type: MatToolbarModule }, { kind: "directive", type: DbxButtonSpacerDirective, selector: "dbx-button-spacer,[dbxButtonSpacer]" }, { kind: "component", type: DbxIconButtonComponent, selector: "dbx-icon-button" }, { kind: "component", type: DbxBarHeaderComponent, selector: "dbx-bar-header", inputs: ["text", "icon", "color"] }, { kind: "directive", type: DbxListTitleGroupDirective, selector: "[dbxListTitleGroup]", inputs: ["dbxListTitleGroup"] }, { kind: "component", type: DbxZipPreviewEntryListComponent, selector: "dbx-zip-preview-file-entry-list" }, { kind: "component", type: DbxEmbedComponent, selector: "dbx-embed", inputs: ["embedElement", "sanitizeUrl", "srcUrl", "type", "blob"], outputs: ["embedElementChange", "sanitizeUrlChange", "srcUrlChange", "typeChange", "blobChange"] }, { kind: "component", type: DbxLoadingComponent, selector: "dbx-loading", inputs: ["padding", "show", "text", "mode", "color", "diameter", "linear", "loading", "error", "context"] }, { kind: "directive", type: DbxValueListItemModifierDirective, selector: "dbxListItemModifier,[dbxListItemModifier]", inputs: ["dbxListItemModifier"] }, { kind: "directive", type: DbxListItemAnchorModifierDirective, selector: "[dbxListItemAnchorModifier]", inputs: ["dbxListItemAnchorModifier"] }, { kind: "component", type: DbxDownloadBlobButtonComponent, selector: "dbx-download-blob-button", inputs: ["config"] }, { kind: "directive", type: DbxSpacerDirective, selector: "dbx-spacer, [dbxSpacer]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
14545
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.3", type: DbxZipBlobPreviewComponent, isStandalone: true, selector: "dbx-zip-blob-preview", inputs: { blob: { classPropertyName: "blob", publicName: "blob", isSignal: true, isRequired: false, transformFunction: null }, downloadFileName: { classPropertyName: "downloadFileName", publicName: "downloadFileName", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<dbx-loading [context]=\"context\">\n <div class=\"dbx-flex-bar dbx-zip-blob-preview-toolbar\">\n <dbx-button [disabled]=\"!selectedNodeSignal()\" icon=\"arrow_upward\" text=\"Back\" (buttonClick)=\"backClicked()\"></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n <dbx-button [disabled]=\"!selectedNodeSignal()\" icon=\"home\" text=\"Home\" (buttonClick)=\"homeClicked()\"></dbx-button>\n <dbx-spacer></dbx-spacer>\n @if (downloadZipFileBlobButtonConfigSignal()) {\n <dbx-download-blob-button [config]=\"downloadZipFileBlobButtonConfigSignal()\"></dbx-download-blob-button>\n }\n </div>\n <dbx-bar-header class=\"dbx-zip-blob-preview-header\" [icon]=\"selectedNodeIconSignal()\" [text]=\"selectedNodePathSignal()\"></dbx-bar-header>\n <div class=\"dbx-zip-blob-preview-content\">\n @switch (mode()) {\n @case ('view_directory') {\n <dbx-zip-preview-file-entry-list [state]=\"listEntriesState$\" [dbxListTitleGroup]=\"listTitleGroupDelegate\" [dbxListItemModifier] [dbxListItemAnchorModifier]=\"makeEntryAnchor\"></dbx-zip-preview-file-entry-list>\n }\n @case ('view_entry') {\n <dbx-embed class=\"dbx-zip-blob-preview-content-embed\" [blob]=\"selectedFileEntryBlobSignal()\"></dbx-embed>\n }\n }\n </div>\n</dbx-loading>\n", dependencies: [{ kind: "ngmodule", type: MatToolbarModule }, { kind: "directive", type: DbxButtonSpacerDirective, selector: "dbx-button-spacer,[dbxButtonSpacer]" }, { kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["bar", "type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "tonal", "raised", "stroked", "flat", "iconOnly", "fab", "allowClickPropagation", "mode"] }, { kind: "component", type: DbxBarHeaderComponent, selector: "dbx-bar-header", inputs: ["text", "icon", "color"] }, { kind: "directive", type: DbxListTitleGroupDirective, selector: "[dbxListTitleGroup]", inputs: ["dbxListTitleGroup"] }, { kind: "component", type: DbxZipPreviewEntryListComponent, selector: "dbx-zip-preview-file-entry-list" }, { kind: "component", type: DbxEmbedComponent, selector: "dbx-embed", inputs: ["embedElement", "sanitizeUrl", "srcUrl", "type", "blob"], outputs: ["embedElementChange", "sanitizeUrlChange", "srcUrlChange", "typeChange", "blobChange"] }, { kind: "component", type: DbxLoadingComponent, selector: "dbx-loading", inputs: ["padding", "show", "text", "mode", "color", "diameter", "linear", "loading", "error", "context"] }, { kind: "directive", type: DbxValueListItemModifierDirective, selector: "dbxListItemModifier,[dbxListItemModifier]", inputs: ["dbxListItemModifier"] }, { kind: "directive", type: DbxListItemAnchorModifierDirective, selector: "[dbxListItemAnchorModifier]", inputs: ["dbxListItemAnchorModifier"] }, { kind: "component", type: DbxDownloadBlobButtonComponent, selector: "dbx-download-blob-button", inputs: ["config"] }, { kind: "directive", type: DbxSpacerDirective, selector: "dbx-spacer, [dbxSpacer]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
14526
14546
  }
14527
14547
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.3", ngImport: i0, type: DbxZipBlobPreviewComponent, decorators: [{
14528
14548
  type: Component,
14529
- args: [{ selector: 'dbx-zip-blob-preview', standalone: true, imports: [MatToolbarModule, DbxButtonSpacerDirective, DbxIconButtonComponent, DbxBarHeaderComponent, DbxListTitleGroupDirective, DbxZipPreviewEntryListComponent, DbxEmbedComponent, DbxLoadingComponent, DbxValueListItemModifierDirective, DbxListItemAnchorModifierDirective, DbxListTitleGroupDirective, DbxDownloadBlobButtonComponent, DbxSpacerDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: "<dbx-loading [context]=\"context\">\n <div class=\"dbx-flex-bar dbx-zip-blob-preview-toolbar\">\n <dbx-icon-button [disabled]=\"!selectedNodeSignal()\" icon=\"arrow_upward\" text=\"Back\" (click)=\"backClicked()\"></dbx-icon-button>\n <dbx-button-spacer></dbx-button-spacer>\n <dbx-icon-button [disabled]=\"!selectedNodeSignal()\" icon=\"home\" text=\"Home\" (click)=\"homeClicked()\"></dbx-icon-button>\n <dbx-spacer></dbx-spacer>\n @if (downloadZipFileBlobButtonConfigSignal()) {\n <dbx-download-blob-button [config]=\"downloadZipFileBlobButtonConfigSignal()\"></dbx-download-blob-button>\n }\n </div>\n <dbx-bar-header class=\"dbx-zip-blob-preview-header\" [icon]=\"selectedNodeIconSignal()\" [text]=\"selectedNodePathSignal()\"></dbx-bar-header>\n <div class=\"dbx-zip-blob-preview-content\">\n @switch (mode()) {\n @case ('view_directory') {\n <dbx-zip-preview-file-entry-list [state]=\"listEntriesState$\" [dbxListTitleGroup]=\"listTitleGroupDelegate\" [dbxListItemModifier] [dbxListItemAnchorModifier]=\"makeEntryAnchor\"></dbx-zip-preview-file-entry-list>\n }\n @case ('view_entry') {\n <dbx-embed class=\"dbx-zip-blob-preview-content-embed\" [blob]=\"selectedFileEntryBlobSignal()\"></dbx-embed>\n }\n }\n </div>\n</dbx-loading>\n" }]
14549
+ args: [{ selector: 'dbx-zip-blob-preview', standalone: true, imports: [MatToolbarModule, DbxButtonSpacerDirective, DbxButtonComponent, DbxBarHeaderComponent, DbxListTitleGroupDirective, DbxZipPreviewEntryListComponent, DbxEmbedComponent, DbxLoadingComponent, DbxValueListItemModifierDirective, DbxListItemAnchorModifierDirective, DbxListTitleGroupDirective, DbxDownloadBlobButtonComponent, DbxSpacerDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: "<dbx-loading [context]=\"context\">\n <div class=\"dbx-flex-bar dbx-zip-blob-preview-toolbar\">\n <dbx-button [disabled]=\"!selectedNodeSignal()\" icon=\"arrow_upward\" text=\"Back\" (buttonClick)=\"backClicked()\"></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n <dbx-button [disabled]=\"!selectedNodeSignal()\" icon=\"home\" text=\"Home\" (buttonClick)=\"homeClicked()\"></dbx-button>\n <dbx-spacer></dbx-spacer>\n @if (downloadZipFileBlobButtonConfigSignal()) {\n <dbx-download-blob-button [config]=\"downloadZipFileBlobButtonConfigSignal()\"></dbx-download-blob-button>\n }\n </div>\n <dbx-bar-header class=\"dbx-zip-blob-preview-header\" [icon]=\"selectedNodeIconSignal()\" [text]=\"selectedNodePathSignal()\"></dbx-bar-header>\n <div class=\"dbx-zip-blob-preview-content\">\n @switch (mode()) {\n @case ('view_directory') {\n <dbx-zip-preview-file-entry-list [state]=\"listEntriesState$\" [dbxListTitleGroup]=\"listTitleGroupDelegate\" [dbxListItemModifier] [dbxListItemAnchorModifier]=\"makeEntryAnchor\"></dbx-zip-preview-file-entry-list>\n }\n @case ('view_entry') {\n <dbx-embed class=\"dbx-zip-blob-preview-content-embed\" [blob]=\"selectedFileEntryBlobSignal()\"></dbx-embed>\n }\n }\n </div>\n</dbx-loading>\n" }]
14530
14550
  }], propDecorators: { blob: [{ type: i0.Input, args: [{ isSignal: true, alias: "blob", required: false }] }], downloadFileName: [{ type: i0.Input, args: [{ isSignal: true, alias: "downloadFileName", required: false }] }] } });
14531
14551
 
14532
14552
  /**