@dontdrinkandroot/ngx-material-extensions 0.7.2 → 0.7.4

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.
@@ -41,6 +41,16 @@
41
41
  }
42
42
  }
43
43
  }
44
+
45
+ &.over {
46
+ .mat-sidenav {
47
+ .ddr-mat-toolbar-fixed-top-container {
48
+ .mat-toolbar {
49
+ width: 360px;
50
+ }
51
+ }
52
+ }
53
+ }
44
54
  }
45
55
 
46
56
  .ddr-mat-fab-fixed-container {
@@ -4,6 +4,7 @@
4
4
 
5
5
  $ddr-mat-primary: mat.$azure-palette !default;
6
6
  $ddr-mat-tertiary: mat.$magenta-palette !default;
7
+ $ddr-mat-density: 0;
7
8
 
8
9
  $ddr-light-theme: mat.define-theme((
9
10
  color: (
@@ -12,7 +13,8 @@ $ddr-light-theme: mat.define-theme((
12
13
  ),
13
14
  typography: (
14
15
  plain-family: 'Roboto Flex Variable'
15
- )
16
+ ),
17
+ density: $ddr-mat-density
16
18
  )) !default;
17
19
 
18
20
  $ddr-dark-theme: mat.define-theme((
@@ -20,7 +22,7 @@ $ddr-dark-theme: mat.define-theme((
20
22
  theme-type: dark,
21
23
  primary: $ddr-mat-primary,
22
24
  tertiary: $ddr-mat-tertiary,
23
- ),
25
+ )
24
26
  )) !default;
25
27
 
26
28
  html {
package/assets/fonts.scss CHANGED
@@ -1,4 +1,4 @@
1
- @import '@fontsource-variable/roboto-flex/full';
1
+ @import '@fontsource-variable/roboto-flex';
2
2
  @import "@fontsource/material-symbols-rounded/400.css";
3
3
 
4
4
  .material-symbols-rounded {
@@ -1,16 +1,16 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, Injectable, Inject, makeEnvironmentProviders, provideEnvironmentInitializer, inject, Directive, Component, ChangeDetectionStrategy, Input, ViewChild, HostBinding, ContentChildren, HostListener } from '@angular/core';
2
+ import { InjectionToken, Inject, Injectable, makeEnvironmentProviders, provideEnvironmentInitializer, inject, Directive, input, ViewChild, Input, ChangeDetectionStrategy, Component, HostBinding, HostListener, ContentChildren, signal, effect } from '@angular/core';
3
3
  import { MatIconRegistry, MatIcon } from '@angular/material/icon';
4
- import { DOCUMENT, AsyncPipe, NgClass } from '@angular/common';
5
- import { fromEvent, distinctUntilChanged, interval, BehaviorSubject } from 'rxjs';
4
+ import { DOCUMENT, NgClass } from '@angular/common';
5
+ import { fromEvent, distinctUntilChanged, interval, BehaviorSubject, combineLatest } from 'rxjs';
6
6
  import { map, debounce } from 'rxjs/operators';
7
7
  import * as i1 from '@angular/forms';
8
8
  import { FormControl, ReactiveFormsModule } from '@angular/forms';
9
9
  import { MatCard } from '@angular/material/card';
10
- import { MatFormField, MatSuffix } from '@angular/material/form-field';
10
+ import { MatFormField, MatSuffix, MatPrefix } from '@angular/material/form-field';
11
11
  import { MatInput } from '@angular/material/input';
12
12
  import { MatIconButton } from '@angular/material/button';
13
- import { outputFromObservable, toSignal } from '@angular/core/rxjs-interop';
13
+ import { outputFromObservable, toObservable, toSignal } from '@angular/core/rxjs-interop';
14
14
  import { __decorate } from 'tslib';
15
15
  import { NumberUtils, StringUtils, Debounce, Limit } from '@dontdrinkandroot/ngx-extensions';
16
16
  import { MatSidenav, MatSidenavContainer, MatSidenavContent } from '@angular/material/sidenav';
@@ -53,10 +53,10 @@ class DdrMatThemeScrollService {
53
53
  this.document.head.appendChild(metaElement);
54
54
  return metaElement;
55
55
  }
56
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.1", ngImport: i0, type: DdrMatThemeScrollService, deps: [{ token: DOCUMENT }, { token: DDR_MAT_THEME }], target: i0.ɵɵFactoryTarget.Injectable });
57
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.1", ngImport: i0, type: DdrMatThemeScrollService });
56
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DdrMatThemeScrollService, deps: [{ token: DOCUMENT }, { token: DDR_MAT_THEME }], target: i0.ɵɵFactoryTarget.Injectable });
57
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DdrMatThemeScrollService });
58
58
  }
