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

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,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,188 +19,49 @@ 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();
22
+ width;
23
+ contentParams;
61
24
  close = new EventEmitter();
62
- drawerTemplate;
63
- bodyPortalOutlet;
64
25
  titleTemplate;
65
- contentTemplate;
26
+ contentTemplateOrComponent;
66
27
  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();
28
+ drawerRef;
29
+ constructor(drawerService) {
30
+ this.drawerService = drawerService;
96
31
  }
97
32
  ngOnChanges(changes) {
98
33
  const { visible } = changes;
99
34
  if (visible) {
100
35
  const value = visible.currentValue;
101
36
  if (value) {
102
- this.open();
37
+ this.drawerRef = this.drawerService.open(this);
38
+ this.drawerRef.afterClosed.pipe(first()).subscribe(res => {
39
+ this.close.emit(res);
40
+ });
103
41
  }
104
42
  else if (!visible.firstChange) {
105
- this.dispose();
43
+ this.drawerRef.close();
106
44
  }
107
45
  }
108
46
  }
109
47
  ngAfterViewInit() {
110
- this.attachBodyContent();
111
- setTimeout(() => {
112
- this.drawerViewInit.emit();
113
- }, 0);
48
+ this.title = this.title || this.titleTemplate;
49
+ this.content = this.content || this.contentTemplateOrComponent;
50
+ this.footer = this.footer || this.footerTemplate;
114
51
  }
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 });
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", 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
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: '<ng-content></ng-content>',
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
@@ -242,24 +87,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.3", ngImpor
242
87
  type: Input
