@js-sugar/angular
Version:
JS-Sugar core package (Angular)
195 lines • 26.9 kB
JavaScript
import { Input, Component, Output, EventEmitter, HostBinding } from '@angular/core';
import { PanelBackdropComponent } from './panel-backdrop.component';
import { trigger, state, style, transition } from '@angular/animations';
import { SIDENAV_ANIMATE } from './animation';
import * as i0 from "@angular/core";
import * as i1 from "./panels.component";
import * as i2 from "@angular/cdk/bidi";
export class PanelComponent {
constructor(elementRef, _parent, _renderer, _viewRef, _dir) {
this.elementRef = elementRef;
this._parent = _parent;
this._renderer = _renderer;
this._viewRef = _viewRef;
this._dir = _dir;
this._backdrop = false;
this._animationState = false;
this.position = 'start';
this.placement = 'container';
this.stretch = 'both';
this.show = true;
this.size = 200;
this.over = true;
this.zOrder = 1;
this.backdropClick = new EventEmitter();
}
set backdrop(value) {
if (value === this._backdrop) {
return;
}
if (value) {
const compRef = this._viewRef.createComponent(PanelBackdropComponent);
this._renderer.setStyle(compRef.instance.elementRef.nativeElement, 'z-index', this.zOrder * 2 - 1);
this._backdropUnlistenFunc = this._renderer.listen(compRef.instance.elementRef.nativeElement, 'click', (e) => {
this.backdropClick.emit(this);
});
}
else {
this._viewRef.clear();
}
this._backdrop = value;
}
get backdrop() {
return this._backdrop;
}
ngOnChanges(changes) {
const change = changes['position'] || changes['stretch'] || changes['size'] || changes['show'] || changes['over'];
if (change && !change.isFirstChange()) {
this._parent.refresh();
this._animationState = !this._animationState;
}
}
get _zIndex() {
return this.zOrder * 2;
}
get _position() {
return this.placement === 'container' ? 'absolute' : 'fixed';
}
get _animationTrigger() {
const ltr = this._dir.value === 'ltr';
const contentPos = this._parent.contentPosition;
const isStretchNoneOrStart = this.stretch === 'none' || this.stretch === 'start';
const isStretchNone = this.stretch === 'none';
const isStretchStart = this.stretch === 'start';
const isStretchEnd = this.stretch === 'end';
const isStretchNoneOrEnd = isStretchNone || isStretchEnd;
const isStretchBoth = this.stretch === 'both';
let params;
switch (this.position) {
case 'start':
params = {
top: isStretchNoneOrEnd ? `${contentPos?.top}px` : '0',
bottom: isStretchNoneOrStart ? `${contentPos?.bottom}px` : '0',
left: ltr ? '0' : '',
right: ltr ? '' : '0',
hideTransform: `translateX(${ltr ? -100 : 100}%)`,
};
break;
case 'end':
params = {
top: isStretchNoneOrEnd ? `${contentPos?.top}px` : '0',
bottom: isStretchNoneOrStart ? `${contentPos?.bottom}px` : '0',
left: ltr ? '' : '0',
right: ltr ? '0' : '',
hideTransform: `translateX(${ltr ? 100 : -100}%)`,
};
break;
case 'top':
params = {
top: '0',
bottom: '',
left: isStretchBoth || (isStretchStart && ltr) || (isStretchEnd && !ltr) ? '0' : `${contentPos?.left}px`,
right: isStretchBoth || (isStretchEnd && ltr) || (isStretchStart && !ltr) ? '0' : `${contentPos?.right}px`,
hideTransform: 'translateY(-100%)',
};
break;
case 'bottom':
params = {
top: '',
bottom: '0',
left: isStretchBoth || (isStretchStart && ltr) || (isStretchEnd && !ltr) ? '0' : `${contentPos?.left}px`,
right: isStretchBoth || (isStretchEnd && ltr) || (isStretchStart && !ltr) ? '0' : `${contentPos?.right}px`,
hideTransform: 'translateY(100%)',
};
break;
default:
throw Error('Invalid position');
}
return {
value: this._animationState,
params: {
...params,
transform: this.show ? 'translate(0,0)' : params.hideTransform,
}
};
}
ngOnDestroy() {
if (this._backdropUnlistenFunc) {
this._backdropUnlistenFunc();
}
}
}
PanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: PanelComponent, deps: [{ token: i0.ElementRef }, { token: i1.PanelsComponent }, { token: i0.Renderer2 }, { token: i0.ViewContainerRef }, { token: i2.Directionality }], target: i0.ɵɵFactoryTarget.Component });
PanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: PanelComponent, selector: "jss-panel", inputs: { position: "position", placement: "placement", stretch: "stretch", show: "show", size: "size", over: "over", zOrder: "zOrder", backdrop: "backdrop" }, outputs: { backdropClick: "backdropClick" }, host: { properties: { "style.z-index": "this._zIndex", "style.position": "this._position", "@t": "this._animationTrigger" } }, exportAs: ["jssPanel"], usesOnChanges: true, ngImport: i0, template: "<ng-content></ng-content>", styles: [":host{display:block;position:absolute}\n"], animations: [
trigger('t', [
state('0', style({
left: '{{left}}',
right: '{{right}}',
top: '{{top}}',
bottom: '{{bottom}}',
transform: '{{transform}}'
}), { params: { left: '', right: '', top: '', bottom: '', transform: '' } }),
state('1', style({
left: '{{left}}',
right: '{{right}}',
top: '{{top}}',
bottom: '{{bottom}}',
transform: '{{transform}}'
}), { params: { left: '', right: '', top: '', bottom: '', transform: '' } }),
transition('0 <=> 1', [
SIDENAV_ANIMATE,
])
]),
] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: PanelComponent, decorators: [{
type: Component,
args: [{ selector: 'jss-panel', exportAs: 'jssPanel', animations: [
trigger('t', [
state('0', style({
left: '{{left}}',
right: '{{right}}',
top: '{{top}}',
bottom: '{{bottom}}',
transform: '{{transform}}'
}), { params: { left: '', right: '', top: '', bottom: '', transform: '' } }),
state('1', style({
left: '{{left}}',
right: '{{right}}',
top: '{{top}}',
bottom: '{{bottom}}',
transform: '{{transform}}'
}), { params: { left: '', right: '', top: '', bottom: '', transform: '' } }),
transition('0 <=> 1', [
SIDENAV_ANIMATE,
])
]),
], template: "<ng-content></ng-content>", styles: [":host{display:block;position:absolute}\n"] }]
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.PanelsComponent }, { type: i0.Renderer2 }, { type: i0.ViewContainerRef }, { type: i2.Directionality }]; }, propDecorators: { position: [{
type: Input
}], placement: [{
type: Input
}], stretch: [{
type: Input
}], show: [{
type: Input
}], size: [{
type: Input
}], over: [{
type: Input
}], zOrder: [{
type: Input
}], backdrop: [{
type: Input
}], backdropClick: [{
type: Output
}], _zIndex: [{
type: HostBinding,
args: ['style.z-index']
}], _position: [{
type: HostBinding,
args: ['style.position']
}], _animationTrigger: [{
type: HostBinding,
args: ['@t']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvcGFuZWxzL3BhbmVsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3BhbmVscy9wYW5lbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUNULFdBQVcsRUFDM0MsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXhFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7QUE4QjlDLE1BQU0sT0FBTyxjQUFjO0lBK0J2QixZQUNXLFVBQXNCLEVBQ3JCLE9BQXdCLEVBQ3hCLFNBQW9CLEVBQ3BCLFFBQTBCLEVBQzFCLElBQW9CO1FBSnJCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDckIsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUFDeEIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixhQUFRLEdBQVIsUUFBUSxDQUFrQjtRQUMxQixTQUFJLEdBQUosSUFBSSxDQUFnQjtRQW5DeEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVsQixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN2QixhQUFRLEdBQWtCLE9BQU8sQ0FBQztRQUNsQyxjQUFTLEdBQW1CLFdBQVcsQ0FBQztRQUN4QyxZQUFPLEdBQWlCLE1BQU0sQ0FBQztRQUMvQixTQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ1osU0FBSSxHQUFHLEdB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SSxhQUFhO3NCQUF0QixNQUFNO2dCQW1CbUMsT0FBTztzQkFBaEQsV0FBVzt1QkFBQyxlQUFlO2dCQUllLFNBQVM7c0JBQW5ELFdBQVc7dUJBQUMsZ0JBQWdCO2dCQUlFLGlCQUFpQjtzQkFBL0MsV0FBVzt1QkFBQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIElucHV0LCBDb21wb25lbnQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBSZW5kZXJlcjIsIEVsZW1lbnRSZWYsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIFZpZXdDb250YWluZXJSZWYsIE9uRGVzdHJveSwgSG9zdEJpbmRpbmcsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlc1xyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQYW5lbEJhY2tkcm9wQ29tcG9uZW50IH0gZnJvbSAnLi9wYW5lbC1iYWNrZHJvcC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQYW5lbFBsYWNlbWVudCwgUGFuZWxQb3NpdGlvbiwgUGFuZWxTdHJldGNoIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IHRyaWdnZXIsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBEaXJlY3Rpb25hbGl0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9iaWRpJztcclxuaW1wb3J0IHsgU0lERU5BVl9BTklNQVRFIH0gZnJvbSAnLi9hbmltYXRpb24nO1xyXG5pbXBvcnQgeyBQYW5lbHNDb21wb25lbnQgfSBmcm9tICcuL3BhbmVscy5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2pzcy1wYW5lbCcsXHJcbiAgICBleHBvcnRBczogJ2pzc1BhbmVsJyxcclxuICAgIHN0eWxlVXJsczogWycuL3BhbmVsLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICB0ZW1wbGF0ZVVybDogJ3BhbmVsLmNvbXBvbmVudC5odG1sJyxcclxuICAgIGFuaW1hdGlvbnM6IFtcclxuICAgICAgICB0cmlnZ2VyKCd0JywgW1xyXG4gICAgICAgICAgICBzdGF0ZSgnMCcsIHN0eWxlKHtcclxuICAgICAgICAgICAgICAgIGxlZnQ6ICd7e2xlZnR9fScsXHJcbiAgICAgICAgICAgICAgICByaWdodDogJ3t7cmlnaHR9fScsXHJcbiAgICAgICAgICAgICAgICB0b3A6ICd7e3RvcH19JyxcclxuICAgICAgICAgICAgICAgIGJvdHRvbTogJ3t7Ym90dG9tfX0nLFxyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAne3t0cmFuc2Zvcm19fSdcclxuICAgICAgICAgICAgfSksIHsgcGFyYW1zOiB7IGxlZnQ6ICcnLCByaWdodDogJycsIHRvcDogJycsIGJvdHRvbTogJycsIHRyYW5zZm9ybTogJycgfSB9KSxcclxuICAgICAgICAgICAgc3RhdGUoJzEnLCBzdHlsZSh7XHJcbiAgICAgICAgICAgICAgICBsZWZ0OiAne3tsZWZ0fX0nLFxyXG4gICAgICAgICAgICAgICAgcmlnaHQ6ICd7e3JpZ2h0fX0nLFxyXG4gICAgICAgICAgICAgICAgdG9wOiAne3t0b3B9fScsXHJcbiAgICAgICAgICAgICAgICBib3R0b206ICd7e2JvdHRvbX19JyxcclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3t7dHJhbnNmb3JtfX0nXHJcbiAgICAgICAgICAgIH0pLCB7IHBhcmFtczogeyBsZWZ0OiAnJywgcmlnaHQ6ICcnLCB0b3A6ICcnLCBib3R0b206ICcnLCB0cmFuc2Zvcm06ICcnIH0gfSksXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJzAgPD0+IDEnLCBbXHJcbiAgICAgICAgICAgICAgICBTSURFTkFWX0FOSU1BVEUsXHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgXSksXHJcbiAgICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYW5lbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICAgIHByaXZhdGUgX2JhY2tkcm9wID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIF9iYWNrZHJvcFVubGlzdGVuRnVuYz86ICgpID0+IHZvaWQ7XHJcbiAgICBwcml2YXRlIF9hbmltYXRpb25TdGF0ZSA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgcG9zaXRpb246IFBhbmVsUG9zaXRpb24gPSAnc3RhcnQnO1xyXG4gICAgQElucHV0KCkgcGxhY2VtZW50OiBQYW5lbFBsYWNlbWVudCA9ICdjb250YWluZXInO1xyXG4gICAgQElucHV0KCkgc3RyZXRjaDogUGFuZWxTdHJldGNoID0gJ2JvdGgnO1xyXG4gICAgQElucHV0KCkgc2hvdyA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBzaXplID0gMjAwO1xyXG4gICAgQElucHV0KCkgb3ZlciA9IHRydWU7XHJcbiAgICBASW5wdXQoKSB6T3JkZXIgPSAxO1xyXG4gICAgQElucHV0KCkgc2V0IGJhY2tkcm9wKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLl9iYWNrZHJvcCkgeyByZXR1cm47IH1cclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgY29uc3QgY29tcFJlZiA9IHRoaXMuX3ZpZXdSZWYuY3JlYXRlQ29tcG9uZW50PFBhbmVsQmFja2Ryb3BDb21wb25lbnQ+KFBhbmVsQmFja2Ryb3BDb21wb25lbnQpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShjb21wUmVmLmluc3RhbmNlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3otaW5kZXgnLCB0aGlzLnpPcmRlciAqIDIgLSAxKTtcclxuICAgICAgICAgICAgdGhpcy5fYmFja2Ryb3BVbmxpc3RlbkZ1bmMgPSB0aGlzLl9yZW5kZXJlci5saXN0ZW4oY29tcFJlZi5pbnN0YW5jZS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhY2tkcm9wQ2xpY2suZW1pdCh0aGlzKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fdmlld1JlZi5jbGVhcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9iYWNrZHJvcCA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBiYWNrZHJvcCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYmFja2Ryb3A7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIEBPdXRwdXQoKSBiYWNrZHJvcENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxQYW5lbENvbXBvbmVudD4oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgICAgICBwcml2YXRlIF9wYXJlbnQ6IFBhbmVsc0NvbXBvbmVudCxcclxuICAgICAgICBwcml2YXRlIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgICAgIHByaXZhdGUgX3ZpZXdSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSBfZGlyOiBEaXJlY3Rpb25hbGl0eSxcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjaGFuZ2UgPSBjaGFuZ2VzWydwb3NpdGlvbiddIHx8IGNoYW5nZXNbJ3N0cmV0Y2gnXSB8fCBjaGFuZ2VzWydzaXplJ10gfHwgY2hhbmdlc1snc2hvdyddIHx8IGNoYW5nZXNbJ292ZXInXTtcclxuICAgICAgICBpZiAoY2hhbmdlICYmICFjaGFuZ2UuaXNGaXJzdENoYW5nZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhcmVudC5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2FuaW1hdGlvblN0YXRlID0gIXRoaXMuX2FuaW1hdGlvblN0YXRlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLnotaW5kZXgnKSBwcml2YXRlIGdldCBfekluZGV4KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnpPcmRlciAqIDI7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5wb3NpdGlvbicpIHByaXZhdGUgZ2V0IF9wb3NpdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wbGFjZW1lbnQgPT09ICdjb250YWluZXInID8gJ2Fic29sdXRlJyA6ICdmaXhlZCc7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdAdCcpIHByaXZhdGUgZ2V0IF9hbmltYXRpb25UcmlnZ2VyKCkge1xyXG4gICAgICAgIGNvbnN0IGx0ciA9IHRoaXMuX2Rpci52YWx1ZSA9PT0gJ2x0cic7XHJcbiAgICAgICAgY29uc3QgY29udGVudFBvcyA9IHRoaXMuX3BhcmVudC5jb250ZW50UG9zaXRpb247XHJcbiAgICAgICAgY29uc3QgaXNTdHJldGNoTm9uZU9yU3RhcnQgPSB0aGlzLnN0cmV0Y2ggPT09ICdub25lJyB8fCB0aGlzLnN0cmV0Y2ggPT09ICdzdGFydCc7XHJcbiAgICAgICAgY29uc3QgaXNTdHJldGNoTm9uZSA9IHRoaXMuc3RyZXRjaCA9PT0gJ25vbmUnO1xyXG4gICAgICAgIGNvbnN0IGlzU3RyZXRjaFN0YXJ0ID0gdGhpcy5zdHJldGNoID09PSAnc3RhcnQnO1xyXG4gICAgICAgIGNvbnN0IGlzU3RyZXRjaEVuZCA9IHRoaXMuc3RyZXRjaCA9PT0gJ2VuZCc7XHJcbiAgICAgICAgY29uc3QgaXNTdHJldGNoTm9uZU9yRW5kID0gaXNTdHJldGNoTm9uZSB8fCBpc1N0cmV0Y2hFbmQ7XHJcbiAgICAgICAgY29uc3QgaXNTdHJldGNoQm90aCA9IHRoaXMuc3RyZXRjaCA9PT0gJ2JvdGgnO1xyXG4gICAgICAgIGxldCBwYXJhbXM6IHsgdG9wOiBzdHJpbmcsIGJvdHRvbTogc3RyaW5nLCBsZWZ0OiBzdHJpbmcsIHJpZ2h0OiBzdHJpbmcsIGhpZGVUcmFuc2Zvcm06IHN0cmluZyB9O1xyXG5cclxuICAgICAgICBzd2l0Y2ggKHRoaXMucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgY2FzZSAnc3RhcnQnOlxyXG4gICAgICAgICAgICAgICAgcGFyYW1zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvcDogaXNTdHJldGNoTm9uZU9yRW5kID8gYCR7Y29udGVudFBvcz8udG9wfXB4YCA6ICcwJyxcclxuICAgICAgICAgICAgICAgICAgICBib3R0b206IGlzU3RyZXRjaE5vbmVPclN0YXJ0ID8gYCR7Y29udGVudFBvcz8uYm90dG9tfXB4YCA6ICcwJyxcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiBsdHIgPyAnMCcgOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICByaWdodDogbHRyID8gJycgOiAnMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgaGlkZVRyYW5zZm9ybTogYHRyYW5zbGF0ZVgoJHtsdHIgPyAtMTAwIDogMTAwfSUpYCxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZW5kJzpcclxuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICB0b3A6IGlzU3RyZXRjaE5vbmVPckVuZCA/IGAke2NvbnRlbnRQb3M/LnRvcH1weGAgOiAnMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiBpc1N0cmV0Y2hOb25lT3JTdGFydCA/IGAke2NvbnRlbnRQb3M/LmJvdHRvbX1weGAgOiAnMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogbHRyID8gJycgOiAnMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IGx0ciA/ICcwJyA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgIGhpZGVUcmFuc2Zvcm06IGB0cmFuc2xhdGVYKCR7bHRyID8gMTAwIDogLTEwMH0lKWAsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RvcCc6XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAnMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiBpc1N0cmV0Y2hCb3RoIHx8IChpc1N0cmV0Y2hTdGFydCAmJiBsdHIpIHx8IChpc1N0cmV0Y2hFbmQgJiYgIWx0cikgPyAnMCcgOiBgJHtjb250ZW50UG9zPy5sZWZ0fXB4YCxcclxuICAgICAgICAgICAgICAgICAgICByaWdodDogaXNTdHJldGNoQm90aCB8fCAoaXNTdHJldGNoRW5kICYmIGx0cikgfHwgKGlzU3RyZXRjaFN0YXJ0ICYmICFsdHIpID8gJzAnIDogYCR7Y29udGVudFBvcz8ucmlnaHR9cHhgLFxyXG4gICAgICAgICAgICAgICAgICAgIGhpZGVUcmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0xMDAlKScsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBib3R0b206ICcwJyxcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiBpc1N0cmV0Y2hCb3RoIHx8IChpc1N0cmV0Y2hTdGFydCAmJiBsdHIpIHx8IChpc1N0cmV0Y2hFbmQgJiYgIWx0cikgPyAnMCcgOiBgJHtjb250ZW50UG9zPy5sZWZ0fXB4YCxcclxuICAgICAgICAgICAgICAgICAgICByaWdodDogaXNTdHJldGNoQm90aCB8fCAoaXNTdHJldGNoRW5kICYmIGx0cikgfHwgKGlzU3RyZXRjaFN0YXJ0ICYmICFsdHIpID8gJzAnIDogYCR7Y29udGVudFBvcz8ucmlnaHR9cHhgLFxyXG4gICAgICAgICAgICAgICAgICAgIGhpZGVUcmFuc2Zvcm06ICd0cmFuc2xhdGVZKDEwMCUpJyxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdJbnZhbGlkIHBvc2l0aW9uJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5fYW5pbWF0aW9uU3RhdGUsXHJcbiAgICAgICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgICAgICAgLi4ucGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0aGlzLnNob3cgPyAndHJhbnNsYXRlKDAsMCknIDogcGFyYW1zLmhpZGVUcmFuc2Zvcm0sXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLl9iYWNrZHJvcFVubGlzdGVuRnVuYykge1xyXG4gICAgICAgICAgICB0aGlzLl9iYWNrZHJvcFVubGlzdGVuRnVuYygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCI8bmctY29udGVudD48L25nLWNvbnRlbnQ+Il19