@neocomplexx/ngx-neo-modal
Version:
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.0.5.
228 lines • 24.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/ngx-neo-modal.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/* tslint:disable:no-bitwise */
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
import { Component, ChangeDetectorRef, ViewChild } from '@angular/core';
var NgxNeoModalComponent = /** @class */ (function () {
function NgxNeoModalComponent(activeModal, changeRef) {
this.activeModal = activeModal;
this.changeRef = changeRef;
// Default config
this.config = {
title: {
visibility: true,
text: 'This is a title'
},
message: 'This is a message',
type: null,
input: {
visibility: false,
placeholder: 'Ingrese su texto aquí',
value: null,
autofocus: false,
id: 'neoInput'
},
button: {
yes: {
visibility: false,
autofocus: false,
text: 'Si',
id: 'neoBtnYes'
},
no: {
visibility: false,
autofocus: false,
text: 'No',
id: 'neoBtnNo'
},
retry: {
visibility: false,
autofocus: false,
text: 'Reintentar',
id: 'neoBtnRetry'
},
cancel: {
visibility: true,
autofocus: false,
text: 'Cancelar',
id: 'neoBtnCancel'
},
accept: {
visibility: true,
autofocus: true,
text: 'Aceptar',
id: 'neoBtnAccept'
},
}
};
}
/**
* @return {?}
*/
NgxNeoModalComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
var _this = this;
setTimeout((/**
* @return {?}
*/
function () { return _this.activeFocus(); }), 0);
};
/**
* @private
* @param {?=} inputModal
* @return {?}
*/
NgxNeoModalComponent.prototype.activeFocus = /**
* @private
* @param {?=} inputModal
* @return {?}
*/
function (inputModal) {
if (inputModal === void 0) { inputModal = true; }
/** @type {?} */
var foc = this.getButtonFocus();
/** @type {?} */
var inputFocus = this.getInputFocus();
// Find element in DOM and focus.
if (inputFocus && inputModal && (!foc || foc === 'neoBtnAccept')) {
this.input.nativeElement.focus();
}
else if (foc) {
/** @type {?} */
var button = this.btn.nativeElement.children.namedItem(foc);
if (button) {
button.focus();
}
}
};
/**
* @private
* @return {?}
*/
NgxNeoModalComponent.prototype.getButtonFocus = /**
* @private
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var button = Object.keys(this.config.button)
.find((/**
* @param {?} key
* @return {?}
*/
function (key) { return _this.config.button[key].visibility && _this.config.button[key].autofocus; }));
if (button) {
return this.config.button[button].id;
}
else {
return null;
}
};
/**
* @private
* @return {?}
*/
NgxNeoModalComponent.prototype.getInputFocus = /**
* @private
* @return {?}
*/
function () {
if (this.config.input.visibility && this.config.input.autofocus) {
return this.config.input.id;
}
else {
return null;
}
};
/**
* @param {?} res
* @return {?}
*/
NgxNeoModalComponent.prototype.informResult = /**
* @param {?} res
* @return {?}
*/
function (res) {
/** @type {?} */
var button = AlertButton[res];
/** @type {?} */
var respuesta = new AlertResult(button, this.config.input.value);
this.activeModal.close(respuesta);
this.activeModal.dismiss(respuesta);
};
/**
* @return {?}
*/
NgxNeoModalComponent.prototype.setFocus = /**
* @return {?}
*/
function () {
this.activeFocus(false);
};
NgxNeoModalComponent.decorators = [
{ type: Component, args: [{
template: "<div id=\"myModal\">\n <div class=\"modal-header\">\n <button type=\"button\" class=\"close\" aria-label=\"Close\" data-dismiss=\"myModal\" (click)=\"informResult('None')\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body text-center\">\n <div class=\"icons\">\n <div *ngIf=\"config.type === 'success'\" class=\"swal2-icon swal2-success swal2-animate-success-icon\">\n <div class=\"swal2-success-circular-line-left\"></div>\n <span class=\"swal2-success-line-tip swal2-animate-success-line-tip\"></span>\n <span class=\"swal2-success-line-long swal2-animate-success-line-long\"></span>\n <div class=\"swal2-success-ring\"></div>\n <div class=\"swal2-success-fix\"></div>\n <div class=\"swal2-success-circular-line-right\"></div>\n </div>\n\n <div *ngIf=\"config.type === 'error'\" class=\"swal2-icon swal2-error swal2-animate-error-icon\">\n <span class=\"swal2-x-mark swal2-animate-x-mark\">\n <span class=\"swal2-x-mark-line-left\"></span>\n <span class=\"swal2-x-mark-line-right\"></span>\n </span>\n </div>\n\n <div *ngIf=\"config.type === 'warning'\" class=\"swal2-icon swal2-warning\">!</div>\n\n <div *ngIf=\"config.type === 'info'\" class=\"swal2-icon swal2-info\">i</div>\n\n <div *ngIf=\"config.type === 'question'\" class=\"swal2-icon swal2-question\">?</div>\n </div>\n\n <h4 *ngIf='config.title.visibility'>{{config.title.text}}</h4>\n <p>{{config.message}}</p>\n <div class=\"form-group\">\n <input id=\"neoInput\" #myInput *ngIf='config.input.visibility' class=\"form-control\" [(ngModel)]=\"config.input.value\" placeholder={{config.input.placeholder}}\n type='text' (keyup.enter)=\"setFocus()\">\n </div>\n </div>\n\n <div #buttons class=\"modal-footer\">\n <button id=\"neoBtnAccept\" *ngIf='config.button.accept.visibility' type=\"button\" class=\"btn btn-primary\" (click)=\"informResult('Accept')\">{{config.button.accept.text}}</button>\n <button id=\"neoBtnCancel\" *ngIf='config.button.cancel.visibility' type=\"button\" class=\"btn btn-primary\" (click)=\"informResult('Cancel')\">{{config.button.cancel.text}}</button>\n <button id=\"neoBtnYes\" *ngIf='config.button.yes.visibility' type=\"button\" class=\"btn btn-primary\" (click)=\"informResult('Yes')\">{{config.button.yes.text}}</button>\n <button id=\"neoBtnRetry\" *ngIf='config.button.retry.visibility' type=\"button\" class=\"btn btn-primary\" (click)=\"informResult('Retry')\">{{config.button.retry.text}}</button>\n <button id=\"neoBtnNo\" *ngIf='config.button.no.visibility' type=\"button\" class=\"btn btn-primary\" (click)=\"informResult('No')\">{{config.button.no.text}}</button>\n </div>\n\n</div>",
styles: [".modal-footer,.modal-header{border:0}@-webkit-keyframes showSweetAlert{0%{-webkit-transform:scale(.7);transform:scale(.7)}45%{-webkit-transform:scale(1.05);transform:scale(1.05)}80%{-webkit-transform:scale(.95);transform:scale(.95)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes showSweetAlert{0%{-webkit-transform:scale(.7);transform:scale(.7)}45%{-webkit-transform:scale(1.05);transform:scale(1.05)}80%{-webkit-transform:scale(.95);transform:scale(.95)}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes hideSweetAlert{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{-webkit-transform:scale(.5);transform:scale(.5);opacity:0}}@keyframes hideSweetAlert{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{-webkit-transform:scale(.5);transform:scale(.5);opacity:0}}.swal2-show{-webkit-animation:.3s showSweetAlert;animation:.3s showSweetAlert}.swal2-show.swal2-noanimation{-webkit-animation:none;animation:none}.swal2-hide{-webkit-animation:.15s forwards hideSweetAlert;animation:.15s forwards hideSweetAlert}.swal2-hide.swal2-noanimation{-webkit-animation:none;animation:none}@-webkit-keyframes animate-success-tip{0%,54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}100%{width:25px;left:14px;top:45px}}@keyframes animate-success-tip{0%,54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}100%{width:25px;left:14px;top:45px}}@-webkit-keyframes animate-success-long{0%,65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}100%{width:47px;right:8px;top:38px}}@keyframes animate-success-long{0%,65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}100%{width:47px;right:8px;top:38px}}@-webkit-keyframes rotatePlaceholder{0%,5%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}100%,12%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}}@keyframes rotatePlaceholder{0%,5%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}100%,12%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}}.swal2-animate-success-line-tip{-webkit-animation:.75s animate-success-tip;animation:.75s animate-success-tip}.swal2-animate-success-line-long{-webkit-animation:.75s animate-success-long;animation:.75s animate-success-long}@-webkit-keyframes animate-error-icon{0%{-webkit-transform:rotateX(100deg);transform:rotateX(100deg);opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);opacity:1}}@keyframes animate-error-icon{0%{-webkit-transform:rotateX(100deg);transform:rotateX(100deg);opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);opacity:1}}.swal2-animate-error-icon{-webkit-animation:.5s animate-error-icon;animation:.5s animate-error-icon}@-webkit-keyframes animate-x-mark{0%,50%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}80%{-webkit-transform:scale(1.15);transform:scale(1.15);margin-top:-6px}100%{-webkit-transform:scale(1);transform:scale(1);margin-top:0;opacity:1}}@keyframes animate-x-mark{0%,50%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}80%{-webkit-transform:scale(1.15);transform:scale(1.15);margin-top:-6px}100%{-webkit-transform:scale(1);transform:scale(1);margin-top:0;opacity:1}}.swal2-animate-x-mark{-webkit-animation:.5s animate-x-mark;animation:.5s animate-x-mark}@-webkit-keyframes rotate-loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate-loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.swal2-success.swal2-animate-success-icon .swal2-success-circular-line-right{-webkit-animation:4.25s ease-in rotatePlaceholder;animation:4.25s ease-in rotatePlaceholder}.swal2-icon{width:80px;height:80px;border:4px solid transparent;border-radius:50%;margin:20px auto 30px;padding:0;position:relative;box-sizing:content-box;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon.swal2-error{border-color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;display:block}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{position:absolute;height:5px;width:47px;background-color:#f27474;display:block;top:37px;border-radius:2px}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{-webkit-transform:rotate(45deg);transform:rotate(45deg);left:17px}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);right:16px}.swal2-icon.swal2-warning{font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;color:#f8bb86;border-color:#facea8;font-size:60px;line-height:80px;text-align:center}.swal2-icon.swal2-info{font-family:\"Open Sans\",sans-serif;color:#3fc3ee;border-color:#9de0f6;font-size:60px;line-height:80px;text-align:center}.swal2-icon.swal2-question{font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;color:#87adbd;border-color:#c9dae1;font-size:60px;line-height:80px;text-align:center}.swal2-icon.swal2-success{border-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{border-radius:50%;position:absolute;width:60px;height:120px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{border-radius:120px 0 0 120px;top:-7px;left:-33px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:60px 60px;transform-origin:60px 60px}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{border-radius:0 120px 120px 0;top:-11px;left:30px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:0 60px;transform-origin:0 60px}.swal2-icon.swal2-success .swal2-success-ring{width:80px;height:80px;border:4px solid rgba(165,220,134,.2);border-radius:50%;box-sizing:content-box;position:absolute;left:-4px;top:-4px;z-index:2}.swal2-icon.swal2-success .swal2-success-fix{width:7px;height:90px;position:absolute;left:28px;top:8px;z-index:1;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{height:5px;background-color:#a5dc86;display:block;border-radius:2px;position:absolute;z-index:2}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{width:25px;left:14px;top:46px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{width:47px;right:8px;top:38px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}"]
}] }
];
/** @nocollapse */
NgxNeoModalComponent.ctorParameters = function () { return [
{ type: NgbActiveModal },
{ type: ChangeDetectorRef }
]; };
NgxNeoModalComponent.propDecorators = {
btn: [{ type: ViewChild, args: ['buttons', { static: true },] }],
input: [{ type: ViewChild, args: ['myInput', { static: false },] }]
};
return NgxNeoModalComponent;
}());
export { NgxNeoModalComponent };
if (false) {
/** @type {?} */
NgxNeoModalComponent.prototype.config;
/** @type {?} */
NgxNeoModalComponent.prototype.btn;
/** @type {?} */
NgxNeoModalComponent.prototype.input;
/** @type {?} */
NgxNeoModalComponent.prototype.activeModal;
/** @type {?} */
NgxNeoModalComponent.prototype.changeRef;
}
var AlertResult = /** @class */ (function () {
function AlertResult(ButtonResponse, messageInput) {
this.ButtonResponse = ButtonResponse;
this.messageInput = messageInput;
}
return AlertResult;
}());
export { AlertResult };
if (false) {
/** @type {?} */
AlertResult.prototype.ButtonResponse;
/** @type {?} */
AlertResult.prototype.messageInput;
}
/** @enum {number} */
var AlertButton = {
None: 0,
Accept: 1,
Cancel: 2,
Yes: 4,
No: 8,
Retry: 16,
};
export { AlertButton };
AlertButton[AlertButton.None] = 'None';
AlertButton[AlertButton.Accept] = 'Accept';
AlertButton[AlertButton.Cancel] = 'Cancel';
AlertButton[AlertButton.Yes] = 'Yes';
AlertButton[AlertButton.No] = 'No';
AlertButton[AlertButton.Retry] = 'Retry';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW5lby1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbmVvY29tcGxleHgvbmd4LW5lby1tb2RhbC8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtbmVvLW1vZGFsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBaUIsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZGO0lBMERFLDhCQUFtQixXQUEyQixFQUFTLFNBQTRCO1FBQWhFLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUFTLGNBQVMsR0FBVCxTQUFTLENBQW1COztRQW5ENUUsV0FBTSxHQUFHO1lBQ2QsS0FBSyxFQUFFO2dCQUNMLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixJQUFJLEVBQUUsaUJBQWlCO2FBQ3hCO1lBQ0QsT0FBTyxFQUFFLG1CQUFtQjtZQUM1QixJQUFJLEVBQUUsSUFBSTtZQUNWLEtBQUssRUFBRTtnQkFDTCxVQUFVLEVBQUUsS0FBSztnQkFDakIsV0FBVyxFQUFFLHVCQUF1QjtnQkFDcEMsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsU0FBUyxFQUFFLEtBQUs7Z0JBQ2hCLEVBQUUsRUFBRSxVQUFVO2FBQ2Y7WUFDRCxNQUFNLEVBQUU7Z0JBQ04sR0FBRyxFQUFFO29CQUNILFVBQVUsRUFBRSxLQUFLO29CQUNqQixTQUFTLEVBQUUsS0FBSztvQkFDaEIsSUFBSSxFQUFFLElBQUk7b0JBQ1YsRUFBRSxFQUFFLFdBQVc7aUJBQ2hCO2dCQUNELEVBQUUsRUFBRTtvQkFDRixVQUFVLEVBQUUsS0FBSztvQkFDakIsU0FBUyxFQUFFLEtBQUs7b0JBQ2hCLElBQUksRUFBRSxJQUFJO29CQUNWLEVBQUUsRUFBRSxVQUFVO2lCQUNmO2dCQUNELEtBQUssRUFBRTtvQkFDTCxVQUFVLEVBQUUsS0FBSztvQkFDakIsU0FBUyxFQUFFLEtBQUs7b0JBQ2hCLElBQUksRUFBRSxZQUFZO29CQUNsQixFQUFFLEVBQUUsYUFBYTtpQkFDbEI7Z0JBQ0QsTUFBTSxFQUFFO29CQUNOLFVBQVUsRUFBRSxJQUFJO29CQUNoQixTQUFTLEVBQUUsS0FBSztvQkFDaEIsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLEVBQUUsRUFBRSxjQUFjO2lCQUNuQjtnQkFDRCxNQUFNLEVBQUU7b0JBQ04sVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFNBQVMsRUFBRSxJQUFJO29CQUNmLElBQUksRUFBRSxTQUFTO29CQUNmLEVBQUUsRUFBRSxjQUFjO2lCQUNuQjthQUNGO1NBQ0YsQ0FBQztJQU1GLENBQUM7Ozs7SUFJRCw4Q0FBZTs7O0lBQWY7UUFBQSxpQkFFQztRQURDLFVBQVU7OztRQUFDLGNBQU0sT0FBQSxLQUFJLENBQUMsV0FBVyxFQUFFLEVBQWxCLENBQWtCLEdBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUMsQ0FBQzs7Ozs7O0lBRU8sMENBQVc7Ozs7O0lBQW5CLFVBQW9CLFVBQWlCO1FBQWpCLDJCQUFBLEVBQUEsaUJBQWlCOztZQUM3QixHQUFHLEdBQVcsSUFBSSxDQUFDLGNBQWMsRUFBRTs7WUFDbkMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUU7UUFFdkMsaUNBQWlDO1FBQ2pDLElBQUksVUFBVSxJQUFJLFVBQVUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsS0FBSyxjQUFjLENBQUMsRUFBRTtZQUNoRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNsQzthQUFNLElBQUksR0FBRyxFQUFFOztnQkFDUixNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7WUFDN0QsSUFBSSxNQUFNLEVBQUU7Z0JBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQUU7U0FDaEM7SUFDSCxDQUFDOzs7OztJQUVPLDZDQUFjOzs7O0lBQXRCO1FBQUEsaUJBU0M7O1lBUk8sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7YUFDM0MsSUFBSTs7OztRQUFDLFVBQUEsR0FBRyxJQUFJLE9BQUEsS0FBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBdkUsQ0FBdUUsRUFBQztRQUN2RixJQUFJLE1BQU0sRUFBRTtZQUNWLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ3RDO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQztTQUNiO0lBRUgsQ0FBQzs7Ozs7SUFFTyw0Q0FBYTs7OztJQUFyQjtRQUNFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUMvRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztTQUM3QjthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7Ozs7O0lBRU0sMkNBQVk7Ozs7SUFBbkIsVUFBb0IsR0FBVzs7WUFDdkIsTUFBTSxHQUFnQixXQUFXLENBQUMsR0FBRyxDQUFDOztZQUN0QyxTQUFTLEdBQWdCLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFFL0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdEMsQ0FBQzs7OztJQUVNLHVDQUFROzs7SUFBZjtRQUNFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQzs7Z0JBN0dGLFNBQVMsU0FBQztvQkFDVCwrdkZBQTZDOztpQkFFOUM7Ozs7Z0JBTlEsY0FBYztnQkFDWSxpQkFBaUI7OztzQkF5RGpELFNBQVMsU0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO3dCQUNyQyxTQUFTLFNBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTs7SUF3RHpDLDJCQUFDO0NBQUEsQUFoSEQsSUFnSEM7U0EzR1ksb0JBQW9COzs7SUFFL0Isc0NBOENFOztJQUVGLG1DQUFpRDs7SUFDakQscUNBQW9EOztJQUV4QywyQ0FBa0M7O0lBQUUseUNBQW1DOztBQTBEckY7SUFFRSxxQkFBbUIsY0FBMkIsRUFBUyxZQUFvQjtRQUF4RCxtQkFBYyxHQUFkLGNBQWMsQ0FBYTtRQUFTLGlCQUFZLEdBQVosWUFBWSxDQUFRO0lBQzNFLENBQUM7SUFDSCxrQkFBQztBQUFELENBQUMsQUFKRCxJQUlDOzs7O0lBRmEscUNBQWtDOztJQUFFLG1DQUEyQjs7O0FBSTdFLElBQVksV0FBVztJQUNyQixJQUFJLEdBQUk7SUFDUixNQUFNLEdBQVM7SUFDZixNQUFNLEdBQVM7SUFDZixHQUFHLEdBQVM7SUFDWixFQUFFLEdBQVM7SUFDWCxLQUFLLElBQVM7RUFDZiIsInNvdXJjZXNDb250ZW50IjpbIi8qIHRzbGludDpkaXNhYmxlOm5vLWJpdHdpc2UgKi9cbmltcG9ydCB7IE5nYkFjdGl2ZU1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vbmd4LW5lby1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL25neC1uZW8tbW9kYWwuY29tcG9uZW50LnNjc3MnXVxufSlcblxuZXhwb3J0IGNsYXNzIE5neE5lb01vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8vIERlZmF1bHQgY29uZmlnXG4gIHB1YmxpYyBjb25maWcgPSB7XG4gICAgdGl0bGU6IHtcbiAgICAgIHZpc2liaWxpdHk6IHRydWUsXG4gICAgICB0ZXh0OiAnVGhpcyBpcyBhIHRpdGxlJ1xuICAgIH0sXG4gICAgbWVzc2FnZTogJ1RoaXMgaXMgYSBtZXNzYWdlJyxcbiAgICB0eXBlOiBudWxsLFxuICAgIGlucHV0OiB7XG4gICAgICB2aXNpYmlsaXR5OiBmYWxzZSxcbiAgICAgIHBsYWNlaG9sZGVyOiAnSW5ncmVzZSBzdSB0ZXh0byBhcXXDrScsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIGF1dG9mb2N1czogZmFsc2UsXG4gICAgICBpZDogJ25lb0lucHV0J1xuICAgIH0sXG4gICAgYnV0dG9uOiB7XG4gICAgICB5ZXM6IHtcbiAgICAgICAgdmlzaWJpbGl0eTogZmFsc2UsXG4gICAgICAgIGF1dG9mb2N1czogZmFsc2UsXG4gICAgICAgIHRleHQ6ICdTaScsXG4gICAgICAgIGlkOiAnbmVvQnRuWWVzJ1xuICAgICAgfSxcbiAgICAgIG5vOiB7XG4gICAgICAgIHZpc2liaWxpdHk6IGZhbHNlLFxuICAgICAgICBhdXRvZm9jdXM6IGZhbHNlLFxuICAgICAgICB0ZXh0OiAnTm8nLFxuICAgICAgICBpZDogJ25lb0J0bk5vJ1xuICAgICAgfSxcbiAgICAgIHJldHJ5OiB7XG4gICAgICAgIHZpc2liaWxpdHk6IGZhbHNlLFxuICAgICAgICBhdXRvZm9jdXM6IGZhbHNlLFxuICAgICAgICB0ZXh0OiAnUmVpbnRlbnRhcicsXG4gICAgICAgIGlkOiAnbmVvQnRuUmV0cnknXG4gICAgICB9LFxuICAgICAgY2FuY2VsOiB7XG4gICAgICAgIHZpc2liaWxpdHk6IHRydWUsXG4gICAgICAgIGF1dG9mb2N1czogZmFsc2UsXG4gICAgICAgIHRleHQ6ICdDYW5jZWxhcicsXG4gICAgICAgIGlkOiAnbmVvQnRuQ2FuY2VsJ1xuICAgICAgfSxcbiAgICAgIGFjY2VwdDoge1xuICAgICAgICB2aXNpYmlsaXR5OiB0cnVlLFxuICAgICAgICBhdXRvZm9jdXM6IHRydWUsXG4gICAgICAgIHRleHQ6ICdBY2VwdGFyJyxcbiAgICAgICAgaWQ6ICduZW9CdG5BY2NlcHQnXG4gICAgICB9LFxuICAgIH1cbiAgfTtcblxuICBAVmlld0NoaWxkKCdidXR0b25zJywgeyBzdGF0aWM6IHRydWUgfSkgYnRuOiBhbnk7XG4gIEBWaWV3Q2hpbGQoJ215SW5wdXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgaW5wdXQ6IGFueTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsLCBwdWJsaWMgY2hhbmdlUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICB9XG5cblxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYWN0aXZlRm9jdXMoKSwgMCk7XG4gIH1cblxuICBwcml2YXRlIGFjdGl2ZUZvY3VzKGlucHV0TW9kYWwgPSB0cnVlKSB7XG4gICAgY29uc3QgZm9jOiBzdHJpbmcgPSB0aGlzLmdldEJ1dHRvbkZvY3VzKCk7XG4gICAgY29uc3QgaW5wdXRGb2N1cyA9IHRoaXMuZ2V0SW5wdXRGb2N1cygpO1xuXG4gICAgLy8gRmluZCBlbGVtZW50IGluIERPTSBhbmQgZm9jdXMuXG4gICAgaWYgKGlucHV0Rm9jdXMgJiYgaW5wdXRNb2RhbCAmJiAoIWZvYyB8fCBmb2MgPT09ICduZW9CdG5BY2NlcHQnKSkge1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSBlbHNlIGlmIChmb2MpIHtcbiAgICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuYnRuLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4ubmFtZWRJdGVtKGZvYyk7XG4gICAgICBpZiAoYnV0dG9uKSB7IGJ1dHRvbi5mb2N1cygpOyB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRCdXR0b25Gb2N1cygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJ1dHRvbiA9IE9iamVjdC5rZXlzKHRoaXMuY29uZmlnLmJ1dHRvbilcbiAgICAgIC5maW5kKGtleSA9PiB0aGlzLmNvbmZpZy5idXR0b25ba2V5XS52aXNpYmlsaXR5ICYmIHRoaXMuY29uZmlnLmJ1dHRvbltrZXldLmF1dG9mb2N1cyk7XG4gICAgaWYgKGJ1dHRvbikge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmJ1dHRvbltidXR0b25dLmlkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5wdXRGb2N1cygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmNvbmZpZy5pbnB1dC52aXNpYmlsaXR5ICYmIHRoaXMuY29uZmlnLmlucHV0LmF1dG9mb2N1cykge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmlucHV0LmlkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaW5mb3JtUmVzdWx0KHJlczogc3RyaW5nKSB7XG4gICAgY29uc3QgYnV0dG9uOiBBbGVydEJ1dHRvbiA9IEFsZXJ0QnV0dG9uW3Jlc107XG4gICAgY29uc3QgcmVzcHVlc3RhOiBBbGVydFJlc3VsdCA9IG5ldyBBbGVydFJlc3VsdChidXR0b24sIHRoaXMuY29uZmlnLmlucHV0LnZhbHVlKTtcblxuICAgIHRoaXMuYWN0aXZlTW9kYWwuY2xvc2UocmVzcHVlc3RhKTtcbiAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MocmVzcHVlc3RhKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRGb2N1cygpIHtcbiAgICB0aGlzLmFjdGl2ZUZvY3VzKGZhbHNlKTtcbiAgfVxuXG5cbn1cblxuXG5cbmV4cG9ydCBjbGFzcyBBbGVydFJlc3VsdCB7XG5cbiAgY29uc3RydWN0b3IocHVibGljIEJ1dHRvblJlc3BvbnNlOiBBbGVydEJ1dHRvbiwgcHVibGljIG1lc3NhZ2VJbnB1dDogc3RyaW5nKSB7XG4gIH1cbn1cblxuZXhwb3J0IGVudW0gQWxlcnRCdXR0b24ge1xuICBOb25lID0gMCxcbiAgQWNjZXB0ID0gMSA8PCAwLFxuICBDYW5jZWwgPSAxIDw8IDEsXG4gIFllcyA9IDEgPDwgMixcbiAgTm8gPSAxIDw8IDMsXG4gIFJldHJ5ID0gMSA8PCA0XG59XG4iXX0=