@alauda/ui 7.2.1-beta.2 → 7.2.1-beta.20

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,31 +1,14 @@
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';
11
5
  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;
6
+ import * as i1 from "../drawer.service";
7
+ export class DrawerComponent {
8
+ drawerService;
26
9
  title;
27
10
  footer;
28
- size = DrawerSize.Medium;
11
+ size = 'medium';
29
12
  offsetY = '0px';
30
13
  visible;
31
14
  content;
@@ -35,188 +18,49 @@ export class DrawerComponent extends DrawerRef {
35
18
  mask;
36
19
  maskClosable;
37
20
  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();
21
+ width;
22
+ contentParams;
61
23
  close = new EventEmitter();
62
- drawerTemplate;
63
- bodyPortalOutlet;
64
24
  titleTemplate;
65
- contentTemplate;
25
+ contentTemplateOrComponent;
66
26
  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();
27
+ drawerRef;
28
+ constructor(drawerService) {
29
+ this.drawerService = drawerService;
96
30
  }
97
31
  ngOnChanges(changes) {
98
32
  const { visible } = changes;
99
33
  if (visible) {
100
34
  const value = visible.currentValue;
101
35
  if (value) {
102
- this.open();
36
+ this.drawerRef = this.drawerService.open(this);
37
+ this.drawerRef.afterClosed.pipe(first()).subscribe(res => {
38
+ this.close.emit(res);
39
+ });
103
40
  }
104
41
  else if (!visible.firstChange) {
105
- this.dispose();
42
+ this.drawerRef.close();
106
43
  }
107
44
  }
108
45
  }
109
46
  ngAfterViewInit() {
110
- this.attachBodyContent();
111
- setTimeout(() => {
112
- this.drawerViewInit.emit();
113
- }, 0);
47
+ this.title = this.title || this.titleTemplate;
48
+ this.content = this.content || this.contentTemplateOrComponent;
49
+ this.footer = this.footer || this.footerTemplate;
114
50
  }
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
- }
174
- }
175
- 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();
204
- }
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 });
51
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: DrawerComponent, deps: [{ token: i1.DrawerService }], target: i0.ɵɵFactoryTarget.Component });
52
+ 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", contentParams: "contentParams" }, 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: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
207
53
  }
208
54
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: DrawerComponent, decorators: [{
209
55
  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: [{
56
+ args: [{
57
+ selector: 'aui-drawer',
58
+ template: '<ng-content></ng-content>',
59
+ changeDetection: ChangeDetectionStrategy.OnPush,
60
+ standalone: true,
61
+ providers: [DrawerService],
62
+ }]
63
+ }], ctorParameters: function () { return [{ type: i1.DrawerService }]; }, propDecorators: { title: [{
220
64
  type: Input
221
65
  }], footer: [{
222
66
  type: Input
@@ -242,24 +86,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.3", ngImpor
242
86
  type: Input
243
87
  }], width: [{
244
88
  type: Input
245
- }], drawerViewInit: [{
246
- type: Output
89
+ }], contentParams: [{
90
+ type: Input
247
91
  }], close: [{
248
92
  type: Output
249
- }], drawerTemplate: [{
250
- type: ViewChild,
251
- args: ['drawerTemplate', { static: true }]
252
- }], bodyPortalOutlet: [{
253
- type: ViewChild,
254
- args: [CdkPortalOutlet, { static: false }]
255
93
  }], titleTemplate: [{
256
94
  type: ContentChild,
257
95
  args: [DrawerHeaderDirective, { read: TemplateRef }]
258
- }], contentTemplate: [{
96
+ }], contentTemplateOrComponent: [{
259
97
  type: ContentChild,
260
98
  args: [DrawerContentDirective, { read: TemplateRef }]
261
99
  }], footerTemplate: [{
262
100
  type: ContentChild,
263
101
  args: [DrawerFooterDirective, { read: TemplateRef }]
264
102
  }] } });
