UNPKG

@fivethree/core

Version:
349 lines 32.6 kB
/** * @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=