theme-lib
Version:
This is a simple example Angular Library published to npm.
268 lines • 19.5 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:
*/
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly90aGVtZS1saWIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy91c2VyL3VzZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQU1BLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFhLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sWUFBWSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2Q25ELE1BQU0sT0FBTyxlQUFlOzs7O0lBb0oxQixZQUFvQixZQUEwQjtRQUExQixpQkFBWSxHQUFaLFlBQVksQ0FBYzs7Ozs7UUF6R3JDLFNBQUksR0FBVyxXQUFXLENBQUM7UUFvR3BDLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBQzlCLG1CQUFjLEdBQVksSUFBSSxDQUFDO1FBQy9CLHNCQUFpQixHQUFZLElBQUksQ0FBQztRQUNsQyxnQkFBVyxHQUFZLEtBQUssQ0FBQztJQUVxQixDQUFDOzs7O0lBakluRCxJQUNJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssZUFBZSxDQUFDLFVBQVUsQ0FBQztJQUN2RCxDQUFDOzs7O0lBRUQsSUFDSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLGVBQWUsQ0FBQyxXQUFXLENBQUM7SUFDeEQsQ0FBQzs7OztJQUVELElBQ0ksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxlQUFlLENBQUMsVUFBVSxDQUFDO0lBQ3ZELENBQUM7Ozs7SUFFRCxJQUNJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssZUFBZSxDQUFDLFdBQVcsQ0FBQztJQUN4RCxDQUFDOzs7Ozs7Ozs7O0lBbUJELElBQWEsT0FBTyxDQUFDLEtBQWE7UUFDaEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN6RyxDQUFDOzs7Ozs7Ozs7SUFZRCxJQUNJLElBQUksQ0FBQyxHQUFXO1FBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0lBQ3ZCLENBQUM7Ozs7Ozs7OztJQU1ELElBQ0ksUUFBUSxDQUFDLEdBQVk7UUFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRCxDQUFDOzs7Ozs7Ozs7SUFNRCxJQUNJLFNBQVMsQ0FBQyxHQUFZO1FBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkQsQ0FBQzs7Ozs7Ozs7O0lBTUQsSUFDSSxZQUFZLENBQUMsR0FBWTtRQUMzQixJQUFJLENBQUMsaUJBQWlCLEdBQUcscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEQsQ0FBQzs7Ozs7Ozs7O0lBTUQsSUFDSSxXQUFXLENBQUMsR0FBWTtRQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6RSxDQUFDOzs7Ozs7Ozs7SUFNRCxJQUNJLE9BQU8sQ0FBQyxHQUFZO1FBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakQsQ0FBQzs7OztJQWdDRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFOztrQkFDUCxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1lBRWxDLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN4RTtRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQzs7Ozs7Ozs7OztBQXBKZSwwQkFBVSxHQUFHLE9BQU8sQ0FBQztBQUNyQiwyQkFBVyxHQUFHLFFBQVEsQ0FBQztBQUN2QiwwQkFBVSxHQUFHLE9BQU8sQ0FBQztBQUNyQiwyQkFBVyxHQUFHLFFBQVEsQ0FBQzs7WUFsQnhDLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsU0FBUztnQkFFbkIsaTNCQUFvQzs7YUFDckM7Ozs7WUE3Q1EsWUFBWTs7OzJCQStEbEIsV0FBVyxTQUFDLGVBQWU7b0JBRTNCLFdBQVcsU0FBQyxhQUFhO3FCQUt6QixXQUFXLFNBQUMsY0FBYztvQkFLMUIsV0FBVyxTQUFDLGFBQWE7cUJBS3pCLFdBQVcsU0FBQyxjQUFjO21CQVMxQixLQUFLO29CQU1MLEtBQUs7c0JBT0wsS0FBSztvQkFRTCxLQUFLO21CQU1MLEtBQUs7dUJBU0wsS0FBSzt3QkFTTCxLQUFLOzJCQVNMLEtBQUs7MEJBU0wsS0FBSztzQkFTTCxLQUFLO3dCQVNMLEtBQUs7MEJBT0wsS0FBSzs0QkFTTCxLQUFLOzs7O0lBbElOLDJCQUFxQzs7SUFDckMsNEJBQXVDOztJQUN2QywyQkFBcUM7O0lBQ3JDLDRCQUF1Qzs7Ozs7SUFFdkMsb0NBQTBCOztJQUUxQix1Q0FBb0Q7O0lBMEJwRCwrQkFBb0M7O0lBTXBDLGdDQUF1Qjs7SUFldkIsZ0NBQXVCOztJQTREdkIsb0NBQTJCOztJQU8zQixzQ0FBNkI7O0lBUzdCLHdDQUErQjs7SUFFL0IsK0NBQWdDOztJQUNoQyx3Q0FBOEI7O0lBQzlCLHlDQUErQjs7SUFDL0IsNENBQWtDOztJQUNsQyxzQ0FBNkI7Ozs7O0lBRWpCLHVDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBBa3Zlby4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgTGljZW5zZS50eHQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuICovXHJcblxyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBIb3N0QmluZGluZyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVTdHlsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBjb252ZXJ0VG9Cb29sUHJvcGVydHkgfSBmcm9tICcuLi9oZWxwZXJzJztcclxuXHJcbi8qXHJcbiAqIFJlcHJlc2VudHMgYSBjb21wb25lbnQgc2hvd2luZyBhIHVzZXIgYXZhdGFyIChwaWN0dXJlKSB3aXRoIGEgdXNlciBuYW1lIG9uIHRoZSByaWdodC5cclxuICogQHN0YWNrZWQtZXhhbXBsZShTaG93Y2FzZSwgdXNlci91c2VyLXNob3djYXNlLmNvbXBvbmVudClcclxuICpcclxuICogYGBgdHNcclxuICogICA8bmItdXNlciBuYW1lPVwiSm9uaCBEb2VcIiB0aXRsZT1cIkVuZ2luZWVyXCI+PC9uYi11c2VyPlxyXG4gKiBgYGBcclxuICpcclxuICogIyMjIEluc3RhbGxhdGlvblxyXG4gKlxyXG4gKiBJbXBvcnQgYE5iVXNlck1vZHVsZWAgdG8geW91ciBmZWF0dXJlIG1vZHVsZS5cclxuICogYGBgdHNcclxuICogQE5nTW9kdWxlKHtcclxuICogICBpbXBvcnRzOiBbXHJcbiAqICAgXHQvLyAuLi5cclxuICogICAgIE5iVXNlck1vZHVsZSxcclxuICogICBdLFxyXG4gKiB9KVxyXG4gKiBleHBvcnQgY2xhc3MgUGFnZU1vZHVsZSB7IH1cclxuICogYGBgXHJcbiAqICMjIyBVc2FnZVxyXG4gKlxyXG4gKiBBdmFpbGFibGUgaW4gbXVsdGlwbGUgc2l6ZXM6XHJcbiAqIEBzdGFja2VkLWV4YW1wbGUoTXVsdGlwbGUgU2l6ZXMsIHVzZXIvdXNlci1zaXplcy5jb21wb25lbnQpXHJcbiAqXHJcbiAqIEBzdHlsZXNcclxuICpcclxuICogdXNlci1mb250LXNpemU6XHJcbiAqIHVzZXItbGluZS1oZWlnaHQ6XHJcbiAqIHVzZXItYmc6XHJcbiAqIHVzZXItZmc6XHJcbiAqIHVzZXItZmctaGlnaGxpZ2h0OlxyXG4gKiB1c2VyLWZvbnQtZmFtaWx5LXNlY29uZGFyeTpcclxuICogdXNlci1zaXplLXNtYWxsOlxyXG4gKiB1c2VyLXNpemUtbWVkaXVtOlxyXG4gKiB1c2VyLXNpemUtbGFyZ2U6XHJcbiAqIHVzZXItc2l6ZS14bGFyZ2U6XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25iLXVzZXInLFxyXG4gIHN0eWxlVXJsczogWycuL3VzZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci5jb21wb25lbnQuaHRtbCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOYlVzZXJDb21wb25lbnQge1xyXG5cclxuICAvLyBUT0RPOiBpdCBtYWtlcyBzZW5zZSB1c2Ugb2JqZWN0IGluc3RlYWQgb2YgbGlzdCBvZiB2YXJpYWJsZXMgKG9yIGV2ZW4gZW51bSlcclxuICAvKlxyXG4gICAgc3RhdGljIHJlYWRvbmx5IFNJWkUgPSB7XHJcbiAgICAgU01BTEw6ICdzbWFsbCcsXHJcbiAgICAgTUVESVVNOiAnbWVkaXVtJyxcclxuICAgICBMQVJHRTogJ2xhcmdlJyxcclxuICAgIH07XHJcbiAgICovXHJcbiAgc3RhdGljIHJlYWRvbmx5IFNJWkVfU01BTEwgPSAnc21hbGwnO1xyXG4gIHN0YXRpYyByZWFkb25seSBTSVpFX01FRElVTSA9ICdtZWRpdW0nO1xyXG4gIHN0YXRpYyByZWFkb25seSBTSVpFX0xBUkdFID0gJ2xhcmdlJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU0laRV9YTEFSR0UgPSAneGxhcmdlJztcclxuXHJcbiAgcHJpdmF0ZSBzaXplVmFsdWU6IHN0cmluZztcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pbnZlcnNlJykgaW52ZXJzZVZhbHVlOiBib29sZWFuO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNtYWxsJylcclxuICBnZXQgc21hbGwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zaXplVmFsdWUgPT09IE5iVXNlckNvbXBvbmVudC5TSVpFX1NNQUxMO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5tZWRpdW0nKVxyXG4gIGdldCBtZWRpdW0oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zaXplVmFsdWUgPT09IE5iVXNlckNvbXBvbmVudC5TSVpFX01FRElVTTtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MubGFyZ2UnKVxyXG4gIGdldCBsYXJnZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNpemVWYWx1ZSA9PT0gTmJVc2VyQ29tcG9uZW50LlNJWkVfTEFSR0U7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnhsYXJnZScpXHJcbiAgZ2V0IHhsYXJnZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNpemVWYWx1ZSA9PT0gTmJVc2VyQ29tcG9uZW50LlNJWkVfWExBUkdFO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBTcGVjaWZpZXMgYSBuYW1lIHRvIGJlIHNob3duIG9uIHRoZSByaWdodCBvZiBhIHVzZXIgcGljdHVyZVxyXG4gICAqIEB0eXBlIHN0cmluZ1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZyA9ICdBbm9ueW1vdXMnO1xyXG5cclxuICAvKlxyXG4gICAqIFNwZWNpZmllcyBhIHRpdGxlICh3cml0dGVuIGluIGEgc21hbGxlciBmb250KSB0byBiZSBzaG93biB1bmRlciB0aGUgKipuYW1lKipcclxuICAgKiBAdHlwZSBzdHJpbmdcclxuICAgKi9cclxuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xyXG5cclxuICAvKlxyXG4gICAqIEFic29sdXRlIHBhdGggdG8gYSB1c2VyIHBpY3R1cmUuIE9yIGJhc2U2NCBpbWFnZVxyXG4gICAqIFVzZXIgbmFtZSBpbml0aWFscyAoSkQgZm9yIEpvaG4gRG9lKSB3aWxsIGJlIHNob3duIGlmIG5vIHBpY3R1cmUgc3BlY2lmaWVkXHJcbiAgICogQHR5cGUgc3RyaW5nXHJcbiAgICovXHJcbiAgQElucHV0KCkgc2V0IHBpY3R1cmUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5pbWFnZUJhY2tncm91bmRTdHlsZSA9IHZhbHVlID8gdGhpcy5kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKGB1cmwoJHt2YWx1ZX0pYCkgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDb2xvciBvZiB0aGUgYXJlYSBzaG93biB3aGVuIG5vIHBpY3R1cmUgc3BlY2lmaWVkXHJcbiAgICogQHR5cGUgc3RyaW5nXHJcbiAgICovXHJcbiAgQElucHV0KCkgY29sb3I6IHN0cmluZztcclxuXHJcbiAgLypcclxuICAgKiBTaXplIG9mIHRoZSBjb21wb25lbnQsIHNtYWxsfG1lZGl1bXxsYXJnZVxyXG4gICAqIEB0eXBlIHN0cmluZ1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNpemUodmFsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2l6ZVZhbHVlID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBXaGV0aGVyIHRvIHNob3cgYSB1c2VyIG5hbWUgb3Igbm90XHJcbiAgICogQHR5cGUgYm9vbGVhblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNob3dOYW1lKHZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5zaG93TmFtZVZhbHVlID0gY29udmVydFRvQm9vbFByb3BlcnR5KHZhbCk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIFdoZXRoZXIgdG8gc2hvdyBhIHVzZXIgdGl0bGUgb3Igbm90XHJcbiAgICogQHR5cGUgYm9vbGVhblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNob3dUaXRsZSh2YWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuc2hvd1RpdGxlVmFsdWUgPSBjb252ZXJ0VG9Cb29sUHJvcGVydHkodmFsKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogV2hldGhlciB0byBzaG93IGEgdXNlciBpbml0aWFscyAoaWYgbm8gcGljdHVyZSBzcGVjaWZpZWQpIG9yIG5vdFxyXG4gICAqIEB0eXBlIGJvb2xlYW5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzaG93SW5pdGlhbHModmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnNob3dJbml0aWFsc1ZhbHVlID0gY29udmVydFRvQm9vbFByb3BlcnR5KHZhbCk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIFdoZXRoZXIgdG8gc2hvdyBvbmx5IGEgcGljdHVyZSBvciBhbHNvIHNob3cgdGhlIG5hbWUgYW5kIHRpdGxlXHJcbiAgICogQHR5cGUgYm9vbGVhblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG9ubHlQaWN0dXJlKHZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5zaG93TmFtZVZhbHVlID0gdGhpcy5zaG93VGl0bGVWYWx1ZSA9ICFjb252ZXJ0VG9Cb29sUHJvcGVydHkodmFsKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogTWFrZXMgY29sb3JzIGludmVyc2UgYmFzZWQgb24gY3VycmVudCB0aGVtZVxyXG4gICAqIEB0eXBlIGJvb2xlYW5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpbnZlcnNlKHZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pbnZlcnNlVmFsdWUgPSBjb252ZXJ0VG9Cb29sUHJvcGVydHkodmFsKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQmFkZ2UgdGV4dCB0byBkaXNwbGF5XHJcbiAgICogQHR5cGUgc3RyaW5nXHJcbiAgICovXHJcbiAgQElucHV0KCkgYmFkZ2VUZXh0OiBzdHJpbmc7XHJcblxyXG4gIC8qXHJcbiAgICogQmFkZ2Ugc3RhdHVzIChhZGRzIHNwZWNpZmljIHN0eWxlcyk6XHJcbiAgICogJ3ByaW1hcnknLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnLCAnZGFuZ2VyJ1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWxcclxuICAgKi9cclxuICBASW5wdXQoKSBiYWRnZVN0YXR1czogc3RyaW5nO1xyXG5cclxuICAvKlxyXG4gICAqIEJhZGdlIHBvc2l0aW9uLlxyXG4gICAqIENhbiBiZSBzZXQgdG8gYW55IGNsYXNzIG9yIHRvIG9uZSBvZiBwcmVkZWZpbmVkIHBvc2l0aW9uczpcclxuICAgKiAndG9wIGxlZnQnLCAndG9wIHJpZ2h0JywgJ2JvdHRvbSBsZWZ0JywgJ2JvdHRvbSByaWdodCcsXHJcbiAgICogJ3RvcCBzdGFydCcsICd0b3AgZW5kJywgJ2JvdHRvbSBzdGFydCcsICdib3R0b20gZW5kJ1xyXG4gICAqIEB0eXBlIHN0cmluZ1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGJhZGdlUG9zaXRpb246IHN0cmluZztcclxuXHJcbiAgaW1hZ2VCYWNrZ3JvdW5kU3R5bGU6IFNhZmVTdHlsZTtcclxuICBzaG93TmFtZVZhbHVlOiBib29sZWFuID0gdHJ1ZTtcclxuICBzaG93VGl0bGVWYWx1ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgc2hvd0luaXRpYWxzVmFsdWU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzTWVudVNob3duOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZG9tU2FuaXRpemVyOiBEb21TYW5pdGl6ZXIpIHsgfVxyXG5cclxuICBnZXRJbml0aWFscygpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMubmFtZSkge1xyXG4gICAgICBjb25zdCBuYW1lcyA9IHRoaXMubmFtZS5zcGxpdCgnICcpO1xyXG5cclxuICAgICAgcmV0dXJuIG5hbWVzLm1hcChuID0+IG4uY2hhckF0KDApKS5zcGxpY2UoMCwgMikuam9pbignJykudG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG59XHJcbiJdfQ==