@taiga-ui/cdk 3.29.2-dev.main-1674f69 → 3.29.2-dev.main-2a207b6

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,4 +1,4 @@
1
- import { InjectionToken } from '@angular/core';
1
+ import { ChangeDetectorRef, InjectionToken, OnInit } from '@angular/core';
2
2
  import { Title } from '@angular/platform-browser';
3
3
  import { TuiDialog } from '@taiga-ui/cdk/types';
4
4
  import { Observable } from 'rxjs';
@@ -7,15 +7,18 @@ import * as i0 from "@angular/core";
7
7
  * Is closing dialog on browser backward navigation enabled
8
8
  */
9
9
  export declare const TUI_DIALOG_CLOSES_ON_BACK: InjectionToken<Observable<boolean>>;
10
- export declare class TuiDialogHostComponent<T extends TuiDialog<unknown, unknown>> {
10
+ export declare class TuiDialogHostComponent<T extends TuiDialog<unknown, unknown>> implements OnInit {
11
11
  readonly isDialogClosesOnBack$: Observable<boolean>;
12
12
  private readonly dialogsByType;
13
13
  private readonly historyRef;
14
14
  private readonly titleService;
15
- readonly dialogs$: Observable<T[]>;
16
- constructor(isDialogClosesOnBack$: Observable<boolean>, dialogsByType: Array<Observable<readonly T[]>>, historyRef: History, titleService: Title);
15
+ private readonly destroy$;
16
+ private readonly cdr;
17
+ dialogs: readonly T[];
18
+ constructor(isDialogClosesOnBack$: Observable<boolean>, dialogsByType: Array<Observable<readonly T[]>>, historyRef: History, titleService: Title, destroy$: Observable<void>, cdr: ChangeDetectorRef);
19
+ ngOnInit(): void;
17
20
  closeLast(dialogs: readonly T[], isDialogClosesOnBack: boolean): void;
18
21
  onDialog({ propertyName }: TransitionEvent, popupOpened: boolean, isDialogClosesOnBack: boolean): void;
19
- static ɵfac: i0.ɵɵFactoryDeclaration<TuiDialogHostComponent<any>, never>;
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<TuiDialogHostComponent<any>, [null, null, null, null, { self: true; }, null]>;
20
23
  static ɵcmp: i0.ɵɵComponentDeclaration<TuiDialogHostComponent<any>, "tui-dialog-host", never, {}, {}, never, never>;
21
24
  }
@@ -1,14 +1,21 @@
1
- import { ChangeDetectionStrategy, Component, Inject, INJECTOR, Injector, ViewEncapsulation, } from '@angular/core';
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, INJECTOR, Injector, Self, ViewEncapsulation, } from '@angular/core';
2
2
  import { TUI_PARENT_ANIMATION } from '@taiga-ui/cdk/constants';
3
+ import { TuiDestroyService } from '@taiga-ui/cdk/services';
3
4
  import { TUI_ALERTS } from '@taiga-ui/cdk/tokens';
4
5
  import { POLYMORPHEUS_CONTEXT } from '@tinkoff/ng-polymorpheus';
6
+ import { combineLatest } from 'rxjs';
7
+ import { takeUntil } from 'rxjs/operators';
5
8
  import * as i0 from "@angular/core";
6
9
  import * as i1 from "@angular/common";
7
10
  import * as i2 from "@taiga-ui/cdk/pipes";
11
+ import * as i3 from "rxjs";
8
12
  export class TuiAlertHostComponent {
9
- constructor(alerts, injector) {
10
- this.alerts = alerts;
13
+ constructor(allAlerts, injector, destroy$, cdr) {
14
+ this.allAlerts = allAlerts;
11
15
  this.injector = injector;
16
+ this.destroy$ = destroy$;
17
+ this.cdr = cdr;
18
+ this.alerts = [];
12
19
  this.mapper = useValue => Injector.create({
13
20
  providers: [
14
21
  {
@@ -19,9 +26,19 @@ export class TuiAlertHostComponent {
19
26
  parent: this.injector,
20
27
  });
21
28
  }
29
+ ngOnInit() {
30
+ // Due to this view being parallel to app content, `markForCheck` from `async` pipe
31
+ // can happen after view was checked, so calling `detectChanges` instead
32
+ combineLatest(this.allAlerts)
33
+ .pipe(takeUntil(this.destroy$))
34
+ .subscribe(alerts => {
35
+ this.alerts = alerts;
36
+ this.cdr.detectChanges();
37
+ });
38
+ }
22
39
  }
23
- TuiAlertHostComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TuiAlertHostComponent, deps: [{ token: TUI_ALERTS }, { token: INJECTOR }], target: i0.ɵɵFactoryTarget.Component });
24
- TuiAlertHostComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TuiAlertHostComponent, selector: "tui-alert-host", ngImport: i0, template: "<div\n *ngFor=\"let alert$ of alerts\"\n class=\"t-wrapper\"\n @tuiParentAnimation\n>\n <ng-container\n *ngFor=\"let item of alert$ | async\"\n [ngComponentOutlet]=\"item.component.component\"\n [ngComponentOutletInjector]=\"item | tuiMapper : mapper\"\n ></ng-container>\n</div>\n", styles: ["tui-alert-host>.t-wrapper{position:fixed;top:0;left:0;display:flex;width:100%;height:100%;flex-direction:column;pointer-events:none}tui-alert-host>.t-wrapper>*{pointer-events:auto}\n"], directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModuleFactory"] }], pipes: { "tuiMapper": i2.TuiMapperPipe, "async": i1.AsyncPipe }, animations: [TUI_PARENT_ANIMATION], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
40
+ TuiAlertHostComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TuiAlertHostComponent, deps: [{ token: TUI_ALERTS }, { token: INJECTOR }, { token: TuiDestroyService, self: true }, { token: ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
41
+ TuiAlertHostComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TuiAlertHostComponent, selector: "tui-alert-host", providers: [TuiDestroyService], ngImport: i0, template: "<div\n *ngFor=\"let alert of alerts\"\n class=\"t-wrapper\"\n @tuiParentAnimation\n>\n <ng-container\n *ngFor=\"let item of alert\"\n [ngComponentOutlet]=\"item.component.component\"\n [ngComponentOutletInjector]=\"item | tuiMapper : mapper\"\n ></ng-container>\n</div>\n", styles: ["tui-alert-host>.t-wrapper{position:fixed;top:0;left:0;display:flex;width:100%;height:100%;flex-direction:column;pointer-events:none}tui-alert-host>.t-wrapper>*{pointer-events:auto}\n"], directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModuleFactory"] }], pipes: { "tuiMapper": i2.TuiMapperPipe }, animations: [TUI_PARENT_ANIMATION], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
25
42
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TuiAlertHostComponent, decorators: [{
26
43
  type: Component,
27
44
  args: [{
@@ -31,6 +48,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
31
48
  // So that we do not force OnPush on custom alerts
32
49
  // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection
33
50
  changeDetection: ChangeDetectionStrategy.Default,
51
+ providers: [TuiDestroyService],
34
52
  animations: [TUI_PARENT_ANIMATION],
35
53
  encapsulation: ViewEncapsulation.None,
36
54
  }]
@@ -40,5 +58,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
40
58
  }] }, { type: i0.Injector, decorators: [{
41
59
  type: Inject,
42
60
  args: [INJECTOR]
61
+ }] }, { type: i3.Observable, decorators: [{
62
+ type: Self
63
+ }, {
64
+ type: Inject,
65
+ args: [TuiDestroyService]
66
+ }] }, { type: i0.ChangeDetectorRef, decorators: [{
67
+ type: Inject,
68
+ args: [ChangeDetectorRef]
43
69
  }] }]; } });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQtaG9zdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvY29tcG9uZW50cy9hbGVydC1ob3N0L2FsZXJ0LWhvc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL2NvbXBvbmVudHMvYWxlcnQtaG9zdC9hbGVydC1ob3N0LnRlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsTUFBTSxFQUNOLFFBQVEsRUFDUixRQUFRLEVBQ1IsaUJBQWlCLEdBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVoRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQzs7OztBQWE5RCxNQUFNLE9BQU8scUJBQXFCO0lBQzlCLFlBQ2lDLE1BQXVDLEVBQ2pDLFFBQWtCO1FBRHhCLFdBQU0sR0FBTixNQUFNLENBQWlDO1FBQ2pDLGFBQVEsR0FBUixRQUFRLENBQVU7UUFHaEQsV0FBTSxHQUFpQyxRQUFRLENBQUMsRUFBRSxDQUN2RCxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ1osU0FBUyxFQUFFO2dCQUNQO29CQUNJLE9BQU8sRUFBRSxvQkFBb0I7b0JBQzdCLFFBQVE7aUJBQ1g7YUFDSjtZQUNELE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUTtTQUN4QixDQUFDLENBQUM7SUFYSixDQUFDOzttSEFKSyxxQkFBcUIsa0JBRWxCLFVBQVUsYUFDVixRQUFRO3VHQUhYLHFCQUFxQixzREN4QmxDLCtUQVdBLHdrQkRVZ0IsQ0FBQyxvQkFBb0IsQ0FBQzs0RkFHekIscUJBQXFCO2tCQVZqQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFdBQVcsRUFBRSw0QkFBNEI7b0JBQ3pDLFNBQVMsRUFBRSxDQUFDLHlCQUF5QixDQUFDO29CQUN0QyxrREFBa0Q7b0JBQ2xELHFGQUFxRjtvQkFDckYsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE9BQU87b0JBQ2hELFVBQVUsRUFBRSxDQUFDLG9CQUFvQixDQUFDO29CQUNsQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtpQkFDeEM7MERBRzRDLEtBQUs7MEJBQXpDLE1BQU07MkJBQUMsVUFBVTs7MEJBQ2pCLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIEluamVjdCxcbiAgICBJTkpFQ1RPUixcbiAgICBJbmplY3RvcixcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1RVSV9QQVJFTlRfQU5JTUFUSU9OfSBmcm9tICdAdGFpZ2EtdWkvY2RrL2NvbnN0YW50cyc7XG5pbXBvcnQge1RVSV9BTEVSVFN9IGZyb20gJ0B0YWlnYS11aS9jZGsvdG9rZW5zJztcbmltcG9ydCB7VHVpRGlhbG9nLCBUdWlNYXBwZXJ9IGZyb20gJ0B0YWlnYS11aS9jZGsvdHlwZXMnO1xuaW1wb3J0IHtQT0xZTU9SUEhFVVNfQ09OVEVYVH0gZnJvbSAnQHRpbmtvZmYvbmctcG9seW1vcnBoZXVzJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndHVpLWFsZXJ0LWhvc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hbGVydC1ob3N0LnRlbXBsYXRlLmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2FsZXJ0LWhvc3Quc3R5bGUubGVzcyddLFxuICAgIC8vIFNvIHRoYXQgd2UgZG8gbm90IGZvcmNlIE9uUHVzaCBvbiBjdXN0b20gYWxlcnRzXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9wcmVmZXItb24tcHVzaC1jb21wb25lbnQtY2hhbmdlLWRldGVjdGlvblxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdCxcbiAgICBhbmltYXRpb25zOiBbVFVJX1BBUkVOVF9BTklNQVRJT05dLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIFR1aUFsZXJ0SG9zdENvbXBvbmVudDxUIGV4dGVuZHMgVHVpRGlhbG9nPHVua25vd24sIHVua25vd24+PiB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoVFVJX0FMRVJUUykgcmVhZG9ubHkgYWxlcnRzOiBBcnJheTxPYnNlcnZhYmxlPHJlYWRvbmx5IFRbXT4+LFxuICAgICAgICBASW5qZWN0KElOSkVDVE9SKSBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvcixcbiAgICApIHt9XG5cbiAgICByZWFkb25seSBtYXBwZXI6IFR1aU1hcHBlcjx1bmtub3duLCBJbmplY3Rvcj4gPSB1c2VWYWx1ZSA9PlxuICAgICAgICBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBQT0xZTU9SUEhFVVNfQ09OVEVYVCxcbiAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMuaW5qZWN0b3IsXG4gICAgICAgIH0pO1xufVxuIiwiPGRpdlxuICAgICpuZ0Zvcj1cImxldCBhbGVydCQgb2YgYWxlcnRzXCJcbiAgICBjbGFzcz1cInQtd3JhcHBlclwiXG4gICAgQHR1aVBhcmVudEFuaW1hdGlvblxuPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYWxlcnQkIHwgYXN5bmNcIlxuICAgICAgICBbbmdDb21wb25lbnRPdXRsZXRdPVwiaXRlbS5jb21wb25lbnQuY29tcG9uZW50XCJcbiAgICAgICAgW25nQ29tcG9uZW50T3V0bGV0SW5qZWN0b3JdPVwiaXRlbSB8IHR1aU1hcHBlciA6IG1hcHBlclwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQtaG9zdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvY29tcG9uZW50cy9hbGVydC1ob3N0L2FsZXJ0LWhvc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL2NvbXBvbmVudHMvYWxlcnQtaG9zdC9hbGVydC1ob3N0LnRlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBQ1IsUUFBUSxFQUVSLElBQUksRUFDSixpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRWhELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBQyxhQUFhLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7OztBQWF6QyxNQUFNLE9BQU8scUJBQXFCO0lBSzlCLFlBQ3lDLFNBQTBDLEVBQzVDLFFBQWtCLEVBQ0QsUUFBMEIsRUFDbEMsR0FBc0I7UUFIN0IsY0FBUyxHQUFULFNBQVMsQ0FBaUM7UUFDNUMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNELGFBQVEsR0FBUixRQUFRLENBQWtCO1FBQ2xDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBTnRFLFdBQU0sR0FBZ0MsRUFBRSxDQUFDO1FBb0JoQyxXQUFNLEdBQWlDLFFBQVEsQ0FBQyxFQUFFLENBQ3ZELFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDWixTQUFTLEVBQUU7Z0JBQ1A7b0JBQ0ksT0FBTyxFQUFFLG9CQUFvQjtvQkFDN0IsUUFBUTtpQkFDWDthQUNKO1lBQ0QsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3hCLENBQUMsQ0FBQztJQXRCSixDQUFDO0lBRUosUUFBUTtRQUNKLG1GQUFtRjtRQUNuRix3RUFBd0U7UUFDeEUsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7YUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDOzttSEFyQlEscUJBQXFCLGtCQU1sQixVQUFVLGFBQ1YsUUFBUSxhQUNBLGlCQUFpQix5QkFDekIsaUJBQWlCO3VHQVRwQixxQkFBcUIseUNBSm5CLENBQUMsaUJBQWlCLENBQUMsMEJDMUJsQyxxVEFXQSxpakJEZ0JnQixDQUFDLG9CQUFvQixDQUFDOzRGQUd6QixxQkFBcUI7a0JBWGpDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsV0FBVyxFQUFFLDRCQUE0QjtvQkFDekMsU0FBUyxFQUFFLENBQUMseUJBQXlCLENBQUM7b0JBQ3RDLGtEQUFrRDtvQkFDbEQscUZBQXFGO29CQUNyRixlQUFlLEVBQUUsdUJBQXVCLENBQUMsT0FBTztvQkFDaEQsU0FBUyxFQUFFLENBQUMsaUJBQWlCLENBQUM7b0JBQzlCLFVBQVUsRUFBRSxDQUFDLG9CQUFvQixDQUFDO29CQUNsQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtpQkFDeEM7MERBT3VELEtBQUs7MEJBQXBELE1BQU07MkJBQUMsVUFBVTs7MEJBQ2pCLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsSUFBSTs7MEJBQUksTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUNoQyxNQUFNOzJCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEluamVjdCxcbiAgICBJTkpFQ1RPUixcbiAgICBJbmplY3RvcixcbiAgICBPbkluaXQsXG4gICAgU2VsZixcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1RVSV9QQVJFTlRfQU5JTUFUSU9OfSBmcm9tICdAdGFpZ2EtdWkvY2RrL2NvbnN0YW50cyc7XG5pbXBvcnQge1R1aURlc3Ryb3lTZXJ2aWNlfSBmcm9tICdAdGFpZ2EtdWkvY2RrL3NlcnZpY2VzJztcbmltcG9ydCB7VFVJX0FMRVJUU30gZnJvbSAnQHRhaWdhLXVpL2Nkay90b2tlbnMnO1xuaW1wb3J0IHtUdWlEaWFsb2csIFR1aU1hcHBlcn0gZnJvbSAnQHRhaWdhLXVpL2Nkay90eXBlcyc7XG5pbXBvcnQge1BPTFlNT1JQSEVVU19DT05URVhUfSBmcm9tICdAdGlua29mZi9uZy1wb2x5bW9ycGhldXMnO1xuaW1wb3J0IHtjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7dGFrZVVudGlsfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndHVpLWFsZXJ0LWhvc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hbGVydC1ob3N0LnRlbXBsYXRlLmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2FsZXJ0LWhvc3Quc3R5bGUubGVzcyddLFxuICAgIC8vIFNvIHRoYXQgd2UgZG8gbm90IGZvcmNlIE9uUHVzaCBvbiBjdXN0b20gYWxlcnRzXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9wcmVmZXItb24tcHVzaC1jb21wb25lbnQtY2hhbmdlLWRldGVjdGlvblxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdCxcbiAgICBwcm92aWRlcnM6IFtUdWlEZXN0cm95U2VydmljZV0sXG4gICAgYW5pbWF0aW9uczogW1RVSV9QQVJFTlRfQU5JTUFUSU9OXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBUdWlBbGVydEhvc3RDb21wb25lbnQ8VCBleHRlbmRzIFR1aURpYWxvZzx1bmtub3duLCB1bmtub3duPj5cbiAgICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICAgIGFsZXJ0czogUmVhZG9ubHlBcnJheTxyZWFkb25seSBUW10+ID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChUVUlfQUxFUlRTKSBwcml2YXRlIHJlYWRvbmx5IGFsbEFsZXJ0czogQXJyYXk8T2JzZXJ2YWJsZTxyZWFkb25seSBUW10+PixcbiAgICAgICAgQEluamVjdChJTkpFQ1RPUikgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIEBTZWxmKCkgQEluamVjdChUdWlEZXN0cm95U2VydmljZSkgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JDogT2JzZXJ2YWJsZTx2b2lkPixcbiAgICAgICAgQEluamVjdChDaGFuZ2VEZXRlY3RvclJlZikgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICkge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICAvLyBEdWUgdG8gdGhpcyB2aWV3IGJlaW5nIHBhcmFsbGVsIHRvIGFwcCBjb250ZW50LCBgbWFya0ZvckNoZWNrYCBmcm9tIGBhc3luY2AgcGlwZVxuICAgICAgICAvLyBjYW4gaGFwcGVuIGFmdGVyIHZpZXcgd2FzIGNoZWNrZWQsIHNvIGNhbGxpbmcgYGRldGVjdENoYW5nZXNgIGluc3RlYWRcbiAgICAgICAgY29tYmluZUxhdGVzdCh0aGlzLmFsbEFsZXJ0cylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoYWxlcnRzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0cyA9IGFsZXJ0cztcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZWFkb25seSBtYXBwZXI6IFR1aU1hcHBlcjx1bmtub3duLCBJbmplY3Rvcj4gPSB1c2VWYWx1ZSA9PlxuICAgICAgICBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBQT0xZTU9SUEhFVVNfQ09OVEVYVCxcbiAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMuaW5qZWN0b3IsXG4gICAgICAgIH0pO1xufVxuIiwiPGRpdlxuICAgICpuZ0Zvcj1cImxldCBhbGVydCBvZiBhbGVydHNcIlxuICAgIGNsYXNzPVwidC13cmFwcGVyXCJcbiAgICBAdHVpUGFyZW50QW5pbWF0aW9uXG4+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBhbGVydFwiXG4gICAgICAgIFtuZ0NvbXBvbmVudE91dGxldF09XCJpdGVtLmNvbXBvbmVudC5jb21wb25lbnRcIlxuICAgICAgICBbbmdDb21wb25lbnRPdXRsZXRJbmplY3Rvcl09XCJpdGVtIHwgdHVpTWFwcGVyIDogbWFwcGVyXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==