59
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.1", ngImport: i0, type: DdrMatThemeScrollService, decorators: [{
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DdrMatThemeScrollService, decorators: [{
60
60
  type: Injectable
61
61
  }], ctorParameters: () => [{ type: Document, decorators: [{
62
62
  type: Inject,
@@ -100,10 +100,10 @@ class DdrMatFabFixedDirective {
100
100
  this.el.nativeElement.parentElement.insertBefore(container, this.el.nativeElement);
101
101
  container.appendChild(this.el.nativeElement);
102
102
  }
103
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.1", ngImport: i0, type: DdrMatFabFixedDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
104
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.1", type: DdrMatFabFixedDirective, isStandalone: true, selector: "[ddrMatFabFixed]", ngImport: i0 });
103
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DdrMatFabFixedDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
104
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.5", type: DdrMatFabFixedDirective, isStandalone: true, selector: "[ddrMatFabFixed]", ngImport: i0 });
105
105
  }
106
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.1", ngImport: i0, type: DdrMatFabFixedDirective, decorators: [{
106
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DdrMatFabFixedDirective, decorators: [{
107
107
  type: Directive,
108
108
  args: [{
109
109
  selector: '[ddrMatFabFixed]',
@@ -115,6 +115,7 @@ class DdrMatFilterComponent {
115
115
  filterChanged = outputFromObservable(this.formControl.valueChanges
116
116
  .pipe(debounce(() => interval(this.bouncePeriod))));
117
117
  bouncePeriod = 500;
118
+ ddrMatPrefixIcon = input(null);
118
119
  inputElement;
119
120
  /**
120
121
  * @override
@@ -124,12 +125,11 @@ class DdrMatFilterComponent {
124
125
  }
125
126
  clear() {
126
127
  this.formControl.setValue(null);
127
- // this.filterChanged.emit(null);
128
128
  }
129
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.1", ngImport: i0, type: DdrMatFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
130
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.1", type: DdrMatFilterComponent, isStandalone: true, selector: "ddr-mat-filter", inputs: { bouncePeriod: "bouncePeriod" }, outputs: { filterChanged: "filterChanged" }, viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["input"], descendants: true, static: true }], ngImport: i0, template: "<mat-card appearance=\"outlined\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput type=\"text\" [formControl]=\"formControl\" #input />\n <button mat-icon-button matSuffix (click)=\"clear()\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n</mat-card>\n", dependencies: [{ kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
129
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DdrMatFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
130
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.5", type: DdrMatFilterComponent, isStandalone: true, selector: "ddr-mat-filter", inputs: { bouncePeriod: { classPropertyName: "bouncePeriod", publicName: "bouncePeriod", isSignal: false, isRequired: false, transformFunction: null }, ddrMatPrefixIcon: { classPropertyName: "ddrMatPrefixIcon", publicName: "ddrMatPrefixIcon", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filterChanged: "filterChanged" }, viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["input"], descendants: true, static: true }], ngImport: i0, template: "<mat-card appearance=\"outlined\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput type=\"text\" [formControl]=\"formControl\" #input/>\n @if (ddrMatPrefixIcon()) {\n <mat-icon matPrefix>{{ ddrMatPrefixIcon() }}</mat-icon>\n }\n <button mat-icon-button matSuffix (click)=\"clear()\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n</mat-card>\n", styles: [""], dependencies: [{ kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
131
131
  }
132
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.1", ngImport: i0, type: DdrMatFilterComponent, decorators: [{
132
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DdrMatFilterComponent, decorators: [{
133
133
  type: Component,
134
134
  args: [{ selector: 'ddr-mat-filter', imports: [
135
135
  MatIconButton,
@@ -138,8 +138,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.1", ngImpor
138
138
  MatIcon,
139
139
  MatInput,
140
140
  MatSuffix,
141
- ReactiveFormsModule
142
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-card appearance=\"outlined\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput type=\"text\" [formControl]=\"formControl\" #input />\n <button mat-icon-button matSuffix (click)=\"clear()\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n</mat-card>\n" }]
141
+ ReactiveFormsModule,
142
+ MatPrefix
143
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-card appearance=\"outlined\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput type=\"text\" [formControl]=\"formControl\" #input/>\n @if (ddrMatPrefixIcon()) {\n <mat-icon matPrefix>{{ ddrMatPrefixIcon() }}</mat-icon>\n }\n <button mat-icon-button matSuffix (click)=\"clear()\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n</mat-card>\n" }]
143
144
  }], propDecorators: { bouncePeriod: [{
144
145
  type: Input
145
146
  }], inputElement: [{
@@ -234,10 +235,10 @@ class DdrMatGridTileLazyImgDirective {
234
235
  // console.log('isHidden');
235
236
  return window.getComputedStyle(nativeElement).display === 'none';
236
237
  }
237
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.1", ngImport: i0, type: DdrMatGridTileLazyImgDirective, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
238
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.1", type: DdrMatGridTileLazyImgDirective, isStandalone: true, selector: "[ddrMatGridTileLazyImg]", inputs: { src: ["ddrMatGridTileLazyImg", "src"], offset: "offset", objectFit: "objectFit" }, host: { properties: { "src": "this.hostSrc", "style.object-fit": "this.hostStyleObjectFit", "style.width.px": "this.hostStyleWidthPx", "style.height.px": "this.hostStyleHeightPx", "style.opacity": "this.hostStyleOpacity" } }, usesOnChanges: true, ngImport: i0 });
238
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DdrMatGridTileLazyImgDirective, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
239
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.5", type: DdrMatGridTileLazyImgDirective, isStandalone: true, selector: "[ddrMatGridTileLazyImg]", inputs: { src: ["ddrMatGridTileLazyImg", "src"], offset: "offset", objectFit: "objectFit" }, host: { properties: { "src": "this.hostSrc", "style.object-fit": "this.hostStyleObjectFit", "style.width.px": "this.hostStyleWidthPx", "style.height.px": "this.hostStyleHeightPx", "style.opacity": "this.hostStyleOpacity" } }, usesOnChanges: true, ngImport: i0 });
239
240
  }
240
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.1", ngImport: i0, type: DdrMatGridTileLazyImgDirective, decorators: [{
241
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DdrMatGridTileLazyImgDirective, decorators: [{
241
242
  type: Directive,
242
243
  args: [{
243
244
  selector: '[ddrMatGridTileLazyImg]'
@@ -295,8 +296,8 @@ class DdrMatGridTileLazyImageContainerDirective {
295
296
  ngOnDestroy() {
296
297
  this.changeSubscription.unsubscribe();
297
298
  }
298
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.1", ngImport: i0, type: DdrMatGridTileLazyImageContainerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
299
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.1", type: DdrMatGridTileLazyImageContainerDirective, isStandalone: true, selector: "[ddrMatGridTileLazyImgContainer]", host: { listeners: { "window:resize": "windowResized($event)", "window:scroll": "windowScroll($event)" } }, queries: [{ propertyName: "lazyImages", predicate: DdrMatGridTileLazyImgDirective, descendants: true }], ngImport: i0 });
299
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DdrMatGridTileLazyImageContainerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
300
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.5", type: DdrMatGridTileLazyImageContainerDirective, isStandalone: true, selector: "[ddrMatGridTileLazyImgContainer]", host: { listeners: { "window:resize": "windowResized($event)", "window:scroll": "windowScroll($event)" } }, queries: [{ propertyName: "lazyImages", predicate: DdrMatGridTileLazyImgDirective, descendants: true }], ngImport: i0 });
300
301
  }
301
302
  __decorate([
302
303
  Debounce()
@@ -304,7 +305,7 @@ __decorate([
304
305
  __decorate([
305
306
  Limit()
306
307
  ], DdrMatGridTileLazyImageContainerDirective.prototype, "windowScroll", null);
307
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.1", ngImport: i0, type: DdrMatGridTileLazyImageContainerDirective, decorators: [{
308
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DdrMatGridTileLazyImageContainerDirective, decorators: [{
308
309
  type: Directive,
309
310
  args: [{
310
311
  selector: '[ddrMatGridTileLazyImgContainer]'
@@ -324,67 +325,66 @@ class DdrMatSidenavService {
324
325
  breakpointObserver;
325
326
  router;
326
327
  sidenav;
327
- stayOpenOnLargeScreen = true;
328
328
  largeBreakpoints = [
329
329
  Breakpoints.Medium,
330
330
  Breakpoints.Large,
331
331
  Breakpoints.XLarge
332
332
  ];
333
- screenLarge$;
334
- mode$;
335
- opened$;
333
+ stayOpenOnLargeScreen = signal(true);
334
+ stayOpenOnLargeScreen$ = toObservable(this.stayOpenOnLargeScreen);
336
335
  sidenavContentScrolled$ = new BehaviorSubject(false);
336
+ mode;
337
+ opened;
338
+ toggleVisible;
337
339
  constructor(breakpointObserver, router) {
338
340
  this.breakpointObserver = breakpointObserver;
339
341
  this.router = router;
340
- this.screenLarge$ = this.breakpointObserver.observe(this.largeBreakpoints).pipe(map(result => result.matches));
341
- this.mode$ = this.screenLarge$.pipe(map(large => large && this.stayOpenOnLargeScreen ? 'side' : 'over'));
342
- this.opened$ = this.screenLarge$.pipe(map(large => large && this.stayOpenOnLargeScreen));
342
+ const screenLarge$ = this.breakpointObserver.observe(this.largeBreakpoints).pipe(map(result => result.matches));
343
+ const mode$ = combineLatest([
344
+ screenLarge$,
345
+ this.stayOpenOnLargeScreen$
346
+ ]).pipe(map(([large, stayOpenOnLargeScreen]) => large && stayOpenOnLargeScreen ? 'side' : 'over'));
347
+ const opened$ = combineLatest([
348
+ screenLarge$,
349
+ this.stayOpenOnLargeScreen$
350
+ ]).pipe(map(([large, stayOpenOnLargeScreen]) => large && stayOpenOnLargeScreen));
351
+ const toggleVisible$ = combineLatest([
352
+ screenLarge$,
353
+ this.stayOpenOnLargeScreen$
354
+ ]).pipe(map(([large, stayOpenOnLargeScreen]) => !large || !stayOpenOnLargeScreen));
343
355
  this.router.events.subscribe(event => {
344
356
  if (event instanceof NavigationStart) {
345
357
  this.closeSidebar();
346
358
  }
347
359
  });
360
+ this.mode = toSignal(mode$, { initialValue: 'over' });
361
+ this.opened = toSignal(opened$, { initialValue: false });
362
+ this.toggleVisible = toSignal(toggleVisible$, { initialValue: true });
348
363
  }
349
364
  setSidenav(sidenav) {
350
365
  this.sidenav = sidenav;
351
366
  }
352
- getStayOpenOnLargeScreen() {
353
- return this.stayOpenOnLargeScreen;
354
- }
355
- setStayOpenOnLargeScreen(value) {
356
- this.stayOpenOnLargeScreen = value;
357
- }
358
367
  toggle() {
359
368
  if (null == this.sidenav) {
360
369
  return Promise.reject('No MatSidenav found. Use setSidenav() of SidenavService');
361
370
  }
362
- if (!(this.stayOpenOnLargeScreen && this.breakpointObserver.isMatched(this.largeBreakpoints))) {
371
+ if (!(this.stayOpenOnLargeScreen() && this.breakpointObserver.isMatched(this.largeBreakpoints))) {
363
372
  return this.sidenav.toggle();
364
373
  }
365
374
  return Promise.resolve(this.sidenav.opened ? 'open' : 'close');
366
375
  }
367
376
  closeSidebar() {
368
- if (!(this.stayOpenOnLargeScreen && this.breakpointObserver.isMatched(this.largeBreakpoints))) {
377
+ if (!(this.stayOpenOnLargeScreen() && this.breakpointObserver.isMatched(this.largeBreakpoints))) {
369
378
  this.sidenav.close();
370
379
  }
371
380
  }
372
- getModeObservable() {
373
- return this.mode$;
374
- }
375
- getOpenedObservable() {
376
- return this.opened$;
377
- }
378
- watchToggleVisible() {
379
- return this.screenLarge$.pipe(map(large => !large || !this.stayOpenOnLargeScreen));
380
- }
381
381
  watchContentScrolled() {
382
382
  return this.sidenavContentScrolled$.asObservable();
383
383
  }
384
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.1", ngImport: i0, type: DdrMatSidenavService, deps: [{ token: i1$1.BreakpointObserver }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable });
385
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.1", ngImport: i0, type: DdrMatSidenavService, providedIn: 'root' });
384
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DdrMatSidenavService, deps: [{ token: i1$1.BreakpointObserver }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable });
385
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DdrMatSidenavService, providedIn: 'root' });
386
386
  }
387
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.1", ngImport: i0, type: DdrMatSidenavService, decorators: [{
387
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DdrMatSidenavService, decorators: [{
388
388
  type: Injectable,
389
389
  args: [{
390
390
  providedIn: 'root'
@@ -394,19 +394,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.1", ngImpor
394
394
  class DdrMatSidenavContainerComponent {
395
395
  sidenavService;
396
396
  sidenav;
397
- stayOpenOnLargeScreen = true;
398
- mode$;
399
- opened$;
397
+ stayOpenOnLargeScreen = input(true);
398
+ mode;
399
+ opened;
400
400
  constructor(sidenavService) {
401
401
  this.sidenavService = sidenavService;
402
- this.mode$ = this.sidenavService.getModeObservable();
403
- this.opened$ = this.sidenavService.getOpenedObservable();
404
- }
405
- /**
406
- * @override
407
- */
408
- ngOnChanges(changes) {
409
- this.sidenavService.setStayOpenOnLargeScreen(changes['stayOpenOnLargeScreen'].currentValue);
402
+ this.mode = this.sidenavService.mode;
403
+ this.opened = this.sidenavService.opened;
404
+ effect(() => {
405
+ this.sidenavService.stayOpenOnLargeScreen.set(this.stayOpenOnLargeScreen());
406
+ });
410
407
  }
411
408
  /**
412
409
  * @override
@@ -414,23 +411,20 @@ class DdrMatSidenavContainerComponent {
414
411
  ngOnInit() {
415
412
  this.sidenavService.setSidenav(this.sidenav);
416
413
  }
417
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.1", ngImport: i0, type: DdrMatSidenavContainerComponent, deps: [{ token: DdrMatSidenavService }], target: i0.ɵɵFactoryTarget.Component });
418
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.1", type: DdrMatSidenavContainerComponent, isStandalone: true, selector: "ddr-mat-sidenav-container", inputs: { stayOpenOnLargeScreen: "stayOpenOnLargeScreen" }, viewQueries: [{ propertyName: "sidenav", first: true, predicate: ["sidenav"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<mat-sidenav-container [ngClass]=\"(mode$|async)\">\n <mat-sidenav\n #sidenav\n [mode]=\"(mode$|async) ?? 'over'\"\n [opened]=\"(opened$|async)\"\n [fixedInViewport]=\"true\"\n >\n <ng-content select=\"[slot=mat-sidenav]\"></ng-content>\n </mat-sidenav>\n <mat-sidenav-content #sidenavContent>\n <ng-content select=\"[slot=mat-sidenav-content]\"></ng-content>\n </mat-sidenav-content>\n</mat-sidenav-container>\n", dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
414
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DdrMatSidenavContainerComponent, deps: [{ token: DdrMatSidenavService }], target: i0.ɵɵFactoryTarget.Component });
415
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.1.5", type: DdrMatSidenavContainerComponent, isStandalone: true, selector: "ddr-mat-sidenav-container", inputs: { stayOpenOnLargeScreen: { classPropertyName: "stayOpenOnLargeScreen", publicName: "stayOpenOnLargeScreen", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "sidenav", first: true, predicate: ["sidenav"], descendants: true, static: true }], ngImport: i0, template: "<mat-sidenav-container [ngClass]=\"mode()\">\n <mat-sidenav\n #sidenav\n [mode]=\"mode()\"\n [opened]=\"opened()\"\n [fixedInViewport]=\"true\"\n >\n <ng-content select=\"[slot=mat-sidenav]\"></ng-content>\n </mat-sidenav>\n <mat-sidenav-content #sidenavContent>\n <ng-content select=\"[slot=mat-sidenav-content]\"></ng-content>\n </mat-sidenav-content>\n</mat-sidenav-container>\n", styles: [""], dependencies: [{ kind: "component", type: MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
419
416
  }
420
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.1", ngImport: i0, type: DdrMatSidenavContainerComponent, decorators: [{
417
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DdrMatSidenavContainerComponent, decorators: [{
421
418
  type: Component,
422
419
  args: [{ selector: 'ddr-mat-sidenav-container', imports: [
423
- AsyncPipe,
424
420
  MatSidenav,
425
421
  MatSidenavContainer,
426
422
  MatSidenavContent,
427
423
  NgClass
428
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-sidenav-container [ngClass]=\"(mode$|async)\">\n <mat-sidenav\n #sidenav\n [mode]=\"(mode$|async) ?? 'over'\"\n [opened]=\"(opened$|async)\"\n [fixedInViewport]=\"true\"\n >\n <ng-content select=\"[slot=mat-sidenav]\"></ng-content>\n </mat-sidenav>\n <mat-sidenav-content #sidenavContent>\n <ng-content select=\"[slot=mat-sidenav-content]\"></ng-content>\n </mat-sidenav-content>\n</mat-sidenav-container>\n" }]
424
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-sidenav-container [ngClass]=\"mode()\">\n <mat-sidenav\n #sidenav\n [mode]=\"mode()\"\n [opened]=\"opened()\"\n [fixedInViewport]=\"true\"\n >\n <ng-content select=\"[slot=mat-sidenav]\"></ng-content>\n </mat-sidenav>\n <mat-sidenav-content #sidenavContent>\n <ng-content select=\"[slot=mat-sidenav-content]\"></ng-content>\n </mat-sidenav-content>\n</mat-sidenav-container>\n" }]
429
425
  }], ctorParameters: () => [{ type: DdrMatSidenavService }], propDecorators: { sidenav: [{
430
426
  type: ViewChild,
431
427
  args: ['sidenav', { static: true }]
432
- }], stayOpenOnLargeScreen: [{
433
- type: Input
434
428
  }] } });
435
429
 
436
430
  class DdrMatSidenavToggleComponent {
@@ -438,18 +432,18 @@ class DdrMatSidenavToggleComponent {
438
432
  visible;
439
433
  constructor(sidenavService) {
440
434
  this.sidenavService = sidenavService;
441
- this.visible = toSignal(this.sidenavService.watchToggleVisible(), { initialValue: false });
435
+ this.visible = this.sidenavService.toggleVisible;
442
436
  }
443
437
  toggleSidenav() {
444
438
  this.sidenavService.toggle();
445
439
  }
446
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.1", ngImport: i0, type: DdrMatSidenavToggleComponent, deps: [{ token: DdrMatSidenavService }], target: i0.ɵɵFactoryTarget.Component });
447
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.1", type: DdrMatSidenavToggleComponent, isStandalone: true, selector: "ddr-mat-sidenav-toggle", host: { properties: { "style.display": "visible() ? \"block\" : \"none\"" } }, ngImport: i0, template: `
440
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DdrMatSidenavToggleComponent, deps: [{ token: DdrMatSidenavService }], target: i0.ɵɵFactoryTarget.Component });
441
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.5", type: DdrMatSidenavToggleComponent, isStandalone: true, selector: "ddr-mat-sidenav-toggle", host: { properties: { "style.display": "visible() ? \"block\" : \"none\"" } }, ngImport: i0, template: `
448
442
  <button mat-icon-button (click)="toggleSidenav()">
449
443
  <mat-icon>menu</mat-icon>
450
444
  </button>`, isInline: true, dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
451
445
  }
452
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.1", ngImport: i0, type: DdrMatSidenavToggleComponent, decorators: [{
446
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DdrMatSidenavToggleComponent, decorators: [{
453
447
  type: Component,
454
448
  args: [{
455
449
  selector: 'ddr-mat-sidenav-toggle',
@@ -488,10 +482,10 @@ class DdrMatToolbarFixedTopDirective {
488
482
  });
489
483
  }
490
484
  }
491
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.1", ngImport: i0, type: DdrMatToolbarFixedTopDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
492
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.1", type: DdrMatToolbarFixedTopDirective, isStandalone: true, selector: "[ddrMatToolbarFixedTop]", inputs: { ddrMatToolbarFixedTop: "ddrMatToolbarFixedTop" }, ngImport: i0 });
485
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DdrMatToolbarFixedTopDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
486
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.5", type: DdrMatToolbarFixedTopDirective, isStandalone: true, selector: "[ddrMatToolbarFixedTop]", inputs: { ddrMatToolbarFixedTop: "ddrMatToolbarFixedTop" }, ngImport: i0 });
493
487
  }
494
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.1", ngImport: i0, type: DdrMatToolbarFixedTopDirective, decorators: [{
488
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DdrMatToolbarFixedTopDirective, decorators: [{
495
489
  type: Directive,
496
490
  args: [{
497
491
  selector: '[ddrMatToolbarFixedTop]'
@@ -1 +1 @@
1
- {"version":3,"file":"dontdrinkandroot-ngx-material-extensions.mjs","sources":["../../src/theme/theme-config.ts","../../src/theme/theme-scroll.service.ts","../../src/ddr-material-extensions.module.ts","../../src/button/fab-fixed.directive.ts","../../src/filter/filter.component.ts","../../src/filter/filter.component.html","../../src/gridlist/grid-tile-lazy-img.directive.ts","../../src/gridlist/grid-tile-lazy-image-container.directive.ts","../../src/sidenav/sidenav.service.ts","../../src/sidenav/sidenav-container.component.ts","../../src/sidenav/sidenav-container.component.html","../../src/sidenav/sidenav-toggle.component.ts","../../src/toolbar/toolbar-fixed-top.directive.ts","../../public-api.ts","../../dontdrinkandroot-ngx-material-extensions.ts"],"sourcesContent":["import {InjectionToken} from \"@angular/core\";\n\nexport const DDR_MAT_THEME = new InjectionToken<DdrMatThemeConfig>('DDR_MAT_THEME');\n\nexport interface DdrMatThemeConfig {\n themeColorLight: string,\n themeColorDark: string,\n themeColorLightScrolled: string,\n themeColorDarkScrolled: string,\n}\n","import {Inject, Injectable} from \"@angular/core\";\nimport {DOCUMENT} from \"@angular/common\";\nimport {distinctUntilChanged, fromEvent} from \"rxjs\";\nimport {map} from \"rxjs/operators\";\nimport {DDR_MAT_THEME, DdrMatThemeConfig} from \"./theme-config\";\n\n@Injectable()\nexport class DdrMatThemeScrollService {\n constructor(\n @Inject(DOCUMENT) private readonly document: Document,\n @Inject(DDR_MAT_THEME) private readonly themeConfig: DdrMatThemeConfig\n ) {\n }\n\n public init() {\n const lightMetaElement = this.findOrCreateThemeColorMetaElement('(prefers-color-scheme: light)', this.themeConfig.themeColorLight);\n const darkMetaElement = this.findOrCreateThemeColorMetaElement('(prefers-color-scheme: dark)', this.themeConfig.themeColorDark);\n\n fromEvent(this.document, 'scroll')\n .pipe(\n map(() => this.document.documentElement.scrollTop > 0),\n distinctUntilChanged()\n ).subscribe((scrolled) => {\n this.document.body.classList.toggle('ddr-mat-scrolled', scrolled);\n lightMetaElement.content = scrolled ? this.themeConfig.themeColorLightScrolled : this.themeConfig.themeColorLight;\n darkMetaElement.content = scrolled ? this.themeConfig.themeColorDarkScrolled : this.themeConfig.themeColorDark;\n });\n }\n\n private findOrCreateThemeColorMetaElement(media: string, content: string) {\n let metaElement = this.document.head.querySelector<HTMLMetaElement>(`meta[name=\"theme-color\"][media=\"${media}\"]`);\n if (null == metaElement) {\n metaElement = this.createThemeColorMetaElement(media, content);\n }\n return metaElement;\n }\n\n private createThemeColorMetaElement(media: string, content: string) {\n const metaElement = this.document.createElement('meta');\n metaElement.name = 'theme-color';\n metaElement.media = media;\n metaElement.content = content;\n this.document.head.appendChild(metaElement);\n\n return metaElement;\n }\n}\n","import {EnvironmentProviders, inject, makeEnvironmentProviders, provideEnvironmentInitializer} from '@angular/core';\nimport {MatIconRegistry} from '@angular/material/icon';\nimport {DDR_MAT_THEME} from \"./theme/theme-config\";\nimport {DdrMatThemeScrollService} from \"./theme/theme-scroll.service\";\n\nexport function provideDdrMaterialExtensions(): EnvironmentProviders {\n return makeEnvironmentProviders([\n DdrMatThemeScrollService,\n {\n provide: DDR_MAT_THEME,\n multi: false,\n useValue: {\n themeColorLight: '#fdfbff',\n themeColorDark: '#1a1b1f',\n themeColorLightScrolled: '#efedf1',\n themeColorDarkScrolled: '#1e1f23',\n }\n },\n provideEnvironmentInitializer(() => {\n inject(DdrMatThemeScrollService).init();\n inject(MatIconRegistry).setDefaultFontSetClass('material-symbols-rounded');\n })\n ]);\n}\n","import {Directive, ElementRef, OnInit} from \"@angular/core\";\n\n@Directive({\n selector: '[ddrMatFabFixed]',\n})\nexport class DdrMatFabFixedDirective implements OnInit {\n constructor(private el: ElementRef) {\n }\n\n /**\n * @override\n */\n public ngOnInit() {\n const container = document.createElement('div');\n container.classList.add('ddr-mat-fab-fixed-container');\n this.el.nativeElement.parentElement.insertBefore(container, this.el.nativeElement);\n container.appendChild(this.el.nativeElement);\n }\n}\n","import {AfterContentInit, ChangeDetectionStrategy, Component, ElementRef, Input, ViewChild} from '@angular/core';\nimport {FormControl, ReactiveFormsModule} from '@angular/forms';\nimport {interval} from 'rxjs';\nimport {debounce} from 'rxjs/operators';\nimport {MatIcon} from \"@angular/material/icon\";\nimport {MatCard} from \"@angular/material/card\";\nimport {MatFormField, MatSuffix} from \"@angular/material/form-field\";\nimport {MatInput} from \"@angular/material/input\";\nimport {MatIconButton} from \"@angular/material/button\";\nimport {outputFromObservable} from \"@angular/core/rxjs-interop\";\n\n@Component({\n selector: 'ddr-mat-filter',\n templateUrl: './filter.component.html',\n imports: [\n MatIconButton,\n MatCard,\n MatFormField,\n MatIcon,\n MatInput,\n MatSuffix,\n ReactiveFormsModule\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DdrMatFilterComponent implements AfterContentInit\n{\n public formControl = new FormControl<string | null>(null);\n\n public filterChanged = outputFromObservable(\n this.formControl.valueChanges\n .pipe(debounce(() => interval(this.bouncePeriod)))\n );\n\n @Input()\n public bouncePeriod = 500;\n\n @ViewChild('input', {static: true})\n public inputElement!: ElementRef;\n\n /**\n * @override\n */\n public ngAfterContentInit()\n {\n this.inputElement.nativeElement.focus();\n }\n\n\n public clear()\n {\n this.formControl.setValue(null);\n // this.filterChanged.emit(null);\n }\n}\n","<mat-card appearance=\"outlined\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput type=\"text\" [formControl]=\"formControl\" #input />\n <button mat-icon-button matSuffix (click)=\"clear()\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n</mat-card>\n","import {ChangeDetectorRef, Directive, ElementRef, HostBinding, Input, OnChanges} from '@angular/core';\nimport {NumberUtils, StringUtils} from '@dontdrinkandroot/ngx-extensions';\n\n@Directive({\n selector: '[ddrMatGridTileLazyImg]'\n})\nexport class DdrMatGridTileLazyImgDirective implements OnChanges\n{\n @Input('ddrMatGridTileLazyImg')\n public src!: string;\n\n @HostBinding('src')\n public hostSrc = 'assets/placeholder.gif';\n\n @HostBinding('style.object-fit')\n public hostStyleObjectFit = 'contain';\n\n @HostBinding('style.width.px')\n public hostStyleWidthPx!: number;\n\n @HostBinding('style.height.px')\n public hostStyleHeightPx!: number;\n\n @HostBinding('style.opacity')\n public hostStyleOpacity = 0;\n\n @Input()\n public offset = 1000;\n\n @Input()\n public objectFit = 'cover';\n\n private displayed = false;\n\n private maxLoadedDimension: { width: number, height: number } | null = null;\n\n constructor(private element: ElementRef, private cd: ChangeDetectorRef)\n {\n }\n\n public recheck()\n {\n this.displayed = false;\n this.check();\n }\n\n public check()\n {\n if (\n this.displayed\n || this.isHidden(this.element.nativeElement)\n || !this.isInsideViewport(this.element.nativeElement, this.offset)\n ) {\n return;\n }\n\n this.displayed = true;\n const dimension = this.getDimension();\n\n if (\n null != this.maxLoadedDimension\n && this.maxLoadedDimension.width >= dimension.width\n && this.maxLoadedDimension.height >= dimension.height\n ) {\n return;\n }\n\n this.maxLoadedDimension = dimension;\n this.hostStyleWidthPx = dimension.width;\n this.hostStyleHeightPx = dimension.height;\n let wantedSize: number;\n if (this.objectFit === 'cover') {\n wantedSize = NumberUtils.getNextPowerOfTwo(Math.max(dimension.width, dimension.height));\n this.hostStyleObjectFit = 'cover';\n } else {\n wantedSize = NumberUtils.getNextPowerOfTwo(Math.min(dimension.width, dimension.height));\n this.hostStyleObjectFit = 'contain';\n }\n this.hostSrc = StringUtils.updateUrlParameter(this.src, 'size', String(wantedSize));\n this.hostStyleOpacity = 1;\n this.cd.detectChanges();\n }\n\n /**\n * @override\n */\n public ngOnChanges(): void\n {\n this.displayed = false;\n this.maxLoadedDimension = null;\n this.hostStyleOpacity = 0;\n if (this.element.nativeElement.parentElement.offsetWidth > 0) {\n this.check();\n }\n }\n\n private isInsideViewport(nativeElement: HTMLElement, offset: number): boolean\n {\n // console.log('isInsideViewport');\n const ownerDocument = nativeElement.ownerDocument;\n const documentTop = window.pageYOffset || ownerDocument.body.scrollTop;\n const documentLeft = window.pageXOffset || ownerDocument.body.scrollLeft;\n\n const documentWidth = window.innerWidth || (ownerDocument.documentElement.clientWidth || document.body.clientWidth);\n const documentHeight = window.innerHeight || (ownerDocument.documentElement.clientHeight || document.body.clientHeight);\n const topOffset = nativeElement.getBoundingClientRect().top + documentTop - ownerDocument.documentElement.clientTop;\n const leftOffset = nativeElement.getBoundingClientRect().left + documentLeft - ownerDocument.documentElement.clientLeft;\n\n // console.log(documentWidth, documentHeight, topOffset, leftOffset);\n\n const isBelowViewport = documentHeight + documentTop <= topOffset - offset;\n const isAtRightOfViewport = documentWidth + window.pageXOffset <= leftOffset - offset;\n const isAboveViewport = documentTop >= topOffset + offset + nativeElement.offsetHeight;\n const isAtLeftOfViewport = documentLeft >= leftOffset + offset + nativeElement.offsetWidth;\n\n return !isBelowViewport && !isAboveViewport && !isAtRightOfViewport && !isAtLeftOfViewport;\n }\n\n private getDimension(): { width: number, height: number }\n {\n return {\n width: this.element.nativeElement.parentElement.offsetWidth,\n height: this.element.nativeElement.parentElement.offsetHeight,\n };\n }\n\n private isHidden(nativeElement: HTMLElement)\n {\n // console.log('isHidden');\n return window.getComputedStyle(nativeElement).display === 'none';\n }\n}\n","import {AfterContentInit, ContentChildren, Directive, HostListener, OnDestroy, QueryList} from '@angular/core';\nimport {DdrMatGridTileLazyImgDirective} from './grid-tile-lazy-img.directive';\nimport {Subscription} from 'rxjs';\nimport {Debounce, Limit} from '@dontdrinkandroot/ngx-extensions';\n\n@Directive({\n selector: '[ddrMatGridTileLazyImgContainer]'\n})\nexport class DdrMatGridTileLazyImageContainerDirective implements AfterContentInit, OnDestroy\n{\n @ContentChildren(DdrMatGridTileLazyImgDirective, {descendants: true})\n lazyImages!: QueryList<DdrMatGridTileLazyImgDirective>;\n\n private changeSubscription!: Subscription;\n\n @HostListener('window:resize', ['$event'])\n @Debounce()\n public windowResized()\n {\n if (null != this.lazyImages) {\n this.lazyImages.forEach((lazyImage: DdrMatGridTileLazyImgDirective) => lazyImage.recheck());\n }\n }\n\n @HostListener('window:scroll', ['$event'])\n @Limit()\n public windowScroll()\n {\n if (null != this.lazyImages) {\n this.lazyImages.forEach((lazyImage: DdrMatGridTileLazyImgDirective) => lazyImage.check());\n }\n }\n\n /**\n * @override\n */\n public ngAfterContentInit(): void\n {\n this.lazyImages.forEach((lazyImage: DdrMatGridTileLazyImgDirective) => lazyImage.check());\n this.changeSubscription = this.lazyImages.changes.subscribe(() => {\n /* Wait one tick until layout is ready */\n setTimeout(\n () => this.lazyImages.forEach((lazyImage: DdrMatGridTileLazyImgDirective) => lazyImage.recheck())\n , 1\n );\n });\n }\n\n /**\n * @override\n */\n public ngOnDestroy(): void\n {\n this.changeSubscription.unsubscribe();\n }\n}\n","import {Injectable} from '@angular/core';\nimport {MatDrawerMode, MatDrawerToggleResult, MatSidenav} from '@angular/material/sidenav';\nimport {BreakpointObserver, Breakpoints} from '@angular/cdk/layout';\nimport {BehaviorSubject, Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {NavigationStart, Router} from '@angular/router';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DdrMatSidenavService {\n private sidenav!: MatSidenav;\n\n private stayOpenOnLargeScreen = true;\n\n private largeBreakpoints = [\n Breakpoints.Medium,\n Breakpoints.Large,\n Breakpoints.XLarge\n ];\n\n private screenLarge$: Observable<boolean>;\n\n private mode$: Observable<MatDrawerMode>;\n\n private opened$: Observable<boolean>;\n\n private sidenavContentScrolled$ = new BehaviorSubject<boolean>(false);\n\n constructor(\n private breakpointObserver: BreakpointObserver,\n private router: Router,\n ) {\n this.screenLarge$ = this.breakpointObserver.observe(this.largeBreakpoints).pipe(\n map(result => result.matches)\n );\n this.mode$ = this.screenLarge$.pipe(\n map(large => large && this.stayOpenOnLargeScreen ? 'side' : 'over')\n );\n this.opened$ = this.screenLarge$.pipe(\n map(large => large && this.stayOpenOnLargeScreen)\n );\n this.router.events.subscribe(event => {\n if (event instanceof NavigationStart) {\n this.closeSidebar();\n }\n });\n }\n\n public setSidenav(sidenav: MatSidenav): void {\n this.sidenav = sidenav;\n }\n\n\n public getStayOpenOnLargeScreen(): boolean {\n return this.stayOpenOnLargeScreen;\n }\n\n public setStayOpenOnLargeScreen(value: boolean): void {\n this.stayOpenOnLargeScreen = value;\n }\n\n public toggle(): Promise<MatDrawerToggleResult> {\n if (null == this.sidenav) {\n return Promise.reject('No MatSidenav found. Use setSidenav() of SidenavService');\n }\n\n if (!(this.stayOpenOnLargeScreen && this.breakpointObserver.isMatched(this.largeBreakpoints))) {\n return this.sidenav.toggle();\n }\n\n return Promise.resolve(this.sidenav.opened ? 'open' : 'close');\n }\n\n public closeSidebar(): void {\n if (!(this.stayOpenOnLargeScreen && this.breakpointObserver.isMatched(this.largeBreakpoints))) {\n this.sidenav.close();\n }\n }\n\n public getModeObservable(): Observable<MatDrawerMode> {\n return this.mode$;\n }\n\n public getOpenedObservable(): Observable<boolean> {\n return this.opened$;\n }\n\n public watchToggleVisible() {\n return this.screenLarge$.pipe(\n map(large => !large || !this.stayOpenOnLargeScreen)\n );\n }\n\n public watchContentScrolled() {\n return this.sidenavContentScrolled$.asObservable();\n }\n}\n","import {ChangeDetectionStrategy, Component, Input, OnChanges, OnInit, SimpleChanges, ViewChild} from '@angular/core';\nimport {MatDrawerMode, MatSidenav, MatSidenavContainer, MatSidenavContent} from '@angular/material/sidenav';\nimport {DdrMatSidenavService} from './sidenav.service';\nimport {Observable} from 'rxjs';\nimport {AsyncPipe, NgClass} from \"@angular/common\";\n\n@Component({\n selector: 'ddr-mat-sidenav-container',\n templateUrl: './sidenav-container.component.html',\n imports: [\n AsyncPipe,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\n NgClass\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DdrMatSidenavContainerComponent implements OnInit, OnChanges\n{\n @ViewChild('sidenav', {static: true})\n public sidenav!: MatSidenav;\n\n @Input()\n public stayOpenOnLargeScreen = true;\n\n public mode$: Observable<MatDrawerMode>;\n\n public opened$: Observable<boolean>;\n\n constructor(\n private sidenavService: DdrMatSidenavService,\n )\n {\n this.mode$ = this.sidenavService.getModeObservable();\n this.opened$ = this.sidenavService.getOpenedObservable();\n }\n\n /**\n * @override\n */\n public ngOnChanges(changes: SimpleChanges): void\n {\n this.sidenavService.setStayOpenOnLargeScreen(changes['stayOpenOnLargeScreen'].currentValue);\n }\n\n /**\n * @override\n */\n public ngOnInit(): void\n {\n this.sidenavService.setSidenav(this.sidenav);\n }\n}\n","<mat-sidenav-container [ngClass]=\"(mode$|async)\">\n <mat-sidenav\n #sidenav\n [mode]=\"(mode$|async) ?? 'over'\"\n [opened]=\"(opened$|async)\"\n [fixedInViewport]=\"true\"\n >\n <ng-content select=\"[slot=mat-sidenav]\"></ng-content>\n </mat-sidenav>\n <mat-sidenav-content #sidenavContent>\n <ng-content select=\"[slot=mat-sidenav-content]\"></ng-content>\n </mat-sidenav-content>\n</mat-sidenav-container>\n","import {ChangeDetectionStrategy, Component} from '@angular/core';\nimport {DdrMatSidenavService} from './sidenav.service';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport {MatIcon} from \"@angular/material/icon\";\nimport {MatIconButton} from \"@angular/material/button\";\n\n@Component({\n selector: 'ddr-mat-sidenav-toggle',\n template: `\n <button mat-icon-button (click)=\"toggleSidenav()\">\n <mat-icon>menu</mat-icon>\n </button>`,\n imports: [\n MatIcon,\n MatIconButton\n ],\n host: {\n '[style.display]': 'visible() ? \"block\" : \"none\"'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DdrMatSidenavToggleComponent {\n public visible;\n\n constructor(private sidenavService: DdrMatSidenavService) {\n this.visible = toSignal(this.sidenavService.watchToggleVisible(), {initialValue: false});\n }\n\n public toggleSidenav() {\n this.sidenavService.toggle();\n }\n}\n","import {Directive, ElementRef, Input, OnInit} from '@angular/core';\n\n@Directive({\n selector: '[ddrMatToolbarFixedTop]'\n})\nexport class DdrMatToolbarFixedTopDirective implements OnInit {\n\n @Input()\n public ddrMatToolbarFixedTop: string[] | '' = '';\n\n constructor(private el: ElementRef) {\n }\n\n /**\n * @override\n */\n public ngOnInit() {\n const container = document.createElement('div');\n container.classList.add('ddr-mat-toolbar-fixed-top-container');\n this.el.nativeElement.parentElement.insertBefore(container, this.el.nativeElement);\n container.appendChild(this.el.nativeElement);\n\n if ('' !== this.ddrMatToolbarFixedTop) {\n this.ddrMatToolbarFixedTop.forEach((className: string) => {\n container.classList.add(className);\n });\n }\n }\n}\n","/*\n * Public API Surface of ngx-material-extensions\n */\n\nexport * from './src/ddr-material-extensions.module';\n\nexport * from './src/button/fab-fixed.directive'\n\nexport * from './src/filter/filter.component';\n\nexport * from './src/gridlist/grid-tile-lazy-image-container.directive';\nexport * from './src/gridlist/grid-tile-lazy-img.directive';\n\nexport * from './src/sidenav/sidenav-container.component';\nexport * from './src/sidenav/sidenav-toggle.component';\nexport * from './src/sidenav/sidenav.service';\n\nexport * from './src/theme/theme-config'\n\nexport * from './src/toolbar/toolbar-fixed-top.directive'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.DdrMatSidenavService"],"mappings":";;;;;;;;;;;;;;;;;;;;;MAEa,aAAa,GAAG,IAAI,cAAc,CAAoB,eAAe;;MCKrE,wBAAwB,CAAA;AAEM,IAAA,QAAA;AACK,IAAA,WAAA;IAF5C,WACuC,CAAA,QAAkB,EACb,WAA8B,EAAA;QADnC,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACH,IAAW,CAAA,WAAA,GAAX,WAAW;;IAIhD,IAAI,GAAA;AACP,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,iCAAiC,CAAC,+BAA+B,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;AAClI,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,iCAAiC,CAAC,8BAA8B,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AAE/H,QAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ;aAC5B,IAAI,CACD,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,GAAG,CAAC,CAAC,EACtD,oBAAoB,EAAE,CACzB,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAI;AACzB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,EAAE,QAAQ,CAAC;YACjE,gBAAgB,CAAC,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,uBAAuB,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe;YACjH,eAAe,CAAC,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,sBAAsB,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc;AAClH,SAAC,CAAC;;IAGE,iCAAiC,CAAC,KAAa,EAAE,OAAe,EAAA;AACpE,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAkB,CAAA,gCAAA,EAAmC,KAAK,CAAA,EAAA,CAAI,CAAC;AACjH,QAAA,IAAI,IAAI,IAAI,WAAW,EAAE;YACrB,WAAW,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,OAAO,CAAC;;AAElE,QAAA,OAAO,WAAW;;IAGd,2BAA2B,CAAC,KAAa,EAAE,OAAe,EAAA;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AACvD,QAAA,WAAW,CAAC,IAAI,GAAG,aAAa;AAChC,QAAA,WAAW,CAAC,KAAK,GAAG,KAAK;AACzB,QAAA,WAAW,CAAC,OAAO,GAAG,OAAO;QAC7B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;AAE3C,QAAA,OAAO,WAAW;;uGArCb,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAErB,QAAQ,EAAA,EAAA,EAAA,KAAA,EACR,aAAa,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAHhB,wBAAwB,EAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;0BAGQ,MAAM;2BAAC,QAAQ;;0BACf,MAAM;2BAAC,aAAa;;;SCLb,4BAA4B,GAAA;AACxC,IAAA,OAAO,wBAAwB,CAAC;QAC5B,wBAAwB;AACxB,QAAA;AACI,YAAA,OAAO,EAAE,aAAa;AACtB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,QAAQ,EAAE;AACN,gBAAA,eAAe,EAAE,SAAS;AAC1B,gBAAA,cAAc,EAAE,SAAS;AACzB,gBAAA,uBAAuB,EAAE,SAAS;AAClC,gBAAA,sBAAsB,EAAE,SAAS;AACpC;AACJ,SAAA;QACD,6BAA6B,CAAC,MAAK;AAC/B,YAAA,MAAM,CAAC,wBAAwB,CAAC,CAAC,IAAI,EAAE;YACvC,MAAM,CAAC,eAAe,CAAC,CAAC,sBAAsB,CAAC,0BAA0B,CAAC;AAC9E,SAAC;AACJ,KAAA,CAAC;AACN;;MClBa,uBAAuB,CAAA;AACZ,IAAA,EAAA;AAApB,IAAA,WAAA,CAAoB,EAAc,EAAA;QAAd,IAAE,CAAA,EAAA,GAAF,EAAE;;AAGtB;;AAEG;IACI,QAAQ,GAAA;QACX,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC/C,QAAA,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,6BAA6B,CAAC;AACtD,QAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;QAClF,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;;uGAXvC,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,kBAAkB;AAC/B,iBAAA;;;MCqBY,qBAAqB,CAAA;AAEvB,IAAA,WAAW,GAAG,IAAI,WAAW,CAAgB,IAAI,CAAC;AAElD,IAAA,aAAa,GAAG,oBAAoB,CACvC,IAAI,CAAC,WAAW,CAAC;AACZ,SAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CACzD;IAGM,YAAY,GAAG,GAAG;AAGlB,IAAA,YAAY;AAEnB;;AAEG;IACI,kBAAkB,GAAA;AAErB,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE;;IAIpC,KAAK,GAAA;AAER,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC;;;uGA1B1B,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,ECzBlC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,6VAQA,EDOQ,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,6FACb,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,OAAO,EACP,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAQ,EACR,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,SAAS,oHACT,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAId,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAdjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAEjB,OAAA,EAAA;wBACL,aAAa;wBACb,OAAO;wBACP,YAAY;wBACZ,OAAO;wBACP,QAAQ;wBACR,SAAS;wBACT;qBACH,EACgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,6VAAA,EAAA;8BAYxC,YAAY,EAAA,CAAA;sBADlB;gBAIM,YAAY,EAAA,CAAA;sBADlB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,OAAO,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC;;;ME/BzB,8BAA8B,CAAA;AA8BnB,IAAA,OAAA;AAA6B,IAAA,EAAA;AA3B1C,IAAA,GAAG;IAGH,OAAO,GAAG,wBAAwB;IAGlC,kBAAkB,GAAG,SAAS;AAG9B,IAAA,gBAAgB;AAGhB,IAAA,iBAAiB;IAGjB,gBAAgB,GAAG,CAAC;IAGpB,MAAM,GAAG,IAAI;IAGb,SAAS,GAAG,OAAO;IAElB,SAAS,GAAG,KAAK;IAEjB,kBAAkB,GAA6C,IAAI;IAE3E,WAAoB,CAAA,OAAmB,EAAU,EAAqB,EAAA;QAAlD,IAAO,CAAA,OAAA,GAAP,OAAO;QAAsB,IAAE,CAAA,EAAA,GAAF,EAAE;;IAI5C,OAAO,GAAA;AAEV,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACtB,IAAI,CAAC,KAAK,EAAE;;IAGT,KAAK,GAAA;QAER,IACI,IAAI,CAAC;eACF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa;AACxC,eAAA,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,EACpE;YACE;;AAGJ,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE;AAErC,QAAA,IACI,IAAI,IAAI,IAAI,CAAC;AACV,eAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,IAAI,SAAS,CAAC;eAC3C,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,EACvD;YACE;;AAGJ,QAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS;AACnC,QAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC,KAAK;AACvC,QAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,MAAM;AACzC,QAAA,IAAI,UAAkB;AACtB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE;AAC5B,YAAA,UAAU,GAAG,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;AACvF,YAAA,IAAI,CAAC,kBAAkB,GAAG,OAAO;;aAC9B;AACH,YAAA,UAAU,GAAG,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;AACvF,YAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS;;AAEvC,QAAA,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;AACnF,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC;AACzB,QAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;;AAG3B;;AAEG;IACI,WAAW,GAAA;AAEd,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC;AACzB,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,WAAW,GAAG,CAAC,EAAE;YAC1D,IAAI,CAAC,KAAK,EAAE;;;IAIZ,gBAAgB,CAAC,aAA0B,EAAE,MAAc,EAAA;;AAG/D,QAAA,MAAM,aAAa,GAAG,aAAa,CAAC,aAAa;QACjD,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,aAAa,CAAC,IAAI,CAAC,SAAS;QACtE,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,IAAI,aAAa,CAAC,IAAI,CAAC,UAAU;AAExE,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,KAAK,aAAa,CAAC,eAAe,CAAC,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;AACnH,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,KAAK,aAAa,CAAC,eAAe,CAAC,YAAY,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;AACvH,QAAA,MAAM,SAAS,GAAG,aAAa,CAAC,qBAAqB,EAAE,CAAC,GAAG,GAAG,WAAW,GAAG,aAAa,CAAC,eAAe,CAAC,SAAS;AACnH,QAAA,MAAM,UAAU,GAAG,aAAa,CAAC,qBAAqB,EAAE,CAAC,IAAI,GAAG,YAAY,GAAG,aAAa,CAAC,eAAe,CAAC,UAAU;;QAIvH,MAAM,eAAe,GAAG,cAAc,GAAG,WAAW,IAAI,SAAS,GAAG,MAAM;QAC1E,MAAM,mBAAmB,GAAG,aAAa,GAAG,MAAM,CAAC,WAAW,IAAI,UAAU,GAAG,MAAM;QACrF,MAAM,eAAe,GAAG,WAAW,IAAI,SAAS,GAAG,MAAM,GAAG,aAAa,CAAC,YAAY;QACtF,MAAM,kBAAkB,GAAG,YAAY,IAAI,UAAU,GAAG,MAAM,GAAG,aAAa,CAAC,WAAW;QAE1F,OAAO,CAAC,eAAe,IAAI,CAAC,eAAe,IAAI,CAAC,mBAAmB,IAAI,CAAC,kBAAkB;;IAGtF,YAAY,GAAA;QAEhB,OAAO;YACH,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,WAAW;YAC3D,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY;SAChE;;AAGG,IAAA,QAAQ,CAAC,aAA0B,EAAA;;QAGvC,OAAO,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,OAAO,KAAK,MAAM;;uGA3H3D,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA9B,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,CAAA,uBAAA,EAAA,KAAA,CAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,KAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,yBAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA9B,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAH1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE;AACb,iBAAA;+GAIU,GAAG,EAAA,CAAA;sBADT,KAAK;uBAAC,uBAAuB;gBAIvB,OAAO,EAAA,CAAA;sBADb,WAAW;uBAAC,KAAK;gBAIX,kBAAkB,EAAA,CAAA;sBADxB,WAAW;uBAAC,kBAAkB;gBAIxB,gBAAgB,EAAA,CAAA;sBADtB,WAAW;uBAAC,gBAAgB;gBAItB,iBAAiB,EAAA,CAAA;sBADvB,WAAW;uBAAC,iBAAiB;gBAIvB,gBAAgB,EAAA,CAAA;sBADtB,WAAW;uBAAC,eAAe;gBAIrB,MAAM,EAAA,CAAA;sBADZ;gBAIM,SAAS,EAAA,CAAA;sBADf;;;MCrBQ,yCAAyC,CAAA;AAGlD,IAAA,UAAU;AAEF,IAAA,kBAAkB;IAInB,aAAa,GAAA;AAEhB,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAyC,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC;;;IAM5F,YAAY,GAAA;AAEf,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAyC,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC;;;AAIjG;;AAEG;IACI,kBAAkB,GAAA;AAErB,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAyC,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC;AACzF,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,MAAK;;YAE7D,UAAU,CACN,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAyC,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC,EAC/F,CAAC,CACN;AACL,SAAC,CAAC;;AAGN;;AAEG;IACI,WAAW,GAAA;AAEd,QAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;;uGA7ChC,yCAAyC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yCAAyC,mOAEjC,8BAA8B,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;AAOxC,UAAA,CAAA;AADN,IAAA,QAAQ;AAMR,CAAA,EAAA,yCAAA,CAAA,SAAA,EAAA,eAAA,EAAA,IAAA,CAAA;AAIM,UAAA,CAAA;AADN,IAAA,KAAK;AAML,CAAA,EAAA,yCAAA,CAAA,SAAA,EAAA,cAAA,EAAA,IAAA,CAAA;2FAvBQ,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBAHrD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE;AACb,iBAAA;8BAIG,UAAU,EAAA,CAAA;sBADT,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,8BAA8B,EAAE,EAAC,WAAW,EAAE,IAAI,EAAC;gBAO7D,aAAa,EAAA,CAAA;sBAFnB,YAAY;uBAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;gBAWlC,YAAY,EAAA,CAAA;sBAFlB,YAAY;uBAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;;;MCdhC,oBAAoB,CAAA;AAoBjB,IAAA,kBAAA;AACA,IAAA,MAAA;AApBJ,IAAA,OAAO;IAEP,qBAAqB,GAAG,IAAI;AAE5B,IAAA,gBAAgB,GAAG;AACvB,QAAA,WAAW,CAAC,MAAM;AAClB,QAAA,WAAW,CAAC,KAAK;AACjB,QAAA,WAAW,CAAC;KACf;AAEO,IAAA,YAAY;AAEZ,IAAA,KAAK;AAEL,IAAA,OAAO;AAEP,IAAA,uBAAuB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;IAErE,WACY,CAAA,kBAAsC,EACtC,MAAc,EAAA;QADd,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;QAClB,IAAM,CAAA,MAAA,GAAN,MAAM;QAEd,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAC3E,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,CAChC;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAC/B,GAAG,CAAC,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,qBAAqB,GAAG,MAAM,GAAG,MAAM,CAAC,CACtE;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CACjC,GAAG,CAAC,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,qBAAqB,CAAC,CACpD;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAG;AACjC,YAAA,IAAI,KAAK,YAAY,eAAe,EAAE;gBAClC,IAAI,CAAC,YAAY,EAAE;;AAE3B,SAAC,CAAC;;AAGC,IAAA,UAAU,CAAC,OAAmB,EAAA;AACjC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;;IAInB,wBAAwB,GAAA;QAC3B,OAAO,IAAI,CAAC,qBAAqB;;AAG9B,IAAA,wBAAwB,CAAC,KAAc,EAAA;AAC1C,QAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;;IAG/B,MAAM,GAAA;AACT,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;AACtB,YAAA,OAAO,OAAO,CAAC,MAAM,CAAC,yDAAyD,CAAC;;AAGpF,QAAA,IAAI,EAAE,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE;AAC3F,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;;AAGhC,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;;IAG3D,YAAY,GAAA;AACf,QAAA,IAAI,EAAE,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE;AAC3F,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;;;IAIrB,iBAAiB,GAAA;QACpB,OAAO,IAAI,CAAC,KAAK;;IAGd,mBAAmB,GAAA;QACtB,OAAO,IAAI,CAAC,OAAO;;IAGhB,kBAAkB,GAAA;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CACzB,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CACtD;;IAGE,oBAAoB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE;;uGArF7C,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAApB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFjB,MAAM,EAAA,CAAA;;2FAET,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCSY,+BAA+B,CAAA;AAa5B,IAAA,cAAA;AAVL,IAAA,OAAO;IAGP,qBAAqB,GAAG,IAAI;AAE5B,IAAA,KAAK;AAEL,IAAA,OAAO;AAEd,IAAA,WAAA,CACY,cAAoC,EAAA;QAApC,IAAc,CAAA,cAAA,GAAd,cAAc;QAGtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE;QACpD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE;;AAG5D;;AAEG;AACI,IAAA,WAAW,CAAC,OAAsB,EAAA;AAErC,QAAA,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,YAAY,CAAC;;AAG/F;;AAEG;IACI,QAAQ,GAAA;QAEX,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;;uGAjCvC,+BAA+B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClB5C,udAaA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EDHQ,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,UAAU,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACV,mBAAmB,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIF,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAZ3C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,EAE5B,OAAA,EAAA;wBACL,SAAS;wBACT,UAAU;wBACV,mBAAmB;wBACnB,iBAAiB;wBACjB;qBACH,EACgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,udAAA,EAAA;sFAKxC,OAAO,EAAA,CAAA;sBADb,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,SAAS,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC;gBAI7B,qBAAqB,EAAA,CAAA;sBAD3B;;;MEFQ,4BAA4B,CAAA;AAGjB,IAAA,cAAA;AAFb,IAAA,OAAO;AAEd,IAAA,WAAA,CAAoB,cAAoC,EAAA;QAApC,IAAc,CAAA,cAAA,GAAd,cAAc;AAC9B,QAAA,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,EAAE,EAAC,YAAY,EAAE,KAAK,EAAC,CAAC;;IAGrF,aAAa,GAAA;AAChB,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;;uGARvB,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EAb3B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,kCAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;kBAGI,EAEV,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,2IACP,aAAa,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAOR,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAfxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,QAAQ,EAAE;;;AAGI,iBAAA,CAAA;AACd,oBAAA,OAAO,EAAE;wBACL,OAAO;wBACP;AACH,qBAAA;AACD,oBAAA,IAAI,EAAE;AACF,wBAAA,iBAAiB,EAAE;AACtB,qBAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC;AAC5C,iBAAA;;;MCfY,8BAA8B,CAAA;AAKnB,IAAA,EAAA;IAFb,qBAAqB,GAAkB,EAAE;AAEhD,IAAA,WAAA,CAAoB,EAAc,EAAA;QAAd,IAAE,CAAA,EAAA,GAAF,EAAE;;AAGtB;;AAEG;IACI,QAAQ,GAAA;QACX,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC/C,QAAA,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,qCAAqC,CAAC;AAC9D,QAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;QAClF,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;AAE5C,QAAA,IAAI,EAAE,KAAK,IAAI,CAAC,qBAAqB,EAAE;YACnC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,SAAiB,KAAI;AACrD,gBAAA,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;AACtC,aAAC,CAAC;;;uGApBD,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA9B,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA9B,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAH1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE;AACb,iBAAA;+EAIU,qBAAqB,EAAA,CAAA;sBAD3B;;;ACPL;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"dontdrinkandroot-ngx-material-extensions.mjs","sources":["../../src/theme/theme-config.ts","../../src/theme/theme-scroll.service.ts","../../src/ddr-material-extensions.module.ts","../../src/button/fab-fixed.directive.ts","../../src/filter/filter.component.ts","../../src/filter/filter.component.html","../../src/gridlist/grid-tile-lazy-img.directive.ts","../../src/gridlist/grid-tile-lazy-image-container.directive.ts","../../src/sidenav/sidenav.service.ts","../../src/sidenav/sidenav-container.component.ts","../../src/sidenav/sidenav-container.component.html","../../src/sidenav/sidenav-toggle.component.ts","../../src/toolbar/toolbar-fixed-top.directive.ts","../../public-api.ts","../../dontdrinkandroot-ngx-material-extensions.ts"],"sourcesContent":["import {InjectionToken} from \"@angular/core\";\n\nexport const DDR_MAT_THEME = new InjectionToken<DdrMatThemeConfig>('DDR_MAT_THEME');\n\nexport interface DdrMatThemeConfig {\n themeColorLight: string,\n themeColorDark: string,\n themeColorLightScrolled: string,\n themeColorDarkScrolled: string,\n}\n","import {Inject, Injectable} from \"@angular/core\";\nimport {DOCUMENT} from \"@angular/common\";\nimport {distinctUntilChanged, fromEvent} from \"rxjs\";\nimport {map} from \"rxjs/operators\";\nimport {DDR_MAT_THEME, DdrMatThemeConfig} from \"./theme-config\";\n\n@Injectable()\nexport class DdrMatThemeScrollService {\n constructor(\n @Inject(DOCUMENT) private readonly document: Document,\n @Inject(DDR_MAT_THEME) private readonly themeConfig: DdrMatThemeConfig\n ) {\n }\n\n public init() {\n const lightMetaElement = this.findOrCreateThemeColorMetaElement('(prefers-color-scheme: light)', this.themeConfig.themeColorLight);\n const darkMetaElement = this.findOrCreateThemeColorMetaElement('(prefers-color-scheme: dark)', this.themeConfig.themeColorDark);\n\n fromEvent(this.document, 'scroll')\n .pipe(\n map(() => this.document.documentElement.scrollTop > 0),\n distinctUntilChanged()\n ).subscribe((scrolled) => {\n this.document.body.classList.toggle('ddr-mat-scrolled', scrolled);\n lightMetaElement.content = scrolled ? this.themeConfig.themeColorLightScrolled : this.themeConfig.themeColorLight;\n darkMetaElement.content = scrolled ? this.themeConfig.themeColorDarkScrolled : this.themeConfig.themeColorDark;\n });\n }\n\n private findOrCreateThemeColorMetaElement(media: string, content: string) {\n let metaElement = this.document.head.querySelector<HTMLMetaElement>(`meta[name=\"theme-color\"][media=\"${media}\"]`);\n if (null == metaElement) {\n metaElement = this.createThemeColorMetaElement(media, content);\n }\n return metaElement;\n }\n\n private createThemeColorMetaElement(media: string, content: string) {\n const metaElement = this.document.createElement('meta');\n metaElement.name = 'theme-color';\n metaElement.media = media;\n metaElement.content = content;\n this.document.head.appendChild(metaElement);\n\n return metaElement;\n }\n}\n","import {EnvironmentProviders, inject, makeEnvironmentProviders, provideEnvironmentInitializer} from '@angular/core';\nimport {MatIconRegistry} from '@angular/material/icon';\nimport {DDR_MAT_THEME} from \"./theme/theme-config\";\nimport {DdrMatThemeScrollService} from \"./theme/theme-scroll.service\";\n\nexport function provideDdrMaterialExtensions(): EnvironmentProviders {\n return makeEnvironmentProviders([\n DdrMatThemeScrollService,\n {\n provide: DDR_MAT_THEME,\n multi: false,\n useValue: {\n themeColorLight: '#fdfbff',\n themeColorDark: '#1a1b1f',\n themeColorLightScrolled: '#efedf1',\n themeColorDarkScrolled: '#1e1f23',\n }\n },\n provideEnvironmentInitializer(() => {\n inject(DdrMatThemeScrollService).init();\n inject(MatIconRegistry).setDefaultFontSetClass('material-symbols-rounded');\n })\n ]);\n}\n","import {Directive, ElementRef, OnInit} from \"@angular/core\";\n\n@Directive({\n selector: '[ddrMatFabFixed]',\n})\nexport class DdrMatFabFixedDirective implements OnInit {\n constructor(private el: ElementRef) {\n }\n\n /**\n * @override\n */\n public ngOnInit() {\n const container = document.createElement('div');\n container.classList.add('ddr-mat-fab-fixed-container');\n this.el.nativeElement.parentElement.insertBefore(container, this.el.nativeElement);\n container.appendChild(this.el.nativeElement);\n }\n}\n","import {AfterContentInit, ChangeDetectionStrategy, Component, ElementRef, input, Input, ViewChild} from '@angular/core';\nimport {FormControl, ReactiveFormsModule} from '@angular/forms';\nimport {interval} from 'rxjs';\nimport {debounce} from 'rxjs/operators';\nimport {MatIcon} from \"@angular/material/icon\";\nimport {MatCard} from \"@angular/material/card\";\nimport {MatFormField, MatPrefix, MatSuffix} from \"@angular/material/form-field\";\nimport {MatInput} from \"@angular/material/input\";\nimport {MatIconButton} from \"@angular/material/button\";\nimport {outputFromObservable} from \"@angular/core/rxjs-interop\";\n\n@Component({\n selector: 'ddr-mat-filter',\n templateUrl: './filter.component.html',\n styleUrl: './filter.component.scss',\n imports: [\n MatIconButton,\n MatCard,\n MatFormField,\n MatIcon,\n MatInput,\n MatSuffix,\n ReactiveFormsModule,\n MatPrefix\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DdrMatFilterComponent implements AfterContentInit\n{\n protected formControl = new FormControl<string | null>(null);\n\n public filterChanged = outputFromObservable(\n this.formControl.valueChanges\n .pipe(debounce(() => interval(this.bouncePeriod)))\n );\n\n @Input()\n public bouncePeriod = 500;\n\n public ddrMatPrefixIcon = input<string | null>(null);\n\n @ViewChild('input', {static: true})\n protected inputElement!: ElementRef;\n\n /**\n * @override\n */\n public ngAfterContentInit()\n {\n this.inputElement.nativeElement.focus();\n }\n\n public clear()\n {\n this.formControl.setValue(null);\n }\n}\n","<mat-card appearance=\"outlined\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput type=\"text\" [formControl]=\"formControl\" #input/>\n @if (ddrMatPrefixIcon()) {\n <mat-icon matPrefix>{{ ddrMatPrefixIcon() }}</mat-icon>\n }\n <button mat-icon-button matSuffix (click)=\"clear()\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n</mat-card>\n","import {ChangeDetectorRef, Directive, ElementRef, HostBinding, Input, OnChanges} from '@angular/core';\nimport {NumberUtils, StringUtils} from '@dontdrinkandroot/ngx-extensions';\n\n@Directive({\n selector: '[ddrMatGridTileLazyImg]'\n})\nexport class DdrMatGridTileLazyImgDirective implements OnChanges\n{\n @Input('ddrMatGridTileLazyImg')\n public src!: string;\n\n @HostBinding('src')\n public hostSrc = 'assets/placeholder.gif';\n\n @HostBinding('style.object-fit')\n public hostStyleObjectFit = 'contain';\n\n @HostBinding('style.width.px')\n public hostStyleWidthPx!: number;\n\n @HostBinding('style.height.px')\n public hostStyleHeightPx!: number;\n\n @HostBinding('style.opacity')\n public hostStyleOpacity = 0;\n\n @Input()\n public offset = 1000;\n\n @Input()\n public objectFit = 'cover';\n\n private displayed = false;\n\n private maxLoadedDimension: { width: number, height: number } | null = null;\n\n constructor(private element: ElementRef, private cd: ChangeDetectorRef)\n {\n }\n\n public recheck()\n {\n this.displayed = false;\n this.check();\n }\n\n public check()\n {\n if (\n this.displayed\n || this.isHidden(this.element.nativeElement)\n || !this.isInsideViewport(this.element.nativeElement, this.offset)\n ) {\n return;\n }\n\n this.displayed = true;\n const dimension = this.getDimension();\n\n if (\n null != this.maxLoadedDimension\n && this.maxLoadedDimension.width >= dimension.width\n && this.maxLoadedDimension.height >= dimension.height\n ) {\n return;\n }\n\n this.maxLoadedDimension = dimension;\n this.hostStyleWidthPx = dimension.width;\n this.hostStyleHeightPx = dimension.height;\n let wantedSize: number;\n if (this.objectFit === 'cover') {\n wantedSize = NumberUtils.getNextPowerOfTwo(Math.max(dimension.width, dimension.height));\n this.hostStyleObjectFit = 'cover';\n } else {\n wantedSize = NumberUtils.getNextPowerOfTwo(Math.min(dimension.width, dimension.height));\n this.hostStyleObjectFit = 'contain';\n }\n this.hostSrc = StringUtils.updateUrlParameter(this.src, 'size', String(wantedSize));\n this.hostStyleOpacity = 1;\n this.cd.detectChanges();\n }\n\n /**\n * @override\n */\n public ngOnChanges(): void\n {\n this.displayed = false;\n this.maxLoadedDimension = null;\n this.hostStyleOpacity = 0;\n if (this.element.nativeElement.parentElement.offsetWidth > 0) {\n this.check();\n }\n }\n\n private isInsideViewport(nativeElement: HTMLElement, offset: number): boolean\n {\n // console.log('isInsideViewport');\n const ownerDocument = nativeElement.ownerDocument;\n const documentTop = window.pageYOffset || ownerDocument.body.scrollTop;\n const documentLeft = window.pageXOffset || ownerDocument.body.scrollLeft;\n\n const documentWidth = window.innerWidth || (ownerDocument.documentElement.clientWidth || document.body.clientWidth);\n const documentHeight = window.innerHeight || (ownerDocument.documentElement.clientHeight || document.body.clientHeight);\n const topOffset = nativeElement.getBoundingClientRect().top + documentTop - ownerDocument.documentElement.clientTop;\n const leftOffset = nativeElement.getBoundingClientRect().left + documentLeft - ownerDocument.documentElement.clientLeft;\n\n // console.log(documentWidth, documentHeight, topOffset, leftOffset);\n\n const isBelowViewport = documentHeight + documentTop <= topOffset - offset;\n const isAtRightOfViewport = documentWidth + window.pageXOffset <= leftOffset - offset;\n const isAboveViewport = documentTop >= topOffset + offset + nativeElement.offsetHeight;\n const isAtLeftOfViewport = documentLeft >= leftOffset + offset + nativeElement.offsetWidth;\n\n return !isBelowViewport && !isAboveViewport && !isAtRightOfViewport && !isAtLeftOfViewport;\n }\n\n private getDimension(): { width: number, height: number }\n {\n return {\n width: this.element.nativeElement.parentElement.offsetWidth,\n height: this.element.nativeElement.parentElement.offsetHeight,\n };\n }\n\n private isHidden(nativeElement: HTMLElement)\n {\n // console.log('isHidden');\n return window.getComputedStyle(nativeElement).display === 'none';\n }\n}\n","import {AfterContentInit, ContentChildren, Directive, HostListener, OnDestroy, QueryList} from '@angular/core';\nimport {DdrMatGridTileLazyImgDirective} from './grid-tile-lazy-img.directive';\nimport {Subscription} from 'rxjs';\nimport {Debounce, Limit} from '@dontdrinkandroot/ngx-extensions';\n\n@Directive({\n selector: '[ddrMatGridTileLazyImgContainer]'\n})\nexport class DdrMatGridTileLazyImageContainerDirective implements AfterContentInit, OnDestroy\n{\n @ContentChildren(DdrMatGridTileLazyImgDirective, {descendants: true})\n lazyImages!: QueryList<DdrMatGridTileLazyImgDirective>;\n\n private changeSubscription!: Subscription;\n\n @HostListener('window:resize', ['$event'])\n @Debounce()\n public windowResized()\n {\n if (null != this.lazyImages) {\n this.lazyImages.forEach((lazyImage: DdrMatGridTileLazyImgDirective) => lazyImage.recheck());\n }\n }\n\n @HostListener('window:scroll', ['$event'])\n @Limit()\n public windowScroll()\n {\n if (null != this.lazyImages) {\n this.lazyImages.forEach((lazyImage: DdrMatGridTileLazyImgDirective) => lazyImage.check());\n }\n }\n\n /**\n * @override\n */\n public ngAfterContentInit(): void\n {\n this.lazyImages.forEach((lazyImage: DdrMatGridTileLazyImgDirective) => lazyImage.check());\n this.changeSubscription = this.lazyImages.changes.subscribe(() => {\n /* Wait one tick until layout is ready */\n setTimeout(\n () => this.lazyImages.forEach((lazyImage: DdrMatGridTileLazyImgDirective) => lazyImage.recheck())\n , 1\n );\n });\n }\n\n /**\n * @override\n */\n public ngOnDestroy(): void\n {\n this.changeSubscription.unsubscribe();\n }\n}\n","import {Injectable, signal} from '@angular/core';\nimport {MatDrawerToggleResult, MatSidenav} from '@angular/material/sidenav';\nimport {BreakpointObserver, Breakpoints} from '@angular/cdk/layout';\nimport {BehaviorSubject, combineLatest} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {NavigationStart, Router} from '@angular/router';\nimport {toObservable, toSignal} from \"@angular/core/rxjs-interop\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DdrMatSidenavService {\n\n private sidenav!: MatSidenav;\n\n private largeBreakpoints = [\n Breakpoints.Medium,\n Breakpoints.Large,\n Breakpoints.XLarge\n ];\n\n public stayOpenOnLargeScreen = signal(true);\n\n private stayOpenOnLargeScreen$ = toObservable(this.stayOpenOnLargeScreen);\n\n private sidenavContentScrolled$ = new BehaviorSubject<boolean>(false);\n\n public readonly mode;\n\n public readonly opened;\n\n public readonly toggleVisible;\n\n constructor(\n private breakpointObserver: BreakpointObserver,\n private router: Router,\n ) {\n const screenLarge$ = this.breakpointObserver.observe(this.largeBreakpoints).pipe(\n map(result => result.matches)\n );\n\n const mode$ = combineLatest([\n screenLarge$,\n this.stayOpenOnLargeScreen$\n ]).pipe(\n map(([large, stayOpenOnLargeScreen]) => large && stayOpenOnLargeScreen ? 'side' : 'over'),\n );\n\n const opened$ = combineLatest([\n screenLarge$,\n this.stayOpenOnLargeScreen$\n ]).pipe(\n map(([large, stayOpenOnLargeScreen]) => large && stayOpenOnLargeScreen),\n );\n\n const toggleVisible$ = combineLatest([\n screenLarge$,\n this.stayOpenOnLargeScreen$\n ]).pipe(\n map(([large, stayOpenOnLargeScreen]) => !large || !stayOpenOnLargeScreen),\n );\n\n this.router.events.subscribe(event => {\n if (event instanceof NavigationStart) {\n this.closeSidebar();\n }\n });\n\n this.mode = toSignal(mode$, {initialValue: 'over'});\n this.opened = toSignal(opened$, {initialValue: false});\n this.toggleVisible = toSignal(toggleVisible$, {initialValue: true});\n }\n\n public setSidenav(sidenav: MatSidenav): void {\n this.sidenav = sidenav;\n }\n\n public toggle(): Promise<MatDrawerToggleResult> {\n if (null == this.sidenav) {\n return Promise.reject('No MatSidenav found. Use setSidenav() of SidenavService');\n }\n\n if (!(this.stayOpenOnLargeScreen() && this.breakpointObserver.isMatched(this.largeBreakpoints))) {\n return this.sidenav.toggle();\n }\n\n return Promise.resolve(this.sidenav.opened ? 'open' : 'close');\n }\n\n public closeSidebar(): void {\n if (!(this.stayOpenOnLargeScreen() && this.breakpointObserver.isMatched(this.largeBreakpoints))) {\n this.sidenav.close();\n }\n }\n\n public watchContentScrolled() {\n return this.sidenavContentScrolled$.asObservable();\n }\n}\n","import {ChangeDetectionStrategy, Component, effect, input, OnInit, ViewChild} from '@angular/core';\nimport {MatSidenav, MatSidenavContainer, MatSidenavContent} from '@angular/material/sidenav';\nimport {DdrMatSidenavService} from './sidenav.service';\nimport {NgClass} from \"@angular/common\";\n\n@Component({\n selector: 'ddr-mat-sidenav-container',\n templateUrl: './sidenav-container.component.html',\n styleUrl: './sidenav-container.component.scss',\n imports: [\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\n NgClass\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DdrMatSidenavContainerComponent implements OnInit {\n @ViewChild('sidenav', {static: true})\n public sidenav!: MatSidenav;\n\n public stayOpenOnLargeScreen = input<boolean>(true);\n\n protected mode;\n\n protected opened;\n\n constructor(\n private sidenavService: DdrMatSidenavService,\n ) {\n this.mode = this.sidenavService.mode;\n this.opened = this.sidenavService.opened;\n\n effect(() => {\n this.sidenavService.stayOpenOnLargeScreen.set(this.stayOpenOnLargeScreen());\n });\n }\n\n /**\n * @override\n */\n public ngOnInit(): void {\n this.sidenavService.setSidenav(this.sidenav);\n }\n}\n","<mat-sidenav-container [ngClass]=\"mode()\">\n <mat-sidenav\n #sidenav\n [mode]=\"mode()\"\n [opened]=\"opened()\"\n [fixedInViewport]=\"true\"\n >\n <ng-content select=\"[slot=mat-sidenav]\"></ng-content>\n </mat-sidenav>\n <mat-sidenav-content #sidenavContent>\n <ng-content select=\"[slot=mat-sidenav-content]\"></ng-content>\n </mat-sidenav-content>\n</mat-sidenav-container>\n","import {ChangeDetectionStrategy, Component} from '@angular/core';\nimport {DdrMatSidenavService} from './sidenav.service';\nimport {MatIcon} from \"@angular/material/icon\";\nimport {MatIconButton} from \"@angular/material/button\";\n\n@Component({\n selector: 'ddr-mat-sidenav-toggle',\n template: `\n <button mat-icon-button (click)=\"toggleSidenav()\">\n <mat-icon>menu</mat-icon>\n </button>`,\n imports: [\n MatIcon,\n MatIconButton\n ],\n host: {\n '[style.display]': 'visible() ? \"block\" : \"none\"'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DdrMatSidenavToggleComponent {\n public visible;\n\n constructor(private sidenavService: DdrMatSidenavService) {\n this.visible = this.sidenavService.toggleVisible;\n }\n\n public toggleSidenav() {\n this.sidenavService.toggle();\n }\n}\n","import {Directive, ElementRef, Input, OnInit} from '@angular/core';\n\n@Directive({\n selector: '[ddrMatToolbarFixedTop]'\n})\nexport class DdrMatToolbarFixedTopDirective implements OnInit {\n\n @Input()\n public ddrMatToolbarFixedTop: string[] | '' = '';\n\n constructor(private el: ElementRef) {\n }\n\n /**\n * @override\n */\n public ngOnInit() {\n const container = document.createElement('div');\n container.classList.add('ddr-mat-toolbar-fixed-top-container');\n this.el.nativeElement.parentElement.insertBefore(container, this.el.nativeElement);\n container.appendChild(this.el.nativeElement);\n\n if ('' !== this.ddrMatToolbarFixedTop) {\n this.ddrMatToolbarFixedTop.forEach((className: string) => {\n container.classList.add(className);\n });\n }\n }\n}\n","/*\n * Public API Surface of ngx-material-extensions\n */\n\nexport * from './src/ddr-material-extensions.module';\n\nexport * from './src/button/fab-fixed.directive'\n\nexport * from './src/filter/filter.component';\n\nexport * from './src/gridlist/grid-tile-lazy-image-container.directive';\nexport * from './src/gridlist/grid-tile-lazy-img.directive';\n\nexport * from './src/sidenav/sidenav-container.component';\nexport * from './src/sidenav/sidenav-toggle.component';\nexport * from './src/sidenav/sidenav.service';\n\nexport * from './src/theme/theme-config'\n\nexport * from './src/toolbar/toolbar-fixed-top.directive'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.DdrMatSidenavService"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dontdrinkandroot/ngx-material-extensions",
3
- "version": "0.7.2",
3
+ "version": "0.7.4",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": "^19",
6
6
  "@angular/common": "^19",
@@ -2,15 +2,16 @@ import { AfterContentInit, ElementRef } from '@angular/core';
2
2
  import { FormControl } from '@angular/forms';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class DdrMatFilterComponent implements AfterContentInit {
5
- formControl: FormControl<string | null>;
5
+ protected formControl: FormControl<string | null>;
6
6
  filterChanged: import("@angular/core").OutputRef<string | null>;
7
7
  bouncePeriod: number;
8
- inputElement: ElementRef;
8
+ ddrMatPrefixIcon: import("@angular/core").InputSignal<string | null>;
9
+ protected inputElement: ElementRef;
9
10
  /**
10
11
  * @override
11
12
  */
12
13
  ngAfterContentInit(): void;
13
14
  clear(): void;
14
15
  static ɵfac: i0.ɵɵFactoryDeclaration<DdrMatFilterComponent, never>;
15
- static ɵcmp: i0.ɵɵComponentDeclaration<DdrMatFilterComponent, "ddr-mat-filter", never, { "bouncePeriod": { "alias": "bouncePeriod"; "required": false; }; }, { "filterChanged": "filterChanged"; }, never, never, true, never>;
16
+ static ɵcmp: i0.ɵɵComponentDeclaration<DdrMatFilterComponent, "ddr-mat-filter", never, { "bouncePeriod": { "alias": "bouncePeriod"; "required": false; }; "ddrMatPrefixIcon": { "alias": "ddrMatPrefixIcon"; "required": false; "isSignal": true; }; }, { "filterChanged": "filterChanged"; }, never, never, true, never>;
16
17
  }
@@ -1,23 +1,18 @@
1
- import { OnChanges, OnInit, SimpleChanges } from '@angular/core';
2
- import { MatDrawerMode, MatSidenav } from '@angular/material/sidenav';
1
+ import { OnInit } from '@angular/core';
2
+ import { MatSidenav } from '@angular/material/sidenav';
3
3
  import { DdrMatSidenavService } from './sidenav.service';
4
- import { Observable } from 'rxjs';
5
4
  import * as i0 from "@angular/core";
6
- export declare class DdrMatSidenavContainerComponent implements OnInit, OnChanges {
5
+ export declare class DdrMatSidenavContainerComponent implements OnInit {
7
6
  private sidenavService;
8
7
  sidenav: MatSidenav;
9
- stayOpenOnLargeScreen: boolean;
10
- mode$: Observable<MatDrawerMode>;
11
- opened$: Observable<boolean>;
8
+ stayOpenOnLargeScreen: import("@angular/core").InputSignal<boolean>;
9
+ protected mode: import("@angular/core").Signal<"side" | "over">;
10
+ protected opened: import("@angular/core").Signal<boolean>;
12
11
  constructor(sidenavService: DdrMatSidenavService);
13
- /**
14
- * @override
15
- */
16
- ngOnChanges(changes: SimpleChanges): void;
17
12
  /**
18
13
  * @override
19
14
  */
20
15
  ngOnInit(): void;
21
16
  static ɵfac: i0.ɵɵFactoryDeclaration<DdrMatSidenavContainerComponent, never>;
22
- static ɵcmp: i0.ɵɵComponentDeclaration<DdrMatSidenavContainerComponent, "ddr-mat-sidenav-container", never, { "stayOpenOnLargeScreen": { "alias": "stayOpenOnLargeScreen"; "required": false; }; }, {}, never, ["[slot=mat-sidenav]", "[slot=mat-sidenav-content]"], true, never>;
17
+ static ɵcmp: i0.ɵɵComponentDeclaration<DdrMatSidenavContainerComponent, "ddr-mat-sidenav-container", never, { "stayOpenOnLargeScreen": { "alias": "stayOpenOnLargeScreen"; "required": false; "isSignal": true; }; }, {}, never, ["[slot=mat-sidenav]", "[slot=mat-sidenav-content]"], true, never>;
23
18
  }
@@ -1,28 +1,23 @@
1
- import { MatDrawerMode, MatDrawerToggleResult, MatSidenav } from '@angular/material/sidenav';
1
+ import { MatDrawerToggleResult, MatSidenav } from '@angular/material/sidenav';
2
2
  import { BreakpointObserver } from '@angular/cdk/layout';
3
- import { Observable } from 'rxjs';
4
3
  import { Router } from '@angular/router';
5
4
  import * as i0 from "@angular/core";
6
5
  export declare class DdrMatSidenavService {
7
6
  private breakpointObserver;
8
7
  private router;
9
8
  private sidenav;
10
- private stayOpenOnLargeScreen;
11
9
  private largeBreakpoints;
12
- private screenLarge$;
13
- private mode$;
14
- private opened$;
10
+ stayOpenOnLargeScreen: import("@angular/core").WritableSignal<boolean>;
11
+ private stayOpenOnLargeScreen$;
15
12
  private sidenavContentScrolled$;
13
+ readonly mode: import("@angular/core").Signal<"side" | "over">;
14
+ readonly opened: import("@angular/core").Signal<boolean>;
15
+ readonly toggleVisible: import("@angular/core").Signal<boolean>;
16
16
  constructor(breakpointObserver: BreakpointObserver, router: Router);
17
17
  setSidenav(sidenav: MatSidenav): void;
18
- getStayOpenOnLargeScreen(): boolean;
19
- setStayOpenOnLargeScreen(value: boolean): void;
20
18
  toggle(): Promise<MatDrawerToggleResult>;
21
19
  closeSidebar(): void;
22
- getModeObservable(): Observable<MatDrawerMode>;
23
- getOpenedObservable(): Observable<boolean>;
24
- watchToggleVisible(): Observable<boolean>;
25
- watchContentScrolled(): Observable<boolean>;
20
+ watchContentScrolled(): import("rxjs").Observable<boolean>;
26
21
  static ɵfac: i0.ɵɵFactoryDeclaration<DdrMatSidenavService, never>;
27
22
  static ɵprov: i0.ɵɵInjectableDeclaration<DdrMatSidenavService>;
28
23
  }