@uex/web-extensions
Version:
Uex extensions for Angular 6+ web projects
211 lines • 17.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/modules/dialog/dialog.service.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Injectable } from "@angular/core";
import * as _ from "lodash";
import { DialogBaseService } from "./dialog.base.service";
import { DialogLoadingComponent } from "./components/loading/loading.component";
import { DialogAlertComponent } from "./components/alert/alert.component";
import { DialogConfirmComponent } from "./components/confirm/confirm.component";
import { DialogPromptComponent } from "./components/prompt/prompt.component";
import { DialogViewerComponent } from "./components/viewer/viewer.component";
/**
* Serviço que inicializa e exibe um modal a partir de um componente
*
* Example
* ```ts
* private dialog: Dialog;
* private openModal() {
* if(!this.dialog) {
* this.dialog = this.dialogService.create(TesteModal, {
* // Dialog params (Opcional)
* teste: {
* 'its work?': true
* }
* }, {
* // Dialog settings (Opcional)
* backdrop: { // Backdrop settings (Opcional)
* onClick: 'close' // Opcional: 'close', 'dismiss', 'none' (default: close)
* },
* header: { // Header settings (Opcional)
* title: 'Teste modal', // Obrigatório
* subtitle: 'Isso é apenas um teste', // Opcional
* closable: true, // Opcional (default: true)
* closeClick: 'close' // Opcional: 'close', 'dismiss' (default: close)
* }
* });
* // Quando o modal é aberto
* this.dialog.onOpen.subscribe(() => console.log("Modal opened"));
* // Quando o dialog é ocultado
* this.dialog.onDismiss.subscribe(() => console.log("Modal dismissed"));
* // Quando o dialog é destruido
* this.dialog.onClose.subscribe(() => console.log("Modal closed"));
* // Quando o dialog retorna um valor
* this.dialog.onReturnValue.subscribe((response) => console.log("Modal response:", response));
* }
* this.dialog.open();
* }
* ```
*
*/
export class DialogService {
/**
* @param {?} _baseService
*/
constructor(_baseService) {
this._baseService = _baseService;
}
/**
* @return {?}
*/
get onShow() {
return this._baseService.onShow;
}
/**
* @return {?}
*/
get onHide() {
return this._baseService.onHide;
}
/**
* @return {?}
*/
get visibleDialogs() {
return this._baseService.visibleDialogs;
}
/**
* @return {?}
*/
get dialogs() {
return this._baseService.dialogs;
}
/**
* @param {?} component
* @param {?=} params
* @param {?=} settings
* @return {?}
*/
create(component, params, settings) {
return this._baseService.create(component, params, settings);
}
/**
* @param {?} component
* @param {?=} params
* @param {?=} settings
* @return {?}
*/
open(component, params, settings) {
return this._baseService.open(component, params, settings);
}
/**
* @param {?} message
* @return {?}
*/
loading(message) {
return this.open(DialogLoadingComponent, {
message
}, {
size: "xs",
backdrop: { onClick: "none" }
});
}
/**
* @param {?} params
* @return {?}
*/
alert(params) {
/** @type {?} */
let size = params.size ? params.size : "xs";
delete params.size;
return this.open(DialogAlertComponent, params, { size });
}
/**
* @param {?} params
* @param {?} callback
* @return {?}
*/
confirm(params, callback) {
/** @type {?} */
let size = params.size ? params.size : "xs";
delete params.size;
/** @type {?} */
let dialog = this.open(DialogConfirmComponent, params, {
size,
backdrop: { onClick: "none" }
});
/** @type {?} */
const subscription = dialog.onReturnValue.subscribe((/**
* @param {?} response
* @return {?}
*/
(response) => {
subscription.unsubscribe();
callback(response);
dialog.close();
}));
return dialog;
}
/**
* @param {?} params
* @param {?} callback
* @return {?}
*/
prompt(params, callback) {
/** @type {?} */
let size = params.size ? params.size : "xs";
delete params.size;
if (!_.isArray(params.schema))
params.schema = [(/** @type {?} */ (params.schema))];
/** @type {?} */
let dialog = this.open(DialogPromptComponent, params, {
size,
backdrop: { onClick: "none" }
});
/** @type {?} */
const subscription = dialog.onReturnValue.subscribe((/**
* @param {?} response
* @return {?}
*/
(response) => {
subscription.unsubscribe();
callback(response);
dialog.close();
}));
return dialog;
}
/**
* @param {?} src
* @param {?=} type
* @return {?}
*/
openViewer(src, type = "image") {
return this.open(DialogViewerComponent, { src, type }, {
size: "responsive",
keyboard: {
onEscape: "close"
},
fit_to_screen: false,
wrapper_class: "uex-dialog-viewer-wrapper",
dialog_class: "uex-dialog-viewer-dialog",
content_class: "uex-dialog-viewer-content",
backdrop_class: "uex-dialog-viewer-backdrop"
});
}
}
DialogService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
DialogService.ctorParameters = () => [
{ type: DialogBaseService }
];
if (false) {
/**
* @type {?}
* @private
*/
DialogService.prototype._baseService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWV4L3dlYi1leHRlbnNpb25zLyIsInNvdXJjZXMiOlsibGliL21vZHVsZXMvZGlhbG9nL2RpYWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFhNUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHMUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDaEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0QzdFLE1BQU0sT0FBTyxhQUFhOzs7O0lBQ3hCLFlBQW9CLFlBQStCO1FBQS9CLGlCQUFZLEdBQVosWUFBWSxDQUFtQjtJQUFHLENBQUM7Ozs7SUFFdkQsSUFBVyxNQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztJQUNsQyxDQUFDOzs7O0lBQ0QsSUFBVyxNQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztJQUNsQyxDQUFDOzs7O0lBRUQsSUFBVyxjQUFjO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUM7SUFDMUMsQ0FBQzs7OztJQUVELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO0lBQ25D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MEIsT0FBTztRQUM5RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQ2QscUJBQXFCLEVBQ3JCLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUNiO1lBQ0UsSUFBSSxFQUFFLFlBQVk7WUFDbEIsUUFBUSxFQUFFO2dCQUNSLFFBQVEsRUFBRSxPQUFPO2FBQ2xCO1lBQ0QsYUFBYSxFQUFFLEtBQUs7WUFDcEIsYUFBYSxFQUFFLDJCQUEyQjtZQUMxQyxZQUFZLEVBQUUsMEJBQTBCO1lBQ3hDLGFBQWEsRUFBRSwyQkFBMkI7WUFDMUMsY0FBYyxFQUFFLDRCQUE0QjtTQUM3QyxDQUNGLENBQUM7SUFDSixDQUFDOzs7WUE1R0YsVUFBVTs7OztZQWxERixpQkFBaUI7Ozs7Ozs7SUFvRFoscUNBQXVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgRXZlbnRFbWl0dGVyIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbmltcG9ydCAqIGFzIF8gZnJvbSBcImxvZGFzaFwiO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuaW1wb3J0IHtcclxuICBEaWFsb2csXHJcbiAgRGlhbG9nU2V0dGluZ3MsXHJcbiAgRGlhbG9nQWxlcnRQYXJhbXMsXHJcbiAgRGlhbG9nQ29uZmlybVBhcmFtcyxcclxuICBEaWFsb2dDb25maXJtQ2FsbGJhY2ssXHJcbiAgRGlhbG9nUHJvbXB0UGFyYW1zLFxyXG4gIERpYWxvZ1Byb21wdENhbGxiYWNrLFxyXG4gIERpYWxvZ1N0cmluZ0Z1bmN0aW9uXHJcbn0gZnJvbSBcIi4vZGlhbG9nLmJhc2VcIjtcclxuaW1wb3J0IHsgRGlhbG9nQmFzZVNlcnZpY2UgfSBmcm9tIFwiLi9kaWFsb2cuYmFzZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEZvcm1WYWx1ZXMsIEZvcm1TY2hlbWFEYXRhIH0gZnJvbSBcIi4uL2Zvcm0vZm9ybS5pbnRlcmZhY2VcIjtcclxuXHJcbmltcG9ydCB7IERpYWxvZ0xvYWRpbmdDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL2xvYWRpbmcvbG9hZGluZy5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRGlhbG9nQWxlcnRDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FsZXJ0L2FsZXJ0LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBEaWFsb2dDb25maXJtQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9jb25maXJtL2NvbmZpcm0uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IERpYWxvZ1Byb21wdENvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvcHJvbXB0L3Byb21wdC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRGlhbG9nVmlld2VyQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy92aWV3ZXIvdmlld2VyLmNvbXBvbmVudFwiO1xyXG5cclxuLyoqXHJcbiAqIFNlcnZpw6dvIHF1ZSBpbmljaWFsaXphIGUgZXhpYmUgdW0gbW9kYWwgYSBwYXJ0aXIgZGUgdW0gY29tcG9uZW50ZVxyXG4gKlxyXG4gKiBFeGFtcGxlXHJcblxyXG5gYGB0c1xyXG5wcml2YXRlIGRpYWxvZzogRGlhbG9nO1xyXG5wcml2YXRlIG9wZW5Nb2RhbCgpIHtcclxuICBpZighdGhpcy5kaWFsb2cpIHtcclxuICAgIHRoaXMuZGlhbG9nID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmNyZWF0ZShUZXN0ZU1vZGFsLCB7XHJcbiAgICAgIC8vIERpYWxvZyBwYXJhbXMgKE9wY2lvbmFsKVxyXG4gICAgICB0ZXN0ZToge1xyXG4gICAgICAgICdpdHMgd29yaz8nOiB0cnVlXHJcbiAgICAgIH1cclxuICAgIH0sIHtcclxuICAgICAgLy8gRGlhbG9nIHNldHRpbmdzIChPcGNpb25hbClcclxuICAgICAgYmFja2Ryb3A6IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJhY2tkcm9wIHNldHRpbmdzIChPcGNpb25hbClcclxuICAgICAgICBvbkNsaWNrOiAnY2xvc2UnICAgICAgICAgICAgICAgICAgICAgIC8vIE9wY2lvbmFsOiAnY2xvc2UnLCAnZGlzbWlzcycsICdub25lJyAoZGVmYXVsdDogY2xvc2UpXHJcbiAgICAgIH0sXHJcbiAgICAgIGhlYWRlcjogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIZWFkZXIgc2V0dGluZ3MgKE9wY2lvbmFsKVxyXG4gICAgICAgIHRpdGxlOiAnVGVzdGUgbW9kYWwnLCAgICAgICAgICAgICAgICAgLy8gT2JyaWdhdMOzcmlvXHJcbiAgICAgICAgc3VidGl0bGU6ICdJc3NvIMOpIGFwZW5hcyB1bSB0ZXN0ZScsICAgLy8gT3BjaW9uYWxcclxuICAgICAgICBjbG9zYWJsZTogdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wY2lvbmFsIChkZWZhdWx0OiB0cnVlKVxyXG4gICAgICAgIGNsb3NlQ2xpY2s6ICdjbG9zZScgICAgICAgICAgICAgICAgICAgLy8gT3BjaW9uYWw6ICdjbG9zZScsICdkaXNtaXNzJyAoZGVmYXVsdDogY2xvc2UpXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLy8gUXVhbmRvIG8gbW9kYWwgw6kgYWJlcnRvXHJcbiAgICB0aGlzLmRpYWxvZy5vbk9wZW4uc3Vic2NyaWJlKCgpID0+IGNvbnNvbGUubG9nKFwiTW9kYWwgb3BlbmVkXCIpKTtcclxuICAgIC8vIFF1YW5kbyBvIGRpYWxvZyDDqSBvY3VsdGFkb1xyXG4gICAgdGhpcy5kaWFsb2cub25EaXNtaXNzLnN1YnNjcmliZSgoKSA9PiBjb25zb2xlLmxvZyhcIk1vZGFsIGRpc21pc3NlZFwiKSk7XHJcbiAgICAvLyBRdWFuZG8gbyBkaWFsb2cgw6kgZGVzdHJ1aWRvXHJcbiAgICB0aGlzLmRpYWxvZy5vbkNsb3NlLnN1YnNjcmliZSgoKSA9PiBjb25zb2xlLmxvZyhcIk1vZGFsIGNsb3NlZFwiKSk7XHJcbiAgICAvLyBRdWFuZG8gbyBkaWFsb2cgcmV0b3JuYSB1bSB2YWxvclxyXG4gICAgdGhpcy5kaWFsb2cub25SZXR1cm5WYWx1ZS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiBjb25zb2xlLmxvZyhcIk1vZGFsIHJlc3BvbnNlOlwiLCByZXNwb25zZSkpO1xyXG4gIH1cclxuICB0aGlzLmRpYWxvZy5vcGVuKCk7XHJcbn1cclxuYGBgXHJcblxyXG4gKlxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgRGlhbG9nU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfYmFzZVNlcnZpY2U6IERpYWxvZ0Jhc2VTZXJ2aWNlKSB7fVxyXG5cclxuICBwdWJsaWMgZ2V0IG9uU2hvdygpOiBFdmVudEVtaXR0ZXI8RGlhbG9nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmFzZVNlcnZpY2Uub25TaG93O1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IG9uSGlkZSgpOiBFdmVudEVtaXR0ZXI8RGlhbG9nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmFzZVNlcnZpY2Uub25IaWRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB2aXNpYmxlRGlhbG9ncygpOiBBcnJheTxEaWFsb2c+IHtcclxuICAgIHJldHVybiB0aGlzLl9iYXNlU2VydmljZS52aXNpYmxlRGlhbG9ncztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZGlhbG9ncygpOiBBcnJheTxEaWFsb2c+IHtcclxuICAgIHJldHVybiB0aGlzLl9iYXNlU2VydmljZS5kaWFsb2dzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZShcclxuICAgIGNvbXBvbmVudDogYW55LFxyXG4gICAgcGFyYW1zPzogYW55LFxyXG4gICAgc2V0dGluZ3M/OiBEaWFsb2dTZXR0aW5nc1xyXG4gICk6IERpYWxvZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmFzZVNlcnZpY2UuY3JlYXRlKGNvbXBvbmVudCwgcGFyYW1zLCBzZXR0aW5ncyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3Blbihjb21wb25lbnQ6IGFueSwgcGFyYW1zPzogYW55LCBzZXR0aW5ncz86IERpYWxvZ1NldHRpbmdzKTogRGlhbG9nIHtcclxuICAgIHJldHVybiB0aGlzLl9iYXNlU2VydmljZS5vcGVuKGNvbXBvbmVudCwgcGFyYW1zLCBzZXR0aW5ncyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9hZGluZyhtZXNzYWdlOiBEaWFsb2dTdHJpbmdGdW5jdGlvbiB8IHN0cmluZyk6IERpYWxvZyB7XHJcbiAgICByZXR1cm4gdGhpcy5vcGVuKFxyXG4gICAgICBEaWFsb2dMb2FkaW5nQ29tcG9uZW50LFxyXG4gICAgICB7XHJcbiAgICAgICAgbWVzc2FnZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgc2l6ZTogXCJ4c1wiLFxyXG4gICAgICAgIGJhY2tkcm9wOiB7IG9uQ2xpY2s6IFwibm9uZVwiIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhbGVydChwYXJhbXM6IERpYWxvZ0FsZXJ0UGFyYW1zKTogRGlhbG9nIHtcclxuICAgIGxldCBzaXplID0gcGFyYW1zLnNpemUgPyBwYXJhbXMuc2l6ZSA6IFwieHNcIjtcclxuICAgIGRlbGV0ZSBwYXJhbXMuc2l6ZTtcclxuICAgIHJldHVybiB0aGlzLm9wZW4oRGlhbG9nQWxlcnRDb21wb25lbnQsIHBhcmFtcywgeyBzaXplIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbmZpcm0oXHJcbiAgICBwYXJhbXM6IERpYWxvZ0NvbmZpcm1QYXJhbXMsXHJcbiAgICBjYWxsYmFjazogRGlhbG9nQ29uZmlybUNhbGxiYWNrXHJcbiAgKTogRGlhbG9nIHtcclxuICAgIGxldCBzaXplID0gcGFyYW1zLnNpemUgPyBwYXJhbXMuc2l6ZSA6IFwieHNcIjtcclxuICAgIGRlbGV0ZSBwYXJhbXMuc2l6ZTtcclxuICAgIGxldCBkaWFsb2cgPSB0aGlzLm9wZW4oRGlhbG9nQ29uZmlybUNvbXBvbmVudCwgcGFyYW1zLCB7XHJcbiAgICAgIHNpemUsXHJcbiAgICAgIGJhY2tkcm9wOiB7IG9uQ2xpY2s6IFwibm9uZVwiIH1cclxuICAgIH0pO1xyXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBkaWFsb2cub25SZXR1cm5WYWx1ZS5zdWJzY3JpYmUoXHJcbiAgICAgIChyZXNwb25zZTogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIGNhbGxiYWNrKHJlc3BvbnNlKTtcclxuICAgICAgICBkaWFsb2cuY2xvc2UoKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHJldHVybiBkaWFsb2c7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcHJvbXB0KFxyXG4gICAgcGFyYW1zOiBEaWFsb2dQcm9tcHRQYXJhbXMsXHJcbiAgICBjYWxsYmFjazogRGlhbG9nUHJvbXB0Q2FsbGJhY2tcclxuICApOiBEaWFsb2cge1xyXG4gICAgbGV0IHNpemUgPSBwYXJhbXMuc2l6ZSA/IHBhcmFtcy5zaXplIDogXCJ4c1wiO1xyXG4gICAgZGVsZXRlIHBhcmFtcy5zaXplO1xyXG4gICAgaWYgKCFfLmlzQXJyYXkocGFyYW1zLnNjaGVtYSkpXHJcbiAgICAgIHBhcmFtcy5zY2hlbWEgPSBbPEZvcm1TY2hlbWFEYXRhPnBhcmFtcy5zY2hlbWFdO1xyXG4gICAgbGV0IGRpYWxvZyA9IHRoaXMub3BlbihEaWFsb2dQcm9tcHRDb21wb25lbnQsIHBhcmFtcywge1xyXG4gICAgICBzaXplLFxyXG4gICAgICBiYWNrZHJvcDogeyBvbkNsaWNrOiBcIm5vbmVcIiB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gZGlhbG9nLm9uUmV0dXJuVmFsdWUuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzcG9uc2U6IEZvcm1WYWx1ZXMpID0+IHtcclxuICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICBjYWxsYmFjayhyZXNwb25zZSk7XHJcbiAgICAgICAgZGlhbG9nLmNsb3NlKCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICByZXR1cm4gZGlhbG9nO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9wZW5WaWV3ZXIoc3JjOiBzdHJpbmcsIHR5cGU6IFwiaW1hZ2VcIiB8IFwidmlkZW9cIiA9IFwiaW1hZ2VcIik6IERpYWxvZyB7XHJcbiAgICByZXR1cm4gdGhpcy5vcGVuKFxyXG4gICAgICBEaWFsb2dWaWV3ZXJDb21wb25lbnQsXHJcbiAgICAgIHsgc3JjLCB0eXBlIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBzaXplOiBcInJlc3BvbnNpdmVcIixcclxuICAgICAgICBrZXlib2FyZDoge1xyXG4gICAgICAgICAgb25Fc2NhcGU6IFwiY2xvc2VcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZml0X3RvX3NjcmVlbjogZmFsc2UsXHJcbiAgICAgICAgd3JhcHBlcl9jbGFzczogXCJ1ZXgtZGlhbG9nLXZpZXdlci13cmFwcGVyXCIsXHJcbiAgICAgICAgZGlhbG9nX2NsYXNzOiBcInVleC1kaWFsb2ctdmlld2VyLWRpYWxvZ1wiLFxyXG4gICAgICAgIGNvbnRlbnRfY2xhc3M6IFwidWV4LWRpYWxvZy12aWV3ZXItY29udGVudFwiLFxyXG4gICAgICAgIGJhY2tkcm9wX2NsYXNzOiBcInVleC1kaWFsb2ctdmlld2VyLWJhY2tkcm9wXCJcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19