@@ -1,10 +1,11 @@
1
- import { ChangeDetectionStrategy, Component, Inject, InjectionToken } from '@angular/core';
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, InjectionToken, Self, } from '@angular/core';
2
2
  import { Title } from '@angular/platform-browser';
3
3
  import { HISTORY } from '@ng-web-apis/common';
4
4
  import { TUI_PARENT_ANIMATION } from '@taiga-ui/cdk/constants';
5
+ import { TuiDestroyService } from '@taiga-ui/cdk/services';
5
6
  import { TUI_DIALOGS } from '@taiga-ui/cdk/tokens';
6
7
  import { combineLatest, of } from 'rxjs';
7
- import { map } from 'rxjs/operators';
8
+ import { map, takeUntil } from 'rxjs/operators';
8
9
  import * as i0 from "@angular/core";
9
10
  import * as i1 from "@angular/common";
10
11
  import * as i2 from "@taiga-ui/cdk/directives/focus-trap";
@@ -22,14 +23,26 @@ export const TUI_DIALOG_CLOSES_ON_BACK = new InjectionToken('[TUI_DIALOG_CLOSES_
22
23
  const FAKE_HISTORY_STATE = { label: 'ignoreMe' };
23
24
  const isFakeHistoryState = (historyState) => (historyState === null || historyState === void 0 ? void 0 : historyState.label) === FAKE_HISTORY_STATE.label;
24
25
  export class TuiDialogHostComponent {
25
- constructor(isDialogClosesOnBack$, dialogsByType, historyRef, titleService) {
26
+ constructor(isDialogClosesOnBack$, dialogsByType, historyRef, titleService, destroy$, cdr) {
26
27
  this.isDialogClosesOnBack$ = isDialogClosesOnBack$;
27
28
  this.dialogsByType = dialogsByType;
28
29
  this.historyRef = historyRef;
29
30
  this.titleService = titleService;
30
- this.dialogs$ = combineLatest(this.dialogsByType).pipe(map(allTypesDialogs => new Array()
31
- .concat(...allTypesDialogs)
32
- .sort((a, b) => a.createdAt - b.createdAt)));
31
+ this.destroy$ = destroy$;
32
+ this.cdr = cdr;
33
+ this.dialogs = [];
34
+ }
35
+ ngOnInit() {
36
+ // Due to this view being parallel to app content, `markForCheck` from `async` pipe
37
+ // can happen after view was checked, so calling `detectChanges` instead
38
+ combineLatest(this.dialogsByType)
39
+ .pipe(map(arr => new Array()
40
+ .concat(...arr)
41
+ .sort((a, b) => a.createdAt - b.createdAt)), takeUntil(this.destroy$))
42
+ .subscribe(dialogs => {
43
+ this.dialogs = dialogs;
44
+ this.cdr.detectChanges();
45
+ });
33
46
  }
34
47
  closeLast(dialogs, isDialogClosesOnBack) {
35
48
  if (!isDialogClosesOnBack) {
@@ -56,8 +69,8 @@ export class TuiDialogHostComponent {
56
69
  }
57
70
  }
58
71
  }
59
- TuiDialogHostComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TuiDialogHostComponent, deps: [{ token: TUI_DIALOG_CLOSES_ON_BACK }, { token: TUI_DIALOGS }, { token: HISTORY }, { token: Title }], target: i0.ɵɵFactoryTarget.Component });
60
- TuiDialogHostComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TuiDialogHostComponent, selector: "tui-dialog-host", ngImport: i0, template: "<ng-container *ngIf=\"dialogs$ | async as dialogs\">\n <section\n *ngFor=\"let item of dialogs\"\n tuiFocusTrap\n tuiScrollRef\n tuiOverscroll=\"all\"\n role=\"dialog\"\n aria-modal=\"true\"\n class=\"t-dialog\"\n @tuiParentAnimation\n [attr.aria-labelledby]=\"item.id\"\n >\n <ng-container *polymorpheusOutlet=\"item.component; context: item\"></ng-container>\n </section>\n <div\n *tuiLet=\"isDialogClosesOnBack$ | async as isDialogClosesOnBack\"\n class=\"t-overlay\"\n [class.t-overlay_visible]=\"dialogs.length\"\n (window:popstate)=\"closeLast(dialogs, !!isDialogClosesOnBack)\"\n (transitionend)=\"onDialog($event, !!dialogs.length, !!isDialogClosesOnBack)\"\n ></div>\n</ng-container>\n", styles: [":host{position:fixed;left:0;bottom:0;width:100%;height:0}.t-overlay,.t-dialog{position:fixed;top:0;left:0;right:0;bottom:0;display:flex;align-items:flex-start;outline:none;overflow:auto;overflow:overlay}.t-dialog{bottom:auto;height:100%}.t-overlay{height:100%;pointer-events:none;touch-action:none;opacity:0;letter-spacing:normal;transition:opacity var(--tui-duration),letter-spacing .01s;background:rgba(0,0,0,.75);-webkit-backdrop-filter:var(--tui-backdrop, none);backdrop-filter:var(--tui-backdrop, none)}.t-overlay_visible{opacity:1;letter-spacing:1px}.t-dialog:last-of-type{z-index:1}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.TuiFocusTrapDirective, selector: "[tuiFocusTrap]" }, { type: i3.TuiOverscrollDirective, selector: "[tuiOverscroll]", inputs: ["tuiOverscroll"] }, { type: i4.PolymorpheusOutletDirective, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { type: i5.TuiLetDirective, selector: "[tuiLet]", inputs: ["tuiLet"] }], pipes: { "async": i1.AsyncPipe }, animations: [TUI_PARENT_ANIMATION], changeDetection: i0.ChangeDetectionStrategy.Default });
72
+ TuiDialogHostComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TuiDialogHostComponent, deps: [{ token: TUI_DIALOG_CLOSES_ON_BACK }, { token: TUI_DIALOGS }, { token: HISTORY }, { token: Title }, { token: TuiDestroyService, self: true }, { token: ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
73
+ TuiDialogHostComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TuiDialogHostComponent, selector: "tui-dialog-host", providers: [TuiDestroyService], ngImport: i0, template: "<section\n *ngFor=\"let item of dialogs\"\n tuiFocusTrap\n tuiScrollRef\n tuiOverscroll=\"all\"\n role=\"dialog\"\n aria-modal=\"true\"\n class=\"t-dialog\"\n @tuiParentAnimation\n [attr.aria-labelledby]=\"item.id\"\n>\n <ng-container *polymorpheusOutlet=\"item.component; context: item\"></ng-container>\n</section>\n<div\n *tuiLet=\"isDialogClosesOnBack$ | async as isDialogClosesOnBack\"\n class=\"t-overlay\"\n [class.t-overlay_visible]=\"dialogs.length\"\n (window:popstate)=\"closeLast(dialogs, !!isDialogClosesOnBack)\"\n (transitionend)=\"onDialog($event, !!dialogs.length, !!isDialogClosesOnBack)\"\n></div>\n", styles: [":host{position:fixed;left:0;bottom:0;width:100%;height:0}.t-overlay,.t-dialog{position:fixed;top:0;left:0;right:0;bottom:0;display:flex;align-items:flex-start;outline:none;overflow:auto;overflow:overlay}.t-dialog{bottom:auto;height:100%}.t-overlay{height:100%;pointer-events:none;touch-action:none;opacity:0;letter-spacing:normal;transition:opacity var(--tui-duration),letter-spacing .01s;background:rgba(0,0,0,.75);-webkit-backdrop-filter:var(--tui-backdrop, none);backdrop-filter:var(--tui-backdrop, none)}.t-overlay_visible{opacity:1;letter-spacing:1px}.t-dialog:last-of-type{z-index:1}\n"], directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.TuiFocusTrapDirective, selector: "[tuiFocusTrap]" }, { type: i3.TuiOverscrollDirective, selector: "[tuiOverscroll]", inputs: ["tuiOverscroll"] }, { type: i4.PolymorpheusOutletDirective, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { type: i5.TuiLetDirective, selector: "[tuiLet]", inputs: ["tuiLet"] }], pipes: { "async": i1.AsyncPipe }, animations: [TUI_PARENT_ANIMATION], changeDetection: i0.ChangeDetectionStrategy.Default });
61
74
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TuiDialogHostComponent, decorators: [{
62
75
  type: Component,
63
76
  args: [{
@@ -67,6 +80,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
67
80
  // So that we do not force OnPush on custom dialogs
68
81
  // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection
69
82
  changeDetection: ChangeDetectionStrategy.Default,
83
+ providers: [TuiDestroyService],
70
84
  animations: [TUI_PARENT_ANIMATION],
71
85
  }]
72
86
  }], ctorParameters: function () { return [{ type: i6.Observable, decorators: [{
@@ -81,5 +95,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
81
95
  }] }, { type: i7.Title, decorators: [{
82
96
  type: Inject,
83
97
  args: [Title]
98
+ }] }, { type: i6.Observable, decorators: [{
99
+ type: Self
100
+ }, {
101
+ type: Inject,
102
+ args: [TuiDestroyService]
103
+ }] }, { type: i0.ChangeDetectorRef, decorators: [{
104
+ type: Inject,
105
+ args: [ChangeDetectorRef]
84
106
  }] }]; } });
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLWhvc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL2NvbXBvbmVudHMvZGlhbG9nLWhvc3QvZGlhbG9nLWhvc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL2NvbXBvbmVudHMvZGlhbG9nLWhvc3QvZGlhbG9nLWhvc3QudGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUM1QyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFakQsT0FBTyxFQUFDLGFBQWEsRUFBYyxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7QUFFbkM7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLGNBQWMsQ0FDdkQsNkJBQTZCLEVBQzdCO0lBQ0ksT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7Q0FDM0IsQ0FDSixDQUFDO0FBRUYsTUFBTSxrQkFBa0IsR0FBRyxFQUFDLEtBQUssRUFBRSxVQUFVLEVBQVUsQ0FBQztBQUN4RCxNQUFNLGtCQUFrQixHQUFHLENBQ3ZCLFlBQXFDLEVBQ0ksRUFBRSxDQUMzQyxDQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxLQUFLLE1BQUssa0JBQWtCLENBQUMsS0FBSyxDQUFDO0FBV3JELE1BQU0sT0FBTyxzQkFBc0I7SUFTL0IsWUFFYSxxQkFBMEMsRUFFbEMsYUFBOEMsRUFDN0IsVUFBbUIsRUFDckIsWUFBbUI7UUFKMUMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUFxQjtRQUVsQyxrQkFBYSxHQUFiLGFBQWEsQ0FBaUM7UUFDN0IsZUFBVSxHQUFWLFVBQVUsQ0FBUztRQUNyQixpQkFBWSxHQUFaLFlBQVksQ0FBTztRQWQ5QyxhQUFRLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQ3RELEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUNsQixJQUFJLEtBQUssRUFBSzthQUNULE1BQU0sQ0FBQyxHQUFHLGVBQWUsQ0FBQzthQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FDakQsQ0FDSixDQUFDO0lBU0MsQ0FBQztJQUVKLFNBQVMsQ0FBQyxPQUFxQixFQUFFLG9CQUE2QjtRQUMxRCxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDdkIsT0FBTztTQUNWO1FBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVqQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1AsT0FBTztTQUNWO1FBRUQsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FDL0U7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxRQUFRLENBQ0osRUFBQyxZQUFZLEVBQWtCLEVBQy9CLFdBQW9CLEVBQ3BCLG9CQUE2QjtRQUU3QixJQUFJLENBQUMsb0JBQW9CLElBQUksWUFBWSxLQUFLLGdCQUFnQixFQUFFO1lBQzVELE9BQU87U0FDVjtRQUVELElBQUksV0FBVyxFQUFFO1lBQ2IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQy9FO2FBQU0sSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2xELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDMUI7SUFDTCxDQUFDOztvSEFsRFEsc0JBQXNCLGtCQVVuQix5QkFBeUIsYUFFekIsV0FBVyxhQUVYLE9BQU8sYUFDUCxLQUFLO3dHQWZSLHNCQUFzQix1RENsQ25DLGd6QkFzQkEsb3NDRFVnQixDQUFDLG9CQUFvQixDQUFDOzRGQUV6QixzQkFBc0I7a0JBVGxDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsV0FBVyxFQUFFLDZCQUE2QjtvQkFDMUMsU0FBUyxFQUFFLENBQUMsMEJBQTBCLENBQUM7b0JBQ3ZDLG1EQUFtRDtvQkFDbkQscUZBQXFGO29CQUNyRixlQUFlLEVBQUUsdUJBQXVCLENBQUMsT0FBTztvQkFDaEQsVUFBVSxFQUFFLENBQUMsb0JBQW9CLENBQUM7aUJBQ3JDOzswQkFXUSxNQUFNOzJCQUFDLHlCQUF5Qjs4QkFHRCxLQUFLOzBCQURwQyxNQUFNOzJCQUFDLFdBQVc7OEJBRTJCLE9BQU87MEJBQXBELE1BQU07MkJBQUMsT0FBTzs7MEJBQ2QsTUFBTTsyQkFBQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3QsIEluamVjdGlvblRva2VufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VGl0bGV9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHtISVNUT1JZfSBmcm9tICdAbmctd2ViLWFwaXMvY29tbW9uJztcbmltcG9ydCB7VFVJX1BBUkVOVF9BTklNQVRJT059IGZyb20gJ0B0YWlnYS11aS9jZGsvY29uc3RhbnRzJztcbmltcG9ydCB7VFVJX0RJQUxPR1N9IGZyb20gJ0B0YWlnYS11aS9jZGsvdG9rZW5zJztcbmltcG9ydCB7VHVpRGlhbG9nfSBmcm9tICdAdGFpZ2EtdWkvY2RrL3R5cGVzJztcbmltcG9ydCB7Y29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuLyoqXG4gKiBJcyBjbG9zaW5nIGRpYWxvZyBvbiBicm93c2VyIGJhY2t3YXJkIG5hdmlnYXRpb24gZW5hYmxlZFxuICovXG5leHBvcnQgY29uc3QgVFVJX0RJQUxPR19DTE9TRVNfT05fQkFDSyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxPYnNlcnZhYmxlPGJvb2xlYW4+PihcbiAgICAnW1RVSV9ESUFMT0dfQ0xPU0VTX09OX0JBQ0tdJyxcbiAgICB7XG4gICAgICAgIGZhY3Rvcnk6ICgpID0+IG9mKGZhbHNlKSxcbiAgICB9LFxuKTtcblxuY29uc3QgRkFLRV9ISVNUT1JZX1NUQVRFID0ge2xhYmVsOiAnaWdub3JlTWUnfSBhcyBjb25zdDtcbmNvbnN0IGlzRmFrZUhpc3RvcnlTdGF0ZSA9IChcbiAgICBoaXN0b3J5U3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogaGlzdG9yeVN0YXRlIGlzIHR5cGVvZiBGQUtFX0hJU1RPUllfU1RBVEUgPT5cbiAgICBoaXN0b3J5U3RhdGU/LmxhYmVsID09PSBGQUtFX0hJU1RPUllfU1RBVEUubGFiZWw7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndHVpLWRpYWxvZy1ob3N0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGlhbG9nLWhvc3QudGVtcGxhdGUuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZGlhbG9nLWhvc3Quc3R5bGUubGVzcyddLFxuICAgIC8vIFNvIHRoYXQgd2UgZG8gbm90IGZvcmNlIE9uUHVzaCBvbiBjdXN0b20gZGlhbG9nc1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvcHJlZmVyLW9uLXB1c2gtY29tcG9uZW50LWNoYW5nZS1kZXRlY3Rpb25cbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LkRlZmF1bHQsXG4gICAgYW5pbWF0aW9uczogW1RVSV9QQVJFTlRfQU5JTUFUSU9OXSxcbn0pXG5leHBvcnQgY2xhc3MgVHVpRGlhbG9nSG9zdENvbXBvbmVudDxUIGV4dGVuZHMgVHVpRGlhbG9nPHVua25vd24sIHVua25vd24+PiB7XG4gICAgcmVhZG9ubHkgZGlhbG9ncyQgPSBjb21iaW5lTGF0ZXN0KHRoaXMuZGlhbG9nc0J5VHlwZSkucGlwZShcbiAgICAgICAgbWFwKGFsbFR5cGVzRGlhbG9ncyA9PlxuICAgICAgICAgICAgbmV3IEFycmF5PFQ+KClcbiAgICAgICAgICAgICAgICAuY29uY2F0KC4uLmFsbFR5cGVzRGlhbG9ncylcbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5jcmVhdGVkQXQgLSBiLmNyZWF0ZWRBdCksXG4gICAgICAgICksXG4gICAgKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KFRVSV9ESUFMT0dfQ0xPU0VTX09OX0JBQ0spXG4gICAgICAgIHJlYWRvbmx5IGlzRGlhbG9nQ2xvc2VzT25CYWNrJDogT2JzZXJ2YWJsZTxib29sZWFuPixcbiAgICAgICAgQEluamVjdChUVUlfRElBTE9HUylcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2dzQnlUeXBlOiBBcnJheTxPYnNlcnZhYmxlPHJlYWRvbmx5IFRbXT4+LFxuICAgICAgICBASW5qZWN0KEhJU1RPUlkpIHByaXZhdGUgcmVhZG9ubHkgaGlzdG9yeVJlZjogSGlzdG9yeSxcbiAgICAgICAgQEluamVjdChUaXRsZSkgcHJpdmF0ZSByZWFkb25seSB0aXRsZVNlcnZpY2U6IFRpdGxlLFxuICAgICkge31cblxuICAgIGNsb3NlTGFzdChkaWFsb2dzOiByZWFkb25seSBUW10sIGlzRGlhbG9nQ2xvc2VzT25CYWNrOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICghaXNEaWFsb2dDbG9zZXNPbkJhY2spIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IFtsYXN0XSA9IGRpYWxvZ3Muc2xpY2UoLTEpO1xuXG4gICAgICAgIGlmICghbGFzdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpYWxvZ3MubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhpcy5oaXN0b3J5UmVmLnB1c2hTdGF0ZShGQUtFX0hJU1RPUllfU1RBVEUsIHRoaXMudGl0bGVTZXJ2aWNlLmdldFRpdGxlKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdC4kaW1wbGljaXQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBvbkRpYWxvZyhcbiAgICAgICAge3Byb3BlcnR5TmFtZX06IFRyYW5zaXRpb25FdmVudCxcbiAgICAgICAgcG9wdXBPcGVuZWQ6IGJvb2xlYW4sXG4gICAgICAgIGlzRGlhbG9nQ2xvc2VzT25CYWNrOiBib29sZWFuLFxuICAgICk6IHZvaWQge1xuICAgICAgICBpZiAoIWlzRGlhbG9nQ2xvc2VzT25CYWNrIHx8IHByb3BlcnR5TmFtZSAhPT0gJ2xldHRlci1zcGFjaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvcHVwT3BlbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmhpc3RvcnlSZWYucHVzaFN0YXRlKEZBS0VfSElTVE9SWV9TVEFURSwgdGhpcy50aXRsZVNlcnZpY2UuZ2V0VGl0bGUoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNGYWtlSGlzdG9yeVN0YXRlKHRoaXMuaGlzdG9yeVJlZi5zdGF0ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeVJlZi5iYWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiZGlhbG9ncyQgfCBhc3luYyBhcyBkaWFsb2dzXCI+XG4gICAgPHNlY3Rpb25cbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGlhbG9nc1wiXG4gICAgICAgIHR1aUZvY3VzVHJhcFxuICAgICAgICB0dWlTY3JvbGxSZWZcbiAgICAgICAgdHVpT3ZlcnNjcm9sbD1cImFsbFwiXG4gICAgICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgICAgICBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gICAgICAgIGNsYXNzPVwidC1kaWFsb2dcIlxuICAgICAgICBAdHVpUGFyZW50QW5pbWF0aW9uXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJpdGVtLmlkXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKnBvbHltb3JwaGV1c091dGxldD1cIml0ZW0uY29tcG9uZW50OyBjb250ZXh0OiBpdGVtXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9zZWN0aW9uPlxuICAgIDxkaXZcbiAgICAgICAgKnR1aUxldD1cImlzRGlhbG9nQ2xvc2VzT25CYWNrJCB8IGFzeW5jIGFzIGlzRGlhbG9nQ2xvc2VzT25CYWNrXCJcbiAgICAgICAgY2xhc3M9XCJ0LW92ZXJsYXlcIlxuICAgICAgICBbY2xhc3MudC1vdmVybGF5X3Zpc2libGVdPVwiZGlhbG9ncy5sZW5ndGhcIlxuICAgICAgICAod2luZG93OnBvcHN0YXRlKT1cImNsb3NlTGFzdChkaWFsb2dzLCAhIWlzRGlhbG9nQ2xvc2VzT25CYWNrKVwiXG4gICAgICAgICh0cmFuc2l0aW9uZW5kKT1cIm9uRGlhbG9nKCRldmVudCwgISFkaWFsb2dzLmxlbmd0aCwgISFpc0RpYWxvZ0Nsb3Nlc09uQmFjaylcIlxuICAgID48L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLWhvc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL2NvbXBvbmVudHMvZGlhbG9nLWhvc3QvZGlhbG9nLWhvc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL2NvbXBvbmVudHMvZGlhbG9nLWhvc3QvZGlhbG9nLWhvc3QudGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsTUFBTSxFQUNOLGNBQWMsRUFFZCxJQUFJLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUM1QyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFakQsT0FBTyxFQUFDLGFBQWEsRUFBYyxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBRTlDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxjQUFjLENBQ3ZELDZCQUE2QixFQUM3QjtJQUNJLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO0NBQzNCLENBQ0osQ0FBQztBQUVGLE1BQU0sa0JBQWtCLEdBQUcsRUFBQyxLQUFLLEVBQUUsVUFBVSxFQUFVLENBQUM7QUFDeEQsTUFBTSxrQkFBa0IsR0FBRyxDQUN2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b0JBQzFDLFNBQVMsRUFBRSxDQUFDLDBCQUEwQixDQUFDO29CQUN2QyxtREFBbUQ7b0JBQ25ELHFGQUFxRjtvQkFDckYsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE9BQU87b0JBQ2hELFNBQVMsRUFBRSxDQUFDLGlCQUFpQixDQUFDO29CQUM5QixVQUFVLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztpQkFDckM7OzBCQU9RLE1BQU07MkJBQUMseUJBQXlCOzhCQUdELEtBQUs7MEJBRHBDLE1BQU07MkJBQUMsV0FBVzs4QkFFMkIsT0FBTzswQkFBcEQsTUFBTTsyQkFBQyxPQUFPOzswQkFDZCxNQUFNOzJCQUFDLEtBQUs7OzBCQUNaLElBQUk7OzBCQUFJLE1BQU07MkJBQUMsaUJBQWlCOzswQkFDaEMsTUFBTTsyQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0aW9uVG9rZW4sXG4gICAgT25Jbml0LFxuICAgIFNlbGYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUaXRsZX0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge0hJU1RPUll9IGZyb20gJ0BuZy13ZWItYXBpcy9jb21tb24nO1xuaW1wb3J0IHtUVUlfUEFSRU5UX0FOSU1BVElPTn0gZnJvbSAnQHRhaWdhLXVpL2Nkay9jb25zdGFudHMnO1xuaW1wb3J0IHtUdWlEZXN0cm95U2VydmljZX0gZnJvbSAnQHRhaWdhLXVpL2Nkay9zZXJ2aWNlcyc7XG5pbXBvcnQge1RVSV9ESUFMT0dTfSBmcm9tICdAdGFpZ2EtdWkvY2RrL3Rva2Vucyc7XG5pbXBvcnQge1R1aURpYWxvZ30gZnJvbSAnQHRhaWdhLXVpL2Nkay90eXBlcyc7XG5pbXBvcnQge2NvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuLyoqXG4gKiBJcyBjbG9zaW5nIGRpYWxvZyBvbiBicm93c2VyIGJhY2t3YXJkIG5hdmlnYXRpb24gZW5hYmxlZFxuICovXG5leHBvcnQgY29uc3QgVFVJX0RJQUxPR19DTE9TRVNfT05fQkFDSyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxPYnNlcnZhYmxlPGJvb2xlYW4+PihcbiAgICAnW1RVSV9ESUFMT0dfQ0xPU0VTX09OX0JBQ0tdJyxcbiAgICB7XG4gICAgICAgIGZhY3Rvcnk6ICgpID0+IG9mKGZhbHNlKSxcbiAgICB9LFxuKTtcblxuY29uc3QgRkFLRV9ISVNUT1JZX1NUQVRFID0ge2xhYmVsOiAnaWdub3JlTWUnfSBhcyBjb25zdDtcbmNvbnN0IGlzRmFrZUhpc3RvcnlTdGF0ZSA9IChcbiAgICBoaXN0b3J5U3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogaGlzdG9yeVN0YXRlIGlzIHR5cGVvZiBGQUtFX0hJU1RPUllfU1RBVEUgPT5cbiAgICBoaXN0b3J5U3RhdGU/LmxhYmVsID09PSBGQUtFX0hJU1RPUllfU1RBVEUubGFiZWw7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndHVpLWRpYWxvZy1ob3N0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGlhbG9nLWhvc3QudGVtcGxhdGUuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZGlhbG9nLWhvc3Quc3R5bGUubGVzcyddLFxuICAgIC8vIFNvIHRoYXQgd2UgZG8gbm90IGZvcmNlIE9uUHVzaCBvbiBjdXN0b20gZGlhbG9nc1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvcHJlZmVyLW9uLXB1c2gtY29tcG9uZW50LWNoYW5nZS1kZXRlY3Rpb25cbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LkRlZmF1bHQsXG4gICAgcHJvdmlkZXJzOiBbVHVpRGVzdHJveVNlcnZpY2VdLFxuICAgIGFuaW1hdGlvbnM6IFtUVUlfUEFSRU5UX0FOSU1BVElPTl0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aURpYWxvZ0hvc3RDb21wb25lbnQ8VCBleHRlbmRzIFR1aURpYWxvZzx1bmtub3duLCB1bmtub3duPj5cbiAgICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICAgIGRpYWxvZ3M6IHJlYWRvbmx5IFRbXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoVFVJX0RJQUxPR19DTE9TRVNfT05fQkFDSylcbiAgICAgICAgcmVhZG9ubHkgaXNEaWFsb2dDbG9zZXNPbkJhY2skOiBPYnNlcnZhYmxlPGJvb2xlYW4+LFxuICAgICAgICBASW5qZWN0KFRVSV9ESUFMT0dTKVxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ3NCeVR5cGU6IEFycmF5PE9ic2VydmFibGU8cmVhZG9ubHkgVFtdPj4sXG4gICAgICAgIEBJbmplY3QoSElTVE9SWSkgcHJpdmF0ZSByZWFkb25seSBoaXN0b3J5UmVmOiBIaXN0b3J5LFxuICAgICAgICBASW5qZWN0KFRpdGxlKSBwcml2YXRlIHJlYWRvbmx5IHRpdGxlU2VydmljZTogVGl0bGUsXG4gICAgICAgIEBTZWxmKCkgQEluamVjdChUdWlEZXN0cm95U2VydmljZSkgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JDogT2JzZXJ2YWJsZTx2b2lkPixcbiAgICAgICAgQEluamVjdChDaGFuZ2VEZXRlY3RvclJlZikgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICkge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICAvLyBEdWUgdG8gdGhpcyB2aWV3IGJlaW5nIHBhcmFsbGVsIHRvIGFwcCBjb250ZW50LCBgbWFya0ZvckNoZWNrYCBmcm9tIGBhc3luY2AgcGlwZVxuICAgICAgICAvLyBjYW4gaGFwcGVuIGFmdGVyIHZpZXcgd2FzIGNoZWNrZWQsIHNvIGNhbGxpbmcgYGRldGVjdENoYW5nZXNgIGluc3RlYWRcbiAgICAgICAgY29tYmluZUxhdGVzdCh0aGlzLmRpYWxvZ3NCeVR5cGUpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoYXJyID0+XG4gICAgICAgICAgICAgICAgICAgIG5ldyBBcnJheTxUPigpXG4gICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KC4uLmFycilcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmNyZWF0ZWRBdCAtIGIuY3JlYXRlZEF0KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoZGlhbG9ncyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dzID0gZGlhbG9ncztcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbG9zZUxhc3QoZGlhbG9nczogcmVhZG9ubHkgVFtdLCBpc0RpYWxvZ0Nsb3Nlc09uQmFjazogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoIWlzRGlhbG9nQ2xvc2VzT25CYWNrKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbbGFzdF0gPSBkaWFsb2dzLnNsaWNlKC0xKTtcblxuICAgICAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaWFsb2dzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeVJlZi5wdXNoU3RhdGUoRkFLRV9ISVNUT1JZX1NUQVRFLCB0aGlzLnRpdGxlU2VydmljZS5nZXRUaXRsZSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3QuJGltcGxpY2l0LmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgb25EaWFsb2coXG4gICAgICAgIHtwcm9wZXJ0eU5hbWV9OiBUcmFuc2l0aW9uRXZlbnQsXG4gICAgICAgIHBvcHVwT3BlbmVkOiBib29sZWFuLFxuICAgICAgICBpc0RpYWxvZ0Nsb3Nlc09uQmFjazogYm9vbGVhbixcbiAgICApOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpc0RpYWxvZ0Nsb3Nlc09uQmFjayB8fCBwcm9wZXJ0eU5hbWUgIT09ICdsZXR0ZXItc3BhY2luZycpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3B1cE9wZW5lZCkge1xuICAgICAgICAgICAgdGhpcy5oaXN0b3J5UmVmLnB1c2hTdGF0ZShGQUtFX0hJU1RPUllfU1RBVEUsIHRoaXMudGl0bGVTZXJ2aWNlLmdldFRpdGxlKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRmFrZUhpc3RvcnlTdGF0ZSh0aGlzLmhpc3RvcnlSZWYuc3RhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLmhpc3RvcnlSZWYuYmFjaygpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPHNlY3Rpb25cbiAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkaWFsb2dzXCJcbiAgICB0dWlGb2N1c1RyYXBcbiAgICB0dWlTY3JvbGxSZWZcbiAgICB0dWlPdmVyc2Nyb2xsPVwiYWxsXCJcbiAgICByb2xlPVwiZGlhbG9nXCJcbiAgICBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gICAgY2xhc3M9XCJ0LWRpYWxvZ1wiXG4gICAgQHR1aVBhcmVudEFuaW1hdGlvblxuICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJpdGVtLmlkXCJcbj5cbiAgICA8bmctY29udGFpbmVyICpwb2x5bW9ycGhldXNPdXRsZXQ9XCJpdGVtLmNvbXBvbmVudDsgY29udGV4dDogaXRlbVwiPjwvbmctY29udGFpbmVyPlxuPC9zZWN0aW9uPlxuPGRpdlxuICAgICp0dWlMZXQ9XCJpc0RpYWxvZ0Nsb3Nlc09uQmFjayQgfCBhc3luYyBhcyBpc0RpYWxvZ0Nsb3Nlc09uQmFja1wiXG4gICAgY2xhc3M9XCJ0LW92ZXJsYXlcIlxuICAgIFtjbGFzcy50LW92ZXJsYXlfdmlzaWJsZV09XCJkaWFsb2dzLmxlbmd0aFwiXG4gICAgKHdpbmRvdzpwb3BzdGF0ZSk9XCJjbG9zZUxhc3QoZGlhbG9ncywgISFpc0RpYWxvZ0Nsb3Nlc09uQmFjaylcIlxuICAgICh0cmFuc2l0aW9uZW5kKT1cIm9uRGlhbG9nKCRldmVudCwgISFkaWFsb2dzLmxlbmd0aCwgISFpc0RpYWxvZ0Nsb3Nlc09uQmFjaylcIlxuPjwvZGl2PlxuIl19
@@ -9,8 +9,9 @@ export * from './mouse-drag-finish-from';
9
9
  export * from './must-be-present';
