UNPKG

theme-lib

Version:

This is a simple example Angular Library published to npm.

203 lines (199 loc) 16.2 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: */ export class NbChatMessageComponent { /** * @param {?} domSanitizer */ constructor(domSanitizer) { this.domSanitizer = domSanitizer; this.replyValue = false; } /** * @return {?} */ get flyInOut() { return true; } /** * @return {?} */ get notReply() { return !this.replyValue; } /* * Determines if a message is a reply */ /** * @param {?} val * @return {?} */ set reply(val) { this.replyValue = convertToBoolProperty(val); } /* * Message send avatar * @type {string} */ /** * @param {?} value * @return {?} */ set avatar(value) { this.avatarStyle = value ? this.domSanitizer.bypassSecurityTrustStyle(`url(${value})`) : null; } /** * @return {?} */ getInitials() { if (this.sender) { /** @type {?} */ const names = this.sender.split(' '); return names.map(n => n.charAt(0)).splice(0, 2).join('').toUpperCase(); } return ''; } } NbChatMessageComponent.decorators = [ { type: Component, args: [{ selector: 'nb-chat-message', template: ` <div class="avatar" [style.background-image]="avatarStyle" *ngIf="!replyValue"> <ng-container *ngIf="!avatarStyle"> {{ getInitials() }} </ng-container> </div> <div class="message"> <ng-container [ngSwitch]="type"> <nb-chat-message-file *ngSwitchCase="'file'" [sender]="sender" [date]="date" [message]="message" [files]="files"> </nb-chat-message-file> <nb-chat-message-quote *ngSwitchCase="'quote'" [sender]="sender" [date]="date" [message]="message" [quote]="quote"> </nb-chat-message-quote> <nb-chat-message-map *ngSwitchCase="'map'" [sender]="sender" [date]="date" [message]="message" [latitude]="latitude" [longitude]="longitude"> </nb-chat-message-map> <nb-chat-message-text *ngSwitchDefault [sender]="sender" [date]="date" [message]="message"> </nb-chat-message-text> </ng-container> </div> `, 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 = () => [ { 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 }] }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1tZXNzYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3RoZW1lLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2NoYXQvY2hhdC1tZXNzYWdlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFNQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQWEsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEwRmpGLE1BQU0sT0FBTyxzQkFBc0I7Ozs7SUFtRmpDLFlBQW9CLFlBQTBCO1FBQTFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBMUU5QyxlQUFVLEdBQVksS0FBSyxDQUFDO0lBMEVzQixDQUFDOzs7O0lBaEZuRCxJQUNJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Ozs7SUFLRCxJQUNJLFFBQVE7UUFDVixPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMxQixDQUFDOzs7Ozs7OztJQU9ELElBQ0ksS0FBSyxDQUFDLEdBQVk7UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQyxDQUFDOzs7Ozs7Ozs7SUFnREQsSUFDSSxNQUFNLENBQUMsS0FBYTtRQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNoRyxDQUFDOzs7O0lBVUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTs7a0JBQ1QsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUVwQyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDeEU7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7OztZQXpJRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtnQkFDM0IsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQlQ7Z0JBQ0QsVUFBVSxFQUFFO29CQUNWLE9BQU8sQ0FBQyxVQUFVLEVBQUU7d0JBQ2xCLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7d0JBQ2xELFVBQVUsQ0FBQyxXQUFXLEVBQUU7NEJBQ3RCLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxDQUFDOzRCQUN6QyxPQUFPLENBQUMsRUFBRSxDQUFDO3lCQUNaLENBQUM7d0JBQ0YsVUFBVSxDQUFDLFdBQVcsRUFBRTs0QkFDdEIsT0FBTyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO3lCQUN0RCxDQUFDO3FCQUNILENBQUM7aUJBQ0g7Z0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07YUFDaEQ7Ozs7WUExRlEsWUFBWTs7O3VCQThGbEIsV0FBVyxTQUFDLFdBQVc7eUJBS3ZCLFdBQVcsU0FBQyxhQUFhO3VCQUd6QixXQUFXLFNBQUMsaUJBQWlCO29CQVU3QixLQUFLO3NCQVNMLEtBQUs7cUJBTUwsS0FBSzttQkFNTCxLQUFLO29CQU1MLEtBQUs7b0JBTUwsS0FBSzt1QkFNTCxLQUFLO3dCQU1MLEtBQUs7cUJBTUwsS0FBSzttQkFTTCxLQUFLOzs7O0lBekVOLDRDQUM0Qjs7SUFPNUIsNkNBQXVCOztJQWN2Qix5Q0FBeUI7O0lBTXpCLHdDQUF3Qjs7SUFNeEIsc0NBQW9COztJQU1wQix1Q0FBZ0Q7O0lBTWhELHVDQUF1Qjs7SUFNdkIsMENBQTBCOztJQU0xQiwyQ0FBMkI7O0lBZTNCLHNDQUFzQjs7Ozs7SUFFViw4Q0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgQWt2ZW8uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGNvbnZlcnRUb0Jvb2xQcm9wZXJ0eSB9IGZyb20gJy4uL2hlbHBlcnMnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVTdHlsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuXHJcbi8qXHJcbiAqIENoYXQgbWVzc2FnZSBjb21wb25lbnQuXHJcbiAqXHJcbiAqIE11bHRpcGxlIG1lc3NhZ2UgdHlwZXMgYXJlIGF2YWlsYWJsZSB0aHJvdWdoIGEgYHR5cGVgIHByb3BlcnR5LCBzdWNoIGFzXHJcbiAqIC0gdGV4dCAtIHNpbXBsZSB0ZXh0IG1lc3NhZ2VcclxuICogLSBmaWxlIC0gY291bGQgYmUgYSBmaWxlIHByZXZpZXcgb3IgYSBmaWxlIGljb25cclxuICogaWYgbXVsdGlwbGUgZmlsZXMgYXJlIHByb3ZpZGVkIGdyb3VwZWQgZmlsZXMgYXJlIHNob3duXHJcbiAqIC0gcXVvdGUgLSBxdW90ZXMgYSBtZXNzYWdlIHdpdGggc3BlY2lmaWMgcXVvdGUgc3R5bGVzXHJcbiAqIC0gbWFwIC0gc2hvd3MgYSBnb29nbGUgbWFwIHBpY3R1cmUgYnkgcHJvdmlkZWQgW2xhdGl0dWRlXSBhbmQgW2xvbmdpdHVkZV0gcHJvcGVydGllc1xyXG4gKlxyXG4gKiBAc3RhY2tlZC1leGFtcGxlKEF2YWlsYWJsZSBUeXBlcywgY2hhdC9jaGF0LW1lc3NhZ2UtdHlwZXMtc2hvd2Nhc2UuY29tcG9uZW50KVxyXG4gKlxyXG4gKiBNZXNzYWdlIHdpdGggYXR0YWNoZWQgZmlsZXM6XHJcbiAqIGBgYGh0bWxcclxuICogPG5iLWNoYXQtbWVzc2FnZVxyXG4gKiAgIHR5cGU9XCJmaWxlXCJcclxuICogICBbZmlsZXNdPVwiWyB7IHVybDogJy4uLicgfSBdXCJcclxuICogICBtZXNzYWdlPVwiSGVsbG8gd29ybGQhXCI+XHJcbiAqIDwvbmItY2hhdC1tZXNzYWdlPlxyXG4gKiBgYGBcclxuICpcclxuICogTWFwIG1lc3NhZ2U6XHJcbiAqIGBgYGh0bWxcclxuICogPG5iLWNoYXQtbWVzc2FnZVxyXG4gKiAgIHR5cGU9XCJtYXBcIlxyXG4gKiAgIFtsYXRpdHVkZV09XCI1My45MTRcIlxyXG4gKiAgIFtsb25naXR1ZGVdPVwiMjcuNTlcIlxyXG4gKiAgIG1lc3NhZ2U9XCJIZXJlIEkgYW1cIj5cclxuICogPC9uYi1jaGF0LW1lc3NhZ2U+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAc3R5bGVzXHJcbiAqXHJcbiAqIGNoYXQtbWVzc2FnZS1mZzpcclxuICogY2hhdC1tZXNzYWdlLWJnOlxyXG4gKiBjaGF0LW1lc3NhZ2UtcmVwbHktYmc6XHJcbiAqIGNoYXQtbWVzc2FnZS1yZXBseS1mZzpcclxuICogY2hhdC1tZXNzYWdlLWF2YXRhci1iZzpcclxuICogY2hhdC1tZXNzYWdlLXNlbmRlci1mZzpcclxuICogY2hhdC1tZXNzYWdlLXF1b3RlLWZnOlxyXG4gKiBjaGF0LW1lc3NhZ2UtcXVvdGUtYmc6XHJcbiAqIGNoYXQtbWVzc2FnZS1maWxlLWZnOlxyXG4gKiBjaGF0LW1lc3NhZ2UtZmlsZS1iZzpcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmItY2hhdC1tZXNzYWdlJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdiBjbGFzcz1cImF2YXRhclwiIFtzdHlsZS5iYWNrZ3JvdW5kLWltYWdlXT1cImF2YXRhclN0eWxlXCIgKm5nSWY9XCIhcmVwbHlWYWx1ZVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWF2YXRhclN0eWxlXCI+XHJcbiAgICAgICAge3sgZ2V0SW5pdGlhbHMoKSB9fVxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2VcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwidHlwZVwiPlxyXG5cclxuICAgICAgICA8bmItY2hhdC1tZXNzYWdlLWZpbGUgKm5nU3dpdGNoQ2FzZT1cIidmaWxlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZW5kZXJdPVwic2VuZGVyXCIgW2RhdGVdPVwiZGF0ZVwiIFttZXNzYWdlXT1cIm1lc3NhZ2VcIiBbZmlsZXNdPVwiZmlsZXNcIj5cclxuICAgICAgICA8L25iLWNoYXQtbWVzc2FnZS1maWxlPlxyXG5cclxuICAgICAgICA8bmItY2hhdC1tZXNzYWdlLXF1b3RlICpuZ1N3aXRjaENhc2U9XCIncXVvdGUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbmRlcl09XCJzZW5kZXJcIiBbZGF0ZV09XCJkYXRlXCIgW21lc3NhZ2VdPVwibWVzc2FnZVwiIFtxdW90ZV09XCJxdW90ZVwiPlxyXG4gICAgICAgIDwvbmItY2hhdC1tZXNzYWdlLXF1b3RlPlxyXG5cclxuICAgICAgICA8bmItY2hhdC1tZXNzYWdlLW1hcCAqbmdTd2l0Y2hDYXNlPVwiJ21hcCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VuZGVyXT1cInNlbmRlclwiIFtkYXRlXT1cImRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWVzc2FnZV09XCJtZXNzYWdlXCIgW2xhdGl0dWRlXT1cImxhdGl0dWRlXCIgW2xvbmdpdHVkZV09XCJsb25naXR1ZGVcIj5cclxuICAgICAgICA8L25iLWNoYXQtbWVzc2FnZS1tYXA+XHJcblxyXG4gICAgICAgIDxuYi1jaGF0LW1lc3NhZ2UtdGV4dCAqbmdTd2l0Y2hEZWZhdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZW5kZXJdPVwic2VuZGVyXCIgW2RhdGVdPVwiZGF0ZVwiIFttZXNzYWdlXT1cIm1lc3NhZ2VcIj5cclxuICAgICAgICA8L25iLWNoYXQtbWVzc2FnZS10ZXh0PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignZmx5SW5PdXQnLCBbXHJcbiAgICAgIHN0YXRlKCdpbicsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgwKScgfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKCd2b2lkID0+IConLCBbXHJcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKC0xMDAlKScgfSksXHJcbiAgICAgICAgYW5pbWF0ZSg4MCksXHJcbiAgICAgIF0pLFxyXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IHZvaWQnLCBbXHJcbiAgICAgICAgYW5pbWF0ZSg4MCwgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDEwMCUpJyB9KSksXHJcbiAgICAgIF0pLFxyXG4gICAgXSksXHJcbiAgXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5iQ2hhdE1lc3NhZ2VDb21wb25lbnQge1xyXG5cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdAZmx5SW5PdXQnKVxyXG4gIGdldCBmbHlJbk91dCgpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5yZXBseScpXHJcbiAgcmVwbHlWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm5vdC1yZXBseScpXHJcbiAgZ2V0IG5vdFJlcGx5KCkge1xyXG4gICAgcmV0dXJuICF0aGlzLnJlcGx5VmFsdWU7XHJcbiAgfVxyXG5cclxuICBhdmF0YXJTdHlsZTogU2FmZVN0eWxlO1xyXG5cclxuICAvKlxyXG4gICAqIERldGVybWluZXMgaWYgYSBtZXNzYWdlIGlzIGEgcmVwbHlcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCByZXBseSh2YWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMucmVwbHlWYWx1ZSA9IGNvbnZlcnRUb0Jvb2xQcm9wZXJ0eSh2YWwpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBNZXNzYWdlIHNlbmRlclxyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgQElucHV0KCkgbWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICAvKlxyXG4gICAqIE1lc3NhZ2Ugc2VuZGVyXHJcbiAgICogQHR5cGUge3N0cmluZ31cclxuICAgKi9cclxuICBASW5wdXQoKSBzZW5kZXI6IHN0cmluZztcclxuXHJcbiAgLypcclxuICAgKiBNZXNzYWdlIHNlbmQgZGF0ZVxyXG4gICAqIEB0eXBlIHtEYXRlfVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGRhdGU6IERhdGU7XHJcblxyXG4gIC8qXHJcbiAgICogQXJyYXkgb2YgZmlsZXMgYHsgdXJsOiAnZmlsZSB1cmwnLCBpY29uOiAnZmlsZSBpY29uIGNsYXNzJyB9YFxyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgQElucHV0KCkgZmlsZXM6IHsgdXJsOiBzdHJpbmcsIGljb246IHN0cmluZyB9W107XHJcblxyXG4gIC8qXHJcbiAgICogUXVvdGVkIG1lc3NhZ2UgdGV4dFxyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgQElucHV0KCkgcXVvdGU6IHN0cmluZztcclxuXHJcbiAgLypcclxuICAgKiBNYXAgbGF0aXR1ZGVcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGxhdGl0dWRlOiBudW1iZXI7XHJcblxyXG4gIC8qXHJcbiAgICogTWFwIGxvbmdpdHVkZVxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgQElucHV0KCkgbG9uZ2l0dWRlOiBudW1iZXI7XHJcblxyXG4gIC8qXHJcbiAgICogTWVzc2FnZSBzZW5kIGF2YXRhclxyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgYXZhdGFyKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuYXZhdGFyU3R5bGUgPSB2YWx1ZSA/IHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShgdXJsKCR7dmFsdWV9KWApIDogbnVsbDtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogTWVzc2FnZSB0eXBlLCBhdmFpbGFibGUgb3B0aW9ucyBgdGV4dHxmaWxlfG1hcHxxdW90ZWBcclxuICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHR5cGU6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkb21TYW5pdGl6ZXI6IERvbVNhbml0aXplcikgeyB9XHJcblxyXG4gIGdldEluaXRpYWxzKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5zZW5kZXIpIHtcclxuICAgICAgY29uc3QgbmFtZXMgPSB0aGlzLnNlbmRlci5zcGxpdCgnICcpO1xyXG5cclxuICAgICAgcmV0dXJuIG5hbWVzLm1hcChuID0+IG4uY2hhckF0KDApKS5zcGxpY2UoMCwgMikuam9pbignJykudG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG59XHJcbiJdfQ==