@alauda/ui 7.2.1-beta.8 → 7.2.1-beta.9

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,63 +1,30 @@
1
- import { ComponentType, Overlay, OverlayRef } from '@angular/cdk/overlay';
2
- import { CdkPortalOutlet, TemplatePortal } from '@angular/cdk/portal';
3
- import { AfterViewInit, ChangeDetectorRef, EventEmitter, InjectionToken, Injector, OnChanges, OnDestroy, OnInit, SimpleChanges, TemplateRef, ViewContainerRef } from '@angular/core';
4
- import { Observable, Subject } from 'rxjs';
5
- import { DrawerRef, DrawerSize } from './drawer-ref';
1
+ import { ComponentType } from '@angular/cdk/overlay';
2
+ import { AfterViewInit, EventEmitter, OnChanges, SimpleChanges, TemplateRef } from '@angular/core';
3
+ import { DrawerService } from '../drawer.service';
4
+ import { DrawerSize } from '../types';
6
5
  import * as i0 from "@angular/core";
7
- export declare const DATA: InjectionToken<unknown>;
8
- export declare class DrawerComponent<T = ComponentType<unknown>, R = unknown, D = unknown> extends DrawerRef<T, R> implements OnInit, AfterViewInit, OnChanges, OnDestroy {
9
- private readonly viewContainerRef;
10
- private readonly overlay;
11
- private readonly injector;
12
- private readonly cdr;
6
+ export declare class DrawerComponent implements AfterViewInit, OnChanges {
7
+ private readonly drawerService;
13
8
  title: string | TemplateRef<unknown>;
14
9
  footer: string | TemplateRef<unknown>;
15
10
  size: DrawerSize;
16
11
  offsetY: string;
17
12
  visible: boolean;
18
- content: TemplateRef<T> | ComponentType<T>;
13
+ content: TemplateRef<unknown> | ComponentType<unknown>;
19
14
  hideOnClickOutside: boolean;
20
15
  showClose: boolean;
21
16
  drawerClass: string;
22
17
  mask: boolean;
23
18
  maskClosable: boolean;
24
19
  divider: boolean;
25
- private _value;
26
- set width(value: number);
27
- get width(): number;
28
- get drawerClasses(): Record<string, boolean>;
29
- private readonly afterClosed$;
30
- get afterClosed(): Observable<R>;
31
- private readonly afterOpen$;
32
- get afterOpen(): Observable<void>;
33
- drawerViewInit: EventEmitter<void>;
34
20
  readonly close: EventEmitter<MouseEvent>;
35
- drawerTemplate: TemplateRef<void>;
36
- bodyPortalOutlet: CdkPortalOutlet;
37
- titleTemplate: TemplateRef<T>;
38
- contentTemplate: TemplateRef<T> | ComponentType<T>;
39
- footerTemplate: TemplateRef<T>;
40
- onDestroy$: Subject<void>;
41
- isTemplateRef: (label: any) => label is TemplateRef<unknown>;
42
- componentInstance: T | null;
43
- contentParams: D;
44
- overlayRef: OverlayRef;
45
- portal: TemplatePortal;
46
- templateContext: {};
47
- get transform(): string;
48
- constructor(viewContainerRef: ViewContainerRef, overlay: Overlay, injector: Injector, cdr: ChangeDetectorRef);
49
- ngOnInit(): void;
21
+ private readonly titleTemplate;
22
+ private readonly contentTemplateOrComponent;
23
+ private readonly footerTemplate;
24
+ constructor(drawerService: DrawerService);
50
25
  ngOnChanges(changes: SimpleChanges): void;
51
26
  ngAfterViewInit(): void;
52
- private attachOverlay;
53
- private getOverlayConfig;
54
- private attachBodyContent;
55
- private updateBodyOverflow;
56
- open(): void;
57
- dispose(result?: R): void;
58
- private disposeOverlay;
59
- maskClick(): void;
60
- ngOnDestroy(): void;
61
- static ɵfac: i0.ɵɵFactoryDeclaration<DrawerComponent<any, any, any>, never>;
62
- static ɵcmp: i0.ɵɵComponentDeclaration<DrawerComponent<any, any, any>, "aui-drawer", never, { "title": { "alias": "title"; "required": false; }; "footer": { "alias": "footer"; "required": false; }; "size": { "alias": "size"; "required": false; }; "offsetY": { "alias": "offsetY"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "content": { "alias": "content"; "required": false; }; "hideOnClickOutside": { "alias": "hideOnClickOutside"; "required": false; }; "showClose": { "alias": "showClose"; "required": false; }; "drawerClass": { "alias": "drawerClass"; "required": false; }; "mask": { "alias": "mask"; "required": false; }; "maskClosable": { "alias": "maskClosable"; "required": false; }; "divider": { "alias": "divider"; "required": false; }; "width": { "alias": "width"; "required": false; }; }, { "drawerViewInit": "drawerViewInit"; "close": "close"; }, ["titleTemplate", "contentTemplate", "footerTemplate"], never, true, never>;
27
+ private open;
28
+ static ɵfac: i0.ɵɵFactoryDeclaration<DrawerComponent, never>;
29
+ static ɵcmp: i0.ɵɵComponentDeclaration<DrawerComponent, "aui-drawer", never, { "title": { "alias": "title"; "required": false; }; "footer": { "alias": "footer"; "required": false; }; "size": { "alias": "size"; "required": false; }; "offsetY": { "alias": "offsetY"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "content": { "alias": "content"; "required": false; }; "hideOnClickOutside": { "alias": "hideOnClickOutside"; "required": false; }; "showClose": { "alias": "showClose"; "required": false; }; "drawerClass": { "alias": "drawerClass"; "required": false; }; "mask": { "alias": "mask"; "required": false; }; "maskClosable": { "alias": "maskClosable"; "required": false; }; "divider": { "alias": "divider"; "required": false; }; }, { "close": "close"; }, ["titleTemplate", "contentTemplateOrComponent", "footerTemplate"], never, true, never>;
63
30
  }
@@ -0,0 +1,32 @@
1
+ import { AnimationEvent } from '@angular/animations';
2
+ import { ComponentType } from '@angular/cdk/overlay';
3
+ import { CdkPortalOutlet } from '@angular/cdk/portal';
4
+ import { ChangeDetectorRef, EventEmitter, InjectionToken, Injector } from '@angular/core';
5
+ import { Subject } from 'rxjs';
6
+ import { DrawerOptions } from '../../types';
7
+ import * as i0 from "@angular/core";
8
+ export declare const DATA: InjectionToken<unknown>;
9
+ export declare const duration = "300ms";
10
+ type Step = 'showStart' | 'showDone' | 'hideStart' | 'hideDone';
11
+ export declare class DrawerInternalComponent<T = ComponentType<unknown>> {
12
+ private readonly cdr;
13
+ private readonly injector;
14
+ maskClick: EventEmitter<MouseEvent>;
15
+ closeClick: EventEmitter<any>;
16
+ bodyPortalOutlet: CdkPortalOutlet;
17
+ animationStep$: Subject<Step>;
18
+ options: DrawerOptions;
19
+ showHide: string;
20
+ get drawerClasses(): Record<string, boolean>;
21
+ get width(): number;
22
+ isTemplateRef: (label: any) => label is import("@angular/core").TemplateRef<unknown>;
23
+ constructor(cdr: ChangeDetectorRef, injector: Injector);
24
+ ngAfterViewInit(): void;
25
+ private attachBodyContent;
26
+ onAnimation(event: AnimationEvent): void;
27
+ show(): void;
28
+ hide(): void;
29
+ static ɵfac: i0.ɵɵFactoryDeclaration<DrawerInternalComponent<any>, never>;
30
+ static ɵcmp: i0.ɵɵComponentDeclaration<DrawerInternalComponent<any>, "ng-component", never, {}, { "maskClick": "maskClick"; "closeClick": "closeClick"; }, never, never, true, never>;
31
+ }
32
+ export {};
@@ -0,0 +1,12 @@
1
+ import { Observable } from 'rxjs';
2
+ import { DrawerInternalComponent } from './component/internal/internal.component';
3
+ export declare class DrawerRef<R = any> {
4
+ drawerInstance: DrawerInternalComponent;
5
+ private result;
6
+ private readonly afterOpen$;
7
+ private readonly afterClosed$;
8
+ get afterOpen(): Observable<void>;
9
+ get afterClosed(): Observable<R>;
10
+ constructor(drawerInstance: DrawerInternalComponent);
11
+ dispose(result?: R): void;
12
+ }
@@ -4,7 +4,7 @@ import * as i2 from "../icon/icon.module";
4
4
  import * as i3 from "@angular/cdk/overlay";
5
5
  import * as i4 from "@angular/cdk/portal";
6
6
  import * as i5 from "./component/drawer.component";
7
- import * as i6 from "./component/helper-directives";
7
+ import * as i6 from "./helper-directives";
8
8
  export declare class DrawerModule {
9
9
  static ɵfac: i0.ɵɵFactoryDeclaration<DrawerModule, never>;
10
10
  static ɵmod: i0.ɵɵNgModuleDeclaration<DrawerModule, never, [typeof i1.CommonModule, typeof i2.IconModule, typeof i3.OverlayModule, typeof i4.PortalModule, typeof i5.DrawerComponent, typeof i6.DrawerHeaderDirective, typeof i6.DrawerContentDirective, typeof i6.DrawerFooterDirective], [typeof i5.DrawerComponent, typeof i6.DrawerHeaderDirective, typeof i6.DrawerContentDirective, typeof i6.DrawerFooterDirective]>;
@@ -1,34 +1,25 @@
1
1
  import { Overlay } from '@angular/cdk/overlay';
2
- import { ComponentType } from '@angular/cdk/portal';
3
- import { TemplateRef } from '@angular/core';
4
- import { DrawerComponent } from './component/drawer.component';
5
- import { DrawerSize } from '.';
2
+ import { ComponentRef } from '@angular/core';
3
+ import { Subject } from 'rxjs';
4
+ import { DrawerInternalComponent } from './component/internal/internal.component';
5
+ import { DrawerRef } from './drawer-ref';
6
+ import { DrawerOptions } from './types';
6
7
  import * as i0 from "@angular/core";
7
- export interface DrawerOptions<T = any, D = any> {
8
- title?: string | TemplateRef<unknown>;
9
- width?: number;
10
- content?: ComponentType<T> | TemplateRef<T>;
11
- contentParams?: D;
12
- footer?: string | TemplateRef<unknown>;
13
- offsetY?: string;
14
- divider?: boolean;
15
- drawerClass?: string;
16
- size?: DrawerSize;
17
- visible?: boolean;
18
- hideOnClickOutside?: boolean;
19
- showClose?: boolean;
20
- mask?: boolean;
21
- maskClosable?: boolean;
22
- }
23
8
  export declare class DrawerService {
24
9
  private readonly overlay;
25
- private drawerRef;
26
10
  private overlayRef;
27
- private readonly unsubscribe$;
11
+ options: DrawerOptions;
12
+ onDestroy$: Subject<void>;
13
+ drawerCpt: ComponentRef<DrawerInternalComponent>;
28
14
  constructor(overlay: Overlay);
29
- open<T = unknown>(options: DrawerOptions<T>): DrawerComponent<ComponentType<unknown>, unknown, unknown>;
15
+ open(options: DrawerOptions): DrawerRef<any>;
16
+ close(): void;
30
17
  updateOptions(options: DrawerOptions): void;
18
+ private createOverlay;
31
19
  private createDrawer;
20
+ private getOverlayConfig;
21
+ private disposeOverlay;
22
+ ngOnDestroy(): void;
32
23
  static ɵfac: i0.ɵɵFactoryDeclaration<DrawerService, never>;
33
24
  static ɵprov: i0.ɵɵInjectableDeclaration<DrawerService>;
34
25
  }
package/drawer/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './component/drawer.component';
2
- export * from './component/drawer-ref';
3
- export * from './component/helper-directives';
4
2
  export * from './drawer.module';
5
3
  export * from './drawer.service';
4
+ export * from './drawer-ref';
5
+ export * from './helper-directives';
6
+ export * from './types';
@@ -0,0 +1,23 @@
1
+ import { ComponentType } from '@angular/cdk/portal';
2
+ import { TemplateRef } from '@angular/core';
3
+ export declare enum DrawerSize {
4
+ Small = "small",
5
+ Medium = "medium",
6
+ Big = "big"
7
+ }
8
+ export interface DrawerOptions<T = any, D = any> {
9
+ title?: string | TemplateRef<unknown>;
10
+ content?: ComponentType<T> | TemplateRef<T>;
11
+ footer?: string | TemplateRef<unknown>;
12
+ contentParams?: D;
13
+ width?: number;
14
+ size?: DrawerSize;
15
+ offsetY?: string;
16
+ divider?: boolean;
17
+ drawerClass?: string;
18
+ visible?: boolean;
19
+ showClose?: boolean;
20
+ mask?: boolean;
21
+ maskClosable?: boolean;
22
+ hideOnClickOutside?: boolean;
23
+ }
@@ -1,28 +1,12 @@
1
- import { OverlayConfig, } from '@angular/cdk/overlay';
2
- import { CdkPortalOutlet, ComponentPortal, TemplatePortal, PortalModule, } from '@angular/cdk/portal';
3
- import { CdkScrollable } from '@angular/cdk/scrolling';
4
- import { NgIf, NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';
5
- import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, InjectionToken, Injector, Input, Output, TemplateRef, Type, ViewChild, ViewEncapsulation, } from '@angular/core';
6
- import { Subject, debounceTime, filter, fromEvent, takeUntil, } from 'rxjs';
7
- import { IconComponent } from '../../icon/icon.component';
8
- import { isTemplateRef } from '../../utils';
9
- import { DrawerRef, DrawerSize } from './drawer-ref';
10
- import { DrawerContentDirective, DrawerFooterDirective, DrawerHeaderDirective, } from './helper-directives';
1
+ import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output, TemplateRef, } from '@angular/core';
2
+ import { first } from 'rxjs';
3
+ import { DrawerService } from '../drawer.service';
4
+ import { DrawerContentDirective, DrawerFooterDirective, DrawerHeaderDirective, } from '../helper-directives';
5
+ import { DrawerSize } from '../types';
11
6
  import * as i0 from "@angular/core";
12
- import * as i1 from "@angular/cdk/overlay";
13
- import * as i2 from "@angular/cdk/portal";
14
- export const DATA = new InjectionToken('drawer-data');
15
- const DRAWER_OVERLAY_CLASS = 'aui-drawer-overlay';
16
- const SIZE_MAPPER = {
17
- [DrawerSize.Small]: 400,
18
- [DrawerSize.Medium]: 600,
19
- [DrawerSize.Big]: 800,
20
- };
21
- export class DrawerComponent extends DrawerRef {
22
- viewContainerRef;
23
- overlay;
24
- injector;
25
- cdr;
7
+ import * as i1 from "../drawer.service";
8
+ export class DrawerComponent {
9
+ drawerService;
26
10
  title;
27
11
  footer;
28
12
  size = DrawerSize.Medium;
@@ -35,64 +19,12 @@ export class DrawerComponent extends DrawerRef {
35
19
  mask;
36
20
  maskClosable;
37
21
  divider = true;
38
- _value = SIZE_MAPPER[DrawerSize.Medium];
39
- set width(value) {
40
- this._value = value;
41
- }
42
- get width() {
43
- return this._value;
44
- }
45
- get drawerClasses() {
46
- return {
47
- 'aui-drawer': true,
48
- hasDivider: this.divider,
49
- ...(this.drawerClass ? { [this.drawerClass]: true } : null),
50
- };
51
- }
52
- afterClosed$ = new Subject();
53
- get afterClosed() {
54
- return this.afterClosed$.asObservable();
55
- }
56
- afterOpen$ = new Subject();
57
- get afterOpen() {
58
- return this.afterOpen$.asObservable();
59
- }
60
- drawerViewInit = new EventEmitter();
61
22
  close = new EventEmitter();
62
- drawerTemplate;
63
- bodyPortalOutlet;
64
23
  titleTemplate;
65
- contentTemplate;
24
+ contentTemplateOrComponent;
66
25
  footerTemplate;
67
- onDestroy$ = new Subject();
68
- isTemplateRef = isTemplateRef;
69
- componentInstance = null;
70
- contentParams;
71
- overlayRef;
72
- portal;
73
- templateContext = {};
74
- get transform() {
75
- return `translateX(${this.visible ? 0 : '100%'})`;
76
- }
77
- constructor(viewContainerRef, overlay, injector, cdr) {
78
- super();
79
- this.viewContainerRef = viewContainerRef;
80
- this.overlay = overlay;
81
- this.injector = injector;
82
- this.cdr = cdr;
83
- }
84
- ngOnInit() {
85
- this.attachOverlay();
86
- this.updateBodyOverflow();
87
- this.templateContext = { $implicit: this.contentParams };
88
- if (this.mask) {
89
- fromEvent(window, 'resize')
90
- .pipe(debounceTime(100), filter(() => document.documentElement.scrollHeight > window.innerHeight), takeUntil(this.onDestroy$))
91
- .subscribe(() => {
92
- this.overlayRef.getConfig().scrollStrategy.enable();
93
- });
94
- }
95
- this.cdr.detectChanges();
26
+ constructor(drawerService) {
27
+ this.drawerService = drawerService;
96
28
  }
97
29
  ngOnChanges(changes) {
98
30
  const { visible } = changes;
@@ -102,121 +34,34 @@ export class DrawerComponent extends DrawerRef {
102
34
  this.open();
103
35
  }
104
36
  else if (!visible.firstChange) {
105
- this.dispose();
37
+ this.drawerService.close();
106
38
  }
107
39
  }
108
40
  }
109
41
  ngAfterViewInit() {
110
- this.attachBodyContent();
111
- setTimeout(() => {
112
- this.drawerViewInit.emit();
113
- }, 0);
114
- }
115
- attachOverlay() {
116
- if (!this.overlayRef) {
117
- this.portal = new TemplatePortal(this.drawerTemplate, this.viewContainerRef);
118
- this.overlayRef = this.overlay.create(this.getOverlayConfig());
119
- }
120
- if (this.overlayRef) {
121
- this.overlayRef.attach(this.portal);
122
- this.overlayRef
123
- .outsidePointerEvents()
124
- .pipe(takeUntil(this.onDestroy$))
125
- .subscribe(event => {
126
- if (this.visible &&
127
- this.hideOnClickOutside &&
128
- event.target instanceof Node &&
129
- !this.overlayRef.hostElement?.parentNode?.contains(event.target)) {
130
- event.stopPropagation();
131
- event.preventDefault();
132
- this.dispose();
133
- }
134
- });
135
- }
136
- }
137
- getOverlayConfig() {
138
- return new OverlayConfig({
139
- panelClass: DRAWER_OVERLAY_CLASS,
140
- positionStrategy: this.overlay.position().global(),
141
- scrollStrategy: this.mask
142
- ? this.overlay.scrollStrategies.block()
143
- : this.overlay.scrollStrategies.noop(),
144
- });
145
- }
146
- attachBodyContent() {
147
- this.bodyPortalOutlet?.dispose();
148
- const content = this.content || this.contentTemplate;
149
- if (content instanceof Type) {
150
- const componentPortal = new ComponentPortal(content, null, Injector.create({
151
- providers: [
152
- {
153
- provide: DATA,
154
- useValue: this.contentParams,
155
- },
156
- ],
157
- parent: this.injector,
158
- }));
159
- const componentRef = this.bodyPortalOutlet?.attachComponentPortal(componentPortal);
160
- this.componentInstance = componentRef.instance;
161
- Object.assign(componentRef.instance, this.contentParams);
162
- componentRef.changeDetectorRef.detectChanges();
163
- }
164
- }
165
- updateBodyOverflow() {
166
- if (this.overlayRef) {
167
- if (this.visible) {
168
- this.overlayRef.getConfig().scrollStrategy.enable();
169
- }
170
- else {
171
- this.overlayRef.getConfig().scrollStrategy.disable();
172
- }
173
- }
42
+ this.title = this.title || this.titleTemplate;
43
+ this.content = this.content || this.contentTemplateOrComponent;
44
+ this.footer = this.footer || this.footerTemplate;
174
45
  }
175
46
  open() {
176
- this.visible = true;
177
- this.afterOpen$.next();
178
- this.afterOpen$.complete();
179
- this.updateBodyOverflow();
180
- this.cdr.markForCheck();
181
- }
182
- dispose(result = null) {
183
- this.visible = false;
184
- this.close.emit();
185
- this.afterClosed$.next(result);
186
- this.afterClosed$.complete();
187
- this.updateBodyOverflow();
188
- this.cdr.markForCheck();
189
- }
190
- disposeOverlay() {
191
- if (this.overlayRef) {
192
- this.overlayRef.dispose();
193
- }
194
- this.overlayRef = null;
195
- }
196
- maskClick() {
197
- if (this.maskClosable && this.mask) {
198
- this.dispose();
199
- }
200
- }
201
- ngOnDestroy() {
202
- this.onDestroy$.next();
203
- this.disposeOverlay();
47
+ const ref = this.drawerService.open(this);
48
+ ref.afterClosed.pipe(first()).subscribe(res => {
49
+ this.close.emit(res);
50
+ });
204
51
  }
205
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: DrawerComponent, deps: [{ token: i0.ViewContainerRef }, { token: i1.Overlay }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
206
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.3", type: DrawerComponent, isStandalone: true, selector: "aui-drawer", inputs: { title: "title", footer: "footer", size: "size", offsetY: "offsetY", visible: "visible", content: "content", hideOnClickOutside: "hideOnClickOutside", showClose: "showClose", drawerClass: "drawerClass", mask: "mask", maskClosable: "maskClosable", divider: "divider", width: "width" }, outputs: { drawerViewInit: "drawerViewInit", close: "close" }, queries: [{ propertyName: "titleTemplate", first: true, predicate: DrawerHeaderDirective, descendants: true, read: TemplateRef }, { propertyName: "contentTemplate", first: true, predicate: DrawerContentDirective, descendants: true, read: TemplateRef }, { propertyName: "footerTemplate", first: true, predicate: DrawerFooterDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "drawerTemplate", first: true, predicate: ["drawerTemplate"], descendants: true, static: true }, { propertyName: "bodyPortalOutlet", first: true, predicate: CdkPortalOutlet, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-template #drawerTemplate>\n <div\n *ngIf=\"mask\"\n class=\"aui-drawer-mask\"\n [class.isOpen]=\"visible\"\n (click)=\"maskClick()\"\n ></div>\n <div\n [style.marginTop]=\"offsetY\"\n [ngClass]=\"drawerClasses\"\n [class.isOpen]=\"visible\"\n [ngStyle]=\"{\n transform: transform,\n width: width + 'px'\n }\"\n >\n <div class=\"aui-drawer__content\">\n <div class=\"aui-drawer__body-wrapper\">\n <div class=\"aui-drawer__header\">\n <div class=\"aui-drawer__title\">\n <ng-container\n *ngIf=\"!isTemplateRef(title || titleTemplate); else elseTemplate\"\n >\n {{ title }}\n </ng-container>\n <ng-template #elseTemplate>\n <ng-container\n *ngIf=\"title || titleTemplate\"\n [ngTemplateOutlet]=\"$any(title || titleTemplate)\"\n [ngTemplateOutletContext]=\"templateContext\"\n ></ng-container>\n </ng-template>\n </div>\n <aui-icon\n *ngIf=\"showClose\"\n class=\"aui-drawer__close\"\n icon=\"xmark\"\n (click)=\"dispose()\"\n ></aui-icon>\n </div>\n\n <div\n class=\"aui-drawer__body\"\n cdkScrollable\n >\n <ng-template cdkPortalOutlet></ng-template>\n <ng-container *ngIf=\"isTemplateRef(content || contentTemplate)\">\n <ng-container\n *ngTemplateOutlet=\"\n $any(content || contentTemplate);\n context: templateContext\n \"\n >\n </ng-container>\n </ng-container>\n </div>\n\n <div\n *ngIf=\"footer || footerTemplate\"\n class=\"aui-drawer__footer\"\n >\n <ng-container\n *ngIf=\"!isTemplateRef(footer || footerTemplate); else elseTemplate\"\n >\n {{ footer }}\n </ng-container>\n <ng-template #elseTemplate>\n <ng-container\n *ngIf=\"footer || footerTemplate\"\n [ngTemplateOutlet]=\"$any(footer || footerTemplate)\"\n [ngTemplateOutletContext]=\"templateContext\"\n ></ng-container>\n </ng-template>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [".aui-drawer-mask{position:absolute;top:0;left:0;width:100%;height:0}:root .aui-drawer-mask{background-color:rgba(var(--aui-color-origin-shadow),.4)}html[aui-theme-mode=light] .aui-drawer-mask{background-color:rgba(var(--aui-color-origin-shadow),.4)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-drawer-mask{background-color:rgba(var(--aui-color-origin-shadow),.75)}}html[aui-theme-mode=dark] .aui-drawer-mask{background-color:rgba(var(--aui-color-origin-shadow),.75)}.aui-drawer-mask.isOpen{height:100%}.aui-drawer{position:fixed;top:0;bottom:0;right:0;z-index:9999;transition:transform .3s,opacity .3s,box-shaow .3s;font-size:var(--aui-font-size-m);line-height:var(--aui-line-height-m);font-weight:var(--aui-font-weight-normal);color:rgb(var(--aui-color-main-text))}:root .aui-drawer.isOpen .aui-drawer__content{box-shadow:-2px 0 8px 0 rgba(var(--aui-color-origin-shadow),.2)}html[aui-theme-mode=light] .aui-drawer.isOpen .aui-drawer__content{box-shadow:-2px 0 8px 0 rgba(var(--aui-color-origin-shadow),.2)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-drawer.isOpen .aui-drawer__content{box-shadow:-2px 0 8px 0 rgba(var(--aui-color-origin-shadow),.75)}}html[aui-theme-mode=dark] .aui-drawer.isOpen .aui-drawer__content{box-shadow:-2px 0 8px 0 rgba(var(--aui-color-origin-shadow),.75)}.aui-drawer__content{background-color:rgb(var(--aui-color-n-10));position:absolute;height:100%;right:0;width:100%}.aui-drawer__header{padding:20px;display:flex;flex-shrink:0;justify-content:space-between}.aui-drawer__title{flex:1;font-size:var(--aui-font-size-xxl);line-height:var(--aui-line-height-xxl);font-weight:var(--aui-font-weight-bolder);color:rgb(var(--aui-color-main-text));white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.aui-drawer__close{z-index:10;flex-shrink:0;margin-top:2px;margin-left:var(--aui-spacing-xl);display:flex;justify-content:center;align-items:center;width:24px;height:24px;font-size:var(--aui-icon-size-l);color:rgb(var(--aui-color-secondary-text));border-radius:var(--aui-border-radius-m);cursor:pointer}.aui-drawer__close:hover{color:rgb(var(--aui-color-primary));background-color:rgb(var(--aui-color-p-6))}.aui-drawer__close:active{color:rgb(var(--aui-color-p-0));background-color:rgb(var(--aui-color-p-5))}.aui-drawer__body-wrapper{width:100%;height:100%;display:flex;flex-flow:column nowrap;position:relative;z-index:1}.aui-drawer__body{padding:0 20px;overflow:hidden;overflow-y:auto;height:100%}.aui-drawer__footer{padding:20px}.aui-drawer.hasDivider .aui-drawer__header{padding-bottom:16px;border-bottom:1px solid rgb(var(--aui-color-n-8))}.aui-drawer.hasDivider .aui-drawer__body{padding:16px 20px}.aui-drawer.hasDivider .aui-drawer__footer{padding-top:16px;border-top:1px solid rgb(var(--aui-color-n-8))}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }, { kind: "directive", type: CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i2.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
52
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: DrawerComponent, deps: [{ token: i1.DrawerService }], target: i0.ɵɵFactoryTarget.Component });
53
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.3", type: DrawerComponent, isStandalone: true, selector: "aui-drawer", inputs: { title: "title", footer: "footer", size: "size", offsetY: "offsetY", visible: "visible", content: "content", hideOnClickOutside: "hideOnClickOutside", showClose: "showClose", drawerClass: "drawerClass", mask: "mask", maskClosable: "maskClosable", divider: "divider" }, outputs: { close: "close" }, providers: [DrawerService], queries: [{ propertyName: "titleTemplate", first: true, predicate: DrawerHeaderDirective, descendants: true, read: TemplateRef }, { propertyName: "contentTemplateOrComponent", first: true, predicate: DrawerContentDirective, descendants: true, read: TemplateRef }, { propertyName: "footerTemplate", first: true, predicate: DrawerFooterDirective, descendants: true, read: TemplateRef }], usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
207
54
  }
208
55
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: DrawerComponent, decorators: [{
209
56
  type: Component,
210
- args: [{ selector: 'aui-drawer', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
211
- NgIf,
212
- NgClass,
213
- NgStyle,
214
- NgTemplateOutlet,
215
- IconComponent,
216
- CdkScrollable,
217
- PortalModule,
218
- ], template: "<ng-template #drawerTemplate>\n <div\n *ngIf=\"mask\"\n class=\"aui-drawer-mask\"\n [class.isOpen]=\"visible\"\n (click)=\"maskClick()\"\n ></div>\n <div\n [style.marginTop]=\"offsetY\"\n [ngClass]=\"drawerClasses\"\n [class.isOpen]=\"visible\"\n [ngStyle]=\"{\n transform: transform,\n width: width + 'px'\n }\"\n >\n <div class=\"aui-drawer__content\">\n <div class=\"aui-drawer__body-wrapper\">\n <div class=\"aui-drawer__header\">\n <div class=\"aui-drawer__title\">\n <ng-container\n *ngIf=\"!isTemplateRef(title || titleTemplate); else elseTemplate\"\n >\n {{ title }}\n </ng-container>\n <ng-template #elseTemplate>\n <ng-container\n *ngIf=\"title || titleTemplate\"\n [ngTemplateOutlet]=\"$any(title || titleTemplate)\"\n [ngTemplateOutletContext]=\"templateContext\"\n ></ng-container>\n </ng-template>\n </div>\n <aui-icon\n *ngIf=\"showClose\"\n class=\"aui-drawer__close\"\n icon=\"xmark\"\n (click)=\"dispose()\"\n ></aui-icon>\n </div>\n\n <div\n class=\"aui-drawer__body\"\n cdkScrollable\n >\n <ng-template cdkPortalOutlet></ng-template>\n <ng-container *ngIf=\"isTemplateRef(content || contentTemplate)\">\n <ng-container\n *ngTemplateOutlet=\"\n $any(content || contentTemplate);\n context: templateContext\n \"\n >\n </ng-container>\n </ng-container>\n </div>\n\n <div\n *ngIf=\"footer || footerTemplate\"\n class=\"aui-drawer__footer\"\n >\n <ng-container\n *ngIf=\"!isTemplateRef(footer || footerTemplate); else elseTemplate\"\n >\n {{ footer }}\n </ng-container>\n <ng-template #elseTemplate>\n <ng-container\n *ngIf=\"footer || footerTemplate\"\n [ngTemplateOutlet]=\"$any(footer || footerTemplate)\"\n [ngTemplateOutletContext]=\"templateContext\"\n ></ng-container>\n </ng-template>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [".aui-drawer-mask{position:absolute;top:0;left:0;width:100%;height:0}:root .aui-drawer-mask{background-color:rgba(var(--aui-color-origin-shadow),.4)}html[aui-theme-mode=light] .aui-drawer-mask{background-color:rgba(var(--aui-color-origin-shadow),.4)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-drawer-mask{background-color:rgba(var(--aui-color-origin-shadow),.75)}}html[aui-theme-mode=dark] .aui-drawer-mask{background-color:rgba(var(--aui-color-origin-shadow),.75)}.aui-drawer-mask.isOpen{height:100%}.aui-drawer{position:fixed;top:0;bottom:0;right:0;z-index:9999;transition:transform .3s,opacity .3s,box-shaow .3s;font-size:var(--aui-font-size-m);line-height:var(--aui-line-height-m);font-weight:var(--aui-font-weight-normal);color:rgb(var(--aui-color-main-text))}:root .aui-drawer.isOpen .aui-drawer__content{box-shadow:-2px 0 8px 0 rgba(var(--aui-color-origin-shadow),.2)}html[aui-theme-mode=light] .aui-drawer.isOpen .aui-drawer__content{box-shadow:-2px 0 8px 0 rgba(var(--aui-color-origin-shadow),.2)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-drawer.isOpen .aui-drawer__content{box-shadow:-2px 0 8px 0 rgba(var(--aui-color-origin-shadow),.75)}}html[aui-theme-mode=dark] .aui-drawer.isOpen .aui-drawer__content{box-shadow:-2px 0 8px 0 rgba(var(--aui-color-origin-shadow),.75)}.aui-drawer__content{background-color:rgb(var(--aui-color-n-10));position:absolute;height:100%;right:0;width:100%}.aui-drawer__header{padding:20px;display:flex;flex-shrink:0;justify-content:space-between}.aui-drawer__title{flex:1;font-size:var(--aui-font-size-xxl);line-height:var(--aui-line-height-xxl);font-weight:var(--aui-font-weight-bolder);color:rgb(var(--aui-color-main-text));white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.aui-drawer__close{z-index:10;flex-shrink:0;margin-top:2px;margin-left:var(--aui-spacing-xl);display:flex;justify-content:center;align-items:center;width:24px;height:24px;font-size:var(--aui-icon-size-l);color:rgb(var(--aui-color-secondary-text));border-radius:var(--aui-border-radius-m);cursor:pointer}.aui-drawer__close:hover{color:rgb(var(--aui-color-primary));background-color:rgb(var(--aui-color-p-6))}.aui-drawer__close:active{color:rgb(var(--aui-color-p-0));background-color:rgb(var(--aui-color-p-5))}.aui-drawer__body-wrapper{width:100%;height:100%;display:flex;flex-flow:column nowrap;position:relative;z-index:1}.aui-drawer__body{padding:0 20px;overflow:hidden;overflow-y:auto;height:100%}.aui-drawer__footer{padding:20px}.aui-drawer.hasDivider .aui-drawer__header{padding-bottom:16px;border-bottom:1px solid rgb(var(--aui-color-n-8))}.aui-drawer.hasDivider .aui-drawer__body{padding:16px 20px}.aui-drawer.hasDivider .aui-drawer__footer{padding-top:16px;border-top:1px solid rgb(var(--aui-color-n-8))}\n"] }]
219
- }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i1.Overlay }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { title: [{
57
+ args: [{
58
+ selector: 'aui-drawer',
59
+ template: '',
60
+ changeDetection: ChangeDetectionStrategy.OnPush,
61
+ standalone: true,
62
+ providers: [DrawerService],
63
+ }]
64
+ }], ctorParameters: function () { return [{ type: i1.DrawerService }]; }, propDecorators: { title: [{
220
65
  type: Input
221
66
  }], footer: [{
222
67
  type: Input
@@ -240,26 +85,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.3", ngImpor
240
85
  type: Input
241
86
  }], divider: [{
242
87
  type: Input
243
- }], width: [{
244
- type: Input
245
- }], drawerViewInit: [{
246
- type: Output
247
88
  }], close: [{
248
89
  type: Output
249
- }], drawerTemplate: [{
250
- type: ViewChild,
251
- args: ['drawerTemplate', { static: true }]
252
- }], bodyPortalOutlet: [{
253
- type: ViewChild,
254
- args: [CdkPortalOutlet, { static: false }]
255
90
  }], titleTemplate: [{
256
91
  type: ContentChild,
257
92
  args: [DrawerHeaderDirective, { read: TemplateRef }]
258
- }], contentTemplate: [{
93
+ }], contentTemplateOrComponent: [{
259
94
  type: ContentChild,
260
95
  args: [DrawerContentDirective, { read: TemplateRef }]
261
96
  }], footerTemplate: [{
262
97
  type: ContentChild,
263
98
  args: [DrawerFooterDirective, { read: TemplateRef }]
264
99
  }] } });
265
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kcmF3ZXIvY29tcG9uZW50L2RyYXdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvZHJhd2VyL2NvbXBvbmVudC9kcmF3ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLGFBQWEsR0FFZCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsZUFBZSxFQUNmLGNBQWMsRUFDZCxZQUFZLEdBQ2IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0UsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixjQUFjLEVBQ2QsUUFBUSxFQUNSLEtBQUssRUFJTCxNQUFNLEVBRU4sV0FBVyxFQUNYLElBQUksRUFDSixTQUFTLEVBRVQsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFTCxPQUFPLEVBQ1AsWUFBWSxFQUNaLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxHQUNWLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDckQsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIscUJBQXFCLEdBQ3RCLE1BQU0scUJBQXFCLENBQUM7Ozs7QUFFN0IsTUFBTSxDQUFD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QUUsS0FBSyxFQUFFO2dCQUk3QyxhQUFhO3NCQURaLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUkxRCxlQUFlO3NCQURkLFlBQVk7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUkzRCxjQUFjO3NCQURiLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50VHlwZSxcbiAgT3ZlcmxheSxcbiAgT3ZlcmxheUNvbmZpZyxcbiAgT3ZlcmxheVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcbiAgQ2RrUG9ydGFsT3V0bGV0LFxuICBDb21wb25lbnRQb3J0YWwsXG4gIFRlbXBsYXRlUG9ydGFsLFxuICBQb3J0YWxNb2R1bGUsXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgQ2RrU2Nyb2xsYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgTmdJZiwgTmdDbGFzcywgTmdTdHlsZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdGlvblRva2VuLFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFR5cGUsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgT2JzZXJ2YWJsZSxcbiAgU3ViamVjdCxcbiAgZGVib3VuY2VUaW1lLFxuICBmaWx0ZXIsXG4gIGZyb21FdmVudCxcbiAgdGFrZVVudGlsLFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgaXNUZW1wbGF0ZVJlZiB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuaW1wb3J0IHsgRHJhd2VyUmVmLCBEcmF3ZXJTaXplIH0gZnJvbSAnLi9kcmF3ZXItcmVmJztcbmltcG9ydCB7XG4gIERyYXdlckNvbnRlbnREaXJlY3RpdmUsXG4gIERyYXdlckZvb3RlckRpcmVjdGl2ZSxcbiAgRHJhd2VySGVhZGVyRGlyZWN0aXZlLFxufSBmcm9tICcuL2hlbHBlci1kaXJlY3RpdmVzJztcblxuZXhwb3J0IGNvbnN0IERBVEEgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ2RyYXdlci1kYXRhJyk7XG5cbmNvbnN0IERSQVdFUl9PVkVSTEFZX0NMQVNTID0gJ2F1aS1kcmF3ZXItb3ZlcmxheSc7XG5cbmNvbnN0IFNJWkVfTUFQUEVSID0ge1xuICBbRHJhd2VyU2l6ZS5TbWFsbF06IDQwMCxcbiAgW0RyYXdlclNpemUuTWVkaXVtXTogNjAwLFxuICBbRHJhd2VyU2l6ZS5CaWddOiA4MDAsXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhdWktZHJhd2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RyYXdlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RyYXdlci5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE5nSWYsXG4gICAgTmdDbGFzcyxcbiAgICBOZ1N0eWxlLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgSWNvbkNvbXBvbmVudCxcbiAgICBDZGtTY3JvbGxhYmxlLFxuICAgIFBvcnRhbE1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRHJhd2VyQ29tcG9uZW50PFxuICAgIFQgPSBDb21wb25lbnRUeXBlPHVua25vd24+LFxuICAgIFIgPSB1bmtub3duLFxuICAgIEQgPSB1bmtub3duLFxuICA+XG4gIGV4dGVuZHMgRHJhd2VyUmVmPFQsIFI+XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveVxue1xuICBASW5wdXQoKVxuICB0aXRsZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgQElucHV0KClcbiAgZm9vdGVyOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICBASW5wdXQoKVxuICBzaXplOiBEcmF3ZXJTaXplID0gRHJhd2VyU2l6ZS5NZWRpdW07XG5cbiAgQElucHV0KClcbiAgb2Zmc2V0WSA9ICcwcHgnO1xuXG4gIEBJbnB1dCgpIHZpc2libGU6IGJvb2xlYW47XG5cbiAgQElucHV0KClcbiAgY29udGVudDogVGVtcGxhdGVSZWY8VD4gfCBDb21wb25lbnRUeXBlPFQ+O1xuXG4gIEBJbnB1dCgpXG4gIGhpZGVPbkNsaWNrT3V0c2lkZSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNob3dDbG9zZSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgZHJhd2VyQ2xhc3M6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBtYXNrOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIG1hc2tDbG9zYWJsZTogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBkaXZpZGVyID0gdHJ1ZTtcblxuICBwcml2YXRlIF92YWx1ZSA9IFNJWkVfTUFQUEVSW0RyYXdlclNpemUuTWVkaXVtXTtcbiAgQElucHV0KClcbiAgc2V0IHdpZHRoKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHdpZHRoKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIGdldCBkcmF3ZXJDbGFzc2VzKCk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2F1aS1kcmF3ZXInOiB0cnVlLFxuICAgICAgaGFzRGl2aWRlcjogdGhpcy5kaXZpZGVyLFxuICAgICAgLi4uKHRoaXMuZHJhd2VyQ2xhc3MgPyB7IFt0aGlzLmRyYXdlckNsYXNzXTogdHJ1ZSB9IDogbnVsbCksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgYWZ0ZXJDbG9zZWQkID0gbmV3IFN1YmplY3Q8Uj4oKTtcblxuICBnZXQgYWZ0ZXJDbG9zZWQoKTogT2JzZXJ2YWJsZTxSPiB7XG4gICAgcmV0dXJuIHRoaXMuYWZ0ZXJDbG9zZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhZnRlck9wZW4kID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBnZXQgYWZ0ZXJPcGVuKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmFmdGVyT3BlbiQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBAT3V0cHV0KClcbiAgZHJhd2VyVmlld0luaXQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2RyYXdlclRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgZHJhd2VyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPHZvaWQ+O1xuXG4gIEBWaWV3Q2hpbGQoQ2RrUG9ydGFsT3V0bGV0LCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgYm9keVBvcnRhbE91dGxldDogQ2RrUG9ydGFsT3V0bGV0O1xuXG4gIEBDb250ZW50Q2hpbGQoRHJhd2VySGVhZGVyRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHRpdGxlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPFQ+O1xuXG4gIEBDb250ZW50Q2hpbGQoRHJhd2VyQ29udGVudERpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBjb250ZW50VGVtcGxhdGU6IFRlbXBsYXRlUmVmPFQ+IHwgQ29tcG9uZW50VHlwZTxUPjtcblxuICBAQ29udGVudENoaWxkKERyYXdlckZvb3RlckRpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBmb290ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8VD47XG5cbiAgb25EZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgaXNUZW1wbGF0ZVJlZiA9IGlzVGVtcGxhdGVSZWY7XG5cbiAgY29tcG9uZW50SW5zdGFuY2U6IFQgfCBudWxsID0gbnVsbDtcblxuICBjb250ZW50UGFyYW1zOiBEO1xuICBvdmVybGF5UmVmOiBPdmVybGF5UmVmO1xuICBwb3J0YWw6IFRlbXBsYXRlUG9ydGFsO1xuICB0ZW1wbGF0ZUNvbnRleHQgPSB7fTtcbiAgZ2V0IHRyYW5zZm9ybSgpIHtcbiAgICByZXR1cm4gYHRyYW5zbGF0ZVgoJHt0aGlzLnZpc2libGUgPyAwIDogJzEwMCUnfSlgO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmF0dGFjaE92ZXJsYXkoKTtcbiAgICB0aGlzLnVwZGF0ZUJvZHlPdmVyZmxvdygpO1xuICAgIHRoaXMudGVtcGxhdGVDb250ZXh0ID0geyAkaW1wbGljaXQ6IHRoaXMuY29udGVudFBhcmFtcyB9O1xuXG4gICAgaWYgKHRoaXMubWFzaykge1xuICAgICAgLy8gSXNzdWVzOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2lzc3Vlcy8xMDg0MVxuICAgICAgLy8gc2Nyb2xsU3RyYXRlZ3kg5Li6IEJsb2NrIOaXtu+8jOiLpeWIm+W7uiBPdmVybGF5IOaXtu+8jOmrmOW6puS4jei2s+S7peWHuueOsOa7muWKqO+8jOWImSBzY3JvbGxTdHJhdGVneSDkuI3kvJrnlJ/mlYhcbiAgICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgICAgICBmaWx0ZXIoXG4gICAgICAgICAgICAoKSA9PiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gd2luZG93LmlubmVySGVpZ2h0LFxuICAgICAgICAgICksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmdldENvbmZpZygpLnNjcm9sbFN0cmF0ZWd5LmVuYWJsZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgeyB2aXNpYmxlIH0gPSBjaGFuZ2VzO1xuICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHZpc2libGUuY3VycmVudFZhbHVlO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgfSBlbHNlIGlmICghdmlzaWJsZS5maXJzdENoYW5nZSkge1xuICAgICAgICAvLyDkuI3luIzmnJvpu5jorqTlhbPpl63ml7bvvIxkcmF3ZXIg5riy5p+T5ZCO5bCx6Kem5Y+RIGNsb3NlIOS6i+S7tlxuICAgICAgICB0aGlzLmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5hdHRhY2hCb2R5Q29udGVudCgpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kcmF3ZXJWaWV3SW5pdC5lbWl0KCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBwcml2YXRlIGF0dGFjaE92ZXJsYXkoKSB7XG4gICAgaWYgKCF0aGlzLm92ZXJsYXlSZWYpIHtcbiAgICAgIHRoaXMucG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKFxuICAgICAgICB0aGlzLmRyYXdlclRlbXBsYXRlLFxuICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYsXG4gICAgICApO1xuICAgICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh0aGlzLmdldE92ZXJsYXlDb25maWcoKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm92ZXJsYXlSZWYpIHtcbiAgICAgIHRoaXMub3ZlcmxheVJlZi5hdHRhY2godGhpcy5wb3J0YWwpO1xuICAgICAgdGhpcy5vdmVybGF5UmVmXG4gICAgICAgIC5vdXRzaWRlUG9pbnRlckV2ZW50cygpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAvLyDliKTmlq3pvKDmoIfngrnlh7vkuovku7bnmoQgdGFyZ2V0IOaYr+WQpuS4uiBvdmVybGF5LWNvbnRhaW5lciDnmoTlrZDoioLngrnvvIzlpoLmnpzmmK/vvIzliJnkuI3lhbPpl60gZHJhd2Vy44CCXG4gICAgICAgICAgLy8g5Li65LqG6YG/5YWN54K55Ye7IGRyYXdlciDph4znmoQgdG9vbHRpcCDlkI4gZHJhd2VyIOiiq+WFs+mXreOAglxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZSAmJlxuICAgICAgICAgICAgdGhpcy5oaWRlT25DbGlja091dHNpZGUgJiZcbiAgICAgICAgICAgIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIE5vZGUgJiZcbiAgICAgICAgICAgICF0aGlzLm92ZXJsYXlSZWYuaG9zdEVsZW1lbnQ/LnBhcmVudE5vZGU/LmNvbnRhaW5zKGV2ZW50LnRhcmdldClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuZGlzcG9zZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRPdmVybGF5Q29uZmlnKCk6IE92ZXJsYXlDb25maWcge1xuICAgIHJldHVybiBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICBwYW5lbENsYXNzOiBEUkFXRVJfT1ZFUkxBWV9DTEFTUyxcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5wb3NpdGlvbigpLmdsb2JhbCgpLFxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMubWFza1xuICAgICAgICA/IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKClcbiAgICAgICAgOiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5ub29wKCksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGF0dGFjaEJvZHlDb250ZW50KCk6IHZvaWQge1xuICAgIHRoaXMuYm9keVBvcnRhbE91dGxldD8uZGlzcG9zZSgpO1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmNvbnRlbnQgfHwgdGhpcy5jb250ZW50VGVtcGxhdGU7XG4gICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBUeXBlKSB7XG4gICAgICBjb25zdCBjb21wb25lbnRQb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsPFQ+KFxuICAgICAgICBjb250ZW50LFxuICAgICAgICBudWxsLFxuICAgICAgICBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBwcm92aWRlOiBEQVRBLFxuICAgICAgICAgICAgICB1c2VWYWx1ZTogdGhpcy5jb250ZW50UGFyYW1zLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHBhcmVudDogdGhpcy5pbmplY3RvcixcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgY29uc3QgY29tcG9uZW50UmVmID1cbiAgICAgICAgdGhpcy5ib2R5UG9ydGFsT3V0bGV0Py5hdHRhY2hDb21wb25lbnRQb3J0YWwoY29tcG9uZW50UG9ydGFsKTtcbiAgICAgIHRoaXMuY29tcG9uZW50SW5zdGFuY2UgPSBjb21wb25lbnRSZWYuaW5zdGFuY2U7XG4gICAgICBPYmplY3QuYXNzaWduKGNvbXBvbmVudFJlZi5pbnN0YW5jZSwgdGhpcy5jb250ZW50UGFyYW1zKTtcbiAgICAgIGNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVCb2R5T3ZlcmZsb3coKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xuICAgICAgaWYgKHRoaXMudmlzaWJsZSkge1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYuZ2V0Q29uZmlnKCkuc2Nyb2xsU3RyYXRlZ3kuZW5hYmxlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYuZ2V0Q29uZmlnKCkuc2Nyb2xsU3RyYXRlZ3kuZGlzYWJsZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9wZW4oKSB7XG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgICB0aGlzLmFmdGVyT3BlbiQubmV4dCgpO1xuICAgIHRoaXMuYWZ0ZXJPcGVuJC5jb21wbGV0ZSgpO1xuICAgIHRoaXMudXBkYXRlQm9keU92ZXJmbG93KCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBkaXNwb3NlKHJlc3VsdDogUiA9IG51bGwpIHtcbiAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLmNsb3NlLmVtaXQoKTtcbiAgICB0aGlzLmFmdGVyQ2xvc2VkJC5uZXh0KHJlc3VsdCk7XG4gICAgdGhpcy5hZnRlckNsb3NlZCQuY29tcGxldGUoKTtcbiAgICB0aGlzLnVwZGF0ZUJvZHlPdmVyZmxvdygpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwb3NlT3ZlcmxheSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vdmVybGF5UmVmKSB7XG4gICAgICB0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgIH1cbiAgICB0aGlzLm92ZXJsYXlSZWYgPSBudWxsO1xuICB9XG5cbiAgbWFza0NsaWNrKCkge1xuICAgIGlmICh0aGlzLm1hc2tDbG9zYWJsZSAmJiB0aGlzLm1hc2spIHtcbiAgICAgIHRoaXMuZGlzcG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub25EZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kaXNwb3NlT3ZlcmxheSgpO1xuICB9XG59XG4iLCI8bmctdGVtcGxhdGUgI2RyYXdlclRlbXBsYXRlPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJtYXNrXCJcbiAgICBjbGFzcz1cImF1aS1kcmF3ZXItbWFza1wiXG4gICAgW2NsYXNzLmlzT3Blbl09XCJ2aXNpYmxlXCJcbiAgICAoY2xpY2spPVwibWFza0NsaWNrKClcIlxuICA+PC9kaXY+XG4gIDxkaXZcbiAgICBbc3R5bGUubWFyZ2luVG9wXT1cIm9mZnNldFlcIlxuICAgIFtuZ0NsYXNzXT1cImRyYXdlckNsYXNzZXNcIlxuICAgIFtjbGFzcy5pc09wZW5dPVwidmlzaWJsZVwiXG4gICAgW25nU3R5bGVdPVwie1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0sXG4gICAgICB3aWR0aDogd2lkdGggKyAncHgnXG4gICAgfVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiYXVpLWRyYXdlcl9fY29udGVudFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImF1aS1kcmF3ZXJfX2JvZHktd3JhcHBlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXVpLWRyYXdlcl9faGVhZGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF1aS1kcmF3ZXJfX3RpdGxlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWlzVGVtcGxhdGVSZWYodGl0bGUgfHwgdGl0bGVUZW1wbGF0ZSk7IGVsc2UgZWxzZVRlbXBsYXRlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgdGl0bGUgfX1cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbHNlVGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInRpdGxlIHx8IHRpdGxlVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIiRhbnkodGl0bGUgfHwgdGl0bGVUZW1wbGF0ZSlcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ0ZW1wbGF0ZUNvbnRleHRcIlxuICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxhdWktaWNvblxuICAgICAgICAgICAgKm5nSWY9XCJzaG93Q2xvc2VcIlxuICAgICAgICAgICAgY2xhc3M9XCJhdWktZHJhd2VyX19jbG9zZVwiXG4gICAgICAgICAgICBpY29uPVwieG1hcmtcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImRpc3Bvc2UoKVwiXG4gICAgICAgICAgPjwvYXVpLWljb24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImF1aS1kcmF3ZXJfX2JvZHlcIlxuICAgICAgICAgIGNka1Njcm9sbGFibGVcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjZGtQb3J0YWxPdXRsZXQ+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNUZW1wbGF0ZVJlZihjb250ZW50IHx8IGNvbnRlbnRUZW1wbGF0ZSlcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAkYW55KGNvbnRlbnQgfHwgY29udGVudFRlbXBsYXRlKTtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB0ZW1wbGF0ZUNvbnRleHRcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJmb290ZXIgfHwgZm9vdGVyVGVtcGxhdGVcIlxuICAgICAgICAgIGNsYXNzPVwiYXVpLWRyYXdlcl9fZm9vdGVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiIWlzVGVtcGxhdGVSZWYoZm9vdGVyIHx8IGZvb3RlclRlbXBsYXRlKTsgZWxzZSBlbHNlVGVtcGxhdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGZvb3RlciB9fVxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWxzZVRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdJZj1cImZvb3RlciB8fCBmb290ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIiRhbnkoZm9vdGVyIHx8IGZvb3RlclRlbXBsYXRlKVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ0ZW1wbGF0ZUNvbnRleHRcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kcmF3ZXIvY29tcG9uZW50L2RyYXdlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQixxQkFBcUIsR0FDdEIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFDOzs7QUFTdEMsTUFBTSxPQUFPLGVBQWU7SUFtREc7SUFqRDdCLEtBQUssQ0FBZ0M7SUFHckMsTUFBTSxDQUFnQztJQUd0QyxJQUFJLEdBQWUsVUFBVSxDQUFDLE1BQU0sQ0FBQztJQUdyQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBR2hCLE9BQU8sQ0FBVTtJQUdqQixPQUFPLENBQWdEO0lBR3ZELGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUczQixTQUFTLEdBQUcsSUFBSSxDQUFDO0lBR2pCLFdBQVcsQ0FBUztJQUdwQixJQUFJLENBQVU7SUFHZCxZQUFZLENBQVU7SUFHdEIsT0FBTyxHQUFHLElBQUksQ0FBQztJQUdOLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBYyxDQUFDO0lBRy9CLGFBQWEsQ0FBdUI7SUFHcEMsMEJBQTBCLENBRWhCO0lBR1YsY0FBYyxDQUF1QjtJQUV0RCxZQUE2QixhQUE0QjtRQUE1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtJQUFHLENBQUM7SUFFN0QsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDNUIsSUFBSSxPQUFPLEVBQUU7WUFDWCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDO1lBQ25DLElBQUksS0FBSyxFQUFFO2dCQUNULElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUNiO2lCQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFO2dCQUUvQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzVCO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQzlDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsMEJBQTBCLENBQUM7UUFDL0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDbkQsQ0FBQztJQUVPLElBQUk7UUFDVixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM1QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7dUdBN0VVLGVBQWU7MkZBQWYsZUFBZSw0V0FGZixDQUFDLGFBQWEsQ0FBQyxxRUEwQ1oscUJBQXFCLDJCQUFVLFdBQVcsMEVBRzFDLHNCQUFzQiwyQkFBVSxXQUFXLDhEQUszQyxxQkFBcUIsMkJBQVUsV0FBVyxrREFyRDlDLEVBQUU7OzJGQUtELGVBQWU7a0JBUDNCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLFFBQVEsRUFBRSxFQUFFO29CQUNaLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsU0FBUyxFQUFFLENBQUMsYUFBYSxDQUFDO2lCQUMzQjtvR0FHQyxLQUFLO3NCQURKLEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkFJTixPQUFPO3NCQUROLEtBQUs7Z0JBSU4sT0FBTztzQkFETixLQUFLO2dCQUlOLE9BQU87c0JBRE4sS0FBSztnQkFJTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLFdBQVc7c0JBRFYsS0FBSztnQkFJTixJQUFJO3NCQURILEtBQUs7Z0JBSU4sWUFBWTtzQkFEWCxLQUFLO2dCQUlOLE9BQU87c0JBRE4sS0FBSztnQkFJRyxLQUFLO3NCQURiLE1BQU07Z0JBSVUsYUFBYTtzQkFEN0IsWUFBWTt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBSXpDLDBCQUEwQjtzQkFEMUMsWUFBWTt1QkFBQyxzQkFBc0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBTTFDLGNBQWM7c0JBRDlCLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZpcnN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IERyYXdlclNlcnZpY2UgfSBmcm9tICcuLi9kcmF3ZXIuc2VydmljZSc7XG5pbXBvcnQge1xuICBEcmF3ZXJDb250ZW50RGlyZWN0aXZlLFxuICBEcmF3ZXJGb290ZXJEaXJlY3RpdmUsXG4gIERyYXdlckhlYWRlckRpcmVjdGl2ZSxcbn0gZnJvbSAnLi4vaGVscGVyLWRpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgRHJhd2VyU2l6ZSB9IGZyb20gJy4uL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXVpLWRyYXdlcicsXG4gIHRlbXBsYXRlOiAnJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW0RyYXdlclNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBEcmF3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKVxuICB0aXRsZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgQElucHV0KClcbiAgZm9vdGVyOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICBASW5wdXQoKVxuICBzaXplOiBEcmF3ZXJTaXplID0gRHJhd2VyU2l6ZS5NZWRpdW07XG5cbiAgQElucHV0KClcbiAgb2Zmc2V0WSA9ICcwcHgnO1xuXG4gIEBJbnB1dCgpXG4gIHZpc2libGU6IGJvb2xlYW47XG5cbiAgQElucHV0KClcbiAgY29udGVudDogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCBDb21wb25lbnRUeXBlPHVua25vd24+O1xuXG4gIEBJbnB1dCgpXG4gIGhpZGVPbkNsaWNrT3V0c2lkZSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNob3dDbG9zZSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgZHJhd2VyQ2xhc3M6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBtYXNrOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIG1hc2tDbG9zYWJsZTogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBkaXZpZGVyID0gdHJ1ZTtcblxuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XG5cbiAgQENvbnRlbnRDaGlsZChEcmF3ZXJIZWFkZXJEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcHJpdmF0ZSByZWFkb25seSB0aXRsZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICBAQ29udGVudENoaWxkKERyYXdlckNvbnRlbnREaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcHJpdmF0ZSByZWFkb25seSBjb250ZW50VGVtcGxhdGVPckNvbXBvbmVudDpcbiAgICB8IFRlbXBsYXRlUmVmPHVua25vd24+XG4gICAgfCBDb21wb25lbnRUeXBlPHVua25vd24+O1xuXG4gIEBDb250ZW50Q2hpbGQoRHJhd2VyRm9vdGVyRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHByaXZhdGUgcmVhZG9ubHkgZm9vdGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZHJhd2VyU2VydmljZTogRHJhd2VyU2VydmljZSkge31cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgeyB2aXNpYmxlIH0gPSBjaGFuZ2VzO1xuICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHZpc2libGUuY3VycmVudFZhbHVlO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgfSBlbHNlIGlmICghdmlzaWJsZS5maXJzdENoYW5nZSkge1xuICAgICAgICAvLyDkuI3luIzmnJvpu5jorqTlhbPpl63ml7bvvIxkcmF3ZXIg5riy5p+T5ZCO5bCx6Kem5Y+RIGNsb3NlIOS6i+S7tlxuICAgICAgICB0aGlzLmRyYXdlclNlcnZpY2UuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy50aXRsZSA9IHRoaXMudGl0bGUgfHwgdGhpcy50aXRsZVRlbXBsYXRlO1xuICAgIHRoaXMuY29udGVudCA9IHRoaXMuY29udGVudCB8fCB0aGlzLmNvbnRlbnRUZW1wbGF0ZU9yQ29tcG9uZW50O1xuICAgIHRoaXMuZm9vdGVyID0gdGhpcy5mb290ZXIgfHwgdGhpcy5mb290ZXJUZW1wbGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbigpIHtcbiAgICBjb25zdCByZWYgPSB0aGlzLmRyYXdlclNlcnZpY2Uub3Blbih0aGlzKTtcbiAgICByZWYuYWZ0ZXJDbG9zZWQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgIHRoaXMuY2xvc2UuZW1pdChyZXMpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=