10
10
  export * from './pressed-observable';
11
11
  export * from './prevent-default';
12
+ export * from './scroll-from';
12
13
  export * from './stop-propagation';
13
14
  export * from './typed-from-event';
14
15
  export * from './watch';
15
16
  export * from './zone-free';
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvb2JzZXJ2YWJsZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29udHJvbC12YWx1ZSc7XG5leHBvcnQgKiBmcm9tICcuL2RyYWctYW5kLWRyb3AtZnJvbSc7XG5leHBvcnQgKiBmcm9tICcuL2ZvY3VzLXZpc2libGUtb2JzZXJ2YWJsZSc7XG5leHBvcnQgKiBmcm9tICcuL2lmLW1hcCc7XG5leHBvcnQgKiBmcm9tICcuL2lzLWFsaXZlJztcbmV4cG9ydCAqIGZyb20gJy4vaXMtb2JzZXJ2ZWQnO1xuZXhwb3J0ICogZnJvbSAnLi9pdGVtcy1xdWVyeS1saXN0LW9ic2VydmFibGUnO1xuZXhwb3J0ICogZnJvbSAnLi9tb3VzZS1kcmFnLWZpbmlzaC1mcm9tJztcbmV4cG9ydCAqIGZyb20gJy4vbXVzdC1iZS1wcmVzZW50JztcbmV4cG9ydCAqIGZyb20gJy4vcHJlc3NlZC1vYnNlcnZhYmxlJztcbmV4cG9ydCAqIGZyb20gJy4vcHJldmVudC1kZWZhdWx0JztcbmV4cG9ydCAqIGZyb20gJy4vc3RvcC1wcm9wYWdhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVkLWZyb20tZXZlbnQnO1xuZXhwb3J0ICogZnJvbSAnLi93YXRjaCc7XG5leHBvcnQgKiBmcm9tICcuL3pvbmUtZnJlZSc7XG4iXX0=
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvb2JzZXJ2YWJsZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29udHJvbC12YWx1ZSc7XG5leHBvcnQgKiBmcm9tICcuL2RyYWctYW5kLWRyb3AtZnJvbSc7XG5leHBvcnQgKiBmcm9tICcuL2ZvY3VzLXZpc2libGUtb2JzZXJ2YWJsZSc7XG5leHBvcnQgKiBmcm9tICcuL2lmLW1hcCc7XG5leHBvcnQgKiBmcm9tICcuL2lzLWFsaXZlJztcbmV4cG9ydCAqIGZyb20gJy4vaXMtb2JzZXJ2ZWQnO1xuZXhwb3J0ICogZnJvbSAnLi9pdGVtcy1xdWVyeS1saXN0LW9ic2VydmFibGUnO1xuZXhwb3J0ICogZnJvbSAnLi9tb3VzZS1kcmFnLWZpbmlzaC1mcm9tJztcbmV4cG9ydCAqIGZyb20gJy4vbXVzdC1iZS1wcmVzZW50JztcbmV4cG9ydCAqIGZyb20gJy4vcHJlc3NlZC1vYnNlcnZhYmxlJztcbmV4cG9ydCAqIGZyb20gJy4vcHJldmVudC1kZWZhdWx0JztcbmV4cG9ydCAqIGZyb20gJy4vc2Nyb2xsLWZyb20nO1xuZXhwb3J0ICogZnJvbSAnLi9zdG9wLXByb3BhZ2F0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZWQtZnJvbS1ldmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3dhdGNoJztcbmV4cG9ydCAqIGZyb20gJy4vem9uZS1mcmVlJztcbiJdfQ==
@@ -0,0 +1,10 @@
1
+ import { tuiTypedFromEvent } from './typed-from-event';
2
+ /**
3
+ * Normalizes scroll event in case element is `html` (document.documentElement)
4
+ */
5
+ export function tuiScrollFrom(element) {
6
+ return tuiTypedFromEvent(element === element.ownerDocument.documentElement
7
+ ? element.ownerDocument
8
+ : element, `scroll`);
9
+ }
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLWZyb20uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvb2JzZXJ2YWJsZXMvc2Nyb2xsLWZyb20udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFckQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLE9BQWdCO0lBQzFDLE9BQU8saUJBQWlCLENBQ3BCLE9BQU8sS0FBSyxPQUFPLENBQUMsYUFBYSxDQUFDLGVBQWU7UUFDN0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhO1FBQ3ZCLENBQUMsQ0FBQyxPQUFPLEVBQ2IsUUFBUSxDQUNYLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHt0dWlUeXBlZEZyb21FdmVudH0gZnJvbSAnLi90eXBlZC1mcm9tLWV2ZW50JztcblxuLyoqXG4gKiBOb3JtYWxpemVzIHNjcm9sbCBldmVudCBpbiBjYXNlIGVsZW1lbnQgaXMgYGh0bWxgIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0dWlTY3JvbGxGcm9tKGVsZW1lbnQ6IEVsZW1lbnQpOiBPYnNlcnZhYmxlPEV2ZW50PiB7XG4gICAgcmV0dXJuIHR1aVR5cGVkRnJvbUV2ZW50KFxuICAgICAgICBlbGVtZW50ID09PSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4gICAgICAgICAgICA/IGVsZW1lbnQub3duZXJEb2N1bWVudFxuICAgICAgICAgICAgOiBlbGVtZW50LFxuICAgICAgICBgc2Nyb2xsYCxcbiAgICApO1xufVxuIl19
@@ -1,17 +1,24 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injector, INJECTOR, Component, ChangeDetectionStrategy, ViewEncapsulation, Inject, NgModule } from '@angular/core';
2
+ import { Injector, INJECTOR, ChangeDetectorRef, Component, ChangeDetectionStrategy, ViewEncapsulation, Inject, Self, NgModule } from '@angular/core';
3
3
  import { TUI_PARENT_ANIMATION } from '@taiga-ui/cdk/constants';
