UNPKG

@fivethree/core

Version:
313 lines 31.1 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'; export class FivDialog { /** * @param {?} renderer * @param {?} domCtrl * @param {?} animation */ constructor(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 {?} */ ngOnInit() { } /** * @return {?} */ open() { this.overlay.show(this.priority); this.dialogState = this.verticalAlign; if (this.duration) { this.bar.shrinkIn(this.duration); } } /** * @return {?} */ doneShrinking() { this.fivDurationOver.emit(this); } /** * @return {?} */ close() { this.dialogState = 'out'; this.bar.stopProgressAnimation(); } /** * @return {?} */ backdropClick() { if (this.backdropDismiss) { this.close(); } } /** * @param {?} event * @return {?} */ animationDone(event) { if (event.fromState !== 'void' && event.toState === 'out') { this.transformDialog(0); this.overlay.hide(); this.fivClose.emit(this); } } /** * @param {?} event * @return {?} */ backdropAnimDone(event) { if (event.fromState === 'out' && event.toState !== 'void') { this.fivOpen.emit(this); } } /** * @return {?} */ onRefresh() { this.close(); } /** * @return {?} */ fivCancel() { this.resetDialog(this.currentPullProgress); } /** * @param {?} progress * @return {?} */ transformDialog(progress) { this.currentPullProgress = progress; this.domCtrl.write((/** * @return {?} */ () => { 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 {?} */ resetDialog(progress) { /** @type {?} */ let 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 {?} */ const animation = reset.create(this.dialogRef.nativeElement); animation.play(); animation.onDone((/** * @return {?} */ () => { 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 = () => [ { 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 },] }] }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BmaXZldGhyZWUvY29yZS8iLCJzb3VyY2VzIjpbImxpYi9kaWFsb2cvZGlhbG9nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ2pHLE9BQU8sRUFDTCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxVQUFVLEVBQ1YsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRCxPQUFPLEVBQ0wsT0FBTyxFQUNQLFVBQVUsRUFDVixLQUFLLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxnQkFBZ0IsRUFDakIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFzRi9DLE1BQU0sT0FBTyxTQUFTOzs7Ozs7SUE4QnBCLFlBQ1UsUUFBbUIsRUFDbkIsT0FBc0IsRUFDdEIsU0FBMkI7UUFGM0IsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixZQUFPLEdBQVAsT0FBTyxDQUFlO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBaEM1QixrQkFBYSxHQUFnQyxLQUFLLENBQUM7UUFDbkQsb0JBQWUsR0FBZ0MsUUFBUSxDQUFDO1FBQ3hELFVBQUssR0FBb0IsTUFBTSxDQUFDO1FBQ2hDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsYUFBUSxHQUFHLElBQUksQ0FBQztRQUNoQixvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN2QixnQkFBVyxHQUFHLElBQUksQ0FBQzs7UUFHbkIsZUFBVSxHQUFHLEdBQUcsQ0FBQztRQUNqQixnQkFBVyxHQUFHLEdBQUcsQ0FB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SUFDOUQsd0JBQzJCOztJQUMzQiw4QkFBOEQ7O0lBRTlELGdDQUF5RDs7SUFDekQsd0NBQTRCOzs7OztJQUsxQiw2QkFBMkI7Ozs7O0lBQzNCLDRCQUE4Qjs7Ozs7SUFDOUIsOEJBQW1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRml2TG9hZGluZ1Byb2dyZXNzQmFyIH0gZnJvbSAnLi8uLi9sb2FkaW5nLXByb2dyZXNzLWJhci9sb2FkaW5nLXByb2dyZXNzLWJhci5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgRXZlbnRFbWl0dGVyLFxuICBPdXRwdXQsXG4gIElucHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVHlwZSxcbiAgRWxlbWVudFJlZixcbiAgUmVuZGVyZXIyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRml2T3ZlcmxheSB9IGZyb20gJy4uL292ZXJsYXkvb3ZlcmxheS5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgdHJpZ2dlcixcbiAgdHJhbnNpdGlvbixcbiAgc3R5bGUsXG4gIGFuaW1hdGUsXG4gIHN0YXRlLFxuICBBbmltYXRpb25CdWlsZGVyXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgRG9tQ29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmV4cG9ydCB0eXBlIENvbnRlbnQ8VD4gPSBUZW1wbGF0ZVJlZjxUPiB8IFR5cGU8VD47XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Zpdi1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdzbGlkZScsIFtcbiAgICAgIHRyYW5zaXRpb24oJ291dCA9PiB0b3AnLCBbXG4gICAgICAgIHN0eWxlKHsgdG9wOiAnMCcsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTEwMCUpIHt7dHJhbnNsYXRlWH19JyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMjIwbXMgZWFzZS1vdXQnKVxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCdvdXQgPT4gY2VudGVyJywgW1xuICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgdG9wOiAnNTAlJyxcbiAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC01MCUpIHt7dHJhbnNsYXRlWH19IHNjYWxlKDApJyxcbiAgICAgICAgICBvcGFjaXR5OiAwXG4gICAgICAgIH0pLFxuICAgICAgICBhbmltYXRlKFxuICAgICAgICAgICcyMjBtcyBlYXNlLW91dCcsXG4gICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgdG9wOiAnNTAlJyxcbiAgICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTUwJSkge3t0cmFuc2xhdGVYfX0gc2NhbGUoMSknLFxuICAgICAgICAgICAgb3BhY2l0eTogMVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIF0pLFxuICAgICAgdHJhbnNpdGlvbignb3V0ID0+IGJvdHRvbScsIFtcbiAgICAgICAgc3R5bGUoeyBib3R0b206ICcwJywgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgxMDAlKSB7e3RyYW5zbGF0ZVh9fScgfSksXG4gICAgICAgIGFuaW1hdGUoJzIyMG1zIGVhc2Utb3V0JylcbiAgICAgIF0pLFxuICAgICAgdHJhbnNpdGlvbigndG9wID0+IG91dCcsIFtcbiAgICAgICAgc3R5bGUoeyB0b3A6ICcwJywgdHJhbnNmb3JtOiAnKicgfSksXG4gICAgICAgIGFuaW1hdGUoXG4gICAgICAgICAgJzE0MG1zIGVhc2UtaW4nLFxuICAgICAgICAgIHN0eWxlKHsgdG9wOiAnMCcsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTEwMCUpIHt7dHJhbnNsYXRlWH19JyB9KVxuICAgICAgICApXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJ2NlbnRlciA9PiBvdXQnLCBbXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICB0b3A6ICc1MCUnLFxuICAgICAgICAgIHRyYW5zZm9ybTogJyonLFxuICAgICAgICAgIG9wYWNpdHk6IDFcbiAgICAgICAgfSksXG4gICAgICAgIGFuaW1hdGUoXG4gICAgICAgICAgJzE0MG1zIGVhc2UtaW4nLFxuICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgIHRvcDogJzUwJScsXG4gICAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC01MCUpIHt7dHJhbnNsYXRlWH19IHNjYWxlKDApJyxcbiAgICAgICAgICAgIG9wYWNpdHk6IDBcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJ2JvdHRvbSA9PiBvdXQnLCBbXG4gICAgICAgIHN0eWxlKHsgYm90dG9tOiAnMCcsIHRyYW5zZm9ybTogJyonIH0pLFxuICAgICAgICBhbmltYXRlKFxuICAgICAgICAgICcxNDBtcyBlYXNlLWluJyxcbiAgICAgICAgICBzdHlsZSh7IGJvdHRvbTogJzAnLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDEwMCUpIHt7dHJhbnNsYXRlWH19JyB9KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgLy8gc3RhdGUoJ2JvdHRvbScsIHN0eWxlKHsgYm90dG9tOiAnMCcsIHRyYW5zZm9ybTogJyonIH0pKSxcbiAgICAgIC8vIHN0YXRlKCd0b3AnLCBzdHlsZSh7IHRvcDogJzAnLCB0cmFuc2Zvcm06ICcqJyB9KSksXG4gICAgICAvLyBzdGF0ZSgnY2VudGVyJywgc3R5bGUoeyB0b3A6ICc1MCUnLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC01MCUpIHt7dHJhbnNsYXRlWH19JyB9KSlcbiAgICBdKSxcbiAgICB0cmlnZ2VyKCdmYWRlJywgW1xuICAgICAgdHJhbnNpdGlvbihcbiAgICAgICAgJ291dCA9PiAqJyxcbiAgICAgICAgW1xuICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogJ3t7b3BhY2l0eX19JyB9KSxcbiAgICAgICAgICBhbmltYXRlKCd7e2luRHVyYXRpb259fSBlYXNlLW91dCcsIHN0eWxlKHsgb3BhY2l0eTogJzEnIH0pKVxuICAgICAgICBdLFxuICAgICAgICB7IHBhcmFtczogeyBvcGFjaXR5OiAwLCBpbkR1cmF0aW9uOiAnMjUwbXMnIH0gfVxuICAgICAgKSxcbiAgICAgIHRyYW5zaXRpb24oXG4gICAgICAgICcqID0+IG91dCcsXG4gICAgICAgIFtcbiAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6ICcxJyB9KSxcbiAgICAgICAgICBhbmltYXRlKCd7e291dER1cmF0aW9ufX0gZWFzZS1pbicsIHN0eWxlKHsgb3BhY2l0eTogJzAnIH0pKVxuICAgICAgICBdLFxuICAgICAgICB7IHBhcmFtczogeyBvcGFjaXR5OiAwLCBvdXREdXJhdGlvbjogJzIwMG1zJyB9IH1cbiAgICAgICksXG4gICAgICBzdGF0ZSgnb3V0Jywgc3R5bGUoeyBvcGFjaXR5OiAnMCcgfSkpXG4gICAgXSlcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBGaXZEaWFsb2cgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSB2ZXJ0aWNhbEFsaWduOiAnYm90dG9tJyB8ICdjZW50ZXInIHwgJ3RvcCcgPSAndG9wJztcbiAgQElucHV0KCkgaG9yaXpvbnRhbEFsaWduOiAnbGVmdCcgfCAnbWlkZGxlJyB8ICdyaWdodCcgPSAnbWlkZGxlJztcbiAgQElucHV0KCkgc2hhcGU6ICdmaWxsJyB8ICdjYXJkJyA9ICdjYXJkJztcbiAgQElucHV0KCkgcHJpb3JpdHkgPSAyMDAwMTtcblxuICBASW5wdXQoKSBiYWNrZHJvcCA9IHRydWU7XG4gIEBJbnB1dCgpIGJhY2tkcm9wRGlzbWlzcyA9IHRydWU7XG4gIEBJbnB1dCgpIHB1bGxFbmFibGVkID0gdHJ1ZTtcbiAgQElucHV0KCkgZHVyYXRpb246IG51bWJlcjtcbiAgLy8gYW5pbWF0aW9uIGRhdGFcbiAgQElucHV0KCkgaW5EdXJhdGlvbiA9IDE2MDtcbiAgQElucHV0KCkgb3V0RHVyYXRpb24gPSAxMjA7XG4gIG91dFBvc2l0aW9uID0gJy0xMDAlJztcbiAgdG9Qb3NpdGlvbiA9ICcwcHgnO1xuICB0cmFuc2xhdGUgPSAnMHB4JztcblxuICBAT3V0cHV0KCkgZml2Q2xvc2U6IEV2ZW50RW1pdHRlcjxGaXZEaWFsb2c+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZml2RHVyYXRpb25PdmVyOiBFdmVudEVtaXR0ZXI8Rml2RGlhbG9nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGZpdk9wZW46IEV2ZW50RW1pdHRlcjxGaXZEaWFsb2c+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAVmlld0NoaWxkKEZpdk92ZXJsYXksIHsgc3RhdGljOiBmYWxzZSB9KSBvdmVybGF5OiBGaXZPdmVybGF5O1xuICBAVmlld0NoaWxkKEZpdkxvYWRpbmdQcm9ncmVzc0JhciwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIGJhcjogRml2TG9hZGluZ1Byb2dyZXNzQmFyO1xuICBAVmlld0NoaWxkKCdkaWFsb2cnLCB7IHN0YXRpYzogZmFsc2UgfSkgZGlhbG9nUmVmOiBFbGVtZW50UmVmO1xuXG4gIGRpYWxvZ1N0YXRlOiAndG9wJyB8ICdjZW50ZXInIHwgJ2JvdHRvbScgfCAnb3V0JyA9ICdvdXQnO1xuICBjdXJyZW50UHVsbFByb2dyZXNzOiBudW1iZXI7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7fVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGRvbUN0cmw6IERvbUNvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBhbmltYXRpb246IEFuaW1hdGlvbkJ1aWxkZXJcbiAgKSB7fVxuXG4gIG9wZW4oKSB7XG4gICAgdGhpcy5vdmVybGF5LnNob3codGhpcy5wcmlvcml0eSk7XG5cbiAgICB0aGlzLmRpYWxvZ1N0YXRlID0gdGhpcy52ZXJ0aWNhbEFsaWduO1xuICAgIGlmICh0aGlzLmR1cmF0aW9uKSB7XG4gICAgICB0aGlzLmJhci5zaHJpbmtJbih0aGlzLmR1cmF0aW9uKTtcbiAgICB9XG4gIH1cblxuICBkb25lU2hyaW5raW5nKCkge1xuICAgIHRoaXMuZml2RHVyYXRpb25PdmVyLmVtaXQodGhpcyk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLmRpYWxvZ1N0YXRlID0gJ291dCc7XG4gICAgdGhpcy5iYXIuc3RvcFByb2dyZXNzQW5pbWF0aW9uKCk7XG4gIH1cblxuICBiYWNrZHJvcENsaWNrKCkge1xuICAgIGlmICh0aGlzLmJhY2tkcm9wRGlzbWlzcykge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFuaW1hdGlvbkRvbmUoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuZnJvbVN0YXRlICE9PSAndm9pZCcgJiYgZXZlbnQudG9TdGF0ZSA9PT0gJ291dCcpIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtRGlhbG9nKDApO1xuICAgICAgdGhpcy5vdmVybGF5LmhpZGUoKTtcbiAgICAgIHRoaXMuZml2Q2xvc2UuZW1pdCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBiYWNrZHJvcEFuaW1Eb25lKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmZyb21TdGF0ZSA9PT0gJ291dCcgJiYgZXZlbnQudG9TdGF0ZSAhPT0gJ3ZvaWQnKSB7XG4gICAgICB0aGlzLmZpdk9wZW4uZW1pdCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBvblJlZnJlc2goKSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgZml2Q2FuY2VsKCkge1xuICAgIHRoaXMucmVzZXREaWFsb2codGhpcy5jdXJyZW50UHVsbFByb2dyZXNzKTtcbiAgfVxuXG4gIHRyYW5zZm9ybURpYWxvZyhwcm9ncmVzczogbnVtYmVyKSB7XG4gICAgdGhpcy5jdXJyZW50UHVsbFByb2dyZXNzID0gcHJvZ3Jlc3M7XG4gICAgdGhpcy5kb21DdHJsLndyaXRlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnZlcnRpY2FsQWxpZ24gPT09ICdib3R0b20nKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgdGhpcy5kaWFsb2dSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAnbWFyZ2luLWJvdHRvbScsXG4gICAgICAgICAgYC0ke3Byb2dyZXNzICogMTIwfXB4YFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnZlcnRpY2FsQWxpZ24gPT09ICd0b3AnKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgdGhpcy5kaWFsb2dSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAnbWFyZ2luLXRvcCcsXG4gICAgICAgICAgYC0ke3Byb2dyZXNzICogMTIwfXB4YFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnZlcnRpY2FsQWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgdGhpcy5kaWFsb2dSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAnbWFyZ2luLXRvcCcsXG4gICAgICAgICAgYCR7cHJvZ3Jlc3MgKiAxMjB9cHhgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXNldERpYWxvZyhwcm9ncmVzczogbnVtYmVyKSB7XG4gICAgbGV0IHJlc2V0O1xuICAgIGlmICh0aGlzLnZlcnRpY2FsQWxpZ24gPT09ICdib3R0b20nKSB7XG4gICAgICByZXNldCA9IHRoaXMuYW5pbWF0aW9uLmJ1aWxkKFtcbiAgICAgICAgc3R5bGUoeyAnbWFyZ2luLWJvdHRvbSc6IGAtJHtwcm9ncmVzcyAqIDEyMH1weGAgfSksXG4gICAgICAgIGFuaW1hdGUoJzE1MG1zJywgc3R5bGUoeyAnbWFyZ2luLWJvdHRvbSc6IGAwcHhgIH0pKVxuICAgICAgXSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnZlcnRpY2FsQWxpZ24gPT09ICd0b3AnKSB7XG4gICAgICByZXNldCA9IHRoaXMuYW5pbWF0aW9uLmJ1aWxkKFtcbiAgICAgICAgc3R5bGUoeyAnbWFyZ2luLXRvcCc6IGAtJHtwcm9ncmVzcyAqIDEyMH1weGAgfSksXG4gICAgICAgIGFuaW1hdGUoJzE1MG1zJywgc3R5bGUoeyAnbWFyZ2luLXRvcCc6IGAwcHhgIH0pKVxuICAgICAgXSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnZlcnRpY2FsQWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgICByZXNldCA9IHRoaXMuYW5pbWF0aW9uLmJ1aWxkKFtcbiAgICAgICAgc3R5bGUoeyAnbWFyZ2luLXRvcCc6IGAke3Byb2dyZXNzICogMTIwfXB4YCB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMTUwbXMnLCBzdHlsZSh7ICdtYXJnaW4tdG9wJzogYDBweGAgfSkpXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICBjb25zdCBhbmltYXRpb24gPSByZXNldC5jcmVhdGUodGhpcy5kaWFsb2dSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgYW5pbWF0aW9uLnBsYXkoKTtcbiAgICBhbmltYXRpb24ub25Eb25lKCgpID0+IHtcbiAgICAgIGFuaW1hdGlvbi5kZXN0cm95KCk7XG4gICAgICB0aGlzLnRyYW5zZm9ybURpYWxvZygwKTtcbiAgICB9KTtcbiAgfVxufVxuIl19