265
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kcmF3ZXIvY29tcG9uZW50L2RyYXdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvZHJhd2VyL2NvbXBvbmVudC9kcmF3ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLGFBQWEsR0FFZCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsZUFBZSxFQUNmLGNBQWMsRUFDZCxZQUFZLEdBQ2IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0UsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixjQUFjLEVBQ2QsUUFBUSxFQUNSLEtBQUssRUFJTCxNQUFNLEVBRU4sV0FBVyxFQUNYLElBQUksRUFDSixTQUFTLEVBRVQsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFTCxPQUFPLEVBQ1AsWUFBWSxFQUNaLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxHQUNWLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDckQsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIscUJBQXFCLEdBQ3RCLE1BQU0scUJBQXFCLENBQUM7Ozs7QUFFN0IsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLElBQUksY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBRXRELE1BQU0sb0JBQW9CLEdBQUcsb0JBQW9CLENBQUM7QUFFbEQsTUFBTSxXQUFXLEdBQUc7SUFDbEIsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRztJQUN2QixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHO0lBQ3hCLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUc7Q0FDdEIsQ0FBQztBQW1CRixNQUFNLE9BQU8sZUFLWCxTQUFRLFNBQWU7SUF1R0o7SUFDQTtJQUNBO0lBQ0E7SUF0R25CLEtBQUssQ0FBZ0M7SUFHckMsTUFBTSxDQUFnQztJQUd0QyxJQUFJLEdBQWUsVUFBVSxDQUFDLE1BQU0sQ0FBQztJQUdyQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBRVAsT0FBTyxDQUFVO0lBRzFCLE9BQU8sQ0FBb0M7SUFHM0Msa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0lBRzNCLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFHakIsV0FBVyxDQUFTO0lBR3BCLElBQUksQ0FBVTtJQUdkLFlBQVksQ0FBVTtJQUd0QixPQUFPLEdBQUcsSUFBSSxDQUFDO0lBRVAsTUFBTSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsSUFDSSxLQUFLLENBQUMsS0FBYTtRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPO1lBQ0wsWUFBWSxFQUFFLElBQUk7WUFDbEIsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3hCLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7U0FDNUQsQ0FBQztJQUNKLENBQUM7SUFFZ0IsWUFBWSxHQUFHLElBQUksT0FBTyxFQUFLLENBQUM7SUFFakQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFZ0IsVUFBVSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFbEQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFHRCxjQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQUV2QixLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQWMsQ0FBQztJQUcxRCxjQUFjLENBQW9CO0lBR2xDLGdCQUFnQixDQUFrQjtJQUdsQyxhQUFhLENBQWlCO0lBRzlCLGVBQWUsQ0FBb0M7SUFHbkQsY0FBYyxDQUFpQjtJQUUvQixVQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUVqQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBRTlCLGlCQUFpQixHQUFhLElBQUksQ0FBQztJQUVuQyxhQUFhLENBQUk7SUFDakIsVUFBVSxDQUFhO0lBQ3ZCLE1BQU0sQ0FBaUI7SUFDdkIsZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUNyQixJQUFJLFNBQVM7UUFDWCxPQUFPLGNBQWMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztJQUNwRCxDQUFDO0lBRUQsWUFDbUIsZ0JBQWtDLEVBQ2xDLE9BQWdCLEVBQ2hCLFFBQWtCLEVBQ2xCLEdBQXNCO1FBRXZDLEtBQUssRUFBRSxDQUFDO1FBTFMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7SUFHekMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFekQsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBR2IsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7aUJBQ3hCLElBQUksQ0FDSCxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQ2pCLE1BQU0sQ0FDSixHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUNqRSxFQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQzNCO2lCQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdEQsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQzVCLElBQUksT0FBTyxFQUFFO1lBQ1gsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztZQUNuQyxJQUFJLEtBQUssRUFBRTtnQkFDVCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDYjtpQkFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtnQkFFL0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ2hCO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzdCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQzlCLElBQUksQ0FBQyxjQUFjLEVBQ25CLElBQUksQ0FBQyxnQkFBZ0IsQ0FDdEIsQ0FBQztZQUNGLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztTQUNoRTtRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLFVBQVU7aUJBQ1osb0JBQW9CLEVBQUU7aUJBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUNoQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBR2pCLElBQ0UsSUFBSSxDQUFDLE9BQU87b0JBQ1osSUFBSSxDQUFDLGtCQUFrQjtvQkFDdkIsS0FBSyxDQUFDLE1BQU0sWUFBWSxJQUFJO29CQUM1QixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUNoRTtvQkFDQSxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUNoQjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDSCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLE9BQU8sSUFBSSxhQUFhLENBQUM7WUFDdkIsVUFBVSxFQUFFLG9CQUFvQjtZQUNoQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFBRTtZQUNsRCxjQUFjLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ3ZCLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRTtnQkFDdkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFO1NBQ3pDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ2pDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUNyRCxJQUFJLE9BQU8sWUFBWSxJQUFJLEVBQUU7WUFDM0IsTUFBTSxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQ3pDLE9BQU8sRUFDUCxJQUFJLEVBQ0osUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDZCxTQUFTLEVBQUU7b0JBQ1Q7d0JBQ0UsT0FBTyxFQUFFLElBQUk7d0JBQ2IsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhO3FCQUM3QjtpQkFDRjtnQkFDRCxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVE7YUFDdEIsQ0FBQyxDQUNILENBQUM7WUFDRixNQUFNLFlBQVksR0FDaEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDO1lBQy9DLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDekQsWUFBWSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ2hEO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNyRDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUN0RDtTQUNGO0lBQ0gsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsT0FBTyxDQUFDLFNBQVksSUFBSTtRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sY0FBYztRQUNwQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMzQjtRQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDbEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2hCO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO3VHQTVRVSxlQUFlOzJGQUFmLGVBQWUsc2RBb0ZaLHFCQUFxQiwyQkFBVSxXQUFXLCtEQUcxQyxzQkFBc0IsMkJBQVUsV0FBVyw4REFHM0MscUJBQXFCLDJCQUFVLFdBQVcsZ01BVDdDLGVBQWUsNEZDbEs1QixxMUVBOEVBLDZ4RkROSSxJQUFJLDZGQUNKLE9BQU8sb0ZBQ1AsT0FBTywyRUFDUCxnQkFBZ0Isb0pBQ2hCLGFBQWEsNEpBQ2IsYUFBYSw2RUFDYixZQUFZOzsyRkFHSCxlQUFlO2tCQWpCM0IsU0FBUzsrQkFDRSxZQUFZLGlCQUdQLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLElBQUk7d0JBQ0osT0FBTzt3QkFDUCxPQUFPO3dCQUNQLGdCQUFnQjt3QkFDaEIsYUFBYTt3QkFDYixhQUFhO3dCQUNiLFlBQVk7cUJBQ2I7b0xBV0QsS0FBSztzQkFESixLQUFLO2dCQUlOLE1BQU07c0JBREwsS0FBSztnQkFJTixJQUFJO3NCQURILEtBQUs7Z0JBSU4sT0FBTztzQkFETixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFHTixPQUFPO3NCQUROLEtBQUs7Z0JBSU4sa0JBQWtCO3NCQURqQixLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSztnQkFJTixXQUFXO3NCQURWLEtBQUs7Z0JBSU4sSUFBSTtzQkFESCxLQUFLO2dCQUlOLFlBQVk7c0JBRFgsS0FBSztnQkFJTixPQUFPO3NCQUROLEtBQUs7Z0JBS0YsS0FBSztzQkFEUixLQUFLO2dCQThCTixjQUFjO3NCQURiLE1BQU07Z0JBR1ksS0FBSztzQkFBdkIsTUFBTTtnQkFHUCxjQUFjO3NCQURiLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUk3QyxnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUk3QyxhQUFhO3NCQURaLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUkxRCxlQUFlO3NCQURkLFlBQVk7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUkzRCxjQUFjO3NCQURiLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50VHlwZSxcbiAgT3ZlcmxheSxcbiAgT3ZlcmxheUNvbmZpZyxcbiAgT3ZlcmxheVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcbiAgQ2RrUG9ydGFsT3V0bGV0LFxuICBDb21wb25lbnRQb3J0YWwsXG4gIFRlbXBsYXRlUG9ydGFsLFxuICBQb3J0YWxNb2R1bGUsXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgQ2RrU2Nyb2xsYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgTmdJZiwgTmdDbGFzcywgTmdTdHlsZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdGlvblRva2VuLFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFR5cGUsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgT2JzZXJ2YWJsZSxcbiAgU3ViamVjdCxcbiAgZGVib3VuY2VUaW1lLFxuICBmaWx0ZXIsXG4gIGZyb21FdmVudCxcbiAgdGFrZVVudGlsLFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgaXNUZW1wbGF0ZVJlZiB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuaW1wb3J0IHsgRHJhd2VyUmVmLCBEcmF3ZXJTaXplIH0gZnJvbSAnLi9kcmF3ZXItcmVmJztcbmltcG9ydCB7XG4gIERyYXdlckNvbnRlbnREaXJlY3RpdmUsXG4gIERyYXdlckZvb3RlckRpcmVjdGl2ZSxcbiAgRHJhd2VySGVhZGVyRGlyZWN0aXZlLFxufSBmcm9tICcuL2hlbHBlci1kaXJlY3RpdmVzJztcblxuZXhwb3J0IGNvbnN0IERBVEEgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ2RyYXdlci1kYXRhJyk7XG5cbmNvbnN0IERSQVdFUl9PVkVSTEFZX0NMQVNTID0gJ2F1aS1kcmF3ZXItb3ZlcmxheSc7XG5cbmNvbnN0IFNJWkVfTUFQUEVSID0ge1xuICBbRHJhd2VyU2l6ZS5TbWFsbF06IDQwMCxcbiAgW0RyYXdlclNpemUuTWVkaXVtXTogNjAwLFxuICBbRHJhd2VyU2l6ZS5CaWddOiA4MDAsXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhdWktZHJhd2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RyYXdlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RyYXdlci5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE5nSWYsXG4gICAgTmdDbGFzcyxcbiAgICBOZ1N0eWxlLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgSWNvbkNvbXBvbmVudCxcbiAgICBDZGtTY3JvbGxhYmxlLFxuICAgIFBvcnRhbE1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRHJhd2VyQ29tcG9uZW50PFxuICAgIFQgPSBDb21wb25lbnRUeXBlPHVua25vd24+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==
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kcmF3ZXIvY29tcG9uZW50L2RyYXdlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzdCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQixxQkFBcUIsR0FDdEIsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBVTlCLE1BQU0sT0FBTyxlQUFlO0lBNkRHO0lBekQ3QixLQUFLLENBQTBCO0lBRy9CLE1BQU0sQ0FBMEI7SUFHaEMsSUFBSSxHQUFlLFFBQVEsQ0FBQztJQUc1QixPQUFPLEdBQUcsS0FBSyxDQUFDO0lBR2hCLE9BQU8sQ0FBVTtJQUdqQixPQUFPLENBQW9DO0lBRzNDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUczQixTQUFTLEdBQUcsSUFBSSxDQUFDO0lBR2pCLFdBQVcsQ0FBUztJQUdwQixJQUFJLENBQVU7SUFHZCxZQUFZLENBQVU7SUFHdEIsT0FBTyxHQUFHLElBQUksQ0FBQztJQUdmLEtBQUssQ0FBUztJQUdkLGFBQWEsQ0FBSTtJQUdSLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBSyxDQUFDO0lBR3RCLGFBQWEsQ0FBaUI7SUFHOUIsMEJBQTBCLENBRXRCO0lBR0osY0FBYyxDQUFpQjtJQUV4QyxTQUFTLENBQVk7SUFFN0IsWUFBNkIsYUFBNEI7UUFBNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7SUFBRyxDQUFDO0lBRTdELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQzVCLElBQUksT0FBTyxFQUFFO1lBQ1gsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztZQUNuQyxJQUFJLEtBQUssRUFBRTtnQkFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ3ZELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QixDQUFDLENBQUMsQ0FBQzthQUNKO2lCQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFO2dCQUUvQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ3hCO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQzlDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsMEJBQTBCLENBQUM7UUFDL0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDbkQsQ0FBQzt1R0FuRlUsZUFBZTsyRkFBZixlQUFlLDRaQUZmLENBQUMsYUFBYSxDQUFDLHFFQWtEWixxQkFBcUIsMkJBQVUsV0FBVywwRUFHMUMsc0JBQXNCLDJCQUFVLFdBQVcsOERBSzNDLHFCQUFxQiwyQkFBVSxXQUFXLGtEQTdEOUMsMkJBQTJCOzsyRkFLMUIsZUFBZTtrQkFQM0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsUUFBUSxFQUFFLDJCQUEyQjtvQkFDckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFVBQVUsRUFBRSxJQUFJO29CQUNoQixTQUFTLEVBQUUsQ0FBQyxhQUFhLENBQUM7aUJBQzNCO29HQUtDLEtBQUs7c0JBREosS0FBSztnQkFJTixNQUFNO3NCQURMLEtBQUs7Z0JBSU4sSUFBSTtzQkFESCxLQUFLO2dCQUlOLE9BQU87c0JBRE4sS0FBSztnQkFJTixPQUFPO3NCQUROLEtBQUs7Z0JBSU4sT0FBTztzQkFETixLQUFLO2dCQUlOLGtCQUFrQjtzQkFEakIsS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sV0FBVztzQkFEVixLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkFJTixZQUFZO3NCQURYLEtBQUs7Z0JBSU4sT0FBTztzQkFETixLQUFLO2dCQUlOLEtBQUs7c0JBREosS0FBSztnQkFJTixhQUFhO3NCQURaLEtBQUs7Z0JBSUcsS0FBSztzQkFEYixNQUFNO2dCQUlVLGFBQWE7c0JBRDdCLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUl6QywwQkFBMEI7c0JBRDFDLFlBQVk7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQU0xQyxjQUFjO3NCQUQ5QixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBEcmF3ZXJSZWYgfSBmcm9tICcuLi9kcmF3ZXItcmVmJztcbmltcG9ydCB7IERyYXdlclNlcnZpY2UgfSBmcm9tICcuLi9kcmF3ZXIuc2VydmljZSc7XG5pbXBvcnQge1xuICBEcmF3ZXJDb250ZW50RGlyZWN0aXZlLFxuICBEcmF3ZXJGb290ZXJEaXJlY3RpdmUsXG4gIERyYXdlckhlYWRlckRpcmVjdGl2ZSxcbn0gZnJvbSAnLi4vaGVscGVyLWRpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgRHJhd2VyT3B0aW9ucywgRHJhd2VyU2l6ZSB9IGZyb20gJy4uL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXVpLWRyYXdlcicsXG4gIHRlbXBsYXRlOiAnPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PicsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFtEcmF3ZXJTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgRHJhd2VyQ29tcG9uZW50PFQgPSB1bmtub3duLCBDIGV4dGVuZHMgb2JqZWN0ID0gYW55LCBSID0gYW55PlxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgUmVxdWlyZWQ8RHJhd2VyT3B0aW9uczxULCBDPj5cbntcbiAgQElucHV0KClcbiAgdGl0bGU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPEM+O1xuXG4gIEBJbnB1dCgpXG4gIGZvb3Rlcjogc3RyaW5nIHwgVGVtcGxhdGVSZWY8Qz47XG5cbiAgQElucHV0KClcbiAgc2l6ZTogRHJhd2VyU2l6ZSA9ICdtZWRpdW0nO1xuXG4gIEBJbnB1dCgpXG4gIG9mZnNldFkgPSAnMHB4JztcblxuICBASW5wdXQoKVxuICB2aXNpYmxlOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIGNvbnRlbnQ6IFRlbXBsYXRlUmVmPEM+IHwgQ29tcG9uZW50VHlwZTxUPjtcblxuICBASW5wdXQoKVxuICBoaWRlT25DbGlja091dHNpZGUgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzaG93Q2xvc2UgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIGRyYXdlckNsYXNzOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgbWFzazogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBtYXNrQ2xvc2FibGU6IGJvb2xlYW47XG5cbiAgQElucHV0KClcbiAgZGl2aWRlciA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgd2lkdGg6IG51bWJlcjtcblxuICBASW5wdXQoKVxuICBjb250ZW50UGFyYW1zOiBDO1xuXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSBjbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8Uj4oKTtcblxuICBAQ29udGVudENoaWxkKERyYXdlckhlYWRlckRpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBwcml2YXRlIHJlYWRvbmx5IHRpdGxlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPEM+O1xuXG4gIEBDb250ZW50Q2hpbGQoRHJhd2VyQ29udGVudERpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRlbnRUZW1wbGF0ZU9yQ29tcG9uZW50OlxuICAgIHwgVGVtcGxhdGVSZWY8Qz5cbiAgICB8IENvbXBvbmVudFR5cGU8VD47XG5cbiAgQENvbnRlbnRDaGlsZChEcmF3ZXJGb290ZXJEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcHJpdmF0ZSByZWFkb25seSBmb290ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8Qz47XG5cbiAgcHJpdmF0ZSBkcmF3ZXJSZWY6IERyYXdlclJlZjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRyYXdlclNlcnZpY2U6IERyYXdlclNlcnZpY2UpIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IHsgdmlzaWJsZSB9ID0gY2hhbmdlcztcbiAgICBpZiAodmlzaWJsZSkge1xuICAgICAgY29uc3QgdmFsdWUgPSB2aXNpYmxlLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmRyYXdlclJlZiA9IHRoaXMuZHJhd2VyU2VydmljZS5vcGVuKHRoaXMpO1xuICAgICAgICB0aGlzLmRyYXdlclJlZi5hZnRlckNsb3NlZC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgIHRoaXMuY2xvc2UuZW1pdChyZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoIXZpc2libGUuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgLy8g5LiN5biM5pyb6buY6K6k5YWz6Zet5pe277yMZHJhd2VyIOa4suafk+WQjuWwseinpuWPkSBjbG9zZSDkuovku7ZcbiAgICAgICAgdGhpcy5kcmF3ZXJSZWYuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy50aXRsZSA9IHRoaXMudGl0bGUgfHwgdGhpcy50aXRsZVRlbXBsYXRlO1xuICAgIHRoaXMuY29udGVudCA9IHRoaXMuY29udGVudCB8fCB0aGlzLmNvbnRlbnRUZW1wbGF0ZU9yQ29tcG9uZW50O1xuICAgIHRoaXMuZm9vdGVyID0gdGhpcy5mb290ZXIgfHwgdGhpcy5mb290ZXJUZW1wbGF0ZTtcbiAgfVxufVxuIl19
@@ -0,0 +1,174 @@
1
+ import { animate, state, style, transition, trigger, } from '@angular/animations';
2
+ import { CdkPortalOutlet, ComponentPortal, PortalModule, } from '@angular/cdk/portal';
3
+ import { CdkScrollable } from '@angular/cdk/scrolling';
4
+ import { AsyncPipe, NgClass, NgIf, NgStyle, NgTemplateOutlet, } from '@angular/common';
5
+ import { ChangeDetectionStrategy, Component, InjectionToken, Injector, Type, ViewChild, ViewEncapsulation, } from '@angular/core';
6
+ import { Subject } from 'rxjs';
7
+ import { TimingFunction } from '../../../core/animation/animation-consts';
8
+ import { IconComponent } from '../../../icon/icon.component';
9
+ import { handlePixel, isTemplateRef } from '../../../utils';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@angular/cdk/portal";
12
+ export const DATA = new InjectionToken('drawer-data');
13
+ const SIZE_MAPPER = {
14
+ small: 400,
15
+ medium: 600,
16
+ big: 800,
17
+ };
18
+ const DRAWER_OVERLAY_BACKDROP_CLASS = 'aui-drawer-mask';
19
+ export const duration = '300ms';
20
+ export class DrawerInternalComponent {
21
+ injector;
22
+ bodyPortalOutlet;
23
+ mask;
24
+ animationStep$ = new Subject();
25
+ options;
26
+ showHide$ = new Subject();
27
+ maskVisible$ = new Subject();
28
+ get drawerClasses() {
29
+ return {
30
+ 'aui-drawer': true,
31
+ hasDivider: this.options.divider,
32
+ ...(this.options.drawerClass
33
+ ? { [this.options.drawerClass]: true }
34
+ : null),
35
+ };
36
+ }
37
+ get width() {
38
+ return handlePixel(this.options.width || SIZE_MAPPER[this.options.size || 'medium']);
39
+ }
40
+ isTemplateRef = isTemplateRef;
41
+ constructor(injector) {
42
+ this.injector = injector;
43
+ }
44
+ ngAfterViewInit() {
45
+ this.attachBodyContent();
46
+ }
47
+ attachBodyContent() {
48
+ this.bodyPortalOutlet?.dispose();
49
+ const content = this.options.content;
50
+ if (!(content instanceof Type)) {
51
+ return;
52
+ }
53
+ const componentPortal = new ComponentPortal(content, null, Injector.create({
54
+ providers: [
55
+ {
56
+ provide: DATA,
57
+ useValue: this.options.contentParams,
58
+ },
59
+ ],
60
+ parent: this.injector,
61
+ }));
62
+ const componentRef = this.bodyPortalOutlet?.attachComponentPortal(componentPortal);
63
+ Object.assign(componentRef.instance, this.options.contentParams);
64
+ componentRef.changeDetectorRef.detectChanges();
65
+ }
66
+ onAnimation(event) {
67
+ const { phaseName, toState } = event;
68
+ if (!['show', 'hide'].includes(toState)) {
69
+ return;
70
+ }
71
+ const step = [
72
+ toState,
73
+ phaseName.charAt(0).toUpperCase() + phaseName.slice(1),
74
+ ].join('');
75
+ this.animationStep$.next(step);
76
+ const backdropElement = this.mask?.nativeElement;
77
+ if (!backdropElement) {
78
+ return;
79
+ }
80
+ const enters = [
81
+ `${DRAWER_OVERLAY_BACKDROP_CLASS}-enter`,
82
+ `${DRAWER_OVERLAY_BACKDROP_CLASS}-enter-active`,
83
+ ];
84
+ const leaves = [
85
+ `${DRAWER_OVERLAY_BACKDROP_CLASS}-leave`,
86
+ `${DRAWER_OVERLAY_BACKDROP_CLASS}-leave-active`,
87
+ ];
88
+ switch (step) {
89
+ case 'showStart': {
90
+ this.maskVisible$.next(true);
91
+ backdropElement.classList.add(...enters);
92
+ break;
93
+ }
94
+ case 'hideStart': {
95
+ backdropElement.classList.add(...leaves);
96
+ break;
97
+ }
98
+ case 'hideDone': {
99
+ this.maskVisible$.next(false);
100
+ break;
101
+ }
102
+ }
103
+ if (['showDone', 'hideDone'].includes(step)) {
104
+ backdropElement.classList.remove(...enters, ...leaves);
105
+ }
106
+ }
107
+ show() {
108
+ this.showHide$.next('show');
109
+ }
110
+ hide() {
111
+ this.showHide$.next('hide');
112
+ }
113
+ maskClick() {
114
+ if (this.options.maskClosable) {
115
+ this.hide();
116
+ }
117
+ }
118
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: DrawerInternalComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
119
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.3", type: DrawerInternalComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "bodyPortalOutlet", first: true, predicate: CdkPortalOutlet, descendants: true }, { propertyName: "mask", first: true, predicate: ["mask"], descendants: true }], ngImport: i0, template: "<div\n #mask\n class=\"aui-drawer-mask\"\n *ngIf=\"options.mask\"\n [class.isOpen]=\"maskVisible$ | async\"\n (click)=\"maskClick()\"\n></div>\n<div\n [style.marginTop]=\"options.offsetY\"\n [ngClass]=\"drawerClasses\"\n [@showHide]=\"showHide$ | async\"\n (@showHide.start)=\"onAnimation($event)\"\n (@showHide.done)=\"onAnimation($event)\"\n [style.width]=\"width\"\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(options.title); else normal\"\n [ngTemplateOutlet]=\"options.title\"\n [ngTemplateOutletContext]=\"options.contentParams\"\n ></ng-container>\n <ng-template #normal>\n {{ options.title }}\n </ng-template>\n </div>\n <aui-icon\n *ngIf=\"options.showClose\"\n class=\"aui-drawer__close\"\n icon=\"xmark\"\n (click)=\"hide()\"\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\n *ngIf=\"isTemplateRef(options.content)\"\n [ngTemplateOutlet]=\"options.content\"\n [ngTemplateOutletContext]=\"options.contentParams\"\n >\n </ng-container>\n </div>\n\n <div\n *ngIf=\"options.footer\"\n class=\"aui-drawer__footer\"\n >\n <ng-container\n *ngIf=\"isTemplateRef(options.footer); else normal\"\n [ngTemplateOutlet]=\"options.footer\"\n [ngTemplateOutletContext]=\"options.contentParams\"\n ></ng-container>\n <ng-template #normal>\n {{ options.footer }}\n </ng-template>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@keyframes aui-fade-in{0%{opacity:0}to{opacity:1}}@keyframes aui-fade-out{0%{opacity:1}to{opacity:0}}@keyframes aui-zoom-in{0%{transform:scale(.2);opacity:0}to{transform:scale(1);opacity:1}}@keyframes aui-zoom-out{0%{transform:scale(1)}to{transform:scale(.2);opacity:0}}.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-mask-enter,.aui-drawer-mask-leave{animation-duration:.3s;animation-fill-mode:both;animation-play-state:paused}.aui-drawer-mask-enter.aui-drawer-mask-enter-active,.aui-drawer-mask-leave.aui-drawer-mask-leave-active{animation-play-state:running;pointer-events:none}.aui-drawer-mask-enter.aui-drawer-mask-enter-active{animation-name:aui-fade-in}.aui-drawer-mask-leave.aui-drawer-mask-leave-active{animation-name:aui-fade-out}.aui-drawer-mask-enter{opacity:0;animation-timing-function:linear}.aui-drawer-mask-leave{animation-timing-function:linear}.aui-drawer{position:fixed;top:0;bottom:0;right:0;z-index:9999;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))}.aui-drawer__content{background-color:rgb(var(--aui-color-n-10));position:absolute;height:100%;right:0;width:100%}:root .aui-drawer__content{box-shadow:-2px 0 8px 0 rgba(var(--aui-color-origin-shadow),.2)}html[aui-theme-mode=light] .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__content{box-shadow:-2px 0 8px 0 rgba(var(--aui-color-origin-shadow),.75)}}html[aui-theme-mode=dark] .aui-drawer__content{box-shadow:-2px 0 8px 0 rgba(var(--aui-color-origin-shadow),.75)}.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: 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: i1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], animations: [
120
+ trigger('showHide', [
121
+ state('show', style({
122
+ opacity: 1,
123
+ transform: 'translateX(0)',
124
+ })),
125
+ state('hide, void', style({
126
+ opacity: 0,
127
+ transform: 'translateX(100%)',
128
+ })),
129
+ transition('hide => show, void => show', [
130
+ animate(`${duration} ${TimingFunction.easeOut}`),
131
+ ]),
132
+ transition('show => hide, show => void', [
133
+ animate(`${duration} ${TimingFunction.easeInOut}`),
134
+ ]),
135
+ ]),
136
+ ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
137
+ }
138
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: DrawerInternalComponent, decorators: [{
139
+ type: Component,
140
+ args: [{ encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
141
+ NgIf,
142
+ NgClass,
143
+ NgStyle,
144
+ NgTemplateOutlet,
145
+ IconComponent,
146
+ CdkScrollable,
147
+ PortalModule,
148
+ AsyncPipe,
149
+ ], animations: [
150
+ trigger('showHide', [
151
+ state('show', style({
152
+ opacity: 1,
153
+ transform: 'translateX(0)',
154
+ })),
155
+ state('hide, void', style({
156
+ opacity: 0,
157
+ transform: 'translateX(100%)',
158
+ })),
159
+ transition('hide => show, void => show', [
160
+ animate(`${duration} ${TimingFunction.easeOut}`),
161
+ ]),
162
+ transition('show => hide, show => void', [
163
+ animate(`${duration} ${TimingFunction.easeInOut}`),
164
+ ]),
165
+ ]),
166
+ ], template: "<div\n #mask\n class=\"aui-drawer-mask\"\n *ngIf=\"options.mask\"\n [class.isOpen]=\"maskVisible$ | async\"\n (click)=\"maskClick()\"\n></div>\n<div\n [style.marginTop]=\"options.offsetY\"\n [ngClass]=\"drawerClasses\"\n [@showHide]=\"showHide$ | async\"\n (@showHide.start)=\"onAnimation($event)\"\n (@showHide.done)=\"onAnimation($event)\"\n [style.width]=\"width\"\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(options.title); else normal\"\n [ngTemplateOutlet]=\"options.title\"\n [ngTemplateOutletContext]=\"options.contentParams\"\n ></ng-container>\n <ng-template #normal>\n {{ options.title }}\n </ng-template>\n </div>\n <aui-icon\n *ngIf=\"options.showClose\"\n class=\"aui-drawer__close\"\n icon=\"xmark\"\n (click)=\"hide()\"\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\n *ngIf=\"isTemplateRef(options.content)\"\n [ngTemplateOutlet]=\"options.content\"\n [ngTemplateOutletContext]=\"options.contentParams\"\n >\n </ng-container>\n </div>\n\n <div\n *ngIf=\"options.footer\"\n class=\"aui-drawer__footer\"\n >\n <ng-container\n *ngIf=\"isTemplateRef(options.footer); else normal\"\n [ngTemplateOutlet]=\"options.footer\"\n [ngTemplateOutletContext]=\"options.contentParams\"\n ></ng-container>\n <ng-template #normal>\n {{ options.footer }}\n </ng-template>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@keyframes aui-fade-in{0%{opacity:0}to{opacity:1}}@keyframes aui-fade-out{0%{opacity:1}to{opacity:0}}@keyframes aui-zoom-in{0%{transform:scale(.2);opacity:0}to{transform:scale(1);opacity:1}}@keyframes aui-zoom-out{0%{transform:scale(1)}to{transform:scale(.2);opacity:0}}.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-mask-enter,.aui-drawer-mask-leave{animation-duration:.3s;animation-fill-mode:both;animation-play-state:paused}.aui-drawer-mask-enter.aui-drawer-mask-enter-active,.aui-drawer-mask-leave.aui-drawer-mask-leave-active{animation-play-state:running;pointer-events:none}.aui-drawer-mask-enter.aui-drawer-mask-enter-active{animation-name:aui-fade-in}.aui-drawer-mask-leave.aui-drawer-mask-leave-active{animation-name:aui-fade-out}.aui-drawer-mask-enter{opacity:0;animation-timing-function:linear}.aui-drawer-mask-leave{animation-timing-function:linear}.aui-drawer{position:fixed;top:0;bottom:0;right:0;z-index:9999;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))}.aui-drawer__content{background-color:rgb(var(--aui-color-n-10));position:absolute;height:100%;right:0;width:100%}:root .aui-drawer__content{box-shadow:-2px 0 8px 0 rgba(var(--aui-color-origin-shadow),.2)}html[aui-theme-mode=light] .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__content{box-shadow:-2px 0 8px 0 rgba(var(--aui-color-origin-shadow),.75)}}html[aui-theme-mode=dark] .aui-drawer__content{box-shadow:-2px 0 8px 0 rgba(var(--aui-color-origin-shadow),.75)}.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"] }]
167
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { bodyPortalOutlet: [{
168
+ type: ViewChild,
169
+ args: [CdkPortalOutlet, { static: false }]
170
+ }], mask: [{
171
+ type: ViewChild,
172
+ args: ['mask']
173
+ }] } });
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RyYXdlci9jb21wb25lbnQvaW50ZXJuYWwvaW50ZXJuYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2RyYXdlci9jb21wb25lbnQvaW50ZXJuYWwvaW50ZXJuYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLE9BQU8sRUFFUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEdBQ1IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsZUFBZSxFQUNmLGVBQWUsRUFDZixZQUFZLEdBQ2IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUNMLFNBQVMsRUFDVCxPQUFPLEVBQ1AsSUFBSSxFQUNKLE9BQU8sRUFDUCxnQkFBZ0IsR0FDakIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxjQUFjLEVBQ2QsUUFBUSxFQUNSLElBQUksRUFDSixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFHNUQsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLElBQUksY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBRXRELE1BQU0sV0FBVyxHQUErQjtJQUM5QyxLQUFLLEVBQUUsR0FB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LE1BQU0sRUFDTixLQUFLLENBQUM7Z0NBQ0osT0FBTyxFQUFFLENBQUM7Z0NBQ1YsU0FBUyxFQUFFLGVBQWU7NkJBQzNCLENBQUMsQ0FDSDs0QkFDRCxLQUFLLENBQ0gsWUFBWSxFQUNaLEtBQUssQ0FBQztnQ0FDSixPQUFPLEVBQUUsQ0FBQztnQ0FDVixTQUFTLEVBQUUsa0JBQWtCOzZCQUM5QixDQUFDLENBQ0g7NEJBQ0QsVUFBVSxDQUFDLDRCQUE0QixFQUFFO2dDQUN2QyxPQUFPLENBQUMsR0FBRyxRQUFRLElBQUksY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDOzZCQUNqRCxDQUFDOzRCQUNGLFVBQVUsQ0FBQyw0QkFBNEIsRUFBRTtnQ0FDdkMsT0FBTyxDQUFDLEdBQUcsUUFBUSxJQUFJLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs2QkFDbkQsQ0FBQzt5QkFDSCxDQUFDO3FCQUNIOytGQUlELGdCQUFnQjtzQkFEZixTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSTdDLElBQUk7c0JBREgsU0FBUzt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYW5pbWF0ZSxcbiAgQW5pbWF0aW9uRXZlbnQsXG4gIHN0YXRlLFxuICBzdHlsZSxcbiAgdHJhbnNpdGlvbixcbiAgdHJpZ2dlcixcbn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQge1xuICBDZGtQb3J0YWxPdXRsZXQsXG4gIENvbXBvbmVudFBvcnRhbCxcbiAgUG9ydGFsTW9kdWxlLFxufSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IENka1Njcm9sbGFibGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7XG4gIEFzeW5jUGlwZSxcbiAgTmdDbGFzcyxcbiAgTmdJZixcbiAgTmdTdHlsZSxcbiAgTmdUZW1wbGF0ZU91dGxldCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdGlvblRva2VuLFxuICBJbmplY3RvcixcbiAgVHlwZSxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFRpbWluZ0Z1bmN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9hbmltYXRpb24vYW5pbWF0aW9uLWNvbnN0cyc7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBoYW5kbGVQaXhlbCwgaXNUZW1wbGF0ZVJlZiB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IERyYXdlck9wdGlvbnMsIERyYXdlclNpemUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBEQVRBID0gbmV3IEluamVjdGlvblRva2VuKCdkcmF3ZXItZGF0YScpO1xuXG5jb25zdCBTSVpFX01BUFBFUjogUmVjb3JkPERyYXdlclNpemUsIG51bWJlcj4gPSB7XG4gIHNtYWxsOiA0MDAsXG4gIG1lZGl1bTogNjAwLFxuICBiaWc6IDgwMCxcbn07XG5jb25zdCBEUkFXRVJfT1ZFUkxBWV9CQUNLRFJPUF9DTEFTUyA9ICdhdWktZHJhd2VyLW1hc2snO1xuXG5leHBvcnQgY29uc3QgZHVyYXRpb24gPSAnMzAwbXMnO1xuXG50eXBlIFN0ZXAgPSAnc2hvd1N0YXJ0JyB8ICdzaG93RG9uZScgfCAnaGlkZVN0YXJ0JyB8ICdoaWRlRG9uZSc7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vaW50ZXJuYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbnRlcm5hbC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE5nSWYsXG4gICAgTmdDbGFzcyxcbiAgICBOZ1N0eWxlLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgSWNvbkNvbXBvbmVudCxcbiAgICBDZGtTY3JvbGxhYmxlLFxuICAgIFBvcnRhbE1vZHVsZSxcbiAgICBBc3luY1BpcGUsXG4gIF0sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdzaG93SGlkZScsIFtcbiAgICAgIHN0YXRlKFxuICAgICAgICAnc2hvdycsXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoMCknLFxuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgICBzdGF0ZShcbiAgICAgICAgJ2hpZGUsIHZvaWQnLFxuICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDEwMCUpJyxcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICAgdHJhbnNpdGlvbignaGlkZSA9PiBzaG93LCB2b2lkID0+IHNob3cnLCBbXG4gICAgICAgIGFuaW1hdGUoYCR7ZHVyYXRpb259ICR7VGltaW5nRnVuY3Rpb24uZWFzZU91dH1gKSxcbiAgICAgIF0pLFxuICAgICAgdHJhbnNpdGlvbignc2hvdyA9PiBoaWRlLCBzaG93ID0+IHZvaWQnLCBbXG4gICAgICAgIGFuaW1hdGUoYCR7ZHVyYXRpb259ICR7VGltaW5nRnVuY3Rpb24uZWFzZUluT3V0fWApLFxuICAgICAgXSksXG4gICAgXSksXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIERyYXdlckludGVybmFsQ29tcG9uZW50PFQgPSB1bmtub3duLCBDIGV4dGVuZHMgb2JqZWN0ID0gYW55PiB7XG4gIEBWaWV3Q2hpbGQoQ2RrUG9ydGFsT3V0bGV0LCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgYm9keVBvcnRhbE91dGxldDogQ2RrUG9ydGFsT3V0bGV0O1xuXG4gIEBWaWV3Q2hpbGQoJ21hc2snKVxuICBtYXNrOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICBhbmltYXRpb25TdGVwJCA9IG5ldyBTdWJqZWN0PFN0ZXA+KCk7XG5cbiAgb3B0aW9uczogRHJhd2VyT3B0aW9uczxULCBDPjtcbiAgc2hvd0hpZGUkID0gbmV3IFN1YmplY3Q8J3Nob3cnIHwgJ2hpZGUnPigpO1xuICBtYXNrVmlzaWJsZSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gIGdldCBkcmF3ZXJDbGFzc2VzKCk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2F1aS1kcmF3ZXInOiB0cnVlLFxuICAgICAgaGFzRGl2aWRlcjogdGhpcy5vcHRpb25zLmRpdmlkZXIsXG4gICAgICAuLi4odGhpcy5vcHRpb25zLmRyYXdlckNsYXNzXG4gICAgICAgID8geyBbdGhpcy5vcHRpb25zLmRyYXdlckNsYXNzXTogdHJ1ZSB9XG4gICAgICAgIDogbnVsbCksXG4gICAgfTtcbiAgfVxuXG4gIGdldCB3aWR0aCgpIHtcbiAgICByZXR1cm4gaGFuZGxlUGl4ZWwoXG4gICAgICB0aGlzLm9wdGlvbnMud2lkdGggfHwgU0laRV9NQVBQRVJbdGhpcy5vcHRpb25zLnNpemUgfHwgJ21lZGl1bSddLFxuICAgICk7XG4gIH1cblxuICBpc1RlbXBsYXRlUmVmID0gaXNUZW1wbGF0ZVJlZjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3Rvcikge31cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5hdHRhY2hCb2R5Q29udGVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhdHRhY2hCb2R5Q29udGVudCgpOiB2b2lkIHtcbiAgICB0aGlzLmJvZHlQb3J0YWxPdXRsZXQ/LmRpc3Bvc2UoKTtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5vcHRpb25zLmNvbnRlbnQ7XG4gICAgaWYgKCEoY29udGVudCBpbnN0YW5jZW9mIFR5cGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbXBvbmVudFBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWw8VD4oXG4gICAgICBjb250ZW50LFxuICAgICAgbnVsbCxcbiAgICAgIEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IERBVEEsXG4gICAgICAgICAgICB1c2VWYWx1ZTogdGhpcy5vcHRpb25zLmNvbnRlbnRQYXJhbXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPVxuICAgICAgdGhpcy5ib2R5UG9ydGFsT3V0bGV0Py5hdHRhY2hDb21wb25lbnRQb3J0YWwoY29tcG9uZW50UG9ydGFsKTtcbiAgICBPYmplY3QuYXNzaWduKGNvbXBvbmVudFJlZi5pbnN0YW5jZSwgdGhpcy5vcHRpb25zLmNvbnRlbnRQYXJhbXMpO1xuICAgIGNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBvbkFuaW1hdGlvbihldmVudDogQW5pbWF0aW9uRXZlbnQpIHtcbiAgICBjb25zdCB7IHBoYXNlTmFtZSwgdG9TdGF0ZSB9ID0gZXZlbnQ7XG4gICAgaWYgKCFbJ3Nob3cnLCAnaGlkZSddLmluY2x1ZGVzKHRvU3RhdGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3RlcCA9IFtcbiAgICAgIHRvU3RhdGUsXG4gICAgICBwaGFzZU5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwaGFzZU5hbWUuc2xpY2UoMSksXG4gICAgXS5qb2luKCcnKSBhcyBTdGVwO1xuICAgIHRoaXMuYW5pbWF0aW9uU3RlcCQubmV4dChzdGVwKTtcblxuICAgIGNvbnN0IGJhY2tkcm9wRWxlbWVudCA9IHRoaXMubWFzaz8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWJhY2tkcm9wRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVudGVycyA9IFtcbiAgICAgIGAke0RSQVdFUl9PVkVSTEFZX0JBQ0tEUk9QX0NMQVNTfS1lbnRlcmAsXG4gICAgICBgJHtEUkFXRVJfT1ZFUkxBWV9CQUNLRFJPUF9DTEFTU30tZW50ZXItYWN0aXZlYCxcbiAgICBdO1xuICAgIGNvbnN0IGxlYXZlcyA9IFtcbiAgICAgIGAke0RSQVdFUl9PVkVSTEFZX0JBQ0tEUk9QX0NMQVNTfS1sZWF2ZWAsXG4gICAgICBgJHtEUkFXRVJfT1ZFUkxBWV9CQUNLRFJPUF9DTEFTU30tbGVhdmUtYWN0aXZlYCxcbiAgICBdO1xuICAgIHN3aXRjaCAoc3RlcCkge1xuICAgICAgY2FzZSAnc2hvd1N0YXJ0Jzoge1xuICAgICAgICB0aGlzLm1hc2tWaXNpYmxlJC5uZXh0KHRydWUpO1xuICAgICAgICBiYWNrZHJvcEVsZW1lbnQuY2xhc3NMaXN0LmFkZCguLi5lbnRlcnMpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2hpZGVTdGFydCc6IHtcbiAgICAgICAgYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQoLi4ubGVhdmVzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdoaWRlRG9uZSc6IHtcbiAgICAgICAgdGhpcy5tYXNrVmlzaWJsZSQubmV4dChmYWxzZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChbJ3Nob3dEb25lJywgJ2hpZGVEb25lJ10uaW5jbHVkZXMoc3RlcCkpIHtcbiAgICAgIGJhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKC4uLmVudGVycywgLi4ubGVhdmVzKTtcbiAgICB9XG4gIH1cblxuICBzaG93KCkge1xuICAgIHRoaXMuc2hvd0hpZGUkLm5leHQoJ3Nob3cnKTtcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5zaG93SGlkZSQubmV4dCgnaGlkZScpO1xuICB9XG5cbiAgbWFza0NsaWNrKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubWFza0Nsb3NhYmxlKSB7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXZcbiAgI21hc2tcbiAgY2xhc3M9XCJhdWktZHJhd2VyLW1hc2tcIlxuICAqbmdJZj1cIm9wdGlvbnMubWFza1wiXG4gIFtjbGFzcy5pc09wZW5dPVwibWFza1Zpc2libGUkIHwgYXN5bmNcIlxuICAoY2xpY2spPVwibWFza0NsaWNrKClcIlxuPjwvZGl2PlxuPGRpdlxuICBbc3R5bGUubWFyZ2luVG9wXT1cIm9wdGlvbnMub2Zmc2V0WVwiXG4gIFtuZ0NsYXNzXT1cImRyYXdlckNsYXNzZXNcIlxuICBbQHNob3dIaWRlXT1cInNob3dIaWRlJCB8IGFzeW5jXCJcbiAgKEBzaG93SGlkZS5zdGFydCk9XCJvbkFuaW1hdGlvbigkZXZlbnQpXCJcbiAgKEBzaG93SGlkZS5kb25lKT1cIm9uQW5pbWF0aW9uKCRldmVudClcIlxuICBbc3R5bGUud2lkdGhdPVwid2lkdGhcIlxuPlxuICA8ZGl2IGNsYXNzPVwiYXVpLWRyYXdlcl9fY29udGVudFwiPlxuICAgIDxkaXYgY2xhc3M9XCJhdWktZHJhd2VyX19ib2R5LXdyYXBwZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhdWktZHJhd2VyX19oZWFkZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF1aS1kcmF3ZXJfX3RpdGxlXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJpc1RlbXBsYXRlUmVmKG9wdGlvbnMudGl0bGUpOyBlbHNlIG5vcm1hbFwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25zLnRpdGxlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJvcHRpb25zLmNvbnRlbnRQYXJhbXNcIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI25vcm1hbD5cbiAgICAgICAgICAgIHt7IG9wdGlvbnMudGl0bGUgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGF1aS1pY29uXG4gICAgICAgICAgKm5nSWY9XCJvcHRpb25zLnNob3dDbG9zZVwiXG4gICAgICAgICAgY2xhc3M9XCJhdWktZHJhd2VyX19jbG9zZVwiXG4gICAgICAgICAgaWNvbj1cInhtYXJrXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGlkZSgpXCJcbiAgICAgICAgPjwvYXVpLWljb24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImF1aS1kcmF3ZXJfX2JvZHlcIlxuICAgICAgICBjZGtTY3JvbGxhYmxlXG4gICAgICA+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBjZGtQb3J0YWxPdXRsZXQ+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0lmPVwiaXNUZW1wbGF0ZVJlZihvcHRpb25zLmNvbnRlbnQpXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25zLmNvbnRlbnRcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJvcHRpb25zLmNvbnRlbnRQYXJhbXNcIlxuICAgICAgICA+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJvcHRpb25zLmZvb3RlclwiXG4gICAgICAgIGNsYXNzPVwiYXVpLWRyYXdlcl9fZm9vdGVyXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0lmPVwiaXNUZW1wbGF0ZVJlZihvcHRpb25zLmZvb3Rlcik7IGVsc2Ugbm9ybWFsXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25zLmZvb3RlclwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIm9wdGlvbnMuY29udGVudFBhcmFtc1wiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub3JtYWw+XG4gICAgICAgICAge3sgb3B0aW9ucy5mb290ZXIgfX1cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19