UNPKG

theme-lib

Version:

This is a simple example Angular Library published to npm.

343 lines 23 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: */ var NbUserComponent = /** @class */ (function () { function NbUserComponent(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; } Object.defineProperty(NbUserComponent.prototype, "small", { get: /** * @return {?} */ function () { return this.sizeValue === NbUserComponent.SIZE_SMALL; }, enumerable: true, configurable: true }); Object.defineProperty(NbUserComponent.prototype, "medium", { get: /** * @return {?} */ function () { return this.sizeValue === NbUserComponent.SIZE_MEDIUM; }, enumerable: true, configurable: true }); Object.defineProperty(NbUserComponent.prototype, "large", { get: /** * @return {?} */ function () { return this.sizeValue === NbUserComponent.SIZE_LARGE; }, enumerable: true, configurable: true }); Object.defineProperty(NbUserComponent.prototype, "xlarge", { get: /** * @return {?} */ function () { return this.sizeValue === NbUserComponent.SIZE_XLARGE; }, enumerable: true, configurable: true }); Object.defineProperty(NbUserComponent.prototype, "picture", { /* * 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 */ set: /* * 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 {?} */ function (value) { this.imageBackgroundStyle = value ? this.domSanitizer.bypassSecurityTrustStyle("url(" + value + ")") : null; }, enumerable: true, configurable: true }); Object.defineProperty(NbUserComponent.prototype, "size", { /* * Size of the component, small|medium|large * @type string */ set: /* * Size of the component, small|medium|large * @type string */ /** * @param {?} val * @return {?} */ function (val) { this.sizeValue = val; }, enumerable: true, configurable: true }); Object.defineProperty(NbUserComponent.prototype, "showName", { /* * Whether to show a user name or not * @type boolean */ set: /* * Whether to show a user name or not * @type boolean */ /** * @param {?} val * @return {?} */ function (val) { this.showNameValue = convertToBoolProperty(val); }, enumerable: true, configurable: true }); Object.defineProperty(NbUserComponent.prototype, "showTitle", { /* * Whether to show a user title or not * @type boolean */ set: /* * Whether to show a user title or not * @type boolean */ /** * @param {?} val * @return {?} */ function (val) { this.showTitleValue = convertToBoolProperty(val); }, enumerable: true, configurable: true }); Object.defineProperty(NbUserComponent.prototype, "showInitials", { /* * Whether to show a user initials (if no picture specified) or not * @type boolean */ set: /* * Whether to show a user initials (if no picture specified) or not * @type boolean */ /** * @param {?} val * @return {?} */ function (val) { this.showInitialsValue = convertToBoolProperty(val); }, enumerable: true, configurable: true }); Object.defineProperty(NbUserComponent.prototype, "onlyPicture", { /* * Whether to show only a picture or also show the name and title * @type boolean */ set: /* * Whether to show only a picture or also show the name and title * @type boolean */ /** * @param {?} val * @return {?} */ function (val) { this.showNameValue = this.showTitleValue = !convertToBoolProperty(val); }, enumerable: true, configurable: true }); Object.defineProperty(NbUserComponent.prototype, "inverse", { /* * Makes colors inverse based on current theme * @type boolean */ set: /* * Makes colors inverse based on current theme * @type boolean */ /** * @param {?} val * @return {?} */ function (val) { this.inverseValue = convertToBoolProperty(val); }, enumerable: true, configurable: true }); /** * @return {?} */ NbUserComponent.prototype.getInitials = /** * @return {?} */ function () { if (this.name) { /** @type {?} */ var names = this.name.split(' '); return names.map(function (n) { return 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 = function () { return [ { 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 }] }; return NbUserComponent; }()); export { NbUserComponent }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly90aGVtZS1saWIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy91c2VyL3VzZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQU1BLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFhLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sWUFBWSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF3Q25EO0lBeUpFLHlCQUFvQixZQUEwQjtRQUExQixpQkFBWSxHQUFaLFlBQVksQ0FBYzs7Ozs7UUF6R3JDLFNBQUksR0FBVyxXQUFXLENBQUM7UUFvR3BDLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBQzlCLG1CQUFjLEdBQVksSUFBSSxDQUFDO1FBQy9CLHNCQUFpQixHQUFZLElBQUksQ0FBQztRQUNsQyxnQkFBVyxHQUFZLEtBQUssQ0FBQztJQUVxQixDQUFDO0lBakluRCxzQkFDSSxrQ0FBSzs7OztRQURUO1lBRUUsT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLGVBQWUsQ0FBQyxVQUFVLENBQUM7UUFDdkQsQ0FBQzs7O09BQUE7SUFFRCxzQkFDSSxtQ0FBTTs7OztRQURWO1lBRUUsT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLGVBQWUsQ0FBQyxXQUFXLENBQUM7UUFDeEQsQ0FBQzs7O09BQUE7SUFFRCxzQkFDSSxrQ0FBSzs7OztRQURUO1lBRUUsT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLGVBQWUsQ0FBQyxVQUFVLENBQUM7UUFDdkQsQ0FBQzs7O09BQUE7SUFFRCxzQkFDSSxtQ0FBTTs7OztRQURWO1lBRUUsT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLGVBQWUsQ0FBQyxXQUFXLENBQUM7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Q3JDLDRCQUF1Qzs7SUFDdkMsMkJBQXFDOztJQUNyQyw0QkFBdUM7Ozs7O0lBRXZDLG9DQUEwQjs7SUFFMUIsdUNBQW9EOztJQTBCcEQsK0JBQW9DOztJQU1wQyxnQ0FBdUI7O0lBZXZCLGdDQUF1Qjs7SUE0RHZCLG9DQUEyQjs7SUFPM0Isc0NBQTZCOztJQVM3Qix3Q0FBK0I7O0lBRS9CLCtDQUFnQzs7SUFDaEMsd0NBQThCOztJQUM5Qix5Q0FBK0I7O0lBQy9CLDRDQUFrQzs7SUFDbEMsc0NBQTZCOzs7OztJQUVqQix1Q0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgQWt2ZW8uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgSG9zdEJpbmRpbmcgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlU3R5bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgY29udmVydFRvQm9vbFByb3BlcnR5IH0gZnJvbSAnLi4vaGVscGVycyc7XHJcblxyXG4vKlxyXG4gKiBSZXByZXNlbnRzIGEgY29tcG9uZW50IHNob3dpbmcgYSB1c2VyIGF2YXRhciAocGljdHVyZSkgd2l0aCBhIHVzZXIgbmFtZSBvbiB0aGUgcmlnaHQuXHJcbiAqIEBzdGFja2VkLWV4YW1wbGUoU2hvd2Nhc2UsIHVzZXIvdXNlci1zaG93Y2FzZS5jb21wb25lbnQpXHJcbiAqXHJcbiAqIGBgYHRzXHJcbiAqICAgPG5iLXVzZXIgbmFtZT1cIkpvbmggRG9lXCIgdGl0bGU9XCJFbmdpbmVlclwiPjwvbmItdXNlcj5cclxuICogYGBgXHJcbiAqXHJcbiAqICMjIyBJbnN0YWxsYXRpb25cclxuICpcclxuICogSW1wb3J0IGBOYlVzZXJNb2R1bGVgIHRvIHlvdXIgZmVhdHVyZSBtb2R1bGUuXHJcbiAqIGBgYHRzXHJcbiAqIEBOZ01vZHVsZSh7XHJcbiAqICAgaW1wb3J0czogW1xyXG4gKiAgIFx0Ly8gLi4uXHJcbiAqICAgICBOYlVzZXJNb2R1bGUsXHJcbiAqICAgXSxcclxuICogfSlcclxuICogZXhwb3J0IGNsYXNzIFBhZ2VNb2R1bGUgeyB9XHJcbiAqIGBgYFxyXG4gKiAjIyMgVXNhZ2VcclxuICpcclxuICogQXZhaWxhYmxlIGluIG11bHRpcGxlIHNpemVzOlxyXG4gKiBAc3RhY2tlZC1leGFtcGxlKE11bHRpcGxlIFNpemVzLCB1c2VyL3VzZXItc2l6ZXMuY29tcG9uZW50KVxyXG4gKlxyXG4gKiBAc3R5bGVzXHJcbiAqXHJcbiAqIHVzZXItZm9udC1zaXplOlxyXG4gKiB1c2VyLWxpbmUtaGVpZ2h0OlxyXG4gKiB1c2VyLWJnOlxyXG4gKiB1c2VyLWZnOlxyXG4gKiB1c2VyLWZnLWhpZ2hsaWdodDpcclxuICogdXNlci1mb250LWZhbWlseS1zZWNvbmRhcnk6XHJcbiAqIHVzZXItc2l6ZS1zbWFsbDpcclxuICogdXNlci1zaXplLW1lZGl1bTpcclxuICogdXNlci1zaXplLWxhcmdlOlxyXG4gKiB1c2VyLXNpemUteGxhcmdlOlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduYi11c2VyJyxcclxuICBzdHlsZVVybHM6IFsnLi91c2VyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXIuY29tcG9uZW50Lmh0bWwnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmJVc2VyQ29tcG9uZW50IHtcclxuXHJcbiAgLy8gVE9ETzogaXQgbWFrZXMgc2Vuc2UgdXNlIG9iamVjdCBpbnN0ZWFkIG9mIGxpc3Qgb2YgdmFyaWFibGVzIChvciBldmVuIGVudW0pXHJcbiAgLypcclxuICAgIHN0YXRpYyByZWFkb25seSBTSVpFID0ge1xyXG4gICAgIFNNQUxMOiAnc21hbGwnLFxyXG4gICAgIE1FRElVTTogJ21lZGl1bScsXHJcbiAgICAgTEFSR0U6ICdsYXJnZScsXHJcbiAgICB9O1xyXG4gICAqL1xyXG4gIHN0YXRpYyByZWFkb25seSBTSVpFX1NNQUxMID0gJ3NtYWxsJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU0laRV9NRURJVU0gPSAnbWVkaXVtJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU0laRV9MQVJHRSA9ICdsYXJnZSc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNJWkVfWExBUkdFID0gJ3hsYXJnZSc7XHJcblxyXG4gIHByaXZhdGUgc2l6ZVZhbHVlOiBzdHJpbmc7XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaW52ZXJzZScpIGludmVyc2VWYWx1ZTogYm9vbGVhbjtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zbWFsbCcpXHJcbiAgZ2V0IHNtYWxsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2l6ZVZhbHVlID09PSBOYlVzZXJDb21wb25lbnQuU0laRV9TTUFMTDtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MubWVkaXVtJylcclxuICBnZXQgbWVkaXVtKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2l6ZVZhbHVlID09PSBOYlVzZXJDb21wb25lbnQuU0laRV9NRURJVU07XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmxhcmdlJylcclxuICBnZXQgbGFyZ2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zaXplVmFsdWUgPT09IE5iVXNlckNvbXBvbmVudC5TSVpFX0xBUkdFO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy54bGFyZ2UnKVxyXG4gIGdldCB4bGFyZ2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zaXplVmFsdWUgPT09IE5iVXNlckNvbXBvbmVudC5TSVpFX1hMQVJHRTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogU3BlY2lmaWVzIGEgbmFtZSB0byBiZSBzaG93biBvbiB0aGUgcmlnaHQgb2YgYSB1c2VyIHBpY3R1cmVcclxuICAgKiBAdHlwZSBzdHJpbmdcclxuICAgKi9cclxuICBASW5wdXQoKSBuYW1lOiBzdHJpbmcgPSAnQW5vbnltb3VzJztcclxuXHJcbiAgLypcclxuICAgKiBTcGVjaWZpZXMgYSB0aXRsZSAod3JpdHRlbiBpbiBhIHNtYWxsZXIgZm9udCkgdG8gYmUgc2hvd24gdW5kZXIgdGhlICoqbmFtZSoqXHJcbiAgICogQHR5cGUgc3RyaW5nXHJcbiAgICovXHJcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZztcclxuXHJcbiAgLypcclxuICAgKiBBYnNvbHV0ZSBwYXRoIHRvIGEgdXNlciBwaWN0dXJlLiBPciBiYXNlNjQgaW1hZ2VcclxuICAgKiBVc2VyIG5hbWUgaW5pdGlhbHMgKEpEIGZvciBKb2huIERvZSkgd2lsbCBiZSBzaG93biBpZiBubyBwaWN0dXJlIHNwZWNpZmllZFxyXG4gICAqIEB0eXBlIHN0cmluZ1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHNldCBwaWN0dXJlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuaW1hZ2VCYWNrZ3JvdW5kU3R5bGUgPSB2YWx1ZSA/IHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShgdXJsKCR7dmFsdWV9KWApIDogbnVsbDtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ29sb3Igb2YgdGhlIGFyZWEgc2hvd24gd2hlbiBubyBwaWN0dXJlIHNwZWNpZmllZFxyXG4gICAqIEB0eXBlIHN0cmluZ1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGNvbG9yOiBzdHJpbmc7XHJcblxyXG4gIC8qXHJcbiAgICogU2l6ZSBvZiB0aGUgY29tcG9uZW50LCBzbWFsbHxtZWRpdW18bGFyZ2VcclxuICAgKiBAdHlwZSBzdHJpbmdcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzaXplKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNpemVWYWx1ZSA9IHZhbDtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogV2hldGhlciB0byBzaG93IGEgdXNlciBuYW1lIG9yIG5vdFxyXG4gICAqIEB0eXBlIGJvb2xlYW5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzaG93TmFtZSh2YWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuc2hvd05hbWVWYWx1ZSA9IGNvbnZlcnRUb0Jvb2xQcm9wZXJ0eSh2YWwpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBXaGV0aGVyIHRvIHNob3cgYSB1c2VyIHRpdGxlIG9yIG5vdFxyXG4gICAqIEB0eXBlIGJvb2xlYW5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzaG93VGl0bGUodmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnNob3dUaXRsZVZhbHVlID0gY29udmVydFRvQm9vbFByb3BlcnR5KHZhbCk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIFdoZXRoZXIgdG8gc2hvdyBhIHVzZXIgaW5pdGlhbHMgKGlmIG5vIHBpY3R1cmUgc3BlY2lmaWVkKSBvciBub3RcclxuICAgKiBAdHlwZSBib29sZWFuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2hvd0luaXRpYWxzKHZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5zaG93SW5pdGlhbHNWYWx1ZSA9IGNvbnZlcnRUb0Jvb2xQcm9wZXJ0eSh2YWwpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBXaGV0aGVyIHRvIHNob3cgb25seSBhIHBpY3R1cmUgb3IgYWxzbyBzaG93IHRoZSBuYW1lIGFuZCB0aXRsZVxyXG4gICAqIEB0eXBlIGJvb2xlYW5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBvbmx5UGljdHVyZSh2YWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuc2hvd05hbWVWYWx1ZSA9IHRoaXMuc2hvd1RpdGxlVmFsdWUgPSAhY29udmVydFRvQm9vbFByb3BlcnR5KHZhbCk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIE1ha2VzIGNvbG9ycyBpbnZlcnNlIGJhc2VkIG9uIGN1cnJlbnQgdGhlbWVcclxuICAgKiBAdHlwZSBib29sZWFuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaW52ZXJzZSh2YWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaW52ZXJzZVZhbHVlID0gY29udmVydFRvQm9vbFByb3BlcnR5KHZhbCk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIEJhZGdlIHRleHQgdG8gZGlzcGxheVxyXG4gICAqIEB0eXBlIHN0cmluZ1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGJhZGdlVGV4dDogc3RyaW5nO1xyXG5cclxuICAvKlxyXG4gICAqIEJhZGdlIHN0YXR1cyAoYWRkcyBzcGVjaWZpYyBzdHlsZXMpOlxyXG4gICAqICdwcmltYXJ5JywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJywgJ2RhbmdlcidcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsXHJcbiAgICovXHJcbiAgQElucHV0KCkgYmFkZ2VTdGF0dXM6IHN0cmluZztcclxuXHJcbiAgLypcclxuICAgKiBCYWRnZSBwb3NpdGlvbi5cclxuICAgKiBDYW4gYmUgc2V0IHRvIGFueSBjbGFzcyBvciB0byBvbmUgb2YgcHJlZGVmaW5lZCBwb3NpdGlvbnM6XHJcbiAgICogJ3RvcCBsZWZ0JywgJ3RvcCByaWdodCcsICdib3R0b20gbGVmdCcsICdib3R0b20gcmlnaHQnLFxyXG4gICAqICd0b3Agc3RhcnQnLCAndG9wIGVuZCcsICdib3R0b20gc3RhcnQnLCAnYm90dG9tIGVuZCdcclxuICAgKiBAdHlwZSBzdHJpbmdcclxuICAgKi9cclxuICBASW5wdXQoKSBiYWRnZVBvc2l0aW9uOiBzdHJpbmc7XHJcblxyXG4gIGltYWdlQmFja2dyb3VuZFN0eWxlOiBTYWZlU3R5bGU7XHJcbiAgc2hvd05hbWVWYWx1ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgc2hvd1RpdGxlVmFsdWU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHNob3dJbml0aWFsc1ZhbHVlOiBib29sZWFuID0gdHJ1ZTtcclxuICBpc01lbnVTaG93bjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRvbVNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7IH1cclxuXHJcbiAgZ2V0SW5pdGlhbHMoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLm5hbWUpIHtcclxuICAgICAgY29uc3QgbmFtZXMgPSB0aGlzLm5hbWUuc3BsaXQoJyAnKTtcclxuXHJcbiAgICAgIHJldHVybiBuYW1lcy5tYXAobiA9PiBuLmNoYXJBdCgwKSkuc3BsaWNlKDAsIDIpLmpvaW4oJycpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxufVxyXG4iXX0=