@fivethree/core
Version:
Fivethree Core Components
313 lines • 31.1 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';
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