4
+ import { TuiDestroyService } from '@taiga-ui/cdk/services';
4
5
  import { TUI_ALERTS } from '@taiga-ui/cdk/tokens';
5
6
  import { POLYMORPHEUS_CONTEXT } from '@tinkoff/ng-polymorpheus';
7
+ import * as i3 from 'rxjs';
8
+ import { combineLatest } from 'rxjs';
9
+ import { takeUntil } from 'rxjs/operators';
6
10
  import * as i1 from '@angular/common';
7
11
  import { CommonModule } from '@angular/common';
8
12
  import * as i2 from '@taiga-ui/cdk/pipes';
9
13
  import { TuiMapperPipeModule } from '@taiga-ui/cdk/pipes';
10
14
 
11
15
  class TuiAlertHostComponent {
12
- constructor(alerts, injector) {
13
- this.alerts = alerts;
16
+ constructor(allAlerts, injector, destroy$, cdr) {
17
+ this.allAlerts = allAlerts;
14
18
  this.injector = injector;
19
+ this.destroy$ = destroy$;
20
+ this.cdr = cdr;
21
+ this.alerts = [];
15
22
  this.mapper = useValue => Injector.create({
16
23
  providers: [
17
24
  {
@@ -22,9 +29,19 @@ class TuiAlertHostComponent {
22
29
  parent: this.injector,
23
30
  });
24
31
  }
32
+ ngOnInit() {
33
+ // Due to this view being parallel to app content, `markForCheck` from `async` pipe
34
+ // can happen after view was checked, so calling `detectChanges` instead
35
+ combineLatest(this.allAlerts)
36
+ .pipe(takeUntil(this.destroy$))
37
+ .subscribe(alerts => {
38
+ this.alerts = alerts;
39
+ this.cdr.detectChanges();
40
+ });
41
+ }
25
42
  }
26
- TuiAlertHostComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TuiAlertHostComponent, deps: [{ token: TUI_ALERTS }, { token: INJECTOR }], target: i0.ɵɵFactoryTarget.Component });
27
- TuiAlertHostComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TuiAlertHostComponent, selector: "tui-alert-host", ngImport: i0, template: "<div\n *ngFor=\"let alert$ of alerts\"\n class=\"t-wrapper\"\n @tuiParentAnimation\n>\n <ng-container\n *ngFor=\"let item of alert$ | async\"\n [ngComponentOutlet]=\"item.component.component\"\n [ngComponentOutletInjector]=\"item | tuiMapper : mapper\"\n ></ng-container>\n</div>\n", styles: ["tui-alert-host>.t-wrapper{position:fixed;top:0;left:0;display:flex;width:100%;height:100%;flex-direction:column;pointer-events:none}tui-alert-host>.t-wrapper>*{pointer-events:auto}\n"], directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModuleFactory"] }], pipes: { "tuiMapper": i2.TuiMapperPipe, "async": i1.AsyncPipe }, animations: [TUI_PARENT_ANIMATION], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
43
+ TuiAlertHostComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TuiAlertHostComponent, deps: [{ token: TUI_ALERTS }, { token: INJECTOR }, { token: TuiDestroyService, self: true }, { token: ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
44
+ TuiAlertHostComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TuiAlertHostComponent, selector: "tui-alert-host", providers: [TuiDestroyService], ngImport: i0, template: "<div\n *ngFor=\"let alert of alerts\"\n class=\"t-wrapper\"\n @tuiParentAnimation\n>\n <ng-container\n *ngFor=\"let item of alert\"\n [ngComponentOutlet]=\"item.component.component\"\n [ngComponentOutletInjector]=\"item | tuiMapper : mapper\"\n ></ng-container>\n</div>\n", styles: ["tui-alert-host>.t-wrapper{position:fixed;top:0;left:0;display:flex;width:100%;height:100%;flex-direction:column;pointer-events:none}tui-alert-host>.t-wrapper>*{pointer-events:auto}\n"], directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModuleFactory"] }], pipes: { "tuiMapper": i2.TuiMapperPipe }, animations: [TUI_PARENT_ANIMATION], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
28
45
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TuiAlertHostComponent, decorators: [{
29
46
  type: Component,
30
47
  args: [{
@@ -34,6 +51,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
34
51
  // So that we do not force OnPush on custom alerts
35
52
  // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection
36
53
  changeDetection: ChangeDetectionStrategy.Default,
54
+ providers: [TuiDestroyService],
37
55
  animations: [TUI_PARENT_ANIMATION],
38
56
  encapsulation: ViewEncapsulation.None,
39
57
  }]
@@ -43,6 +61,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
43
61
  }] }, { type: i0.Injector, decorators: [{
44
62
  type: Inject,
45
63
  args: [INJECTOR]
64
+ }] }, { type: i3.Observable, decorators: [{
65
+ type: Self
66
+ }, {
67
+ type: Inject,
68
+ args: [TuiDestroyService]
69
+ }] }, { type: i0.ChangeDetectorRef, decorators: [{
70
+ type: Inject,
71
+ args: [ChangeDetectorRef]
46
72
  }] }]; } });
