theme-lib
Version:
This is a simple example Angular Library published to npm.
343 lines • 23 kB
JavaScript
/**
* @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=