UNPKG

theme-lib

Version:

This is a simple example Angular Library published to npm.

243 lines 19.1 kB
/** * @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)\">&times;</span>\n </div>\n <div *ngIf=\"!file.urlStyle\" class=\"nb-compose\">\n <span class=\"remove\" (click)=\"removeFile(file)\">&times;</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==