theme-lib
Version:
This is a simple example Angular Library published to npm.
243 lines • 19.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
/*
* @license
* Copyright Akveo. All Rights Reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*/
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostBinding, HostListener, Input, Output, } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
/*
* Chat form component.
*
* Show a message form with a send message button.
*
* ```ts
* <nb-chat-form showButton="true" buttonIcon="nb-send">
* </nb-chat-form>
* ```
*
* When `[dropFiles]="true"` handles files drag&drop with a file preview.
*
* Drag & drop available for files and images:
* @stacked-example(Drag & Drop Chat, chat/chat-drop.component)
*
* New message could be tracked outside by using `(send)` output.
*
* ```ts
* <nb-chat-form (send)="onNewMessage($event)">
* </nb-chat-form>
*
* // ...
*
* onNewMessage({ message: string, files: any[] }) {
* this.service.sendToServer(message, files);
* }
* ```
*
* @styles
*
* chat-form-bg:
* chat-form-fg:
* chat-form-border:
* chat-form-active-border:
*
*/
var NbChatFormComponent = /** @class */ (function () {
function NbChatFormComponent(cd, domSanitizer) {
this.cd = cd;
this.domSanitizer = domSanitizer;
this.droppedFiles = [];
this.imgDropTypes = ['image/png', 'image/jpeg', 'image/gif'];
/*
* Predefined message text
* @type {string}
*/
this.message = '';
/*
* Send button title
* @type {string}
*/
this.buttonTitle = '';
/*
* Send button icon, shown if `buttonTitle` is empty
* @type {string}
*/
this.buttonIcon = 'nb-paper-plane';
/*
* Show send button
* @type {boolean}
*/
this.showButton = true;
/*
* Show send button
* @type {boolean}
*/
this.dropFiles = false;
/*
*
* @type {EventEmitter<{ message: string, files: File[] }>}
*/
this.send = new EventEmitter();
this.fileOver = false;
}
/**
* @param {?} event
* @return {?}
*/
NbChatFormComponent.prototype.onDrop = /**
* @param {?} event
* @return {?}
*/
function (event) {
var _this = this;
var e_1, _a;
if (this.dropFiles) {
event.preventDefault();
event.stopPropagation();
this.fileOver = false;
if (event.dataTransfer && event.dataTransfer.files) {
var _loop_1 = function (file) {
/** @type {?} */
var res = file;
if (this_1.imgDropTypes.includes(file.type)) {
/** @type {?} */
var fr = new FileReader();
fr.onload = function (e) {
res.src = e.target.result;
res.urlStyle = _this.domSanitizer.bypassSecurityTrustStyle("url(" + res.src + ")");
_this.cd.detectChanges();
};
fr.readAsDataURL(file);
}
this_1.droppedFiles.push(res);
};
var this_1 = this;
try {
// tslint:disable-next-line
for (var _b = tslib_1.__values(event.dataTransfer.files), _c = _b.next(); !_c.done; _c = _b.next()) {
var file = _c.value;
_loop_1(file);
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
}
}
};
/**
* @param {?} file
* @return {?}
*/
NbChatFormComponent.prototype.removeFile = /**
* @param {?} file
* @return {?}
*/
function (file) {
/** @type {?} */
var index = this.droppedFiles.indexOf(file);
if (index >= 0) {
this.droppedFiles.splice(index, 1);
}
};
/**
* @return {?}
*/
NbChatFormComponent.prototype.onDragOver = /**
* @return {?}
*/
function () {
if (this.dropFiles) {
this.fileOver = true;
}
};
/**
* @return {?}
*/
NbChatFormComponent.prototype.onDragLeave = /**
* @return {?}
*/
function () {
if (this.dropFiles) {
this.fileOver = false;
}
};
/**
* @return {?}
*/
NbChatFormComponent.prototype.sendMessage = /**
* @return {?}
*/
function () {
if (this.droppedFiles.length || String(this.message).trim().length) {
this.send.emit({ message: this.message, files: this.droppedFiles });
this.message = '';
this.droppedFiles = [];
}
};
NbChatFormComponent.decorators = [
{ type: Component, args: [{
selector: 'nb-chat-form',
template: "\n <div class=\"dropped-files\" *ngIf=\"droppedFiles?.length\">\n <ng-container *ngFor=\"let file of droppedFiles\">\n <div *ngIf=\"file.urlStyle\" [style.background-image]=\"file.urlStyle\">\n <span class=\"remove\" (click)=\"removeFile(file)\">×</span>\n </div>\n <div *ngIf=\"!file.urlStyle\" class=\"nb-compose\">\n <span class=\"remove\" (click)=\"removeFile(file)\">×</span>\n </div>\n </ng-container>\n </div>\n <div class=\"message-row\">\n <input [(ngModel)]=\"message\"\n [class.with-button]=\"showButton\"\n type=\"text\"\n placeholder=\"{{ fileOver ? 'Drop file to send' : 'Type a message' }}\"\n (keyup.enter)=\"sendMessage()\">\n <button *ngIf=\"showButton\" class=\"btn\" [class.with-icon]=\"!buttonTitle\" (click)=\"sendMessage()\">\n {{ buttonTitle }}<span *ngIf=\"!buttonTitle\" [class]=\"buttonIcon\"></span>\n </button>\n </div>\n ",
changeDetection: ChangeDetectionStrategy.OnPush
}] }
];
/** @nocollapse */
NbChatFormComponent.ctorParameters = function () { return [
{ type: ChangeDetectorRef },
{ type: DomSanitizer }
]; };
NbChatFormComponent.propDecorators = {
message: [{ type: Input }],
buttonTitle: [{ type: Input }],
buttonIcon: [{ type: Input }],
showButton: [{ type: Input }],
dropFiles: [{ type: Input }],
send: [{ type: Output }],
fileOver: [{ type: HostBinding, args: ['class.file-over',] }],
onDrop: [{ type: HostListener, args: ['drop', ['$event'],] }],
onDragOver: [{ type: HostListener, args: ['dragover',] }],
onDragLeave: [{ type: HostListener, args: ['dragleave',] }]
};
return NbChatFormComponent;
}());
export { NbChatFormComponent };
if (false) {
/** @type {?} */
NbChatFormComponent.prototype.droppedFiles;
/** @type {?} */
NbChatFormComponent.prototype.imgDropTypes;
/** @type {?} */
NbChatFormComponent.prototype.message;
/** @type {?} */
NbChatFormComponent.prototype.buttonTitle;
/** @type {?} */
NbChatFormComponent.prototype.buttonIcon;
/** @type {?} */
NbChatFormComponent.prototype.showButton;
/** @type {?} */
NbChatFormComponent.prototype.dropFiles;
/** @type {?} */
NbChatFormComponent.prototype.send;
/** @type {?} */
NbChatFormComponent.prototype.fileOver;
/**
* @type {?}
* @private
*/
NbChatFormComponent.prototype.cd;
/**
* @type {?}
* @private
*/
NbChatFormComponent.prototype.domSanitizer;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3RoZW1lLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2NoYXQvY2hhdC1mb3JtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBTUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0N6RDtJQXFFRSw2QkFBb0IsRUFBcUIsRUFBVSxZQUEwQjtRQUF6RCxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBekM3RSxpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUN6QixpQkFBWSxHQUFHLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQzs7Ozs7UUFNL0MsWUFBTyxHQUFXLEVBQUUsQ0FBQzs7Ozs7UUFNckIsZ0JBQVcsR0FBVyxFQUFFLENBQUM7Ozs7O1FBTXpCLGVBQVUsR0FBVyxnQkFBZ0IsQ0FBQzs7Ozs7UUFNdEMsZUFBVSxHQUFZLElBQUksQ0FBQzs7Ozs7UUFNM0IsY0FBUyxHQUFZLEtBQUssQ0FBQzs7Ozs7UUFNMUIsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFzQyxDQUFDO1FBRXhDLGFBQVEsR0FBRyxLQUFLLENBQUM7SUFHakQsQ0FBQzs7Ozs7SUFHRCxvQ0FBTTs7OztJQUROLFVBQ08sS0FBVTtRQURqQixpQkEyQkM7O1FBekJDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFB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R1ksbUJBQW1COzs7SUFFOUIsMkNBQXlCOztJQUN6QiwyQ0FBd0Q7O0lBTXhELHNDQUE4Qjs7SUFNOUIsMENBQWtDOztJQU1sQyx5Q0FBK0M7O0lBTS9DLHlDQUFvQzs7SUFNcEMsd0NBQW9DOztJQU1wQyxtQ0FBd0U7O0lBRXhFLHVDQUFpRDs7Ozs7SUFFckMsaUNBQTZCOzs7OztJQUFFLDJDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBBa3Zlby4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgTGljZW5zZS50eHQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuICovXHJcblxyXG5pbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcblxyXG4vKlxyXG4gKiBDaGF0IGZvcm0gY29tcG9uZW50LlxyXG4gKlxyXG4gKiBTaG93IGEgbWVzc2FnZSBmb3JtIHdpdGggYSBzZW5kIG1lc3NhZ2UgYnV0dG9uLlxyXG4gKlxyXG4gKiBgYGB0c1xyXG4gKiA8bmItY2hhdC1mb3JtIHNob3dCdXR0b249XCJ0cnVlXCIgYnV0dG9uSWNvbj1cIm5iLXNlbmRcIj5cclxuICogPC9uYi1jaGF0LWZvcm0+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBXaGVuIGBbZHJvcEZpbGVzXT1cInRydWVcImAgaGFuZGxlcyBmaWxlcyBkcmFnJmRyb3Agd2l0aCBhIGZpbGUgcHJldmlldy5cclxuICpcclxuICogRHJhZyAmIGRyb3AgYXZhaWxhYmxlIGZvciBmaWxlcyBhbmQgaW1hZ2VzOlxyXG4gKiBAc3RhY2tlZC1leGFtcGxlKERyYWcgJiBEcm9wIENoYXQsIGNoYXQvY2hhdC1kcm9wLmNvbXBvbmVudClcclxuICpcclxuICogTmV3IG1lc3NhZ2UgY291bGQgYmUgdHJhY2tlZCBvdXRzaWRlIGJ5IHVzaW5nIGAoc2VuZClgIG91dHB1dC5cclxuICpcclxuICogYGBgdHNcclxuICogPG5iLWNoYXQtZm9ybSAoc2VuZCk9XCJvbk5ld01lc3NhZ2UoJGV2ZW50KVwiPlxyXG4gKiA8L25iLWNoYXQtZm9ybT5cclxuICpcclxuICogLy8gLi4uXHJcbiAqXHJcbiAqIG9uTmV3TWVzc2FnZSh7IG1lc3NhZ2U6IHN0cmluZywgZmlsZXM6IGFueVtdIH0pIHtcclxuICogICB0aGlzLnNlcnZpY2Uuc2VuZFRvU2VydmVyKG1lc3NhZ2UsIGZpbGVzKTtcclxuICogfVxyXG4gKiBgYGBcclxuICpcclxuICogQHN0eWxlc1xyXG4gKlxyXG4gKiBjaGF0LWZvcm0tYmc6XHJcbiAqIGNoYXQtZm9ybS1mZzpcclxuICogY2hhdC1mb3JtLWJvcmRlcjpcclxuICogY2hhdC1mb3JtLWFjdGl2ZS1ib3JkZXI6XHJcbiAqXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25iLWNoYXQtZm9ybScsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXYgY2xhc3M9XCJkcm9wcGVkLWZpbGVzXCIgKm5nSWY9XCJkcm9wcGVkRmlsZXM/Lmxlbmd0aFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWxlIG9mIGRyb3BwZWRGaWxlc1wiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJmaWxlLnVybFN0eWxlXCIgW3N0eWxlLmJhY2tncm91bmQtaW1hZ2VdPVwiZmlsZS51cmxTdHlsZVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZW1vdmVcIiAoY2xpY2spPVwicmVtb3ZlRmlsZShmaWxlKVwiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFmaWxlLnVybFN0eWxlXCIgY2xhc3M9XCJuYi1jb21wb3NlXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlbW92ZVwiIChjbGljayk9XCJyZW1vdmVGaWxlKGZpbGUpXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtZXNzYWdlLXJvd1wiPlxyXG4gICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJtZXNzYWdlXCJcclxuICAgICAgICAgICAgIFtjbGFzcy53aXRoLWJ1dHRvbl09XCJzaG93QnV0dG9uXCJcclxuICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgZmlsZU92ZXIgPyAnRHJvcCBmaWxlIHRvIHNlbmQnIDogJ1R5cGUgYSBtZXNzYWdlJyB9fVwiXHJcbiAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VuZE1lc3NhZ2UoKVwiPlxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd0J1dHRvblwiIGNsYXNzPVwiYnRuXCIgW2NsYXNzLndpdGgtaWNvbl09XCIhYnV0dG9uVGl0bGVcIiAoY2xpY2spPVwic2VuZE1lc3NhZ2UoKVwiPlxyXG4gICAgICAgIHt7IGJ1dHRvblRpdGxlIH19PHNwYW4gKm5nSWY9XCIhYnV0dG9uVGl0bGVcIiBbY2xhc3NdPVwiYnV0dG9uSWNvblwiPjwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICBgLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmJDaGF0Rm9ybUNvbXBvbmVudCB7XHJcblxyXG4gIGRyb3BwZWRGaWxlczogYW55W10gPSBbXTtcclxuICBpbWdEcm9wVHlwZXMgPSBbJ2ltYWdlL3BuZycsICdpbWFnZS9qcGVnJywgJ2ltYWdlL2dpZiddO1xyXG5cclxuICAvKlxyXG4gICAqIFByZWRlZmluZWQgbWVzc2FnZSB0ZXh0XHJcbiAgICogQHR5cGUge3N0cmluZ31cclxuICAgKi9cclxuICBASW5wdXQoKSBtZXNzYWdlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLypcclxuICAgKiBTZW5kIGJ1dHRvbiB0aXRsZVxyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgQElucHV0KCkgYnV0dG9uVGl0bGU6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKlxyXG4gICAqIFNlbmQgYnV0dG9uIGljb24sIHNob3duIGlmIGBidXR0b25UaXRsZWAgaXMgZW1wdHlcclxuICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGJ1dHRvbkljb246IHN0cmluZyA9ICduYi1wYXBlci1wbGFuZSc7XHJcblxyXG4gIC8qXHJcbiAgICogU2hvdyBzZW5kIGJ1dHRvblxyXG4gICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHNob3dCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKlxyXG4gICAqIFNob3cgc2VuZCBidXR0b25cclxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBASW5wdXQoKSBkcm9wRmlsZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLypcclxuICAgKlxyXG4gICAqIEB0eXBlIHtFdmVudEVtaXR0ZXI8eyBtZXNzYWdlOiBzdHJpbmcsIGZpbGVzOiBGaWxlW10gfT59XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHNlbmQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgbWVzc2FnZTogc3RyaW5nLCBmaWxlczogRmlsZVtdIH0+KCk7XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZmlsZS1vdmVyJykgZmlsZU92ZXIgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgZG9tU2FuaXRpemVyOiBEb21TYW5pdGl6ZXIpIHtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2Ryb3AnLCBbJyRldmVudCddKVxyXG4gIG9uRHJvcChldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5kcm9wRmlsZXMpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICB0aGlzLmZpbGVPdmVyID0gZmFsc2U7XHJcbiAgICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIgJiYgZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzKSB7XHJcblxyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxyXG4gICAgICAgIGZvciAobGV0IGZpbGUgb2YgZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzKSB7XHJcbiAgICAgICAgICBjb25zdCByZXMgPSBmaWxlO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmltZ0Ryb3BUeXBlcy5pbmNsdWRlcyhmaWxlLnR5cGUpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICAgICAgZnIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHJlcy5zcmMgPSBlLnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgICAgICAgICAgcmVzLnVybFN0eWxlID0gdGhpcy5kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKGB1cmwoJHtyZXMuc3JjfSlgKTtcclxuICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGZyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmRyb3BwZWRGaWxlcy5wdXNoKHJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVGaWxlKGZpbGUpIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kcm9wcGVkRmlsZXMuaW5kZXhPZihmaWxlKTtcclxuICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgIHRoaXMuZHJvcHBlZEZpbGVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkcmFnb3ZlcicpXHJcbiAgb25EcmFnT3ZlcigpIHtcclxuICAgIGlmICh0aGlzLmRyb3BGaWxlcykge1xyXG4gICAgICB0aGlzLmZpbGVPdmVyID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RyYWdsZWF2ZScpXHJcbiAgb25EcmFnTGVhdmUoKSB7XHJcbiAgICBpZiAodGhpcy5kcm9wRmlsZXMpIHtcclxuICAgICAgdGhpcy5maWxlT3ZlciA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VuZE1lc3NhZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5kcm9wcGVkRmlsZXMubGVuZ3RoIHx8IFN0cmluZyh0aGlzLm1lc3NhZ2UpLnRyaW0oKS5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zZW5kLmVtaXQoeyBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsIGZpbGVzOiB0aGlzLmRyb3BwZWRGaWxlcyB9KTtcclxuICAgICAgdGhpcy5tZXNzYWdlID0gJyc7XHJcbiAgICAgIHRoaXMuZHJvcHBlZEZpbGVzID0gW107XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==