243
88
  }], width: [{
244
89
  type: Input
245
- }], drawerViewInit: [{
246
- type: Output
90
+ }], contentParams: [{
91
+ type: Input
247
92
  }], close: [{
248
93
  type: Output
249
- }], drawerTemplate: [{
250
- type: ViewChild,
251
- args: ['drawerTemplate', { static: true }]
252
- }], bodyPortalOutlet: [{
253
- type: ViewChild,
254
- args: [CdkPortalOutlet, { static: false }]
255
94
  }], titleTemplate: [{
256
95
  type: ContentChild,
257
96
  args: [DrawerHeaderDirective, { read: TemplateRef }]
258
- }], contentTemplate: [{
97
+ }], contentTemplateOrComponent: [{
259
98
  type: ContentChild,
260
99
  args: [DrawerContentDirective, { read: TemplateRef }]
261
100
  }], footerTemplate: [{
262
101
  type: ContentChild,
263
102
  args: [DrawerFooterDirective, { read: TemplateRef }]
264
103
  }] } });
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==
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kcmF3ZXIvY29tcG9uZW50L2RyYXdlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzdCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQixxQkFBcUIsR0FDdEIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQWlCLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7O0FBU3JELE1BQU0sT0FBTyxlQUFlO0lBZ0VHO0lBekQ3QixLQUFLLENBQTBCO0lBRy9CLE1BQU0sQ0FBMEI7SUFHaEMsSUFBSSxHQUFlLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFHckMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUdoQixPQUFPLENBQVU7SUFHakIsT0FBTyxDQUFvQztJQUczQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFHM0IsU0FBUyxHQUFHLElBQUksQ0FBQztJQUdqQixXQUFXLENBQVM7SUFHcEIsSUFBSSxDQUFVO0lBR2QsWUFBWSxDQUFVO0lBR3RCLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFHZixLQUFLLENBQVM7SUFHZCxhQUFhLENBQUk7SUFHUixLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUssQ0FBQztJQUd0QixhQUFhLENBQWlCO0lBRzlCLDBCQUEwQixDQUV0QjtJQUdKLGNBQWMsQ0FBaUI7SUFFeEMsU0FBUyxDQUFxQjtJQUV0QyxZQUE2QixhQUFxQztRQUFyQyxrQkFBYSxHQUFiLGFBQWEsQ0FBd0I7SUFBRyxDQUFDO0lBRXRFLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQzVCLElBQUksT0FBTyxFQUFFO1lBQ1gsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztZQUNuQyxJQUFJLEtBQUssRUFBRTtnQkFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ3ZELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QixDQUFDLENBQUMsQ0FBQzthQUNKO2lCQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFO2dCQUUvQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ3hCO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQzlDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsMEJBQTBCLENBQUM7UUFDL0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDbkQsQ0FBQzt1R0F0RlUsZUFBZTsyRkFBZixlQUFlLDRaQUZmLENBQUMsYUFBYSxDQUFDLHFFQXFEWixxQkFBcUIsMkJBQVUsV0FBVywwRUFHMUMsc0JBQXNCLDJCQUFVLFdBQVcsOERBSzNDLHFCQUFxQiwyQkFBVSxXQUFXLGtEQWhFOUMsMkJBQTJCOzsyRkFLMUIsZUFBZTtrQkFQM0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsUUFBUSxFQUFFLDJCQUEyQjtvQkFDckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFVBQVUsRUFBRSxJQUFJO29CQUNoQixTQUFTLEVBQUUsQ0FBQyxhQUFhLENBQUM7aUJBQzNCO29HQVFDLEtBQUs7c0JBREosS0FBSztnQkFJTixNQUFNO3NCQURMLEtBQUs7Z0JBSU4sSUFBSTtzQkFESCxLQUFLO2dCQUlOLE9BQU87c0JBRE4sS0FBSztnQkFJTixPQUFPO3NCQUROLEtBQUs7Z0JBSU4sT0FBTztzQkFETixLQUFLO2dCQUlOLGtCQUFrQjtzQkFEakIsS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sV0FBVztzQkFEVixLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkFJTixZQUFZO3NCQURYLEtBQUs7Z0JBSU4sT0FBTztzQkFETixLQUFLO2dCQUlOLEtBQUs7c0JBREosS0FBSztnQkFJTixhQUFhO3NCQURaLEtBQUs7Z0JBSUcsS0FBSztzQkFEYixNQUFNO2dCQUlVLGFBQWE7c0JBRDdCLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUl6QywwQkFBMEI7c0JBRDFDLFlBQVk7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQU0xQyxjQUFjO3NCQUQ5QixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBEcmF3ZXJSZWYgfSBmcm9tICcuLi9kcmF3ZXItcmVmJztcbmltcG9ydCB7IERyYXdlclNlcnZpY2UgfSBmcm9tICcuLi9kcmF3ZXIuc2VydmljZSc7XG5pbXBvcnQge1xuICBEcmF3ZXJDb250ZW50RGlyZWN0aXZlLFxuICBEcmF3ZXJGb290ZXJEaXJlY3RpdmUsXG4gIERyYXdlckhlYWRlckRpcmVjdGl2ZSxcbn0gZnJvbSAnLi4vaGVscGVyLWRpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgRHJhd2VyT3B0aW9ucywgRHJhd2VyU2l6ZSB9IGZyb20gJy4uL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXVpLWRyYXdlcicsXG4gIHRlbXBsYXRlOiAnPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PicsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFtEcmF3ZXJTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgRHJhd2VyQ29tcG9uZW50PFxuICBUID0gdW5rbm93bixcbiAgQyBleHRlbmRzIG9iamVjdCA9IG9iamVjdCxcbiAgUiA9IHVua25vd24sXG4+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBSZXF1aXJlZDxEcmF3ZXJPcHRpb25zPFQsIEM+Plxue1xuICBASW5wdXQoKVxuICB0aXRsZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8Qz47XG5cbiAgQElucHV0KClcbiAgZm9vdGVyOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxDPjtcblxuICBASW5wdXQoKVxuICBzaXplOiBEcmF3ZXJTaXplID0gRHJhd2VyU2l6ZS5NZWRpdW07XG5cbiAgQElucHV0KClcbiAgb2Zmc2V0WSA9ICcwcHgnO1xuXG4gIEBJbnB1dCgpXG4gIHZpc2libGU6IGJvb2xlYW47XG5cbiAgQElucHV0KClcbiAgY29udGVudDogVGVtcGxhdGVSZWY8Qz4gfCBDb21wb25lbnRUeXBlPFQ+O1xuXG4gIEBJbnB1dCgpXG4gIGhpZGVPbkNsaWNrT3V0c2lkZSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNob3dDbG9zZSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgZHJhd2VyQ2xhc3M6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBtYXNrOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIG1hc2tDbG9zYWJsZTogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBkaXZpZGVyID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICB3aWR0aDogbnVtYmVyO1xuXG4gIEBJbnB1dCgpXG4gIGNvbnRlbnRQYXJhbXM6IEM7XG5cbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IGNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjxSPigpO1xuXG4gIEBDb250ZW50Q2hpbGQoRHJhd2VySGVhZGVyRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHByaXZhdGUgcmVhZG9ubHkgdGl0bGVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8Qz47XG5cbiAgQENvbnRlbnRDaGlsZChEcmF3ZXJDb250ZW50RGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHByaXZhdGUgcmVhZG9ubHkgY29udGVudFRlbXBsYXRlT3JDb21wb25lbnQ6XG4gICAgfCBUZW1wbGF0ZVJlZjxDPlxuICAgIHwgQ29tcG9uZW50VHlwZTxUPjtcblxuICBAQ29udGVudENoaWxkKERyYXdlckZvb3RlckRpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBwcml2YXRlIHJlYWRvbmx5IGZvb3RlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxDPjtcblxuICBwcml2YXRlIGRyYXdlclJlZjogRHJhd2VyUmVmPFQsIEMsIFI+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZHJhd2VyU2VydmljZTogRHJhd2VyU2VydmljZTxULCBDLCBSPikge31cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgeyB2aXNpYmxlIH0gPSBjaGFuZ2VzO1xuICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHZpc2libGUuY3VycmVudFZhbHVlO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZHJhd2VyUmVmID0gdGhpcy5kcmF3ZXJTZXJ2aWNlLm9wZW4odGhpcyk7XG4gICAgICAgIHRoaXMuZHJhd2VyUmVmLmFmdGVyQ2xvc2VkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgdGhpcy5jbG9zZS5lbWl0KHJlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICghdmlzaWJsZS5maXJzdENoYW5nZSkge1xuICAgICAgICAvLyDkuI3luIzmnJvpu5jorqTlhbPpl63ml7bvvIxkcmF3ZXIg5riy5p+T5ZCO5bCx6Kem5Y+RIGNsb3NlIOS6i+S7tlxuICAgICAgICB0aGlzLmRyYXdlclJlZi5jbG9zZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnRpdGxlID0gdGhpcy50aXRsZSB8fCB0aGlzLnRpdGxlVGVtcGxhdGU7XG4gICAgdGhpcy5jb250ZW50ID0gdGhpcy5jb250ZW50IHx8IHRoaXMuY29udGVudFRlbXBsYXRlT3JDb21wb25lbnQ7XG4gICAgdGhpcy5mb290ZXIgPSB0aGlzLmZvb3RlciB8fCB0aGlzLmZvb3RlclRlbXBsYXRlO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,177 @@
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 { BehaviorSubject, 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 { DrawerSize } from '../../types';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@angular/cdk/portal";
13
+ export const DATA = new InjectionToken('drawer-data');
14
+ const SIZE_MAPPER = {
15
+ [DrawerSize.Small]: 400,
16
+ [DrawerSize.Medium]: 600,
17
+ [DrawerSize.Big]: 800,
18
+ };
19
+ const DRAWER_OVERLAY_BACKDROP_CLASS = 'aui-drawer-mask';
20
+ export const duration = '300ms';
21
+ export class DrawerInternalComponent {
22
+ injector;
23
+ bodyPortalOutlet;
24
+ mask;
25
+ animationStep$ = new Subject();
26
+ options;
27
+ showHide$$ = new BehaviorSubject('hide');
28
+ maskVisible$ = new Subject();
29
+ get drawerClasses() {
30
+ return {
31
+ 'aui-drawer': true,
32
+ hasDivider: this.options.divider,
33
+ ...(this.options.drawerClass
34
+ ? { [this.options.drawerClass]: true }
35
+ : null),
36
+ };
37
+ }
38
+ get width() {
39
+ return handlePixel(this.options.width || SIZE_MAPPER[this.options.size || DrawerSize.Medium]);
40
+ }
41
+ isTemplateRef = isTemplateRef;
42
+ constructor(injector) {
43
+ this.injector = injector;
44
+ }
45
+ ngAfterViewInit() {
46
+ this.attachBodyContent();
47
+ }
48
+ attachBodyContent() {
49
+ this.bodyPortalOutlet?.dispose();
50
+ const content = this.options.content;
51
+ if (!(content instanceof Type)) {
52
+ return;
53
+ }
54
+ const componentPortal = new ComponentPortal(content, null, Injector.create({
55
+ providers: [
56
+ {
57
+ provide: DATA,
58
+ useValue: this.options.contentParams,
59
+ },
60
+ ],
61
+ parent: this.injector,
62
+ }));
63
+ const componentRef = this.bodyPortalOutlet?.attachComponentPortal(componentPortal);
64
+ Object.assign(componentRef.instance, this.options.contentParams);
65
+ componentRef.changeDetectorRef.detectChanges();
66
+ }
67
+ onAnimation(event) {
68
+ const { phaseName, toState } = event;
69
+ if (!['show', 'hide'].includes(toState)) {
70
+ return;
71
+ }
72
+ const step = [
73
+ toState,
74
+ phaseName.charAt(0).toUpperCase() + phaseName.slice(1),
75
+ ].join('');
76
+ this.animationStep$.next(step);
77
+ const backdropElement = this.mask?.nativeElement;
78
+ if (!backdropElement) {
79
+ return;
80
+ }
81
+ const enters = [
82
+ `${DRAWER_OVERLAY_BACKDROP_CLASS}-enter`,
83
+ `${DRAWER_OVERLAY_BACKDROP_CLASS}-enter-active`,
84
+ ];
85
+ const leaves = [
86
+ `${DRAWER_OVERLAY_BACKDROP_CLASS}-leave`,
87
+ `${DRAWER_OVERLAY_BACKDROP_CLASS}-leave-active`,
88
+ ];
89
+ switch (step) {
90
+ case 'showStart': {
91
+ backdropElement.classList.add(...enters);
92
+ this.maskVisible$.next(true);
93
+ break;
94
+ }
95
+ case 'hideStart': {
96
+ backdropElement.classList.add(...leaves);
97
+ break;
98
+ }
99
+ case 'showDone': {
100
+ backdropElement.classList.remove(...enters);
101
+ break;
102
+ }
103
+ case 'hideDone': {
104
+ this.maskVisible$.next(false);
105
+ backdropElement.classList.remove(...leaves);
106
+ break;
107
+ }
108
+ }
109
+ }
110
+ show() {
111
+ this.showHide$$.next('show');
112
+ }
113
+ hide() {
114
+ this.showHide$$.next('hide');
115
+ }
116
+ maskClick() {
117
+ if (this.options.maskClosable) {
118
+ this.hide();
119
+ }
120
+ }
121
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: DrawerInternalComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
122
+ 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: [
123
+ trigger('showHide', [
124
+ state('show', style({
125
+ opacity: 1,
126
+ transform: 'translateX(0)',
127
+ })),
128
+ state('hide, void', style({
129
+ opacity: 0,
130
+ transform: 'translateX(100%)',
131
+ })),
132
+ transition('hide => show, void => show', [
133
+ animate(`${duration} ${TimingFunction.easeOut}`),
134
+ ]),
135
+ transition('show => hide, show => void', [
136
+ animate(`${duration} ${TimingFunction.easeInOut}`),
137
+ ]),
138
+ ]),
139
+ ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
140
+ }
141
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: DrawerInternalComponent, decorators: [{
142
+ type: Component,
143
+ args: [{ encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
144
+ NgIf,
145
+ NgClass,
146
+ NgStyle,
147
+ NgTemplateOutlet,
148
+ IconComponent,
149
+ CdkScrollable,
150
+ PortalModule,
151
+ AsyncPipe,
152
+ ], animations: [
153
+ trigger('showHide', [
154
+ state('show', style({
155
+ opacity: 1,
156
+ transform: 'translateX(0)',
157
+ })),
158
+ state('hide, void', style({
159
+ opacity: 0,
160
+ transform: 'translateX(100%)',
161
+ })),
162
+ transition('hide => show, void => show', [
163
+ animate(`${duration} ${TimingFunction.easeOut}`),
164
+ ]),
165
+ transition('show => hide, show => void', [
166
+ animate(`${duration} ${TimingFunction.easeInOut}`),
167
+ ]),
168
+ ]),
169
+ ], 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"] }]
170
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { bodyPortalOutlet: [{
171
+ type: ViewChild,
172
+ args: [CdkPortalOutlet, { static: false }]
173
+ }], mask: [{
174
+ type: ViewChild,
175
+ args: ['mask']
176
+ }] } });
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RyYXdlci9jb21wb25lbnQvaW50ZXJuYWwvaW50ZXJuYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2RyYXdlci9jb21wb25lbnQvaW50ZXJuYWwvaW50ZXJuYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLE9BQU8sRUFFUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEdBQ1IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsZUFBZSxFQUNmLGVBQWUsRUFDZixZQUFZLEdBQ2IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUNMLFNBQVMsRUFDVCxPQUFPLEVBQ1AsSUFBSSxFQUNKLE9BQU8sRUFDUCxnQkFBZ0IsR0FDakIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxjQUFjLEVBQ2QsUUFBUSxFQUNSLElBQUksRUFDSixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RCxPQUFPLEVBQWlCLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7O0FBRXhELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxJQUFJLGNBQWMsQ0FBQyxhQUFh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Q1A7d0JBQ1AsSUFBSTt3QkFDSixPQUFPO3dCQUNQLE9BQU87d0JBQ1AsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLGFBQWE7d0JBQ2IsWUFBWTt3QkFDWixTQUFTO3FCQUNWLGNBQ1c7d0JBQ1YsT0FBTyxDQUFDLFVBQVUsRUFBRTs0QkFDbEIsS0FBSyxDQUNILE1BQU0sRUFDTixLQUFLLENBQUM7Z0NBQ0osT0FBTyxFQUFFLENBQUM7Z0NBQ1YsU0FBUyxFQUFFLGVBQWU7NkJBQzNCLENBQUMsQ0FDSDs0QkFDRCxLQUFLLENBQ0gsWUFBWSxFQUNaLEtBQUssQ0FBQztnQ0FDSixPQUFPLEVBQUUsQ0FBQztnQ0FDVixTQUFTLEVBQUUsa0JBQWtCOzZCQUM5QixDQUFDLENBQ0g7NEJBQ0QsVUFBVSxDQUFDLDRCQUE0QixFQUFFO2dDQUN2QyxPQUFPLENBQUMsR0FBRyxRQUFRLElBQUksY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDOzZCQUNqRCxDQUFDOzRCQUNGLFVBQVUsQ0FBQyw0QkFBNEIsRUFBRTtnQ0FDdkMsT0FBTyxDQUFDLEdBQUcsUUFBUSxJQUFJLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs2QkFDbkQsQ0FBQzt5QkFDSCxDQUFDO3FCQUNIOytGQUlELGdCQUFnQjtzQkFEZixTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSTdDLElBQUk7c0JBREgsU0FBUzt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYW5pbWF0ZSxcbiAgQW5pbWF0aW9uRXZlbnQsXG4gIHN0YXRlLFxuICBzdHlsZSxcbiAgdHJhbnNpdGlvbixcbiAgdHJpZ2dlcixcbn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQge1xuICBDZGtQb3J0YWxPdXRsZXQsXG4gIENvbXBvbmVudFBvcnRhbCxcbiAgUG9ydGFsTW9kdWxlLFxufSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IENka1Njcm9sbGFibGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7XG4gIEFzeW5jUGlwZSxcbiAgTmdDbGFzcyxcbiAgTmdJZixcbiAgTmdTdHlsZSxcbiAgTmdUZW1wbGF0ZU91dGxldCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdGlvblRva2VuLFxuICBJbmplY3RvcixcbiAgVHlwZSxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgVGltaW5nRnVuY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9jb3JlL2FuaW1hdGlvbi9hbmltYXRpb24tY29uc3RzJztcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IGhhbmRsZVBpeGVsLCBpc1RlbXBsYXRlUmVmIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgRHJhd2VyT3B0aW9ucywgRHJhd2VyU2l6ZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IERBVEEgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ2RyYXdlci1kYXRhJyk7XG5cbmNvbnN0IFNJWkVfTUFQUEVSID0ge1xuICBbRHJhd2VyU2l6ZS5TbWFsbF06IDQwMCxcbiAgW0RyYXdlclNpemUuTWVkaXVtXTogNjAwLFxuICBbRHJhd2VyU2l6ZS5CaWddOiA4MDAsXG59O1xuY29uc3QgRFJBV0VSX09WRVJMQVlfQkFDS0RST1BfQ0xBU1MgPSAnYXVpLWRyYXdlci1tYXNrJztcblxuZXhwb3J0IGNvbnN0IGR1cmF0aW9uID0gJzMwMG1zJztcblxudHlwZSBTdGVwID0gJ3Nob3dTdGFydCcgfCAnc2hvd0RvbmUnIHwgJ2hpZGVTdGFydCcgfCAnaGlkZURvbmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL2ludGVybmFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW50ZXJuYWwuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0lmLFxuICAgIE5nQ2xhc3MsXG4gICAgTmdTdHlsZSxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIEljb25Db21wb25lbnQsXG4gICAgQ2RrU2Nyb2xsYWJsZSxcbiAgICBQb3J0YWxNb2R1bGUsXG4gICAgQXN5bmNQaXBlLFxuICBdLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignc2hvd0hpZGUnLCBbXG4gICAgICBzdGF0ZShcbiAgICAgICAgJ3Nob3cnLFxuICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDApJyxcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICAgc3RhdGUoXG4gICAgICAgICdoaWRlLCB2b2lkJyxcbiAgICAgICAgc3R5bGUoe1xuICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgxMDAlKScsXG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICAgIHRyYW5zaXRpb24oJ2hpZGUgPT4gc2hvdywgdm9pZCA9PiBzaG93JywgW1xuICAgICAgICBhbmltYXRlKGAke2R1cmF0aW9ufSAke1RpbWluZ0Z1bmN0aW9uLmVhc2VPdXR9YCksXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJ3Nob3cgPT4gaGlkZSwgc2hvdyA9PiB2b2lkJywgW1xuICAgICAgICBhbmltYXRlKGAke2R1cmF0aW9ufSAke1RpbWluZ0Z1bmN0aW9uLmVhc2VJbk91dH1gKSxcbiAgICAgIF0pLFxuICAgIF0pLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEcmF3ZXJJbnRlcm5hbENvbXBvbmVudDxUID0gdW5rbm93biwgQyBleHRlbmRzIG9iamVjdCA9IG9iamVjdD4ge1xuICBAVmlld0NoaWxkKENka1BvcnRhbE91dGxldCwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIGJvZHlQb3J0YWxPdXRsZXQ6IENka1BvcnRhbE91dGxldDtcblxuICBAVmlld0NoaWxkKCdtYXNrJylcbiAgbWFzazogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgYW5pbWF0aW9uU3RlcCQgPSBuZXcgU3ViamVjdDxTdGVwPigpO1xuXG4gIG9wdGlvbnM6IERyYXdlck9wdGlvbnM8VCwgQz47XG4gIHNob3dIaWRlJCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PCdzaG93JyB8ICdoaWRlJz4oJ2hpZGUnKTtcbiAgbWFza1Zpc2libGUkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICBnZXQgZHJhd2VyQ2xhc3NlcygpOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdhdWktZHJhd2VyJzogdHJ1ZSxcbiAgICAgIGhhc0RpdmlkZXI6IHRoaXMub3B0aW9ucy5kaXZpZGVyLFxuICAgICAgLi4uKHRoaXMub3B0aW9ucy5kcmF3ZXJDbGFzc1xuICAgICAgICA/IHsgW3RoaXMub3B0aW9ucy5kcmF3ZXJDbGFzc106IHRydWUgfVxuICAgICAgICA6IG51bGwpLFxuICAgIH07XG4gIH1cblxuICBnZXQgd2lkdGgoKSB7XG4gICAgcmV0dXJuIGhhbmRsZVBpeGVsKFxuICAgICAgdGhpcy5vcHRpb25zLndpZHRoIHx8IFNJWkVfTUFQUEVSW3RoaXMub3B0aW9ucy5zaXplIHx8IERyYXdlclNpemUuTWVkaXVtXSxcbiAgICApO1xuICB9XG5cbiAgaXNUZW1wbGF0ZVJlZiA9IGlzVGVtcGxhdGVSZWY7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IpIHt9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuYXR0YWNoQm9keUNvbnRlbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoQm9keUNvbnRlbnQoKTogdm9pZCB7XG4gICAgdGhpcy5ib2R5UG9ydGFsT3V0bGV0Py5kaXNwb3NlKCk7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMub3B0aW9ucy5jb250ZW50O1xuICAgIGlmICghKGNvbnRlbnQgaW5zdGFuY2VvZiBUeXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb21wb25lbnRQb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsPFQ+KFxuICAgICAgY29udGVudCxcbiAgICAgIG51bGwsXG4gICAgICBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBEQVRBLFxuICAgICAgICAgICAgdXNlVmFsdWU6IHRoaXMub3B0aW9ucy5jb250ZW50UGFyYW1zLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHBhcmVudDogdGhpcy5pbmplY3RvcixcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3QgY29tcG9uZW50UmVmID1cbiAgICAgIHRoaXMuYm9keVBvcnRhbE91dGxldD8uYXR0YWNoQ29tcG9uZW50UG9ydGFsKGNvbXBvbmVudFBvcnRhbCk7XG4gICAgT2JqZWN0LmFzc2lnbihjb21wb25lbnRSZWYuaW5zdGFuY2UsIHRoaXMub3B0aW9ucy5jb250ZW50UGFyYW1zKTtcbiAgICBjb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgb25BbmltYXRpb24oZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSB7XG4gICAgY29uc3QgeyBwaGFzZU5hbWUsIHRvU3RhdGUgfSA9IGV2ZW50O1xuICAgIGlmICghWydzaG93JywgJ2hpZGUnXS5pbmNsdWRlcyh0b1N0YXRlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0ZXAgPSBbXG4gICAgICB0b1N0YXRlLFxuICAgICAgcGhhc2VOYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcGhhc2VOYW1lLnNsaWNlKDEpLFxuICAgIF0uam9pbignJykgYXMgU3RlcDtcbiAgICB0aGlzLmFuaW1hdGlvblN0ZXAkLm5leHQoc3RlcCk7XG5cbiAgICBjb25zdCBiYWNrZHJvcEVsZW1lbnQgPSB0aGlzLm1hc2s/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFiYWNrZHJvcEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlbnRlcnMgPSBbXG4gICAgICBgJHtEUkFXRVJfT1ZFUkxBWV9CQUNLRFJPUF9DTEFTU30tZW50ZXJgLFxuICAgICAgYCR7RFJBV0VSX09WRVJMQVlfQkFDS0RST1BfQ0xBU1N9LWVudGVyLWFjdGl2ZWAsXG4gICAgXTtcbiAgICBjb25zdCBsZWF2ZXMgPSBbXG4gICAgICBgJHtEUkFXRVJfT1ZFUkxBWV9CQUNLRFJPUF9DTEFTU30tbGVhdmVgLFxuICAgICAgYCR7RFJBV0VSX09WRVJMQVlfQkFDS0RST1BfQ0xBU1N9LWxlYXZlLWFjdGl2ZWAsXG4gICAgXTtcbiAgICBzd2l0Y2ggKHN0ZXApIHtcbiAgICAgIGNhc2UgJ3Nob3dTdGFydCc6IHtcbiAgICAgICAgYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQoLi4uZW50ZXJzKTtcbiAgICAgICAgdGhpcy5tYXNrVmlzaWJsZSQubmV4dCh0cnVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdoaWRlU3RhcnQnOiB7XG4gICAgICAgIGJhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKC4uLmxlYXZlcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnc2hvd0RvbmUnOiB7XG4gICAgICAgIGJhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKC4uLmVudGVycyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnaGlkZURvbmUnOiB7XG4gICAgICAgIHRoaXMubWFza1Zpc2libGUkLm5leHQoZmFsc2UpO1xuICAgICAgICBiYWNrZHJvcEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSguLi5sZWF2ZXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzaG93KCkge1xuICAgIHRoaXMuc2hvd0hpZGUkJC5uZXh0KCdzaG93Jyk7XG4gIH1cblxuICBoaWRlKCkge1xuICAgIHRoaXMuc2hvd0hpZGUkJC5uZXh0KCdoaWRlJyk7XG4gIH1cblxuICBtYXNrQ2xpY2soKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5tYXNrQ2xvc2FibGUpIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICAjbWFza1xuICBjbGFzcz1cImF1aS1kcmF3ZXItbWFza1wiXG4gICpuZ0lmPVwib3B0aW9ucy5tYXNrXCJcbiAgW2NsYXNzLmlzT3Blbl09XCJtYXNrVmlzaWJsZSQgfCBhc3luY1wiXG4gIChjbGljayk9XCJtYXNrQ2xpY2soKVwiXG4+PC9kaXY+XG48ZGl2XG4gIFtzdHlsZS5tYXJnaW5Ub3BdPVwib3B0aW9ucy5vZmZzZXRZXCJcbiAgW25nQ2xhc3NdPVwiZHJhd2VyQ2xhc3Nlc1wiXG4gIFtAc2hvd0hpZGVdPVwic2hvd0hpZGUkJCB8IGFzeW5jXCJcbiAgKEBzaG93SGlkZS5zdGFydCk9XCJvbkFuaW1hdGlvbigkZXZlbnQpXCJcbiAgKEBzaG93SGlkZS5kb25lKT1cIm9uQW5pbWF0aW9uKCRldmVudClcIlxuICBbc3R5bGUud2lkdGhdPVwid2lkdGhcIlxuPlxuICA8ZGl2IGNsYXNzPVwiYXVpLWRyYXdlcl9fY29udGVudFwiPlxuICAgIDxkaXYgY2xhc3M9XCJhdWktZHJhd2VyX19ib2R5LXdyYXBwZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhdWktZHJhd2VyX19oZWFkZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF1aS1kcmF3ZXJfX3RpdGxlXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJpc1RlbXBsYXRlUmVmKG9wdGlvbnMudGl0bGUpOyBlbHNlIG5vcm1hbFwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25zLnRpdGxlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJvcHRpb25zLmNvbnRlbnRQYXJhbXNcIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI25vcm1hbD5cbiAgICAgICAgICAgIHt7IG9wdGlvbnMudGl0bGUgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGF1aS1pY29uXG4gICAgICAgICAgKm5nSWY9XCJvcHRpb25zLnNob3dDbG9zZVwiXG4gICAgICAgICAgY2xhc3M9XCJhdWktZHJhd2VyX19jbG9zZVwiXG4gICAgICAgICAgaWNvbj1cInhtYXJrXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGlkZSgpXCJcbiAgICAgICAgPjwvYXVpLWljb24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImF1aS1kcmF3ZXJfX2JvZHlcIlxuICAgICAgICBjZGtTY3JvbGxhYmxlXG4gICAgICA+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBjZGtQb3J0YWxPdXRsZXQ+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0lmPVwiaXNUZW1wbGF0ZVJlZihvcHRpb25zLmNvbnRlbnQpXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25zLmNvbnRlbnRcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJvcHRpb25zLmNvbnRlbnRQYXJhbXNcIlxuICAgICAgICA+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJvcHRpb25zLmZvb3RlclwiXG4gICAgICAgIGNsYXNzPVwiYXVpLWRyYXdlcl9fZm9vdGVyXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0lmPVwiaXNUZW1wbGF0ZVJlZihvcHRpb25zLmZvb3Rlcik7IGVsc2Ugbm9ybWFsXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25zLmZvb3RlclwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIm9wdGlvbnMuY29udGVudFBhcmFtc1wiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub3JtYWw+XG4gICAgICAgICAge3sgb3B0aW9ucy5mb290ZXIgfX1cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19