@fivethree/core
Version:
Fivethree Core Components
349 lines • 32.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/dialog/dialog.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { FivLoadingProgressBar } from './../loading-progress-bar/loading-progress-bar.component';
import { EventEmitter, Output, Input, ElementRef, Renderer2 } from '@angular/core';
import { Component, ViewChild } from '@angular/core';
import { FivOverlay } from '../overlay/overlay.component';
import { trigger, transition, style, animate, state, AnimationBuilder } from '@angular/animations';
import { DomController } from '@ionic/angular';
var FivDialog = /** @class */ (function () {
function FivDialog(renderer, domCtrl, animation) {
this.renderer = renderer;
this.domCtrl = domCtrl;
this.animation = animation;
this.verticalAlign = 'top';
this.horizontalAlign = 'middle';
this.shape = 'card';
this.priority = 20001;
this.backdrop = true;
this.backdropDismiss = true;
this.pullEnabled = true;
// animation data
this.inDuration = 160;
this.outDuration = 120;
this.outPosition = '-100%';
this.toPosition = '0px';
this.translate = '0px';
this.fivClose = new EventEmitter();
this.fivDurationOver = new EventEmitter();
this.fivOpen = new EventEmitter();
this.dialogState = 'out';
}
/**
* @return {?}
*/
FivDialog.prototype.ngOnInit = /**
* @return {?}
*/
function () { };
/**
* @return {?}
*/
FivDialog.prototype.open = /**
* @return {?}
*/
function () {
this.overlay.show(this.priority);
this.dialogState = this.verticalAlign;
if (this.duration) {
this.bar.shrinkIn(this.duration);
}
};
/**
* @return {?}
*/
FivDialog.prototype.doneShrinking = /**
* @return {?}
*/
function () {
this.fivDurationOver.emit(this);
};
/**
* @return {?}
*/
FivDialog.prototype.close = /**
* @return {?}
*/
function () {
this.dialogState = 'out';
this.bar.stopProgressAnimation();
};
/**
* @return {?}
*/
FivDialog.prototype.backdropClick = /**
* @return {?}
*/
function () {
if (this.backdropDismiss) {
this.close();
}
};
/**
* @param {?} event
* @return {?}
*/
FivDialog.prototype.animationDone = /**
* @param {?} event
* @return {?}
*/
function (event) {
if (event.fromState !== 'void' && event.toState === 'out') {
this.transformDialog(0);
this.overlay.hide();
this.fivClose.emit(this);
}
};
/**
* @param {?} event
* @return {?}
*/
FivDialog.prototype.backdropAnimDone = /**
* @param {?} event
* @return {?}
*/
function (event) {
if (event.fromState === 'out' && event.toState !== 'void') {
this.fivOpen.emit(this);
}
};
/**
* @return {?}
*/
FivDialog.prototype.onRefresh = /**
* @return {?}
*/
function () {
this.close();
};
/**
* @return {?}
*/
FivDialog.prototype.fivCancel = /**
* @return {?}
*/
function () {
this.resetDialog(this.currentPullProgress);
};
/**
* @param {?} progress
* @return {?}
*/
FivDialog.prototype.transformDialog = /**
* @param {?} progress
* @return {?}
*/
function (progress) {
var _this = this;
this.currentPullProgress = progress;
this.domCtrl.write((/**
* @return {?}
*/
function () {
if (_this.verticalAlign === 'bottom') {
_this.renderer.setStyle(_this.dialogRef.nativeElement, 'margin-bottom', "-" + progress * 120 + "px");
}
else if (_this.verticalAlign === 'top') {
_this.renderer.setStyle(_this.dialogRef.nativeElement, 'margin-top', "-" + progress * 120 + "px");
}
else if (_this.verticalAlign === 'center') {
_this.renderer.setStyle(_this.dialogRef.nativeElement, 'margin-top', progress * 120 + "px");
}
}));
};
/**
* @param {?} progress
* @return {?}
*/
FivDialog.prototype.resetDialog = /**
* @param {?} progress
* @return {?}
*/
function (progress) {
var _this = this;
/** @type {?} */
var reset;
if (this.verticalAlign === 'bottom') {
reset = this.animation.build([
style({ 'margin-bottom': "-" + progress * 120 + "px" }),
animate('150ms', style({ 'margin-bottom': "0px" }))
]);
}
else if (this.verticalAlign === 'top') {
reset = this.animation.build([
style({ 'margin-top': "-" + progress * 120 + "px" }),
animate('150ms', style({ 'margin-top': "0px" }))
]);
}
else if (this.verticalAlign === 'center') {
reset = this.animation.build([
style({ 'margin-top': progress * 120 + "px" }),
animate('150ms', style({ 'margin-top': "0px" }))
]);
}
/** @type {?} */
var animation = reset.create(this.dialogRef.nativeElement);
animation.play();
animation.onDone((/**
* @return {?}
*/
function () {
animation.destroy();
_this.transformDialog(0);
}));
};
FivDialog.decorators = [
{ type: Component, args: [{
selector: 'fiv-dialog',
template: "<fiv-overlay #overlay>\n <ion-content no-bounce [direction]=\"verticalAlign === 'top' ? 'up' : 'down'\" fivPull [enabled]=\"pullEnabled\" [maxPullHeight]=\"168\" [minPullHeight]=\"120\" (fivPull)=\"transformDialog($event)\"\n (fivRefresh)=\"onRefresh()\" (fivCancel)=\"fivCancel()\" *ngIf=\"backdrop\" (@fade.done)=\"backdropAnimDone($event)\"\n [@fade]=\"{value: dialogState, params: { opacity: 0, inDuration: '120ms' }}\" (click)=\"backdropClick()\" class=\"backdrop\">\n</ion-content>\n <div #dialog [@fade]=\"{value: dialogState, params: { opacity: 0, inDuration: '120ms' }}\"\n [@slide]=\"{value: dialogState, params: {top: outPosition, inDuration: inDuration + 'ms',outDuration: outDuration + 'ms', toPosition: toPosition, translate: translate,translateX: horizontalAlign === 'middle' ? 'translateX(-50%)' : '' }}\"\n (@slide.done)=\"animationDone($event)\" class=\"dialog\" [ngClass]=\"[verticalAlign, horizontalAlign, shape]\">\n <ng-container>\n <ng-container *ngTemplateOutlet=\"card\"></ng-container>\n </ng-container>\n </div>\n\n</fiv-overlay>\n\n<ng-template #card>\n <ion-card>\n <fiv-loading-progress-bar [verticalAlign]=\"verticalAlign === 'top' ? 'bottom' : 'top'\"\n (fivDoneShrinking)=\"doneShrinking()\" #bar></fiv-loading-progress-bar>\n <ng-content></ng-content>\n </ion-card>\n</ng-template>",
animations: [
trigger('slide', [
transition('out => top', [
style({ top: '0', transform: 'translateY(-100%) {{translateX}}' }),
animate('220ms ease-out')
]),
transition('out => center', [
style({
top: '50%',
transform: 'translateY(-50%) {{translateX}} scale(0)',
opacity: 0
}),
animate('220ms ease-out', style({
top: '50%',
transform: 'translateY(-50%) {{translateX}} scale(1)',
opacity: 1
}))
]),
transition('out => bottom', [
style({ bottom: '0', transform: 'translateY(100%) {{translateX}}' }),
animate('220ms ease-out')
]),
transition('top => out', [
style({ top: '0', transform: '*' }),
animate('140ms ease-in', style({ top: '0', transform: 'translateY(-100%) {{translateX}}' }))
]),
transition('center => out', [
style({
top: '50%',
transform: '*',
opacity: 1
}),
animate('140ms ease-in', style({
top: '50%',
transform: 'translateY(-50%) {{translateX}} scale(0)',
opacity: 0
}))
]),
transition('bottom => out', [
style({ bottom: '0', transform: '*' }),
animate('140ms ease-in', style({ bottom: '0', transform: 'translateY(100%) {{translateX}}' }))
])
// state('bottom', style({ bottom: '0', transform: '*' })),
// state('top', style({ top: '0', transform: '*' })),
// state('center', style({ top: '50%', transform: 'translateY(-50%) {{translateX}}' }))
]),
trigger('fade', [
transition('out => *', [
style({ opacity: '{{opacity}}' }),
animate('{{inDuration}} ease-out', style({ opacity: '1' }))
], { params: { opacity: 0, inDuration: '250ms' } }),
transition('* => out', [
style({ opacity: '1' }),
animate('{{outDuration}} ease-in', style({ opacity: '0' }))
], { params: { opacity: 0, outDuration: '200ms' } }),
state('out', style({ opacity: '0' }))
])
],
styles: ["ion-grid{--ion-grid-padding:0;--ion-grid-column-padding:0}.dialog{--min-width:340px;position:absolute;min-width:var(--min-width)}@media (max-width:600px){.dialog{--min-width:100%}}.dialog.fill{background:var(--ion-item-background);box-shadow:0 4px 16px rgba(0,0,0,.12)}.dialog.fill .sc-ion-card-ios-h,.dialog.fill .sc-ion-card-md-h{margin-left:unset;margin-right:unset;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:0;margin-inline-end:0;box-shadow:none;margin-top:0;margin-bottom:0}.dialog.fill.bottom .sc-ion-card-ios-h,.dialog.fill.bottom .sc-ion-card-md-h,.dialog.fill.top .sc-ion-card-ios-h,.dialog.fill.top .sc-ion-card-md-h{border-radius:0}.dialog.top.left{padding-top:env(safe-area-inset-top);top:0;left:0}.dialog.top.right{padding-top:env(safe-area-inset-top);top:0;right:0}.dialog.top.middle{padding-top:env(safe-area-inset-top);top:0;left:50%;transform:translateX(-50%)}.dialog.center.middle{padding-top:env(safe-area-inset-top);top:50%;left:50%;transform:translate(-50%,-50%)}.dialog.center.left{top:50%;padding-top:env(safe-area-inset-top);left:0;transform:translateY(-50%)}.dialog.center.right{right:0;top:50%;padding-top:env(safe-area-inset-top);transform:translateY(-50%)}.dialog.bottom.left{bottom:0;left:0;padding-bottom:env(safe-area-inset-bottom)}.dialog.bottom.right{bottom:0;right:0;padding-bottom:env(safe-area-inset-bottom)}.dialog.bottom.middle{bottom:0;left:50%;transform:translateX(-50%);padding-bottom:env(safe-area-inset-bottom)}.backdrop{width:100%;height:100%;--background:rgba(0, 0, 0, 0.2);position:absolute}"]
}] }
];
/** @nocollapse */
FivDialog.ctorParameters = function () { return [
{ type: Renderer2 },
{ type: DomController },
{ type: AnimationBuilder }
]; };
FivDialog.propDecorators = {
verticalAlign: [{ type: Input }],
horizontalAlign: [{ type: Input }],
shape: [{ type: Input }],
priority: [{ type: Input }],
backdrop: [{ type: Input }],
backdropDismiss: [{ type: Input }],
pullEnabled: [{ type: Input }],
duration: [{ type: Input }],
inDuration: [{ type: Input }],
outDuration: [{ type: Input }],
fivClose: [{ type: Output }],
fivDurationOver: [{ type: Output }],
fivOpen: [{ type: Output }],
overlay: [{ type: ViewChild, args: [FivOverlay, { static: false },] }],
bar: [{ type: ViewChild, args: [FivLoadingProgressBar, { static: false },] }],
dialogRef: [{ type: ViewChild, args: ['dialog', { static: false },] }]
};
return FivDialog;
}());
export { FivDialog };
if (false) {
/** @type {?} */
FivDialog.prototype.verticalAlign;
/** @type {?} */
FivDialog.prototype.horizontalAlign;
/** @type {?} */
FivDialog.prototype.shape;
/** @type {?} */
FivDialog.prototype.priority;
/** @type {?} */
FivDialog.prototype.backdrop;
/** @type {?} */
FivDialog.prototype.backdropDismiss;
/** @type {?} */
FivDialog.prototype.pullEnabled;
/** @type {?} */
FivDialog.prototype.duration;
/** @type {?} */
FivDialog.prototype.inDuration;
/** @type {?} */
FivDialog.prototype.outDuration;
/** @type {?} */
FivDialog.prototype.outPosition;
/** @type {?} */
FivDialog.prototype.toPosition;
/** @type {?} */
FivDialog.prototype.translate;
/** @type {?} */
FivDialog.prototype.fivClose;
/** @type {?} */
FivDialog.prototype.fivDurationOver;
/** @type {?} */
FivDialog.prototype.fivOpen;
/** @type {?} */
FivDialog.prototype.overlay;
/** @type {?} */
FivDialog.prototype.bar;
/** @type {?} */
FivDialog.prototype.dialogRef;
/** @type {?} */
FivDialog.prototype.dialogState;
/** @type {?} */
FivDialog.prototype.currentPullProgress;
/**
* @type {?}
* @private
*/
FivDialog.prototype.renderer;
/**
* @type {?}
* @private
*/
FivDialog.prototype.domCtrl;
/**
* @type {?}
* @private
*/
FivDialog.prototype.animation;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BmaXZldGhyZWUvY29yZS8iLCJzb3VyY2VzIjpbImxpYi9kaWFsb2cvZGlhbG9nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ2pHLE9BQU8sRUFDTCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxVQUFVLEVBQ1YsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRCxPQUFPLEVBQ0wsT0FBTyxFQUNQLFVBQVUsRUFDVixLQUFLLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxnQkFBZ0IsRUFDakIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHL0M7SUFpSEUsbUJBQ1UsUUFBbUIsRUFDbkIsT0FBc0IsRUFDdEIsU0FBMkI7UUFGM0IsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixZQUFPLEdBQVAsT0FBTyxDQUFlO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBaEM1QixrQkFBYSxHQUFnQyxLQUFLLENBQUM7UUFDbkQsb0JBQWUsR0FBZ0MsUUFBUSxDQUFDO1FBQ3hELFVBQUssR0FBb0IsTUFBTSxDQUFDO1FBQ2hDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsYUFBUSxHQUFHLElBQUksQ0FBQztRQUNoQixvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN2QixnQkFBVyxHQUFHLElBQUksQ0FBQzs7UUFHbkIsZUFBVSxHQUFHLEdBQUcsQ0FBQztRQUNqQixnQkFBVyxHQUFHLEdBQUcsQ0FBQztRQUMzQixnQkFBVyxHQUFHLE9B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O0lBQzFCLGdDQUEyQjs7SUFDM0IsZ0NBQXNCOztJQUN0QiwrQkFBbUI7O0lBQ25CLDhCQUFrQjs7SUFFbEIsNkJBQWlFOztJQUNqRSxvQ0FBd0U7O0lBQ3hFLDRCQUFnRTs7SUFDaEUsNEJBQThEOztJQUM5RCx3QkFDMkI7O0lBQzNCLDhCQUE4RDs7SUFFOUQsZ0NBQXlEOztJQUN6RCx3Q0FBNEI7Ozs7O0lBSzFCLDZCQUEyQjs7Ozs7SUFDM0IsNEJBQThCOzs7OztJQUM5Qiw4QkFBbUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaXZMb2FkaW5nUHJvZ3Jlc3NCYXIgfSBmcm9tICcuLy4uL2xvYWRpbmctcHJvZ3Jlc3MtYmFyL2xvYWRpbmctcHJvZ3Jlc3MtYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBFdmVudEVtaXR0ZXIsXG4gIE91dHB1dCxcbiAgSW5wdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBUeXBlLFxuICBFbGVtZW50UmVmLFxuICBSZW5kZXJlcjJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaXZPdmVybGF5IH0gZnJvbSAnLi4vb3ZlcmxheS9vdmVybGF5LmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICB0cmlnZ2VyLFxuICB0cmFuc2l0aW9uLFxuICBzdHlsZSxcbiAgYW5pbWF0ZSxcbiAgc3RhdGUsXG4gIEFuaW1hdGlvbkJ1aWxkZXJcbn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBEb21Db250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuZXhwb3J0IHR5cGUgQ29udGVudDxUPiA9IFRlbXBsYXRlUmVmPFQ+IHwgVHlwZTxUPjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZml2LWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ3NsaWRlJywgW1xuICAgICAgdHJhbnNpdGlvbignb3V0ID0+IHRvcCcsIFtcbiAgICAgICAgc3R5bGUoeyB0b3A6ICcwJywgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMTAwJSkge3t0cmFuc2xhdGVYfX0nIH0pLFxuICAgICAgICBhbmltYXRlKCcyMjBtcyBlYXNlLW91dCcpXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJ291dCA9PiBjZW50ZXInLCBbXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICB0b3A6ICc1MCUnLFxuICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTUwJSkge3t0cmFuc2xhdGVYfX0gc2NhbGUoMCknLFxuICAgICAgICAgIG9wYWNpdHk6IDBcbiAgICAgICAgfSksXG4gICAgICAgIGFuaW1hdGUoXG4gICAgICAgICAgJzIyMG1zIGVhc2Utb3V0JyxcbiAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICB0b3A6ICc1MCUnLFxuICAgICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtNTAlKSB7e3RyYW5zbGF0ZVh9fSBzY2FsZSgxKScsXG4gICAgICAgICAgICBvcGFjaXR5OiAxXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCdvdXQgPT4gYm90dG9tJywgW1xuICAgICAgICBzdHlsZSh7IGJvdHRvbTogJzAnLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDEwMCUpIHt7dHJhbnNsYXRlWH19JyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMjIwbXMgZWFzZS1vdXQnKVxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCd0b3AgPT4gb3V0JywgW1xuICAgICAgICBzdHlsZSh7IHRvcDogJzAnLCB0cmFuc2Zvcm06ICcqJyB9KSxcbiAgICAgICAgYW5pbWF0ZShcbiAgICAgICAgICAnMTQwbXMgZWFzZS1pbicsXG4gICAgICAgICAgc3R5bGUoeyB0b3A6ICcwJywgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMTAwJSkge3t0cmFuc2xhdGVYfX0nIH0pXG4gICAgICAgIClcbiAgICAgIF0pLFxuICAgICAgdHJhbnNpdGlvbignY2VudGVyID0+IG91dCcsIFtcbiAgICAgICAgc3R5bGUoe1xuICAgICAgICAgIHRvcDogJzUwJScsXG4gICAgICAgICAgdHJhbnNmb3JtOiAnKicsXG4gICAgICAgICAgb3BhY2l0eTogMVxuICAgICAgICB9KSxcbiAgICAgICAgYW5pbWF0ZShcbiAgICAgICAgICAnMTQwbXMgZWFzZS1pbicsXG4gICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgdG9wOiAnNTAlJyxcbiAgICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTUwJSkge3t0cmFuc2xhdGVYfX0gc2NhbGUoMCknLFxuICAgICAgICAgICAgb3BhY2l0eTogMFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIF0pLFxuICAgICAgdHJhbnNpdGlvbignYm90dG9tID0+IG91dCcsIFtcbiAgICAgICAgc3R5bGUoeyBib3R0b206ICcwJywgdHJhbnNmb3JtOiAnKicgfSksXG4gICAgICAgIGFuaW1hdGUoXG4gICAgICAgICAgJzE0MG1zIGVhc2UtaW4nLFxuICAgICAgICAgIHN0eWxlKHsgYm90dG9tOiAnMCcsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMTAwJSkge3t0cmFuc2xhdGVYfX0nIH0pXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAvLyBzdGF0ZSgnYm90dG9tJywgc3R5bGUoeyBib3R0b206ICcwJywgdHJhbnNmb3JtOiAnKicgfSkpLFxuICAgICAgLy8gc3RhdGUoJ3RvcCcsIHN0eWxlKHsgdG9wOiAnMCcsIHRyYW5zZm9ybTogJyonIH0pKSxcbiAgICAgIC8vIHN0YXRlKCdjZW50ZXInLCBzdHlsZSh7IHRvcDogJzUwJScsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTUwJSkge3t0cmFuc2xhdGVYfX0nIH0pKVxuICAgIF0pLFxuICAgIHRyaWdnZXIoJ2ZhZGUnLCBbXG4gICAgICB0cmFuc2l0aW9uKFxuICAgICAgICAnb3V0ID0+IConLFxuICAgICAgICBbXG4gICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAne3tvcGFjaXR5fX0nIH0pLFxuICAgICAgICAgIGFuaW1hdGUoJ3t7aW5EdXJhdGlvbn19IGVhc2Utb3V0Jywgc3R5bGUoeyBvcGFjaXR5OiAnMScgfSkpXG4gICAgICAgIF0sXG4gICAgICAgIHsgcGFyYW1zOiB7IG9wYWNpdHk6IDAsIGluRHVyYXRpb246ICcyNTBtcycgfSB9XG4gICAgICApLFxuICAgICAgdHJhbnNpdGlvbihcbiAgICAgICAgJyogPT4gb3V0JyxcbiAgICAgICAgW1xuICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogJzEnIH0pLFxuICAgICAgICAgIGFuaW1hdGUoJ3t7b3V0RHVyYXRpb259fSBlYXNlLWluJywgc3R5bGUoeyBvcGFjaXR5OiAnMCcgfSkpXG4gICAgICAgIF0sXG4gICAgICAgIHsgcGFyYW1zOiB7IG9wYWNpdHk6IDAsIG91dER1cmF0aW9uOiAnMjAwbXMnIH0gfVxuICAgICAgKSxcbiAgICAgIHN0YXRlKCdvdXQnLCBzdHlsZSh7IG9wYWNpdHk6ICcwJyB9KSlcbiAgICBdKVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZpdkRpYWxvZyBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHZlcnRpY2FsQWxpZ246ICdib3R0b20nIHwgJ2NlbnRlcicgfCAndG9wJyA9ICd0b3AnO1xuICBASW5wdXQoKSBob3Jpem9udGFsQWxpZ246ICdsZWZ0JyB8ICdtaWRkbGUnIHwgJ3JpZ2h0JyA9ICdtaWRkbGUnO1xuICBASW5wdXQoKSBzaGFwZTogJ2ZpbGwnIHwgJ2NhcmQnID0gJ2NhcmQnO1xuICBASW5wdXQoKSBwcmlvcml0eSA9IDIwMDAxO1xuXG4gIEBJbnB1dCgpIGJhY2tkcm9wID0gdHJ1ZTtcbiAgQElucHV0KCkgYmFja2Ryb3BEaXNtaXNzID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVsbEVuYWJsZWQgPSB0cnVlO1xuICBASW5wdXQoKSBkdXJhdGlvbjogbnVtYmVyO1xuICAvLyBhbmltYXRpb24gZGF0YVxuICBASW5wdXQoKSBpbkR1cmF0aW9uID0gMTYwO1xuICBASW5wdXQoKSBvdXREdXJhdGlvbiA9IDEyMDtcbiAgb3V0UG9zaXRpb24gPSAnLTEwMCUnO1xuICB0b1Bvc2l0aW9uID0gJzBweCc7XG4gIHRyYW5zbGF0ZSA9ICcwcHgnO1xuXG4gIEBPdXRwdXQoKSBmaXZDbG9zZTogRXZlbnRFbWl0dGVyPEZpdkRpYWxvZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBmaXZEdXJhdGlvbk92ZXI6IEV2ZW50RW1pdHRlcjxGaXZEaWFsb2c+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZml2T3BlbjogRXZlbnRFbWl0dGVyPEZpdkRpYWxvZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBWaWV3Q2hpbGQoRml2T3ZlcmxheSwgeyBzdGF0aWM6IGZhbHNlIH0pIG92ZXJsYXk6IEZpdk92ZXJsYXk7XG4gIEBWaWV3Q2hpbGQoRml2TG9hZGluZ1Byb2dyZXNzQmFyLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgYmFyOiBGaXZMb2FkaW5nUHJvZ3Jlc3NCYXI7XG4gIEBWaWV3Q2hpbGQoJ2RpYWxvZycsIHsgc3RhdGljOiBmYWxzZSB9KSBkaWFsb2dSZWY6IEVsZW1lbnRSZWY7XG5cbiAgZGlhbG9nU3RhdGU6ICd0b3AnIHwgJ2NlbnRlcicgfCAnYm90dG9tJyB8ICdvdXQnID0gJ291dCc7XG4gIGN1cnJlbnRQdWxsUHJvZ3Jlc3M6IG51bWJlcjtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgZG9tQ3RybDogRG9tQ29udHJvbGxlcixcbiAgICBwcml2YXRlIGFuaW1hdGlvbjogQW5pbWF0aW9uQnVpbGRlclxuICApIHt9XG5cbiAgb3BlbigpIHtcbiAgICB0aGlzLm92ZXJsYXkuc2hvdyh0aGlzLnByaW9yaXR5KTtcblxuICAgIHRoaXMuZGlhbG9nU3RhdGUgPSB0aGlzLnZlcnRpY2FsQWxpZ247XG4gICAgaWYgKHRoaXMuZHVyYXRpb24pIHtcbiAgICAgIHRoaXMuYmFyLnNocmlua0luKHRoaXMuZHVyYXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIGRvbmVTaHJpbmtpbmcoKSB7XG4gICAgdGhpcy5maXZEdXJhdGlvbk92ZXIuZW1pdCh0aGlzKTtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIHRoaXMuZGlhbG9nU3RhdGUgPSAnb3V0JztcbiAgICB0aGlzLmJhci5zdG9wUHJvZ3Jlc3NBbmltYXRpb24oKTtcbiAgfVxuXG4gIGJhY2tkcm9wQ2xpY2soKSB7XG4gICAgaWYgKHRoaXMuYmFja2Ryb3BEaXNtaXNzKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgYW5pbWF0aW9uRG9uZShldmVudCkge1xuICAgIGlmIChldmVudC5mcm9tU3RhdGUgIT09ICd2b2lkJyAmJiBldmVudC50b1N0YXRlID09PSAnb3V0Jykge1xuICAgICAgdGhpcy50cmFuc2Zvcm1EaWFsb2coMCk7XG4gICAgICB0aGlzLm92ZXJsYXkuaGlkZSgpO1xuICAgICAgdGhpcy5maXZDbG9zZS5lbWl0KHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIGJhY2tkcm9wQW5pbURvbmUoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuZnJvbVN0YXRlID09PSAnb3V0JyAmJiBldmVudC50b1N0YXRlICE9PSAndm9pZCcpIHtcbiAgICAgIHRoaXMuZml2T3Blbi5lbWl0KHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIG9uUmVmcmVzaCgpIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBmaXZDYW5jZWwoKSB7XG4gICAgdGhpcy5yZXNldERpYWxvZyh0aGlzLmN1cnJlbnRQdWxsUHJvZ3Jlc3MpO1xuICB9XG5cbiAgdHJhbnNmb3JtRGlhbG9nKHByb2dyZXNzOiBudW1iZXIpIHtcbiAgICB0aGlzLmN1cnJlbnRQdWxsUHJvZ3Jlc3MgPSBwcm9ncmVzcztcbiAgICB0aGlzLmRvbUN0cmwud3JpdGUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMudmVydGljYWxBbGlnbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICdtYXJnaW4tYm90dG9tJyxcbiAgICAgICAgICBgLSR7cHJvZ3Jlc3MgKiAxMjB9cHhgXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudmVydGljYWxBbGlnbiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICdtYXJnaW4tdG9wJyxcbiAgICAgICAgICBgLSR7cHJvZ3Jlc3MgKiAxMjB9cHhgXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudmVydGljYWxBbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICdtYXJnaW4tdG9wJyxcbiAgICAgICAgICBgJHtwcm9ncmVzcyAqIDEyMH1weGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJlc2V0RGlhbG9nKHByb2dyZXNzOiBudW1iZXIpIHtcbiAgICBsZXQgcmVzZXQ7XG4gICAgaWYgKHRoaXMudmVydGljYWxBbGlnbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgIHJlc2V0ID0gdGhpcy5hbmltYXRpb24uYnVpbGQoW1xuICAgICAgICBzdHlsZSh7ICdtYXJnaW4tYm90dG9tJzogYC0ke3Byb2dyZXNzICogMTIwfXB4YCB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMTUwbXMnLCBzdHlsZSh7ICdtYXJnaW4tYm90dG9tJzogYDBweGAgfSkpXG4gICAgICBdKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudmVydGljYWxBbGlnbiA9PT0gJ3RvcCcpIHtcbiAgICAgIHJlc2V0ID0gdGhpcy5hbmltYXRpb24uYnVpbGQoW1xuICAgICAgICBzdHlsZSh7ICdtYXJnaW4tdG9wJzogYC0ke3Byb2dyZXNzICogMTIwfXB4YCB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMTUwbXMnLCBzdHlsZSh7ICdtYXJnaW4tdG9wJzogYDBweGAgfSkpXG4gICAgICBdKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudmVydGljYWxBbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgIHJlc2V0ID0gdGhpcy5hbmltYXRpb24uYnVpbGQoW1xuICAgICAgICBzdHlsZSh7ICdtYXJnaW4tdG9wJzogYCR7cHJvZ3Jlc3MgKiAxMjB9cHhgIH0pLFxuICAgICAgICBhbmltYXRlKCcxNTBtcycsIHN0eWxlKHsgJ21hcmdpbi10b3AnOiBgMHB4YCB9KSlcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIGNvbnN0IGFuaW1hdGlvbiA9IHJlc2V0LmNyZWF0ZSh0aGlzLmRpYWxvZ1JlZi5uYXRpdmVFbGVtZW50KTtcbiAgICBhbmltYXRpb24ucGxheSgpO1xuICAgIGFuaW1hdGlvbi5vbkRvbmUoKCkgPT4ge1xuICAgICAgYW5pbWF0aW9uLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMudHJhbnNmb3JtRGlhbG9nKDApO1xuICAgIH0pO1xuICB9XG59XG4iXX0=