UNPKG

theme-lib

Version:

This is a simple example Angular Library published to npm.

201 lines 17.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /* * @license * Copyright Akveo. All Rights Reserved. * Licensed under the MIT License. See License.txt in the project root for license information. */ import { ChangeDetectionStrategy, Component, HostBinding, Input } from '@angular/core'; import { convertToBoolProperty } from '../helpers'; import { DomSanitizer } from '@angular/platform-browser'; import { animate, state, style, transition, trigger } from '@angular/animations'; /* * Chat message component. * * Multiple message types are available through a `type` property, such as * - text - simple text message * - file - could be a file preview or a file icon * if multiple files are provided grouped files are shown * - quote - quotes a message with specific quote styles * - map - shows a google map picture by provided [latitude] and [longitude] properties * * @stacked-example(Available Types, chat/chat-message-types-showcase.component) * * Message with attached files: * ```html * <nb-chat-message * type="file" * [files]="[ { url: '...' } ]" * message="Hello world!"> * </nb-chat-message> * ``` * * Map message: * ```html * <nb-chat-message * type="map" * [latitude]="53.914" * [longitude]="27.59" * message="Here I am"> * </nb-chat-message> * ``` * * @styles * * chat-message-fg: * chat-message-bg: * chat-message-reply-bg: * chat-message-reply-fg: * chat-message-avatar-bg: * chat-message-sender-fg: * chat-message-quote-fg: * chat-message-quote-bg: * chat-message-file-fg: * chat-message-file-bg: */ var NbChatMessageComponent = /** @class */ (function () { function NbChatMessageComponent(domSanitizer) { this.domSanitizer = domSanitizer; this.replyValue = false; } Object.defineProperty(NbChatMessageComponent.prototype, "flyInOut", { get: /** * @return {?} */ function () { return true; }, enumerable: true, configurable: true }); Object.defineProperty(NbChatMessageComponent.prototype, "notReply", { get: /** * @return {?} */ function () { return !this.replyValue; }, enumerable: true, configurable: true }); Object.defineProperty(NbChatMessageComponent.prototype, "reply", { /* * Determines if a message is a reply */ set: /* * Determines if a message is a reply */ /** * @param {?} val * @return {?} */ function (val) { this.replyValue = convertToBoolProperty(val); }, enumerable: true, configurable: true }); Object.defineProperty(NbChatMessageComponent.prototype, "avatar", { /* * Message send avatar * @type {string} */ set: /* * Message send avatar * @type {string} */ /** * @param {?} value * @return {?} */ function (value) { this.avatarStyle = value ? this.domSanitizer.bypassSecurityTrustStyle("url(" + value + ")") : null; }, enumerable: true, configurable: true }); /** * @return {?} */ NbChatMessageComponent.prototype.getInitials = /** * @return {?} */ function () { if (this.sender) { /** @type {?} */ var names = this.sender.split(' '); return names.map(function (n) { return n.charAt(0); }).splice(0, 2).join('').toUpperCase(); } return ''; }; NbChatMessageComponent.decorators = [ { type: Component, args: [{ selector: 'nb-chat-message', template: "\n <div class=\"avatar\" [style.background-image]=\"avatarStyle\" *ngIf=\"!replyValue\">\n <ng-container *ngIf=\"!avatarStyle\">\n {{ getInitials() }}\n </ng-container>\n </div>\n <div class=\"message\">\n <ng-container [ngSwitch]=\"type\">\n\n <nb-chat-message-file *ngSwitchCase=\"'file'\"\n [sender]=\"sender\" [date]=\"date\" [message]=\"message\" [files]=\"files\">\n </nb-chat-message-file>\n\n <nb-chat-message-quote *ngSwitchCase=\"'quote'\"\n [sender]=\"sender\" [date]=\"date\" [message]=\"message\" [quote]=\"quote\">\n </nb-chat-message-quote>\n\n <nb-chat-message-map *ngSwitchCase=\"'map'\"\n [sender]=\"sender\" [date]=\"date\"\n [message]=\"message\" [latitude]=\"latitude\" [longitude]=\"longitude\">\n </nb-chat-message-map>\n\n <nb-chat-message-text *ngSwitchDefault\n [sender]=\"sender\" [date]=\"date\" [message]=\"message\">\n </nb-chat-message-text>\n </ng-container>\n </div>\n ", animations: [ trigger('flyInOut', [ state('in', style({ transform: 'translateX(0)' })), transition('void => *', [ style({ transform: 'translateX(-100%)' }), animate(80), ]), transition('* => void', [ animate(80, style({ transform: 'translateX(100%)' })), ]), ]), ], changeDetection: ChangeDetectionStrategy.OnPush }] } ]; /** @nocollapse */ NbChatMessageComponent.ctorParameters = function () { return [ { type: DomSanitizer } ]; }; NbChatMessageComponent.propDecorators = { flyInOut: [{ type: HostBinding, args: ['@flyInOut',] }], replyValue: [{ type: HostBinding, args: ['class.reply',] }], notReply: [{ type: HostBinding, args: ['class.not-reply',] }], reply: [{ type: Input }], message: [{ type: Input }], sender: [{ type: Input }], date: [{ type: Input }], files: [{ type: Input }], quote: [{ type: Input }], latitude: [{ type: Input }], longitude: [{ type: Input }], avatar: [{ type: Input }], type: [{ type: Input }] }; return NbChatMessageComponent; }()); export { NbChatMessageComponent }; if (false) { /** @type {?} */ NbChatMessageComponent.prototype.replyValue; /** @type {?} */ NbChatMessageComponent.prototype.avatarStyle; /** @type {?} */ NbChatMessageComponent.prototype.message; /** @type {?} */ NbChatMessageComponent.prototype.sender; /** @type {?} */ NbChatMessageComponent.prototype.date; /** @type {?} */ NbChatMessageComponent.prototype.files; /** @type {?} */ NbChatMessageComponent.prototype.quote; /** @type {?} */ NbChatMessageComponent.prototype.latitude; /** @type {?} */ NbChatMessageComponent.prototype.longitude; /** @type {?} */ NbChatMessageComponent.prototype.type; /** * @type {?} * @private */ NbChatMessageComponent.prototype.domSanitizer; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1tZXNzYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3RoZW1lLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2NoYXQvY2hhdC1tZXNzYWdlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFNQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQWEsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4Q2pGO0lBK0hFLGdDQUFvQixZQUEwQjtRQUExQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQTFFOUMsZUFBVSxHQUFZLEtBQUssQ0FBQztJQTBFc0IsQ0FBQztJQWhGbkQsc0JBQ0ksNENBQVE7Ozs7UUFEWjtZQUVFLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQzs7O09BQUE7SUFLRCxzQkFDSSw0Q0FBUTs7OztRQURaO1lBRUUsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDMUIsQ0FBQzs7O09BQUE7SUFPRCxzQkFDSSx5Q0FBSztRQUpUOztXQUVHOzs7Ozs7OztRQUNILFVBQ1UsR0FBWTtZQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLENBQUM7OztPQUFBO0lBZ0RELHNCQUNJLDBDQUFNO1FBTFY7OztXQUdHOzs7Ozs7Ozs7UUFDSCxVQUNXLEtBQWE7WUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsd0JBQXdCLENBQUMsU0FBTyxLQUFLLE1BQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDaEcsQ0FBQzs7O09BQUE7Ozs7SUFVRCw0Q0FBVzs7O0lBQVg7UUFDRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7O2dCQUNULEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7WUFFcEMsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBWCxDQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN4RTtRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQzs7Z0JBeklGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixRQUFRLEVBQUUseW5DQTJCVDtvQkFDRCxVQUFVLEVBQUU7d0JBQ1YsT0FBTyxDQUFDLFVBQVUsRUFBRTs0QkFDbEIsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQzs0QkFDbEQsVUFBVSxDQUFDLFdBQVcsRUFBRTtnQ0FDdEIsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLENBQUM7Z0NBQ3pDLE9BQU8sQ0FBQyxFQUFFLENBQUM7NkJBQ1osQ0FBQzs0QkFDRixVQUFVLENBQUMsV0FBVyxFQUFFO2dDQUN0QixPQUFPLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7NkJBQ3RELENBQUM7eUJBQ0gsQ0FBQztxQkFDSDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7Ozs7Z0JBMUZRLFlBQVk7OzsyQkE4RmxCLFdBQVcsU0FBQyxXQUFXOzZCQUt2QixXQUFXLFNBQUMsYUFBYTsyQkFHekIsV0FBVyxTQUFDLGlCQUFpQjt3QkFVN0IsS0FBSzswQkFTTCxLQUFLO3lCQU1MLEtBQUs7dUJBTUwsS0FBSzt3QkFNTCxLQUFLO3dCQU1MLEtBQUs7MkJBTUwsS0FBSzs0QkFNTCxLQUFLO3lCQU1MLEtBQUs7dUJBU0wsS0FBSzs7SUFhUiw2QkFBQztDQUFBLEFBMUlELElBMElDO1NBOUZZLHNCQUFzQjs7O0lBUWpDLDRDQUM0Qjs7SUFPNUIsNkNBQXVCOztJQWN2Qix5Q0FBeUI7O0lBTXpCLHdDQUF3Qjs7SUFNeEIsc0NBQW9COztJQU1wQix1Q0FBZ0Q7O0lBTWhELHVDQUF1Qjs7SUFNdkIsMENBQTBCOztJQU0xQiwyQ0FBMkI7O0lBZTNCLHNDQUFzQjs7Ozs7SUFFViw4Q0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgQWt2ZW8uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGNvbnZlcnRUb0Jvb2xQcm9wZXJ0eSB9IGZyb20gJy4uL2hlbHBlcnMnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVTdHlsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuXHJcbi8qXHJcbiAqIENoYXQgbWVzc2FnZSBjb21wb25lbnQuXHJcbiAqXHJcbiAqIE11bHRpcGxlIG1lc3NhZ2UgdHlwZXMgYXJlIGF2YWlsYWJsZSB0aHJvdWdoIGEgYHR5cGVgIHByb3BlcnR5LCBzdWNoIGFzXHJcbiAqIC0gdGV4dCAtIHNpbXBsZSB0ZXh0IG1lc3NhZ2VcclxuICogLSBmaWxlIC0gY291bGQgYmUgYSBmaWxlIHByZXZpZXcgb3IgYSBmaWxlIGljb25cclxuICogaWYgbXVsdGlwbGUgZmlsZXMgYXJlIHByb3ZpZGVkIGdyb3VwZWQgZmlsZXMgYXJlIHNob3duXHJcbiAqIC0gcXVvdGUgLSBxdW90ZXMgYSBtZXNzYWdlIHdpdGggc3BlY2lmaWMgcXVvdGUgc3R5bGVzXHJcbiAqIC0gbWFwIC0gc2hvd3MgYSBnb29nbGUgbWFwIHBpY3R1cmUgYnkgcHJvdmlkZWQgW2xhdGl0dWRlXSBhbmQgW2xvbmdpdHVkZV0gcHJvcGVydGllc1xyXG4gKlxyXG4gKiBAc3RhY2tlZC1leGFtcGxlKEF2YWlsYWJsZSBUeXBlcywgY2hhdC9jaGF0LW1lc3NhZ2UtdHlwZXMtc2hvd2Nhc2UuY29tcG9uZW50KVxyXG4gKlxyXG4gKiBNZXNzYWdlIHdpdGggYXR0YWNoZWQgZmlsZXM6XHJcbiAqIGBgYGh0bWxcclxuICogPG5iLWNoYXQtbWVzc2FnZVxyXG4gKiAgIHR5cGU9XCJmaWxlXCJcclxuICogICBbZmlsZXNdPVwiWyB7IHVybDogJy4uLicgfSBdXCJcclxuICogICBtZXNzYWdlPVwiSGVsbG8gd29ybGQhXCI+XHJcbiAqIDwvbmItY2hhdC1tZXNzYWdlPlxyXG4gKiBgYGBcclxuICpcclxuICogTWFwIG1lc3NhZ2U6XHJcbiAqIGBgYGh0bWxcclxuICogPG5iLWNoYXQtbWVzc2FnZVxyXG4gKiAgIHR5cGU9XCJtYXBcIlxyXG4gKiAgIFtsYXRpdHVkZV09XCI1My45MTRcIlxyXG4gKiAgIFtsb25naXR1ZGVdPVwiMjcuNTlcIlxyXG4gKiAgIG1lc3NhZ2U9XCJIZXJlIEkgYW1cIj5cclxuICogPC9uYi1jaGF0LW1lc3NhZ2U+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAc3R5bGVzXHJcbiAqXHJcbiAqIGNoYXQtbWVzc2FnZS1mZzpcclxuICogY2hhdC1tZXNzYWdlLWJnOlxyXG4gKiBjaGF0LW1lc3NhZ2UtcmVwbHktYmc6XHJcbiAqIGNoYXQtbWVzc2FnZS1yZXBseS1mZzpcclxuICogY2hhdC1tZXNzYWdlLWF2YXRhci1iZzpcclxuICogY2hhdC1tZXNzYWdlLXNlbmRlci1mZzpcclxuICogY2hhdC1tZXNzYWdlLXF1b3RlLWZnOlxyXG4gKiBjaGF0LW1lc3NhZ2UtcXVvdGUtYmc6XHJcbiAqIGNoYXQtbWVzc2FnZS1maWxlLWZnOlxyXG4gKiBjaGF0LW1lc3NhZ2UtZmlsZS1iZzpcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmItY2hhdC1tZXNzYWdlJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdiBjbGFzcz1cImF2YXRhclwiIFtzdHlsZS5iYWNrZ3JvdW5kLWltYWdlXT1cImF2YXRhclN0eWxlXCIgKm5nSWY9XCIhcmVwbHlWYWx1ZVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWF2YXRhclN0eWxlXCI+XHJcbiAgICAgICAge3sgZ2V0SW5pdGlhbHMoKSB9fVxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2VcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwidHlwZVwiPlxyXG5cclxuICAgICAgICA8bmItY2hhdC1tZXNzYWdlLWZpbGUgKm5nU3dpdGNoQ2FzZT1cIidmaWxlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZW5kZXJdPVwic2VuZGVyXCIgW2RhdGVdPVwiZGF0ZVwiIFttZXNzYWdlXT1cIm1lc3NhZ2VcIiBbZmlsZXNdPVwiZmlsZXNcIj5cclxuICAgICAgICA8L25iLWNoYXQtbWVzc2FnZS1maWxlPlxyXG5cclxuICAgICAgICA8bmItY2hhdC1tZXNzYWdlLXF1b3RlICpuZ1N3aXRjaENhc2U9XCIncXVvdGUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbmRlcl09XCJzZW5kZXJcIiBbZGF0ZV09XCJkYXRlXCIgW21lc3NhZ2VdPVwibWVzc2FnZVwiIFtxdW90ZV09XCJxdW90ZVwiPlxyXG4gICAgICAgIDwvbmItY2hhdC1tZXNzYWdlLXF1b3RlPlxyXG5cclxuICAgICAgICA8bmItY2hhdC1tZXNzYWdlLW1hcCAqbmdTd2l0Y2hDYXNlPVwiJ21hcCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VuZGVyXT1cInNlbmRlclwiIFtkYXRlXT1cImRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWVzc2FnZV09XCJtZXNzYWdlXCIgW2xhdGl0dWRlXT1cImxhdGl0dWRlXCIgW2xvbmdpdHVkZV09XCJsb25naXR1ZGVcIj5cclxuICAgICAgICA8L25iLWNoYXQtbWVzc2FnZS1tYXA+XHJcblxyXG4gICAgICAgIDxuYi1jaGF0LW1lc3NhZ2UtdGV4dCAqbmdTd2l0Y2hEZWZhdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZW5kZXJdPVwic2VuZGVyXCIgW2RhdGVdPVwiZGF0ZVwiIFttZXNzYWdlXT1cIm1lc3NhZ2VcIj5cclxuICAgICAgICA8L25iLWNoYXQtbWVzc2FnZS10ZXh0PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignZmx5SW5PdXQnLCBbXHJcbiAgICAgIHN0YXRlKCdpbicsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgwKScgfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKCd2b2lkID0+IConLCBbXHJcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKC0xMDAlKScgfSksXHJcbiAgICAgICAgYW5pbWF0ZSg4MCksXHJcbiAgICAgIF0pLFxyXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IHZvaWQnLCBbXHJcbiAgICAgICAgYW5pbWF0ZSg4MCwgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDEwMCUpJyB9KSksXHJcbiAgICAgIF0pLFxyXG4gICAgXSksXHJcbiAgXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5iQ2hhdE1lc3NhZ2VDb21wb25lbnQge1xyXG5cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdAZmx5SW5PdXQnKVxyXG4gIGdldCBmbHlJbk91dCgpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5yZXBseScpXHJcbiAgcmVwbHlWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm5vdC1yZXBseScpXHJcbiAgZ2V0IG5vdFJlcGx5KCkge1xyXG4gICAgcmV0dXJuICF0aGlzLnJlcGx5VmFsdWU7XHJcbiAgfVxyXG5cclxuICBhdmF0YXJTdHlsZTogU2FmZVN0eWxlO1xyXG5cclxuICAvKlxyXG4gICAqIERldGVybWluZXMgaWYgYSBtZXNzYWdlIGlzIGEgcmVwbHlcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCByZXBseSh2YWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMucmVwbHlWYWx1ZSA9IGNvbnZlcnRUb0Jvb2xQcm9wZXJ0eSh2YWwpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBNZXNzYWdlIHNlbmRlclxyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgQElucHV0KCkgbWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICAvKlxyXG4gICAqIE1lc3NhZ2Ugc2VuZGVyXHJcbiAgICogQHR5cGUge3N0cmluZ31cclxuICAgKi9cclxuICBASW5wdXQoKSBzZW5kZXI6IHN0cmluZztcclxuXHJcbiAgLypcclxuICAgKiBNZXNzYWdlIHNlbmQgZGF0ZVxyXG4gICAqIEB0eXBlIHtEYXRlfVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGRhdGU6IERhdGU7XHJcblxyXG4gIC8qXHJcbiAgICogQXJyYXkgb2YgZmlsZXMgYHsgdXJsOiAnZmlsZSB1cmwnLCBpY29uOiAnZmlsZSBpY29uIGNsYXNzJyB9YFxyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgQElucHV0KCkgZmlsZXM6IHsgdXJsOiBzdHJpbmcsIGljb246IHN0cmluZyB9W107XHJcblxyXG4gIC8qXHJcbiAgICogUXVvdGVkIG1lc3NhZ2UgdGV4dFxyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgQElucHV0KCkgcXVvdGU6IHN0cmluZztcclxuXHJcbiAgLypcclxuICAgKiBNYXAgbGF0aXR1ZGVcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGxhdGl0dWRlOiBudW1iZXI7XHJcblxyXG4gIC8qXHJcbiAgICogTWFwIGxvbmdpdHVkZVxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgQElucHV0KCkgbG9uZ2l0dWRlOiBudW1iZXI7XHJcblxyXG4gIC8qXHJcbiAgICogTWVzc2FnZSBzZW5kIGF2YXRhclxyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgYXZhdGFyKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuYXZhdGFyU3R5bGUgPSB2YWx1ZSA/IHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShgdXJsKCR7dmFsdWV9KWApIDogbnVsbDtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogTWVzc2FnZSB0eXBlLCBhdmFpbGFibGUgb3B0aW9ucyBgdGV4dHxmaWxlfG1hcHxxdW90ZWBcclxuICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHR5cGU6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkb21TYW5pdGl6ZXI6IERvbVNhbml0aXplcikgeyB9XHJcblxyXG4gIGdldEluaXRpYWxzKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5zZW5kZXIpIHtcclxuICAgICAgY29uc3QgbmFtZXMgPSB0aGlzLnNlbmRlci5zcGxpdCgnICcpO1xyXG5cclxuICAgICAgcmV0dXJuIG5hbWVzLm1hcChuID0+IG4uY2hhckF0KDApKS5zcGxpY2UoMCwgMikuam9pbignJykudG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG59XHJcbiJdfQ==