47
73
 
48
74
  class TuiAlertHostModule {
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-cdk-components-alert-host.js","sources":["../../../projects/cdk/components/alert-host/alert-host.component.ts","../../../projects/cdk/components/alert-host/alert-host.template.html","../../../projects/cdk/components/alert-host/alert-host.module.ts","../../../projects/cdk/components/alert-host/taiga-ui-cdk-components-alert-host.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n Inject,\n INJECTOR,\n Injector,\n ViewEncapsulation,\n} from '@angular/core';\nimport {TUI_PARENT_ANIMATION} from '@taiga-ui/cdk/constants';\nimport {TUI_ALERTS} from '@taiga-ui/cdk/tokens';\nimport {TuiDialog, TuiMapper} from '@taiga-ui/cdk/types';\nimport {POLYMORPHEUS_CONTEXT} from '@tinkoff/ng-polymorpheus';\nimport {Observable} from 'rxjs';\n\n@Component({\n selector: 'tui-alert-host',\n templateUrl: './alert-host.template.html',\n styleUrls: ['./alert-host.style.less'],\n // So that we do not force OnPush on custom alerts\n // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection\n changeDetection: ChangeDetectionStrategy.Default,\n animations: [TUI_PARENT_ANIMATION],\n encapsulation: ViewEncapsulation.None,\n})\nexport class TuiAlertHostComponent<T extends TuiDialog<unknown, unknown>> {\n constructor(\n @Inject(TUI_ALERTS) readonly alerts: Array<Observable<readonly T[]>>,\n @Inject(INJECTOR) private readonly injector: Injector,\n ) {}\n\n readonly mapper: TuiMapper<unknown, Injector> = useValue =>\n Injector.create({\n providers: [\n {\n provide: POLYMORPHEUS_CONTEXT,\n useValue,\n },\n ],\n parent: this.injector,\n });\n}\n","<div\n *ngFor=\"let alert$ of alerts\"\n class=\"t-wrapper\"\n @tuiParentAnimation\n>\n <ng-container\n *ngFor=\"let item of alert$ | async\"\n [ngComponentOutlet]=\"item.component.component\"\n [ngComponentOutletInjector]=\"item | tuiMapper : mapper\"\n ></ng-container>\n</div>\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {TuiMapperPipeModule} from '@taiga-ui/cdk/pipes';\n\nimport {TuiAlertHostComponent} from './alert-host.component';\n\n@NgModule({\n imports: [CommonModule, TuiMapperPipeModule],\n declarations: [TuiAlertHostComponent],\n exports: [TuiAlertHostComponent],\n})\nexport class TuiAlertHostModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"taiga-ui-cdk-components-alert-host.js","sources":["../../../projects/cdk/components/alert-host/alert-host.component.ts","../../../projects/cdk/components/alert-host/alert-host.template.html","../../../projects/cdk/components/alert-host/alert-host.module.ts","../../../projects/cdk/components/alert-host/taiga-ui-cdk-components-alert-host.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n INJECTOR,\n Injector,\n OnInit,\n Self,\n ViewEncapsulation,\n} from '@angular/core';\nimport {TUI_PARENT_ANIMATION} from '@taiga-ui/cdk/constants';\nimport {TuiDestroyService} from '@taiga-ui/cdk/services';\nimport {TUI_ALERTS} from '@taiga-ui/cdk/tokens';\nimport {TuiDialog, TuiMapper} from '@taiga-ui/cdk/types';\nimport {POLYMORPHEUS_CONTEXT} from '@tinkoff/ng-polymorpheus';\nimport {combineLatest, Observable} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\n\n@Component({\n selector: 'tui-alert-host',\n templateUrl: './alert-host.template.html',\n styleUrls: ['./alert-host.style.less'],\n // So that we do not force OnPush on custom alerts\n // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection\n changeDetection: ChangeDetectionStrategy.Default,\n providers: [TuiDestroyService],\n animations: [TUI_PARENT_ANIMATION],\n encapsulation: ViewEncapsulation.None,\n})\nexport class TuiAlertHostComponent<T extends TuiDialog<unknown, unknown>>\n implements OnInit\n{\n alerts: ReadonlyArray<readonly T[]> = [];\n\n constructor(\n @Inject(TUI_ALERTS) private readonly allAlerts: Array<Observable<readonly T[]>>,\n @Inject(INJECTOR) private readonly injector: Injector,\n @Self() @Inject(TuiDestroyService) private readonly destroy$: Observable<void>,\n @Inject(ChangeDetectorRef) private readonly cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n // Due to this view being parallel to app content, `markForCheck` from `async` pipe\n // can happen after view was checked, so calling `detectChanges` instead\n combineLatest(this.allAlerts)\n .pipe(takeUntil(this.destroy$))\n .subscribe(alerts => {\n this.alerts = alerts;\n this.cdr.detectChanges();\n });\n }\n\n readonly mapper: TuiMapper<unknown, Injector> = useValue =>\n Injector.create({\n providers: [\n {\n provide: POLYMORPHEUS_CONTEXT,\n useValue,\n },\n ],\n parent: this.injector,\n });\n}\n","<div\n *ngFor=\"let alert of alerts\"\n class=\"t-wrapper\"\n @tuiParentAnimation\n>\n <ng-container\n *ngFor=\"let item of alert\"\n [ngComponentOutlet]=\"item.component.component\"\n [ngComponentOutletInjector]=\"item | tuiMapper : mapper\"\n ></ng-container>\n</div>\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {TuiMapperPipeModule} from '@taiga-ui/cdk/pipes';\n\nimport {TuiAlertHostComponent} from './alert-host.component';\n\n@NgModule({\n imports: [CommonModule, TuiMapperPipeModule],\n declarations: [TuiAlertHostComponent],\n exports: [TuiAlertHostComponent],\n})\nexport class TuiAlertHostModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,13 +1,14 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, Component, ChangeDetectionStrategy, Inject, NgModule } from '@angular/core';
2
+ import { InjectionToken, ChangeDetectorRef, Component, ChangeDetectionStrategy, Inject, Self, NgModule } from '@angular/core';
3
3
  import * as i7 from '@angular/platform-browser';
4
4
  import { Title } from '@angular/platform-browser';
5
5
  import { HISTORY } from '@ng-web-apis/common';
6
6
  import { TUI_PARENT_ANIMATION } from '@taiga-ui/cdk/constants';
7
+ import { TuiDestroyService } from '@taiga-ui/cdk/services';
7
8
  import { TUI_DIALOGS } from '@taiga-ui/cdk/tokens';
8
9
  import * as i6 from 'rxjs';
9
10
  import { of, combineLatest } from 'rxjs';
10
- import { map } from 'rxjs/operators';
11
+ import { map, takeUntil } from 'rxjs/operators';
11
12
  import * as i1 from '@angular/common';
12
13
  import { CommonModule } from '@angular/common';
13
14
  import * as i2 from '@taiga-ui/cdk/directives/focus-trap';
@@ -28,14 +29,26 @@ const TUI_DIALOG_CLOSES_ON_BACK = new InjectionToken('[TUI_DIALOG_CLOSES_ON_BACK
28
29
  const FAKE_HISTORY_STATE = { label: 'ignoreMe' };
29
30
  const isFakeHistoryState = (historyState) => (historyState === null || historyState === void 0 ? void 0 : historyState.label) === FAKE_HISTORY_STATE.label;
30
31
  class TuiDialogHostComponent {
31
- constructor(isDialogClosesOnBack$, dialogsByType, historyRef, titleService) {
32
+ constructor(isDialogClosesOnBack$, dialogsByType, historyRef, titleService, destroy$, cdr) {
32
33
  this.isDialogClosesOnBack$ = isDialogClosesOnBack$;
33
34
  this.dialogsByType = dialogsByType;
34
35
  this.historyRef = historyRef;
35
36
  this.titleService = titleService;
36
- this.dialogs$ = combineLatest(this.dialogsByType).pipe(map(allTypesDialogs => new Array()
37
- .concat(...allTypesDialogs)
38
- .sort((a, b) => a.createdAt - b.createdAt)));
37
+ this.destroy$ = destroy$;
38
+ this.cdr = cdr;
39
+ this.dialogs = [];
40
+ }
41
+ ngOnInit() {
42
+ // Due to this view being parallel to app content, `markForCheck` from `async` pipe
43
+ // can happen after view was checked, so calling `detectChanges` instead
44
+ combineLatest(this.dialogsByType)
45
+ .pipe(map(arr => new Array()
46
+ .concat(...arr)
47
+ .sort((a, b) => a.createdAt - b.createdAt)), takeUntil(this.destroy$))
48
+ .subscribe(dialogs => {
49
+ this.dialogs = dialogs;
50
+ this.cdr.detectChanges();
51
+ });
39
52
  }
40
53
  closeLast(dialogs, isDialogClosesOnBack) {
41
54
  if (!isDialogClosesOnBack) {
@@ -62,8 +75,8 @@ class TuiDialogHostComponent {
62
75
  }
63
76
  }
64
77
  }
65
- TuiDialogHostComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TuiDialogHostComponent, deps: [{ token: TUI_DIALOG_CLOSES_ON_BACK }, { token: TUI_DIALOGS }, { token: HISTORY }, { token: Title }], target: i0.ɵɵFactoryTarget.Component });
66
- TuiDialogHostComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TuiDialogHostComponent, selector: "tui-dialog-host", ngImport: i0, template: "<ng-container *ngIf=\"dialogs$ | async as dialogs\">\n <section\n *ngFor=\"let item of dialogs\"\n tuiFocusTrap\n tuiScrollRef\n tuiOverscroll=\"all\"\n role=\"dialog\"\n aria-modal=\"true\"\n class=\"t-dialog\"\n @tuiParentAnimation\n [attr.aria-labelledby]=\"item.id\"\n >\n <ng-container *polymorpheusOutlet=\"item.component; context: item\"></ng-container>\n </section>\n <div\n *tuiLet=\"isDialogClosesOnBack$ | async as isDialogClosesOnBack\"\n class=\"t-overlay\"\n [class.t-overlay_visible]=\"dialogs.length\"\n (window:popstate)=\"closeLast(dialogs, !!isDialogClosesOnBack)\"\n (transitionend)=\"onDialog($event, !!dialogs.length, !!isDialogClosesOnBack)\"\n ></div>\n</ng-container>\n", styles: [":host{position:fixed;left:0;bottom:0;width:100%;height:0}.t-overlay,.t-dialog{position:fixed;top:0;left:0;right:0;bottom:0;display:flex;align-items:flex-start;outline:none;overflow:auto;overflow:overlay}.t-dialog{bottom:auto;height:100%}.t-overlay{height:100%;pointer-events:none;touch-action:none;opacity:0;letter-spacing:normal;transition:opacity var(--tui-duration),letter-spacing .01s;background:rgba(0,0,0,.75);-webkit-backdrop-filter:var(--tui-backdrop, none);backdrop-filter:var(--tui-backdrop, none)}.t-overlay_visible{opacity:1;letter-spacing:1px}.t-dialog:last-of-type{z-index:1}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.TuiFocusTrapDirective, selector: "[tuiFocusTrap]" }, { type: i3.TuiOverscrollDirective, selector: "[tuiOverscroll]", inputs: ["tuiOverscroll"] }, { type: i4.PolymorpheusOutletDirective, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { type: i5.TuiLetDirective, selector: "[tuiLet]", inputs: ["tuiLet"] }], pipes: { "async": i1.AsyncPipe }, animations: [TUI_PARENT_ANIMATION], changeDetection: i0.ChangeDetectionStrategy.Default });
78
+ TuiDialogHostComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TuiDialogHostComponent, deps: [{ token: TUI_DIALOG_CLOSES_ON_BACK }, { token: TUI_DIALOGS }, { token: HISTORY }, { token: Title }, { token: TuiDestroyService, self: true }, { token: ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
79
+ TuiDialogHostComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TuiDialogHostComponent, selector: "tui-dialog-host", providers: [TuiDestroyService], ngImport: i0, template: "<section\n *ngFor=\"let item of dialogs\"\n tuiFocusTrap\n tuiScrollRef\n tuiOverscroll=\"all\"\n role=\"dialog\"\n aria-modal=\"true\"\n class=\"t-dialog\"\n @tuiParentAnimation\n [attr.aria-labelledby]=\"item.id\"\n>\n <ng-container *polymorpheusOutlet=\"item.component; context: item\"></ng-container>\n</section>\n<div\n *tuiLet=\"isDialogClosesOnBack$ | async as isDialogClosesOnBack\"\n class=\"t-overlay\"\n [class.t-overlay_visible]=\"dialogs.length\"\n (window:popstate)=\"closeLast(dialogs, !!isDialogClosesOnBack)\"\n (transitionend)=\"onDialog($event, !!dialogs.length, !!isDialogClosesOnBack)\"\n></div>\n", styles: [":host{position:fixed;left:0;bottom:0;width:100%;height:0}.t-overlay,.t-dialog{position:fixed;top:0;left:0;right:0;bottom:0;display:flex;align-items:flex-start;outline:none;overflow:auto;overflow:overlay}.t-dialog{bottom:auto;height:100%}.t-overlay{height:100%;pointer-events:none;touch-action:none;opacity:0;letter-spacing:normal;transition:opacity var(--tui-duration),letter-spacing .01s;background:rgba(0,0,0,.75);-webkit-backdrop-filter:var(--tui-backdrop, none);backdrop-filter:var(--tui-backdrop, none)}.t-overlay_visible{opacity:1;letter-spacing:1px}.t-dialog:last-of-type{z-index:1}\n"], directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.TuiFocusTrapDirective, selector: "[tuiFocusTrap]" }, { type: i3.TuiOverscrollDirective, selector: "[tuiOverscroll]", inputs: ["tuiOverscroll"] }, { type: i4.PolymorpheusOutletDirective, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { type: i5.TuiLetDirective, selector: "[tuiLet]", inputs: ["tuiLet"] }], pipes: { "async": i1.AsyncPipe }, animations: [TUI_PARENT_ANIMATION], changeDetection: i0.ChangeDetectionStrategy.Default });
67
80
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TuiDialogHostComponent, decorators: [{
68
81
  type: Component,
69
82
  args: [{
@@ -73,6 +86,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
73
86
  // So that we do not force OnPush on custom dialogs
74
87
  // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection
75
88
  changeDetection: ChangeDetectionStrategy.Default,
89
+ providers: [TuiDestroyService],
76
90
  animations: [TUI_PARENT_ANIMATION],
77
91
  }]
78
92
  }], ctorParameters: function () { return [{ type: i6.Observable, decorators: [{
@@ -87,6 +101,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
87
101
  }] }, { type: i7.Title, decorators: [{
88
102
  type: Inject,
89
103
  args: [Title]
104
+ }] }, { type: i6.Observable, decorators: [{
105
+ type: Self
106
+ }, {
107
+ type: Inject,
108
+ args: [TuiDestroyService]
109
+ }] }, { type: i0.ChangeDetectorRef, decorators: [{
110
+ type: Inject,
111
+ args: [ChangeDetectorRef]
90
112
  }] }]; } });
91
113
 
92
114
  class TuiDialogHostModule {
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-cdk-components-dialog-host.js","sources":["../../../projects/cdk/components/dialog-host/dialog-host.component.ts","../../../projects/cdk/components/dialog-host/dialog-host.template.html","../../../projects/cdk/components/dialog-host/dialog-host.module.ts","../../../projects/cdk/components/dialog-host/taiga-ui-cdk-components-dialog-host.ts"],"sourcesContent":["import {ChangeDetectionStrategy, Component, Inject, InjectionToken} from '@angular/core';\nimport {Title} from '@angular/platform-browser';\nimport {HISTORY} from '@ng-web-apis/common';\nimport {TUI_PARENT_ANIMATION} from '@taiga-ui/cdk/constants';\nimport {TUI_DIALOGS} from '@taiga-ui/cdk/tokens';\nimport {TuiDialog} from '@taiga-ui/cdk/types';\nimport {combineLatest, Observable, of} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\n/**\n * Is closing dialog on browser backward navigation enabled\n */\nexport const TUI_DIALOG_CLOSES_ON_BACK = new InjectionToken<Observable<boolean>>(\n '[TUI_DIALOG_CLOSES_ON_BACK]',\n {\n factory: () => of(false),\n },\n);\n\nconst FAKE_HISTORY_STATE = {label: 'ignoreMe'} as const;\nconst isFakeHistoryState = (\n historyState: Record<string, unknown>,\n): historyState is typeof FAKE_HISTORY_STATE =>\n historyState?.label === FAKE_HISTORY_STATE.label;\n\n@Component({\n selector: 'tui-dialog-host',\n templateUrl: './dialog-host.template.html',\n styleUrls: ['./dialog-host.style.less'],\n // So that we do not force OnPush on custom dialogs\n // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection\n changeDetection: ChangeDetectionStrategy.Default,\n animations: [TUI_PARENT_ANIMATION],\n})\nexport class TuiDialogHostComponent<T extends TuiDialog<unknown, unknown>> {\n readonly dialogs$ = combineLatest(this.dialogsByType).pipe(\n map(allTypesDialogs =>\n new Array<T>()\n .concat(...allTypesDialogs)\n .sort((a, b) => a.createdAt - b.createdAt),\n ),\n );\n\n constructor(\n @Inject(TUI_DIALOG_CLOSES_ON_BACK)\n readonly isDialogClosesOnBack$: Observable<boolean>,\n @Inject(TUI_DIALOGS)\n private readonly dialogsByType: Array<Observable<readonly T[]>>,\n @Inject(HISTORY) private readonly historyRef: History,\n @Inject(Title) private readonly titleService: Title,\n ) {}\n\n closeLast(dialogs: readonly T[], isDialogClosesOnBack: boolean): void {\n if (!isDialogClosesOnBack) {\n return;\n }\n\n const [last] = dialogs.slice(-1);\n\n if (!last) {\n return;\n }\n\n if (dialogs.length > 1) {\n this.historyRef.pushState(FAKE_HISTORY_STATE, this.titleService.getTitle());\n }\n\n last.$implicit.complete();\n }\n\n onDialog(\n {propertyName}: TransitionEvent,\n popupOpened: boolean,\n isDialogClosesOnBack: boolean,\n ): void {\n if (!isDialogClosesOnBack || propertyName !== 'letter-spacing') {\n return;\n }\n\n if (popupOpened) {\n this.historyRef.pushState(FAKE_HISTORY_STATE, this.titleService.getTitle());\n } else if (isFakeHistoryState(this.historyRef.state)) {\n this.historyRef.back();\n }\n }\n}\n","<ng-container *ngIf=\"dialogs$ | async as dialogs\">\n <section\n *ngFor=\"let item of dialogs\"\n tuiFocusTrap\n tuiScrollRef\n tuiOverscroll=\"all\"\n role=\"dialog\"\n aria-modal=\"true\"\n class=\"t-dialog\"\n @tuiParentAnimation\n [attr.aria-labelledby]=\"item.id\"\n >\n <ng-container *polymorpheusOutlet=\"item.component; context: item\"></ng-container>\n </section>\n <div\n *tuiLet=\"isDialogClosesOnBack$ | async as isDialogClosesOnBack\"\n class=\"t-overlay\"\n [class.t-overlay_visible]=\"dialogs.length\"\n (window:popstate)=\"closeLast(dialogs, !!isDialogClosesOnBack)\"\n (transitionend)=\"onDialog($event, !!dialogs.length, !!isDialogClosesOnBack)\"\n ></div>\n</ng-container>\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {TuiLetModule} from '@taiga-ui/cdk/directives';\nimport {TuiFocusTrapModule} from '@taiga-ui/cdk/directives/focus-trap';\nimport {TuiOverscrollModule} from '@taiga-ui/cdk/directives/overscroll';\nimport {PolymorpheusModule} from '@tinkoff/ng-polymorpheus';\n\nimport {TuiDialogHostComponent} from './dialog-host.component';\n\n@NgModule({\n imports: [\n CommonModule,\n PolymorpheusModule,\n TuiOverscrollModule,\n TuiFocusTrapModule,\n TuiLetModule,\n ],\n declarations: [TuiDialogHostComponent],\n exports: [TuiDialogHostComponent],\n})\nexport class TuiDialogHostModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AASA;;AAEG;MACU,yBAAyB,GAAG,IAAI,cAAc,CACvD,6BAA6B,EAC7B;AACI,IAAA,OAAO,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC;AAC3B,CAAA,EACH;AAEF,MAAM,kBAAkB,GAAG,EAAC,KAAK,EAAE,UAAU,EAAU,CAAC;AACxD,MAAM,kBAAkB,GAAG,CACvB,YAAqC,KAErC,CAAA,YAAY,aAAZ,YAAY,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAZ,YAAY,CAAE,KAAK,MAAK,kBAAkB,CAAC,KAAK,CAAC;MAWxC,sBAAsB,CAAA;AAS/B,IAAA,WAAA,CAEa,qBAA0C,EAElC,aAA8C,EAC7B,UAAmB,EACrB,YAAmB,EAAA;QAJ1C,IAAqB,CAAA,qBAAA,GAArB,qBAAqB,CAAqB;QAElC,IAAa,CAAA,aAAA,GAAb,aAAa,CAAiC;QAC7B,IAAU,CAAA,UAAA,GAAV,UAAU,CAAS;QACrB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAO;AAd9C,QAAA,IAAA,CAAA,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CACtD,GAAG,CAAC,eAAe,IACf,IAAI,KAAK,EAAK;aACT,MAAM,CAAC,GAAG,eAAe,CAAC;AAC1B,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CACjD,CACJ,CAAC;KASE;IAEJ,SAAS,CAAC,OAAqB,EAAE,oBAA6B,EAAA;QAC1D,IAAI,CAAC,oBAAoB,EAAE;YACvB,OAAO;AACV,SAAA;QAED,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjC,IAAI,CAAC,IAAI,EAAE;YACP,OAAO;AACV,SAAA;AAED,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC/E,SAAA;AAED,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;KAC7B;AAED,IAAA,QAAQ,CACJ,EAAC,YAAY,EAAkB,EAC/B,WAAoB,EACpB,oBAA6B,EAAA;AAE7B,QAAA,IAAI,CAAC,oBAAoB,IAAI,YAAY,KAAK,gBAAgB,EAAE;YAC5D,OAAO;AACV,SAAA;AAED,QAAA,IAAI,WAAW,EAAE;AACb,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC/E,SAAA;aAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;AAClD,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AAC1B,SAAA;KACJ;;AAlDQ,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,kBAUnB,yBAAyB,EAAA,EAAA,EAAA,KAAA,EAEzB,WAAW,EAEX,EAAA,EAAA,KAAA,EAAA,OAAO,aACP,KAAK,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAfR,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EClCnC,QAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,gzBAsBA,EDUgB,MAAA,EAAA,CAAA,ilBAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,2BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,OAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,UAAA,EAAA,CAAC,oBAAoB,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,OAAA,EAAA,CAAA,CAAA;4FAEzB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBATlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,WAAW,EAAE,6BAA6B;oBAC1C,SAAS,EAAE,CAAC,0BAA0B,CAAC;;;oBAGvC,eAAe,EAAE,uBAAuB,CAAC,OAAO;oBAChD,UAAU,EAAE,CAAC,oBAAoB,CAAC;AACrC,iBAAA,CAAA;;0BAWQ,MAAM;2BAAC,yBAAyB,CAAA;8BAGD,KAAK,EAAA,UAAA,EAAA,CAAA;0BADpC,MAAM;2BAAC,WAAW,CAAA;8BAE2B,OAAO,EAAA,UAAA,EAAA,CAAA;0BAApD,MAAM;2BAAC,OAAO,CAAA;;0BACd,MAAM;2BAAC,KAAK,CAAA;;;ME7BR,mBAAmB,CAAA;;iHAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;kHAAnB,mBAAmB,EAAA,YAAA,EAAA,CAHb,sBAAsB,CAAA,EAAA,OAAA,EAAA,CANjC,YAAY;QACZ,kBAAkB;QAClB,mBAAmB;QACnB,kBAAkB;AAClB,QAAA,YAAY,aAGN,sBAAsB,CAAA,EAAA,CAAA,CAAA;AAEvB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,EAVnB,OAAA,EAAA,CAAA;YACL,YAAY;YACZ,kBAAkB;YAClB,mBAAmB;YACnB,kBAAkB;YAClB,YAAY;AACf,SAAA,CAAA,EAAA,CAAA,CAAA;4FAIQ,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAX/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE;wBACL,YAAY;wBACZ,kBAAkB;wBAClB,mBAAmB;wBACnB,kBAAkB;wBAClB,YAAY;AACf,qBAAA;oBACD,YAAY,EAAE,CAAC,sBAAsB,CAAC;oBACtC,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACpC,iBAAA,CAAA;;;ACnBD;;AAEG;;;;"}
1
+ {"version":3,"file":"taiga-ui-cdk-components-dialog-host.js","sources":["../../../projects/cdk/components/dialog-host/dialog-host.component.ts","../../../projects/cdk/components/dialog-host/dialog-host.template.html","../../../projects/cdk/components/dialog-host/dialog-host.module.ts","../../../projects/cdk/components/dialog-host/taiga-ui-cdk-components-dialog-host.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n InjectionToken,\n OnInit,\n Self,\n} from '@angular/core';\nimport {Title} from '@angular/platform-browser';\nimport {HISTORY} from '@ng-web-apis/common';\nimport {TUI_PARENT_ANIMATION} from '@taiga-ui/cdk/constants';\nimport {TuiDestroyService} from '@taiga-ui/cdk/services';\nimport {TUI_DIALOGS} from '@taiga-ui/cdk/tokens';\nimport {TuiDialog} from '@taiga-ui/cdk/types';\nimport {combineLatest, Observable, of} from 'rxjs';\nimport {map, takeUntil} from 'rxjs/operators';\n\n/**\n * Is closing dialog on browser backward navigation enabled\n */\nexport const TUI_DIALOG_CLOSES_ON_BACK = new InjectionToken<Observable<boolean>>(\n '[TUI_DIALOG_CLOSES_ON_BACK]',\n {\n factory: () => of(false),\n },\n);\n\nconst FAKE_HISTORY_STATE = {label: 'ignoreMe'} as const;\nconst isFakeHistoryState = (\n historyState: Record<string, unknown>,\n): historyState is typeof FAKE_HISTORY_STATE =>\n historyState?.label === FAKE_HISTORY_STATE.label;\n\n@Component({\n selector: 'tui-dialog-host',\n templateUrl: './dialog-host.template.html',\n styleUrls: ['./dialog-host.style.less'],\n // So that we do not force OnPush on custom dialogs\n // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection\n changeDetection: ChangeDetectionStrategy.Default,\n providers: [TuiDestroyService],\n animations: [TUI_PARENT_ANIMATION],\n})\nexport class TuiDialogHostComponent<T extends TuiDialog<unknown, unknown>>\n implements OnInit\n{\n dialogs: readonly T[] = [];\n\n constructor(\n @Inject(TUI_DIALOG_CLOSES_ON_BACK)\n readonly isDialogClosesOnBack$: Observable<boolean>,\n @Inject(TUI_DIALOGS)\n private readonly dialogsByType: Array<Observable<readonly T[]>>,\n @Inject(HISTORY) private readonly historyRef: History,\n @Inject(Title) private readonly titleService: Title,\n @Self() @Inject(TuiDestroyService) private readonly destroy$: Observable<void>,\n @Inject(ChangeDetectorRef) private readonly cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n // Due to this view being parallel to app content, `markForCheck` from `async` pipe\n // can happen after view was checked, so calling `detectChanges` instead\n combineLatest(this.dialogsByType)\n .pipe(\n map(arr =>\n new Array<T>()\n .concat(...arr)\n .sort((a, b) => a.createdAt - b.createdAt),\n ),\n takeUntil(this.destroy$),\n )\n .subscribe(dialogs => {\n this.dialogs = dialogs;\n this.cdr.detectChanges();\n });\n }\n\n closeLast(dialogs: readonly T[], isDialogClosesOnBack: boolean): void {\n if (!isDialogClosesOnBack) {\n return;\n }\n\n const [last] = dialogs.slice(-1);\n\n if (!last) {\n return;\n }\n\n if (dialogs.length > 1) {\n this.historyRef.pushState(FAKE_HISTORY_STATE, this.titleService.getTitle());\n }\n\n last.$implicit.complete();\n }\n\n onDialog(\n {propertyName}: TransitionEvent,\n popupOpened: boolean,\n isDialogClosesOnBack: boolean,\n ): void {\n if (!isDialogClosesOnBack || propertyName !== 'letter-spacing') {\n return;\n }\n\n if (popupOpened) {\n this.historyRef.pushState(FAKE_HISTORY_STATE, this.titleService.getTitle());\n } else if (isFakeHistoryState(this.historyRef.state)) {\n this.historyRef.back();\n }\n }\n}\n","<section\n *ngFor=\"let item of dialogs\"\n tuiFocusTrap\n tuiScrollRef\n tuiOverscroll=\"all\"\n role=\"dialog\"\n aria-modal=\"true\"\n class=\"t-dialog\"\n @tuiParentAnimation\n [attr.aria-labelledby]=\"item.id\"\n>\n <ng-container *polymorpheusOutlet=\"item.component; context: item\"></ng-container>\n</section>\n<div\n *tuiLet=\"isDialogClosesOnBack$ | async as isDialogClosesOnBack\"\n class=\"t-overlay\"\n [class.t-overlay_visible]=\"dialogs.length\"\n (window:popstate)=\"closeLast(dialogs, !!isDialogClosesOnBack)\"\n (transitionend)=\"onDialog($event, !!dialogs.length, !!isDialogClosesOnBack)\"\n></div>\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {TuiLetModule} from '@taiga-ui/cdk/directives';\nimport {TuiFocusTrapModule} from '@taiga-ui/cdk/directives/focus-trap';\nimport {TuiOverscrollModule} from '@taiga-ui/cdk/directives/overscroll';\nimport {PolymorpheusModule} from '@tinkoff/ng-polymorpheus';\n\nimport {TuiDialogHostComponent} from './dialog-host.component';\n\n@NgModule({\n imports: [\n CommonModule,\n PolymorpheusModule,\n TuiOverscrollModule,\n TuiFocusTrapModule,\n TuiLetModule,\n ],\n declarations: [TuiDialogHostComponent],\n exports: [TuiDialogHostComponent],\n})\nexport class TuiDialogHostModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -127,6 +127,15 @@ function tuiPreventDefault() {
127
127
  return tap(event => event.preventDefault());
128
128
  }
129
129
 
130
+ /**
131
+ * Normalizes scroll event in case element is `html` (document.documentElement)
132
+ */
133
+ function tuiScrollFrom(element) {
134
+ return tuiTypedFromEvent(element === element.ownerDocument.documentElement
135
+ ? element.ownerDocument
136
+ : element, `scroll`);
137
+ }
138
+
130
139
  function tuiStopPropagation() {
131
140
  return tap(e => {
132
141
  e.stopPropagation();
@@ -157,5 +166,5 @@ function tuiZoneOptimized(ngZone) {
157
166
  * Generated bundle index. Do not edit.
158
167
  */
159
168
 
160
- export { TuiDragStage, TuiDragState, tuiControlValue, tuiDragAndDropFrom, tuiFocusVisibleObservable, tuiIfMap, tuiIsAlive, tuiIsObserved, tuiItemsQueryListObservable, tuiMouseDragFinishFrom, tuiMustBePresent, tuiPressedObservable, tuiPreventDefault, tuiQueryListChanges, tuiStopPropagation, tuiTypedFromEvent, tuiWatch, tuiZoneOptimized, tuiZonefree, tuiZonefull };
169
+ export { TuiDragStage, TuiDragState, tuiControlValue, tuiDragAndDropFrom, tuiFocusVisibleObservable, tuiIfMap, tuiIsAlive, tuiIsObserved, tuiItemsQueryListObservable, tuiMouseDragFinishFrom, tuiMustBePresent, tuiPressedObservable, tuiPreventDefault, tuiQueryListChanges, tuiScrollFrom, tuiStopPropagation, tuiTypedFromEvent, tuiWatch, tuiZoneOptimized, tuiZonefree, tuiZonefull };
161
170
  //# sourceMappingURL=taiga-ui-cdk-observables.js.map