UNPKG

igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

432 lines • 27.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { CommonModule } from '@angular/common'; import { Component, ElementRef, HostBinding, Input, NgModule, TemplateRef, ViewChild } from '@angular/core'; import { IgxIconModule } from '../icon/index'; /** @type {?} */ let NEXT_ID = 0; /** @enum {string} */ const Size = { SMALL: 'small', MEDIUM: 'medium', LARGE: 'large', }; export { Size }; /** @enum {string} */ const AvatarType = { DEFAULT: 'default', INITIALS: 'initials', IMAGE: 'image', ICON: 'icon', }; export { AvatarType }; /** * **Ignite UI for Angular Avatar** - * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/avatar.html) * * The Ignite UI Avatar provides an easy way to add an avatar icon to your application. This icon can be an * image, someone's initials or a material icon from the google material icon set. * * Example: * ```html * <igx-avatar initials="MS" roundShape="true" size="large"> * </igx-avatar> * ``` */ export class IgxAvatarComponent { /** * @param {?} elementRef */ constructor(elementRef) { this.elementRef = elementRef; /** * Returns the `aria-label` of the avatar. * * ```typescript * let ariaLabel = this.avatar.ariaLabel; * ``` * */ this.ariaLabel = 'avatar'; /** * Returns the `role` attribute of the avatar. * * ```typescript * let avatarRole = this.avatar.role; * ``` * * \@memberof IgxAvatarComponent */ this.role = 'img'; /** * Returns the class of the avatar. * * ```typescript * let avatarCLass = this.avatar.cssClass; * ``` * * \@memberof IgxAvatarComponent */ this.cssClass = 'igx-avatar'; /** * @hidden */ this._size = 'small'; /** * Sets the `id` of the avatar. If not set, the first avatar component will have `id` = `"igx-avatar-0"`. * * ```html * <igx-avatar id="my-first-avatar"></igx-avatar> * ``` * * \@memberof IgxAvatarComponent */ this.id = `igx-avatar-${NEXT_ID++}`; /** * Sets a round shape to the avatar if `roundShape` is `"true"`. * By default the shape of the avatar is a square. * * ```html * <igx-avatar roundShape = "true" ></igx-avatar> * ``` * * \@memberof IgxAvatarComponent */ this.roundShape = false; } /** * Returns the `size` of the avatar. * * ```typescript * let avatarSize = this.avatar.size; * ``` * * \@memberof IgxAvatarComponent * @return {?} */ get size() { return this._size; } /** * Sets the `size` of the avatar. * By default the `size` is `"small"`. It can be set to `"medium"` or `"large"`. * * ``` * <igx-avatar size="large"></igx-avatar> * ``` * * \@memberof IgxAvatarComponent * @param {?} value * @return {?} */ set size(value) { switch (value) { case 'small': case 'medium': case 'large': this._size = value; break; default: this._size = 'small'; } } /** * Returns the type of the avatar. * * ```typescript * let avatarType = this.avatar.type; * ``` * * \@memberof IgxAvatarComponent * @return {?} */ get type() { if (this.src) { return AvatarType.IMAGE; } if (this.icon) { return AvatarType.ICON; } if (this.initials) { return AvatarType.INITIALS; } return AvatarType.DEFAULT; } /** * Returns the template of the avatar. * * ```typescript * let template = this.avatar.template; * ``` * * \@memberof IgxAvatarComponent * @return {?} */ get template() { switch (this.type) { case AvatarType.IMAGE: return this.imageTemplate; case AvatarType.INITIALS: return this.initialsTemplate; case AvatarType.ICON: return this.iconTemplate; default: return this.defaultTemplate; } } /** * @hidden * @return {?} */ ngOnInit() { this.roleDescription = this.getRole(); } /** * @hidden * @return {?} */ ngAfterViewInit() { this.elementRef.nativeElement.classList .add(`igx-avatar--${this._size}`, `igx-avatar--${this.type}`); } /** * @hidden * @private * @return {?} */ getRole() { switch (this.type) { case AvatarType.IMAGE: return 'image avatar'; case AvatarType.ICON: return 'icon avatar'; case AvatarType.INITIALS: return 'initials avatar'; default: return 'custom avatar'; } } /** * Returns the url of the `image`. * * ```typescript * let imageSourceUrl = this.avatar.getSrcUrl(); * ``` * * \@memberof IgxAvatarComponent * @return {?} */ getSrcUrl() { return `url(${this.src})`; } } IgxAvatarComponent.decorators = [ { type: Component, args: [{ selector: 'igx-avatar', template: "<ng-template #defaultTemplate>\n <ng-content></ng-content>\n</ng-template>\n\n<ng-template #imageTemplate>\n <div #image class=\"igx-avatar__image\" [style.backgroundImage]=\"getSrcUrl()\"></div>\n</ng-template>\n\n<ng-template #initialsTemplate>\n <span>{{initials.substring(0, 2)}}</span>\n</ng-template>\n\n<ng-template #iconTemplate>\n <igx-icon>{{icon}}</igx-icon>\n</ng-template>\n\n<ng-container *ngTemplateOutlet=\"template\"></ng-container>\n" }] } ]; /** @nocollapse */ IgxAvatarComponent.ctorParameters = () => [ { type: ElementRef } ]; IgxAvatarComponent.propDecorators = { image: [{ type: ViewChild, args: ['image',] }], defaultTemplate: [{ type: ViewChild, args: ['defaultTemplate', { read: TemplateRef },] }], imageTemplate: [{ type: ViewChild, args: ['imageTemplate', { read: TemplateRef },] }], initialsTemplate: [{ type: ViewChild, args: ['initialsTemplate', { read: TemplateRef },] }], iconTemplate: [{ type: ViewChild, args: ['iconTemplate', { read: TemplateRef },] }], ariaLabel: [{ type: HostBinding, args: ['attr.aria-label',] }], role: [{ type: HostBinding, args: ['attr.role',] }], cssClass: [{ type: HostBinding, args: ['class.igx-avatar',] }], roleDescription: [{ type: HostBinding, args: ['attr.aria-roledescription',] }], id: [{ type: HostBinding, args: ['attr.id',] }, { type: Input }], roundShape: [{ type: HostBinding, args: ['class.igx-avatar--rounded',] }, { type: Input }], color: [{ type: HostBinding, args: ['style.color',] }, { type: Input }], bgColor: [{ type: HostBinding, args: ['style.background',] }, { type: Input }], initials: [{ type: Input }], icon: [{ type: Input }], src: [{ type: Input }], size: [{ type: Input }] }; if (false) { /** * This is a reference to the avatar `image` element in the DOM. * * ```typescript * let image = this.avatar.image; * ``` * \@memberof IgxAvatarComponent * @type {?} */ IgxAvatarComponent.prototype.image; /** * @hidden * @type {?} * @protected */ IgxAvatarComponent.prototype.defaultTemplate; /** * @hidden * @type {?} * @protected */ IgxAvatarComponent.prototype.imageTemplate; /** * @hidden * @type {?} * @protected */ IgxAvatarComponent.prototype.initialsTemplate; /** * @hidden * @type {?} * @protected */ IgxAvatarComponent.prototype.iconTemplate; /** * Returns the `aria-label` of the avatar. * * ```typescript * let ariaLabel = this.avatar.ariaLabel; * ``` * * @type {?} */ IgxAvatarComponent.prototype.ariaLabel; /** * Returns the `role` attribute of the avatar. * * ```typescript * let avatarRole = this.avatar.role; * ``` * * \@memberof IgxAvatarComponent * @type {?} */ IgxAvatarComponent.prototype.role; /** * Returns the class of the avatar. * * ```typescript * let avatarCLass = this.avatar.cssClass; * ``` * * \@memberof IgxAvatarComponent * @type {?} */ IgxAvatarComponent.prototype.cssClass; /** * Returns the type of the avatar. * The avatar can be: `"initials type avatar"`, `"icon type avatar"` or `"image type avatar"`. * * ```typescript * let avatarDescription = this.avatar.roleDescription; * ``` * * \@memberof IgxAvatarComponent * @type {?} */ IgxAvatarComponent.prototype.roleDescription; /** * @hidden * @type {?} * @private */ IgxAvatarComponent.prototype._size; /** * Sets the `id` of the avatar. If not set, the first avatar component will have `id` = `"igx-avatar-0"`. * * ```html * <igx-avatar id="my-first-avatar"></igx-avatar> * ``` * * \@memberof IgxAvatarComponent * @type {?} */ IgxAvatarComponent.prototype.id; /** * Sets a round shape to the avatar if `roundShape` is `"true"`. * By default the shape of the avatar is a square. * * ```html * <igx-avatar roundShape = "true" ></igx-avatar> * ``` * * \@memberof IgxAvatarComponent * @type {?} */ IgxAvatarComponent.prototype.roundShape; /** * Sets the avatar's `initials`/`icon` color. * * ```html * <igx-avatar color="blue"></igx-avatar> * ``` * * \@memberof IgxAvatarComponent * @type {?} */ IgxAvatarComponent.prototype.color; /** * Sets the background color of the avatar. * * ```html * <igx-avatar bgColor="yellow"></igx-avatar> * ``` * * \@memberof IgxAvatarComponent * @type {?} */ IgxAvatarComponent.prototype.bgColor; /** * Sets `initials` to the avatar. * * ```html * <igx-avatar initials="MN"></igx-avatar> * ``` * * \@memberof IgxAvatarComponent * @type {?} */ IgxAvatarComponent.prototype.initials; /** * Sets an `icon` to the avatar. All icons from the material icon set are supported. * * ```html * <igx-avatar icon="phone"></igx-avatar> * ``` * * \@memberof IgxAvatarComponent * @type {?} */ IgxAvatarComponent.prototype.icon; /** * Sets the `image` source of the avatar. * * ```html * <igx-avatar src="images/picture.jpg"></igx-avatar> * ``` * * \@memberof IgxAvatarComponent * @type {?} */ IgxAvatarComponent.prototype.src; /** @type {?} */ IgxAvatarComponent.prototype.elementRef; } /** * @hidden */ export class IgxAvatarModule { } IgxAvatarModule.decorators = [ { type: NgModule, args: [{ declarations: [IgxAvatarComponent], exports: [IgxAvatarComponent], imports: [CommonModule, IgxIconModule] },] } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvYXZhdGFyL2F2YXRhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBRUgsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUNMLFFBQVEsRUFFUixXQUFXLEVBQ1gsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7O0lBRTFDLE9BQU8sR0FBRyxDQUFDOzs7SUFHWCxPQUFRLE9BQU87SUFDZixRQUFTLFFBQVE7SUFDakIsT0FBUSxPQUFPOzs7OztJQUlmLFNBQVUsU0FBUztJQUNuQixVQUFXLFVBQVU7SUFDckIsT0FBUSxPQUFPO0lBQ2YsTUFBTyxNQUFNOzs7Ozs7Ozs7Ozs7Ozs7O0FBb0JqQixNQUFNLE9BQU8sa0JBQWtCOzs7O0lBMFEzQixZQUFtQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZOzs7Ozs7Ozs7UUE1TmxDLGNBQVMsR0FBRyxRQUFRLENBQUM7Ozs7Ozs7Ozs7UUFZckIsU0FBSSxHQUFHLEtBQUssQ0FBQzs7Ozs7Ozs7OztRQVliLGFBQVEsR0FBRyxZQUFZLENBQUM7Ozs7UUFtQnZCLFVBQUssR0FBa0IsT0FBTyxDQUFDOzs7Ozs7Ozs7O1FBYWhDLE9BQUUsR0FBRyxjQUFjLE9BQU8sRUFBRSxFQUFFLENBQUM7Ozs7Ozs7Ozs7O1FBZS9CLGVBQVUsR0FBRyxLQUFLLENBQUM7SUFxSm1CLENBQUM7Ozs7Ozs7Ozs7O0lBMUU5QyxJQUNXLElBQUk7UUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQzs7Ozs7Ozs7Ozs7OztJQVlELElBQVcsSUFBSSxDQUFDLEtBQW9CO1FB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bUJBWUwsS0FBSztrQkFZTCxLQUFLO21CQVlMLEtBQUs7Ozs7Ozs7Ozs7OztJQXRMTixtQ0FDeUI7Ozs7OztJQUt6Qiw2Q0FDNEM7Ozs7OztJQUs1QywyQ0FDMEM7Ozs7OztJQUsxQyw4Q0FDNkM7Ozs7OztJQUs3QywwQ0FDeUM7Ozs7Ozs7Ozs7SUFVekMsdUNBQzRCOzs7Ozs7Ozs7OztJQVc1QixrQ0FDb0I7Ozs7Ozs7Ozs7O0lBV3BCLHNDQUMrQjs7Ozs7Ozs7Ozs7O0lBYS9CLDZDQUMrQjs7Ozs7O0lBSy9CLG1DQUF1Qzs7Ozs7Ozs7Ozs7SUFXdkMsZ0NBRXNDOzs7Ozs7Ozs7Ozs7SUFhdEMsd0NBRTBCOzs7Ozs7Ozs7OztJQVkxQixtQ0FFcUI7Ozs7Ozs7Ozs7O0lBWXJCLHFDQUV1Qjs7Ozs7Ozs7Ozs7SUFXdkIsc0NBQ3dCOzs7Ozs7Ozs7OztJQVd4QixrQ0FDb0I7Ozs7Ozs7Ozs7O0lBV3BCLGlDQUNtQjs7SUFxRlAsd0NBQTZCOzs7OztBQXVEN0MsTUFBTSxPQUFPLGVBQWU7OztZQUwzQixRQUFRLFNBQUM7Z0JBQ04sWUFBWSxFQUFFLENBQUMsa0JBQWtCLENBQUM7Z0JBQ2xDLE9BQU8sRUFBRSxDQUFDLGtCQUFrQixDQUFDO2dCQUM3QixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDO2FBQ3pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBOZ01vZHVsZSxcbiAgICBPbkluaXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4SWNvbk1vZHVsZSB9IGZyb20gJy4uL2ljb24vaW5kZXgnO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5cbmV4cG9ydCBlbnVtIFNpemUge1xuICAgIFNNQUxMID0gJ3NtYWxsJyxcbiAgICBNRURJVU0gPSAnbWVkaXVtJyxcbiAgICBMQVJHRSA9ICdsYXJnZSdcbn1cblxuZXhwb3J0IGVudW0gQXZhdGFyVHlwZSB7XG4gICAgREVGQVVMVCA9ICdkZWZhdWx0JyxcbiAgICBJTklUSUFMUyA9ICdpbml0aWFscycsXG4gICAgSU1BR0UgPSAnaW1hZ2UnLFxuICAgIElDT04gPSAnaWNvbidcbn1cblxuLyoqXG4gKiAqKklnbml0ZSBVSSBmb3IgQW5ndWxhciBBdmF0YXIqKiAtXG4gKiBbRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly93d3cuaW5mcmFnaXN0aWNzLmNvbS9wcm9kdWN0cy9pZ25pdGUtdWktYW5ndWxhci9hbmd1bGFyL2NvbXBvbmVudHMvYXZhdGFyLmh0bWwpXG4gKlxuICogVGhlIElnbml0ZSBVSSBBdmF0YXIgcHJvdmlkZXMgYW4gZWFzeSB3YXkgdG8gYWRkIGFuIGF2YXRhciBpY29uIHRvIHlvdXIgYXBwbGljYXRpb24uICBUaGlzIGljb24gY2FuIGJlIGFuXG4gKiBpbWFnZSwgc29tZW9uZSdzIGluaXRpYWxzIG9yIGEgbWF0ZXJpYWwgaWNvbiBmcm9tIHRoZSBnb29nbGUgbWF0ZXJpYWwgaWNvbiBzZXQuXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtYXZhdGFyIGluaXRpYWxzPVwiTVNcIiByb3VuZFNoYXBlPVwidHJ1ZVwiIHNpemU9XCJsYXJnZVwiPlxuICogPC9pZ3gtYXZhdGFyPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LWF2YXRhcicsXG4gICAgdGVtcGxhdGVVcmw6ICdhdmF0YXIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIElneEF2YXRhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBhdmF0YXIgYGltYWdlYCBlbGVtZW50IGluIHRoZSBET00uXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIGxldCBpbWFnZSA9ICB0aGlzLmF2YXRhci5pbWFnZTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4QXZhdGFyQ29tcG9uZW50XG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnaW1hZ2UnKVxuICAgIHB1YmxpYyBpbWFnZTogRWxlbWVudFJlZjtcblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnaW1hZ2VUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBwcm90ZWN0ZWQgaW1hZ2VUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2luaXRpYWxzVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHJvdGVjdGVkIGluaXRpYWxzVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdpY29uVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHJvdGVjdGVkIGljb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGBhcmlhLWxhYmVsYCBvZiB0aGUgYXZhdGFyLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBhcmlhTGFiZWwgPSB0aGlzLmF2YXRhci5hcmlhTGFiZWw7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbCcpXG4gICAgcHVibGljIGFyaWFMYWJlbCA9ICdhdmF0YXInO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYHJvbGVgIGF0dHJpYnV0ZSBvZiB0aGUgYXZhdGFyLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBhdmF0YXJSb2xlID0gdGhpcy5hdmF0YXIucm9sZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hBdmF0YXJDb21wb25lbnRcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgcHVibGljIHJvbGUgPSAnaW1nJztcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNsYXNzIG9mIHRoZSBhdmF0YXIuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGF2YXRhckNMYXNzID0gIHRoaXMuYXZhdGFyLmNzc0NsYXNzO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEF2YXRhckNvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWF2YXRhcicpXG4gICAgcHVibGljIGNzc0NsYXNzID0gJ2lneC1hdmF0YXInO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgYXZhdGFyLlxuICAgICAqIFRoZSBhdmF0YXIgY2FuIGJlOiBgXCJpbml0aWFscyB0eXBlIGF2YXRhclwiYCwgYFwiaWNvbiB0eXBlIGF2YXRhclwiYCBvciBgXCJpbWFnZSB0eXBlIGF2YXRhclwiYC5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgYXZhdGFyRGVzY3JpcHRpb24gPSB0aGlzLmF2YXRhci5yb2xlRGVzY3JpcHRpb247XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4QXZhdGFyQ29tcG9uZW50XG4gICAgICovXG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yb2xlZGVzY3JpcHRpb24nKVxuICAgIHB1YmxpYyByb2xlRGVzY3JpcHRpb246IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9zaXplOiBzdHJpbmcgfCBTaXplID0gJ3NtYWxsJztcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGBpZGAgb2YgdGhlIGF2YXRhci4gSWYgbm90IHNldCwgdGhlIGZpcnN0IGF2YXRhciBjb21wb25lbnQgd2lsbCBoYXZlIGBpZGAgPSBgXCJpZ3gtYXZhdGFyLTBcImAuXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1hdmF0YXIgaWQ9XCJteS1maXJzdC1hdmF0YXJcIj48L2lneC1hdmF0YXI+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4QXZhdGFyQ29tcG9uZW50XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBpZ3gtYXZhdGFyLSR7TkVYVF9JRCsrfWA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgcm91bmQgc2hhcGUgdG8gdGhlIGF2YXRhciBpZiBgcm91bmRTaGFwZWAgaXMgYFwidHJ1ZVwiYC5cbiAgICAgKiBCeSBkZWZhdWx0IHRoZSBzaGFwZSBvZiB0aGUgYXZhdGFyIGlzIGEgc3F1YXJlLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtYXZhdGFyIHJvdW5kU2hhcGUgPSBcInRydWVcIiA+PC9pZ3gtYXZhdGFyPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEF2YXRhckNvbXBvbmVudFxuICAgICAqL1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtYXZhdGFyLS1yb3VuZGVkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByb3VuZFNoYXBlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhdmF0YXIncyBgaW5pdGlhbHNgL2BpY29uYCBjb2xvci5cbiAgICAgKlxuICAgICAqYGBgaHRtbFxuICAgICAqPGlneC1hdmF0YXIgY29sb3I9XCJibHVlXCI+PC9pZ3gtYXZhdGFyPlxuICAgICAqYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4QXZhdGFyQ29tcG9uZW50XG4gICAgICovXG5cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmNvbG9yJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjb2xvcjogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgYXZhdGFyLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtYXZhdGFyIGJnQ29sb3I9XCJ5ZWxsb3dcIj48L2lneC1hdmF0YXI+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4QXZhdGFyQ29tcG9uZW50XG4gICAgICovXG5cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmJhY2tncm91bmQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGJnQ29sb3I6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFNldHMgYGluaXRpYWxzYCB0byB0aGUgYXZhdGFyLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtYXZhdGFyIGluaXRpYWxzPVwiTU5cIj48L2lneC1hdmF0YXI+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4QXZhdGFyQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaW5pdGlhbHM6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFNldHMgYW4gYGljb25gIHRvIHRoZSBhdmF0YXIuIEFsbCBpY29ucyBmcm9tIHRoZSBtYXRlcmlhbCBpY29uIHNldCBhcmUgc3VwcG9ydGVkLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtYXZhdGFyIGljb249XCJwaG9uZVwiPjwvaWd4LWF2YXRhcj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hBdmF0YXJDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpY29uOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgaW1hZ2VgIHNvdXJjZSBvZiB0aGUgYXZhdGFyLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtYXZhdGFyIHNyYz1cImltYWdlcy9waWN0dXJlLmpwZ1wiPjwvaWd4LWF2YXRhcj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hBdmF0YXJDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzcmM6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGBzaXplYCBvZiB0aGUgYXZhdGFyLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqbGV0IGF2YXRhclNpemUgPSAgdGhpcy5hdmF0YXIuc2l6ZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hBdmF0YXJDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgc2l6ZSgpOiBzdHJpbmcgfCBTaXplIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYHNpemVgICBvZiB0aGUgYXZhdGFyLlxuICAgICAqIEJ5IGRlZmF1bHQgdGhlIGBzaXplYCBpcyBgXCJzbWFsbFwiYC4gSXQgY2FuIGJlIHNldCB0byBgXCJtZWRpdW1cImAgb3IgYFwibGFyZ2VcImAuXG4gICAgICpcbiAgICAgKiBgYGBcbiAgICAgKiA8aWd4LWF2YXRhciBzaXplPVwibGFyZ2VcIj48L2lneC1hdmF0YXI+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4QXZhdGFyQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHNldCBzaXplKHZhbHVlOiBzdHJpbmcgfCBTaXplKSB7XG4gICAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NtYWxsJzpcbiAgICAgICAgICAgIGNhc2UgJ21lZGl1bSc6XG4gICAgICAgICAgICBjYXNlICdsYXJnZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5fc2l6ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aGlzLl9zaXplID0gJ3NtYWxsJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGF2YXRhci5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgYXZhdGFyVHlwZSA9IHRoaXMuYXZhdGFyLnR5cGU7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4QXZhdGFyQ29tcG9uZW50XG4gICAgICovXG4gICAgZ2V0IHR5cGUoKTogQXZhdGFyVHlwZSB7XG4gICAgICAgIGlmICh0aGlzLnNyYykge1xuICAgICAgICAgICAgcmV0dXJuIEF2YXRhclR5cGUuSU1BR0U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pY29uKSB7XG4gICAgICAgICAgICByZXR1cm4gQXZhdGFyVHlwZS5JQ09OO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbHMpIHtcbiAgICAgICAgICAgIHJldHVybiBBdmF0YXJUeXBlLklOSVRJQUxTO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEF2YXRhclR5cGUuREVGQVVMVDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB0ZW1wbGF0ZSBvZiB0aGUgYXZhdGFyLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCB0ZW1wbGF0ZSA9IHRoaXMuYXZhdGFyLnRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEF2YXRhckNvbXBvbmVudFxuICAgICAqL1xuICAgIGdldCB0ZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQXZhdGFyVHlwZS5JTUFHRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZVRlbXBsYXRlO1xuICAgICAgICAgICAgY2FzZSBBdmF0YXJUeXBlLklOSVRJQUxTOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluaXRpYWxzVGVtcGxhdGU7XG4gICAgICAgICAgICBjYXNlIEF2YXRhclR5cGUuSUNPTjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pY29uVGVtcGxhdGU7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRUZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7IH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucm9sZURlc2NyaXB0aW9uID0gdGhpcy5nZXRSb2xlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0XG4gICAgICAgICAgICAuYWRkKGBpZ3gtYXZhdGFyLS0ke3RoaXMuX3NpemV9YCwgYGlneC1hdmF0YXItLSR7dGhpcy50eXBlfWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFJvbGUoKTogc3RyaW5nIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQXZhdGFyVHlwZS5JTUFHRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2ltYWdlIGF2YXRhcic7XG4gICAgICAgICAgICBjYXNlIEF2YXRhclR5cGUuSUNPTjpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2ljb24gYXZhdGFyJztcbiAgICAgICAgICAgIGNhc2UgQXZhdGFyVHlwZS5JTklUSUFMUzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2luaXRpYWxzIGF2YXRhcic7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAnY3VzdG9tIGF2YXRhcic7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB1cmwgb2YgdGhlIGBpbWFnZWAuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGltYWdlU291cmNlVXJsID0gdGhpcy5hdmF0YXIuZ2V0U3JjVXJsKCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4QXZhdGFyQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldFNyY1VybCgpIHtcbiAgICAgICAgcmV0dXJuIGB1cmwoJHt0aGlzLnNyY30pYDtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW0lneEF2YXRhckNvbXBvbmVudF0sXG4gICAgZXhwb3J0czogW0lneEF2YXRhckNvbXBvbmVudF0sXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSWd4SWNvbk1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4QXZhdGFyTW9kdWxlIHsgfVxuIl19