UNPKG

theme-lib

Version:

This is a simple example Angular Library published to npm.

268 lines 19.5 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 { Component, Input, HostBinding } from '@angular/core'; import { DomSanitizer } from '@angular/platform-browser'; import { convertToBoolProperty } from '../helpers'; /* * Represents a component showing a user avatar (picture) with a user name on the right. * @stacked-example(Showcase, user/user-showcase.component) * * ```ts * <nb-user name="Jonh Doe" title="Engineer"></nb-user> * ``` * * ### Installation * * Import `NbUserModule` to your feature module. * ```ts * @NgModule({ * imports: [ * // ... * NbUserModule, * ], * }) * export class PageModule { } * ``` * ### Usage * * Available in multiple sizes: * @stacked-example(Multiple Sizes, user/user-sizes.component) * * @styles * * user-font-size: * user-line-height: * user-bg: * user-fg: * user-fg-highlight: * user-font-family-secondary: * user-size-small: * user-size-medium: * user-size-large: * user-size-xlarge: */ export class NbUserComponent { /** * @param {?} domSanitizer */ constructor(domSanitizer) { this.domSanitizer = domSanitizer; /* * Specifies a name to be shown on the right of a user picture * @type string */ this.name = 'Anonymous'; this.showNameValue = true; this.showTitleValue = true; this.showInitialsValue = true; this.isMenuShown = false; } /** * @return {?} */ get small() { return this.sizeValue === NbUserComponent.SIZE_SMALL; } /** * @return {?} */ get medium() { return this.sizeValue === NbUserComponent.SIZE_MEDIUM; } /** * @return {?} */ get large() { return this.sizeValue === NbUserComponent.SIZE_LARGE; } /** * @return {?} */ get xlarge() { return this.sizeValue === NbUserComponent.SIZE_XLARGE; } /* * Absolute path to a user picture. Or base64 image * User name initials (JD for John Doe) will be shown if no picture specified * @type string */ /** * @param {?} value * @return {?} */ set picture(value) { this.imageBackgroundStyle = value ? this.domSanitizer.bypassSecurityTrustStyle(`url(${value})`) : null; } /* * Size of the component, small|medium|large * @type string */ /** * @param {?} val * @return {?} */ set size(val) { this.sizeValue = val; } /* * Whether to show a user name or not * @type boolean */ /** * @param {?} val * @return {?} */ set showName(val) { this.showNameValue = convertToBoolProperty(val); } /* * Whether to show a user title or not * @type boolean */ /** * @param {?} val * @return {?} */ set showTitle(val) { this.showTitleValue = convertToBoolProperty(val); } /* * Whether to show a user initials (if no picture specified) or not * @type boolean */ /** * @param {?} val * @return {?} */ set showInitials(val) { this.showInitialsValue = convertToBoolProperty(val); } /* * Whether to show only a picture or also show the name and title * @type boolean */ /** * @param {?} val * @return {?} */ set onlyPicture(val) { this.showNameValue = this.showTitleValue = !convertToBoolProperty(val); } /* * Makes colors inverse based on current theme * @type boolean */ /** * @param {?} val * @return {?} */ set inverse(val) { this.inverseValue = convertToBoolProperty(val); } /** * @return {?} */ getInitials() { if (this.name) { /** @type {?} */ const names = this.name.split(' '); return names.map(n => n.charAt(0)).splice(0, 2).join('').toUpperCase(); } return ''; } } // TODO: it makes sense use object instead of list of variables (or even enum) /* static readonly SIZE = { SMALL: 'small', MEDIUM: 'medium', LARGE: 'large', }; */ NbUserComponent.SIZE_SMALL = 'small'; NbUserComponent.SIZE_MEDIUM = 'medium'; NbUserComponent.SIZE_LARGE = 'large'; NbUserComponent.SIZE_XLARGE = 'xlarge'; NbUserComponent.decorators = [ { type: Component, args: [{ selector: 'nb-user', template: "<div class=\"user-container\">\r\n <div *ngIf=\"imageBackgroundStyle\" class=\"user-picture image\" [style.background-image]=\"imageBackgroundStyle\">\r\n <nb-badge *ngIf=\"badgeText\" [text]=\"badgeText\" [status]=\"badgeStatus\" [position]=\"badgePosition\"></nb-badge>\r\n </div>\r\n <div *ngIf=\"!imageBackgroundStyle\" class=\"user-picture background\" [style.background-color]=\"color\">\r\n <ng-container *ngIf=\"showInitialsValue\">\r\n {{ getInitials() }}\r\n </ng-container>\r\n <nb-badge *ngIf=\"badgeText\" [text]=\"badgeText\" [status]=\"badgeStatus\" [position]=\"badgePosition\"></nb-badge>\r\n </div>\r\n\r\n <div class=\"info-container\">\r\n <div *ngIf=\"showNameValue && name\" class=\"user-name\">{{ name }}</div>\r\n <div *ngIf=\"showTitleValue && title\" class=\"user-title\">{{ title }}</div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:flex}:host .user-container{position:relative;display:flex;align-items:center}:host .user-picture{position:relative;border-radius:50%;flex-shrink:0}:host .user-picture.image{background-size:cover;background-repeat:no-repeat}:host .user-picture.background{display:flex;align-items:center;justify-content:center}:host .user-title{font-size:.75rem}[dir=rtl] :host .user-name,[dir=rtl] :host .user-title{text-align:right}[dir=ltr] :host .info-container{margin-left:.5rem}[dir=rtl] :host .info-container{margin-right:.5rem}"] }] } ]; /** @nocollapse */ NbUserComponent.ctorParameters = () => [ { type: DomSanitizer } ]; NbUserComponent.propDecorators = { inverseValue: [{ type: HostBinding, args: ['class.inverse',] }], small: [{ type: HostBinding, args: ['class.small',] }], medium: [{ type: HostBinding, args: ['class.medium',] }], large: [{ type: HostBinding, args: ['class.large',] }], xlarge: [{ type: HostBinding, args: ['class.xlarge',] }], name: [{ type: Input }], title: [{ type: Input }], picture: [{ type: Input }], color: [{ type: Input }], size: [{ type: Input }], showName: [{ type: Input }], showTitle: [{ type: Input }], showInitials: [{ type: Input }], onlyPicture: [{ type: Input }], inverse: [{ type: Input }], badgeText: [{ type: Input }], badgeStatus: [{ type: Input }], badgePosition: [{ type: Input }] }; if (false) { /** @type {?} */ NbUserComponent.SIZE_SMALL; /** @type {?} */ NbUserComponent.SIZE_MEDIUM; /** @type {?} */ NbUserComponent.SIZE_LARGE; /** @type {?} */ NbUserComponent.SIZE_XLARGE; /** * @type {?} * @private */ NbUserComponent.prototype.sizeValue; /** @type {?} */ NbUserComponent.prototype.inverseValue; /** @type {?} */ NbUserComponent.prototype.name; /** @type {?} */ NbUserComponent.prototype.title; /** @type {?} */ NbUserComponent.prototype.color; /** @type {?} */ NbUserComponent.prototype.badgeText; /** @type {?} */ NbUserComponent.prototype.badgeStatus; /** @type {?} */ NbUserComponent.prototype.badgePosition; /** @type {?} */ NbUserComponent.prototype.imageBackgroundStyle; /** @type {?} */ NbUserComponent.prototype.showNameValue; /** @type {?} */ NbUserComponent.prototype.showTitleValue; /** @type {?} */ NbUserComponent.prototype.showInitialsValue; /** @type {?} */ NbUserComponent.prototype.isMenuShown; /** * @type {?} * @private */ NbUserComponent.prototype.domSanitizer; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly90aGVtZS1saWIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy91c2VyL3VzZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQU1BLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFhLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sWUFBWSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2Q25ELE1BQU0sT0FBTyxlQUFlOzs7O0lBb0oxQixZQUFvQixZQUEwQjtRQUExQixpQkFBWSxHQUFaLFlBQVksQ0FBYzs7Ozs7UUF6R3JDLFNBQUksR0FBVyxXQUFXLENBQUM7UUFvR3BDLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBQzlCLG1CQUFjLEdBQVksSUFBSSxDQUFDO1FBQy9CLHNCQUFpQixHQUFZLElBQUksQ0FBQztRQUNsQyxnQkFBVyxHQUFZLEtBQUssQ0FBQztJQUVxQixDQUFDOzs7O0lBakluRCxJQUNJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssZUFBZSxDQUFDLFVBQVUsQ0FBQztJQUN2RCxDQUFDOzs7O0lBRUQsSUFDSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLGVBQWUsQ0FBQyxXQUFXLENBQUM7SUFDeEQsQ0FBQzs7OztJQUVELElBQ0ksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxlQUFlLENBQUMsVUFBVSxDQUFDO0lBQ3ZELENBQUM7Ozs7SUFFRCxJQUNJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssZUFBZSxDQUFDLFdBQVcsQ0FBQztJQUN4RCxDQUFDOzs7Ozs7Ozs7O0lBbUJELElBQWEs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IENvcHlyaWdodCBBa3Zlby4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgTGljZW5zZS50eHQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuICovXHJcblxyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBIb3N0QmluZGluZyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVTdHlsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBjb252ZXJ0VG9Cb29sUHJvcGVydHkgfSBmcm9tICcuLi9oZWxwZXJzJztcclxuXHJcbi8qXHJcbiAqIFJlcHJlc2VudHMgYSBjb21wb25lbnQgc2hvd2luZyBhIHVzZXIgYXZhdGFyIChwaWN0dXJlKSB3aXRoIGEgdXNlciBuYW1lIG9uIHRoZSByaWdodC5cclxuICogQHN0YWNrZWQtZXhhbXBsZShTaG93Y2FzZSwgdXNlci91c2VyLXNob3djYXNlLmNvbXBvbmVudClcclxuICpcclxuICogYGBgdHNcclxuICogICA8bmItdXNlciBuYW1lPVwiSm9uaCBEb2VcIiB0aXRsZT1cIkVuZ2luZWVyXCI+PC9uYi11c2VyPlxyXG4gKiBgYGBcclxuICpcclxuICogIyMjIEluc3RhbGxhdGlvblxyXG4gKlxyXG4gKiBJbXBvcnQgYE5iVXNlck1vZHVsZWAgdG8geW91ciBmZWF0dXJlIG1vZHVsZS5cclxuICogYGBgdHNcclxuICogQE5nTW9kdWxlKHtcclxuICogICBpbXBvcnRzOiBbXHJcbiAqICAgXHQvLyAuLi5cclxuICogICAgIE5iVXNlck1vZHVsZSxcclxuICogICBdLFxyXG4gKiB9KVxyXG4gKiBleHBvcnQgY2xhc3MgUGFnZU1vZHVsZSB7IH1cclxuICogYGBgXHJcbiAqICMjIyBVc2FnZVxyXG4gKlxyXG4gKiBBdmFpbGFibGUgaW4gbXVsdGlwbGUgc2l6ZXM6XHJcbiAqIEBzdGFja2VkLWV4YW1wbGUoTXVsdGlwbGUgU2l6ZXMsIHVzZXIvdXNlci1zaXplcy5jb21wb25lbnQpXHJcbiAqXHJcbiAqIEBzdHlsZXNcclxuICpcclxuICogdXNlci1mb250LXNpemU6XHJcbiAqIHVzZXItbGluZS1oZWlnaHQ6XHJcbiAqIHVzZXItYmc6XHJcbiAqIHVzZXItZmc6XHJcbiAqIHVzZXItZmctaGlnaGxpZ2h0OlxyXG4gKiB1c2VyLWZvbnQtZmFtaWx5LXNlY29uZGFyeTpcclxuICogdXNlci1zaXplLXNtYWxsOlxyXG4gKiB1c2VyLXNpemUtbWVkaXVtOlxyXG4gKiB1c2VyLXNpemUtbGFyZ2U6XHJcbiAqIHVzZXItc2l6ZS14bGFyZ2U6XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25iLXVzZXInLFxyXG4gIHN0eWxlVXJsczogWycuL3VzZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci5jb21wb25lbnQuaHRtbCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOYlVzZXJDb21wb25lbnQge1xyXG5cclxuICAvLyBUT0RPOiBpdCBtYWtlcyBzZW5zZSB1c2Ugb2JqZWN0IGluc3RlYWQgb2YgbGlzdCBvZiB2YXJpYWJsZXMgKG9yIGV2ZW4gZW51bSlcclxuICAvKlxyXG4gICAgc3RhdGljIHJlYWRvbmx5IFNJWkUgPSB7XHJcbiAgICAgU01BTEw6ICdzbWFsbCcsXHJcbiAgICAgTUVESVVNOiAnbWVkaXVtJyxcclxuICAgICBMQVJHRTogJ2xhcmdlJyxcclxuICAgIH07XHJcbiAgICovXHJcbiAgc3RhdGljIHJlYWRvbmx5IFNJWkVfU01BTEwgPSAnc21hbGwnO1xyXG4gIHN0YXRpYyByZWFkb25seSBTSVpFX01FRElVTSA9ICdtZWRpdW0nO1xyXG4gIHN0YXRpYyByZWFkb25seSBTSVpFX0xBUkdFID0gJ2xhcmdlJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU0laRV9YTEFSR0UgPSAneGxhcmdlJztcclxuXHJcbiAgcHJpdmF0ZSBzaXplVmFsdWU6IHN0cmluZztcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pbnZlcnNlJykgaW52ZXJzZVZhbHVlOiBib29sZWFuO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNtYWxsJylcclxuICBnZXQgc21hbGwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zaXplVmFsdWUgPT09IE5iVXNlckNvbXBvbmVudC5TSVpFX1NNQUxMO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5tZWRpdW0nKVxyXG4gIGdldCBtZWRpdW0oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zaXplVmFsdWUgPT09IE5iVXNlckNvbXBvbmVudC5TSVpFX01FRElVTTtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MubGFyZ2UnKVxyXG4gIGdldCBsYXJnZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNpemVWYWx1ZSA9PT0gTmJVc2VyQ29tcG9uZW50LlNJWkVfTEFSR0U7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnhsYXJnZScpXHJcbiAgZ2V0IHhsYXJnZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNpemVWYWx1ZSA9PT0gTmJVc2VyQ29tcG9uZW50LlNJWkVfWExBUkdFO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBTcGVjaWZpZXMgYSBuYW1lIHRvIGJlIHNob3duIG9uIHRoZSByaWdodCBvZiBhIHVzZXIgcGljdHVyZVxyXG4gICAqIEB0eXBlIHN0cmluZ1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZyA9ICdBbm9ueW1vdXMnO1xyXG5cclxuICAvKlxyXG4gICAqIFNwZWNpZmllcyBhIHRpdGxlICh3cml0dGVuIGluIGEgc21hbGxlciBmb250KSB0byBiZSBzaG93biB1bmRlciB0aGUgKipuYW1lKipcclxuICAgKiBAdHlwZSBzdHJpbmdcclxuICAgKi9cclxuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xyXG5cclxuICAvKlxyXG4gICAqIEFic29sdXRlIHBhdGggdG8gYSB1c2VyIHBpY3R1cmUuIE9yIGJhc2U2NCBpbWFnZVxyXG4gICAqIFVzZXIgbmFtZSBpbml0aWFscyAoSkQgZm9yIEpvaG4gRG9lKSB3aWxsIGJlIHNob3duIGlmIG5vIHBpY3R1cmUgc3BlY2lmaWVkXHJcbiAgICogQHR5cGUgc3RyaW5nXHJcbiAgICovXHJcbiAgQElucHV0KCkgc2V0IHBpY3R1cmUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5pbWFnZUJhY2tncm91bmRTdHlsZSA9IHZhbHVlID8gdGhpcy5kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKGB1cmwoJHt2YWx1ZX0pYCkgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDb2xvciBvZiB0aGUgYXJlYSBzaG93biB3aGVuIG5vIHBpY3R1cmUgc3BlY2lmaWVkXHJcbiAgICogQHR5cGUgc3RyaW5nXHJcbiAgICovXHJcbiAgQElucHV0KCkgY29sb3I6IHN0cmluZztcclxuXHJcbiAgLypcclxuICAgKiBTaXplIG9mIHRoZSBjb21wb25lbnQsIHNtYWxsfG1lZGl1bXxsYXJnZVxyXG4gICAqIEB0eXBlIHN0cmluZ1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNpemUodmFsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2l6ZVZhbHVlID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBXaGV0aGVyIHRvIHNob3cgYSB1c2VyIG5hbWUgb3Igbm90XHJcbiAgICogQHR5cGUgYm9vbGVhblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNob3dOYW1lKHZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5zaG93TmFtZVZhbHVlID0gY29udmVydFRvQm9vbFByb3BlcnR5KHZhbCk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIFdoZXRoZXIgdG8gc2hvdyBhIHVzZXIgdGl0bGUgb3Igbm90XHJcbiAgICogQHR5cGUgYm9vbGVhblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNob3dUaXRsZSh2YWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuc2hvd1RpdGxlVmFsdWUgPSBjb252ZXJ0VG9Cb29sUHJvcGVydHkodmFsKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogV2hldGhlciB0byBzaG93IGEgdXNlciBpbml0aWFscyAoaWYgbm8gcGljdHVyZSBzcGVjaWZpZWQpIG9yIG5vdFxyXG4gICAqIEB0eXBlIGJvb2xlYW5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzaG93SW5pdGlhbHModmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnNob3dJbml0aWFsc1ZhbHVlID0gY29udmVydFRvQm9vbFByb3BlcnR5KHZhbCk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIFdoZXRoZXIgdG8gc2hvdyBvbmx5IGEgcGljdHVyZSBvciBhbHNvIHNob3cgdGhlIG5hbWUgYW5kIHRpdGxlXHJcbiAgICogQHR5cGUgYm9vbGVhblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG9ubHlQaWN0dXJlKHZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5zaG93TmFtZVZhbHVlID0gdGhpcy5zaG93VGl0bGVWYWx1ZSA9ICFjb252ZXJ0VG9Cb29sUHJvcGVydHkodmFsKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogTWFrZXMgY29sb3JzIGludmVyc2UgYmFzZWQgb24gY3VycmVudCB0aGVtZVxyXG4gICAqIEB0eXBlIGJvb2xlYW5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpbnZlcnNlKHZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pbnZlcnNlVmFsdWUgPSBjb252ZXJ0VG9Cb29sUHJvcGVydHkodmFsKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQmFkZ2UgdGV4dCB0byBkaXNwbGF5XHJcbiAgICogQHR5cGUgc3RyaW5nXHJcbiAgICovXHJcbiAgQElucHV0KCkgYmFkZ2VUZXh0OiBzdHJpbmc7XHJcblxyXG4gIC8qXHJcbiAgICogQmFkZ2Ugc3RhdHVzIChhZGRzIHNwZWNpZmljIHN0eWxlcyk6XHJcbiAgICogJ3ByaW1hcnknLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnLCAnZGFuZ2VyJ1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWxcclxuICAgKi9cclxuICBASW5wdXQoKSBiYWRnZVN0YXR1czogc3RyaW5nO1xyXG5cclxuICAvKlxyXG4gICAqIEJhZGdlIHBvc2l0aW9uLlxyXG4gICAqIENhbiBiZSBzZXQgdG8gYW55IGNsYXNzIG9yIHRvIG9uZSBvZiBwcmVkZWZpbmVkIHBvc2l0aW9uczpcclxuICAgKiAndG9wIGxlZnQnLCAndG9wIHJpZ2h0JywgJ2JvdHRvbSBsZWZ0JywgJ2JvdHRvbSByaWdodCcsXHJcbiAgICogJ3RvcCBzdGFydCcsICd0b3AgZW5kJywgJ2JvdHRvbSBzdGFydCcsICdib3R0b20gZW5kJ1xyXG4gICAqIEB0eXBlIHN0cmluZ1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGJhZGdlUG9zaXRpb246IHN0cmluZztcclxuXHJcbiAgaW1hZ2VCYWNrZ3JvdW5kU3R5bGU6IFNhZmVTdHlsZTtcclxuICBzaG93TmFtZVZhbHVlOiBib29sZWFuID0gdHJ1ZTtcclxuICBzaG93VGl0bGVWYWx1ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgc2hvd0luaXRpYWxzVmFsdWU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzTWVudVNob3duOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZG9tU2FuaXRpemVyOiBEb21TYW5pdGl6ZXIpIHsgfVxyXG5cclxuICBnZXRJbml0aWFscygpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMubmFtZSkge1xyXG4gICAgICBjb25zdCBuYW1lcyA9IHRoaXMubmFtZS5zcGxpdCgnICcpO1xyXG5cclxuICAgICAgcmV0dXJuIG5hbWVzLm1hcChuID0+IG4uY2hhckF0KDApKS5zcGxpY2UoMCwgMikuam9pbignJykudG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG59XHJcbiJdfQ==