@engie-group/fluid-design-system-angular
Version:
Fluid Design System Angular
129 lines • 21 kB
JavaScript
import { CommonModule } from '@angular/common';
import { Component, Input, ViewChild, ViewEncapsulation } from '@angular/core';
import { Utils } from '../../utils/utils.util';
import { BadgeComponent } from '../badge/badge.component';
import { TooltipDirective } from '../tooltip/directives/tooltip.directive';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
export class AvatarComponent {
constructor() {
this.avatarClassName = 'nj-avatar';
/**
* Notification color
*/
this.notificationVariant = 'information';
}
/**
* @ignore
*/
getFormattedInitials() {
if (this.initials?.length > 3) {
return this?.initials.slice(0, 3);
}
else {
return this.initials;
}
}
/**
* @ignore
*/
getBadgeSize() {
switch (this.size) {
case 'xl':
return 'lg';
default:
return 'md';
}
}
/**
* @ignore
*/
getAvatarSizeClass() {
return this.size ? `${this.avatarClassName}--${this.size}` : '';
}
/**
* @ignore
*/
getAvatarDefaultIconClass() {
return !this.hasInitials() && !this.hasPicture ? `${this.avatarClassName}--default-icon` : '';
}
/**
* @ignore
*/
getAvatarInitialsClass() {
return this.hasInitials() && !this.hasPicture ? `${this.avatarClassName}--initials` : '';
}
/**
* @ignore
*/
getAvatarIsClickableClass() {
return this.isClickable ? `${this.avatarClassName}--clickable` : '';
}
/**
* @ignore
*/
getHasPictureClass() {
return this.hasPicture ? `${this.avatarClassName}--picture` : '';
}
/**
* @ignore
*/
getAvatarIsRemainingCountClass() {
return this.isRemainingCount ? `${this.avatarClassName}--remaining-count` : '';
}
/**
* @ignore
*/
hasInitials() {
return !Utils.isUndefinedOrNull(this.initials) && this.initials?.trim() !== '';
}
/**
* @ignore
*/
getAvatarClasses() {
return [
this.getAvatarDefaultIconClass(),
this.getAvatarSizeClass(),
this.getAvatarInitialsClass(),
this.getAvatarIsClickableClass(),
this.getAvatarIsRemainingCountClass(),
this.getHasPictureClass()
];
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AvatarComponent, isStandalone: true, selector: "nj-avatar", inputs: { href: "href", initials: "initials", label: "label", size: "size", hasPicture: "hasPicture", isClickable: "isClickable", notification: "notification", notificationCapedValue: "notificationCapedValue", notificationEmphasis: "notificationEmphasis", notificationVariant: "notificationVariant", notificationUnitLabel: "notificationUnitLabel", isRemainingCount: "isRemainingCount", tooltipOptions: "tooltipOptions" }, viewQueries: [{ propertyName: "avatarTemplate", first: true, predicate: ["avatarTemplate"], descendants: true }], ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"avatarTemplate\"></ng-container>\n\n<ng-template #tagContent>\n <ng-content></ng-content>\n <p class=\"nj-sr-only\">{{label}}</p>\n <span aria-hidden=\"true\">{{getFormattedInitials()}}</span>\n\n <nj-badge *ngIf=\"notification && size !== 'sm'\"\n [value]=\"notification\"\n [capedValue]=\"notificationCapedValue\"\n [size]=\"getBadgeSize()\"\n [variant]=\"notificationVariant\"\n [emphasis]=\"notificationEmphasis\"\n [unitLabel]=\"notificationUnitLabel\">\n </nj-badge>\n</ng-template>\n\n<ng-template #avatarTemplate>\n <a *ngIf=\"!tooltipOptions && href\" [href]=\"href\" class=\"nj-avatar\"\n [ngClass]=\"getAvatarClasses()\">\n <ng-container *ngTemplateOutlet=\"tagContent\"></ng-container>\n </a>\n <button *ngIf=\"!tooltipOptions && isClickable\" class=\"nj-avatar\"\n [ngClass]=\"getAvatarClasses()\">\n <ng-container *ngTemplateOutlet=\"tagContent\"></ng-container>\n </button>\n <div *ngIf=\"!tooltipOptions && !href && !isClickable\" class=\"nj-avatar\"\n [ngClass]=\"getAvatarClasses()\">\n <ng-container *ngTemplateOutlet=\"tagContent\"></ng-container>\n </div>\n <a *ngIf=\"tooltipOptions && href\" [href]=\"href\" class=\"nj-avatar\"\n njTooltip [tooltipOptions]=\"tooltipOptions\"\n [ngClass]=\"getAvatarClasses()\">\n <ng-container *ngTemplateOutlet=\"tagContent\"></ng-container>\n </a>\n <button *ngIf=\"tooltipOptions && isClickable\" class=\"nj-avatar\"\n njTooltip [tooltipOptions]=\"tooltipOptions\"\n [ngClass]=\"getAvatarClasses()\">\n <ng-container *ngTemplateOutlet=\"tagContent\"></ng-container>\n </button>\n <div *ngIf=\"tooltipOptions && !href && !isClickable\" class=\"nj-avatar\"\n njTooltip [tooltipOptions]=\"tooltipOptions\"\n [ngClass]=\"getAvatarClasses()\">\n <ng-container *ngTemplateOutlet=\"tagContent\"></ng-container>\n </div>\n</ng-template>\n", dependencies: [{ kind: "component", type: BadgeComponent, selector: "nj-badge", inputs: ["emphasis", "variant", "size", "iconName", "value", "capedValue", "isUppercase", "unitLabel"] }, { kind: "directive", type: TooltipDirective, selector: "[njTooltip]", inputs: ["tooltipOptions", "tooltipCustomContent"], exportAs: ["njTooltip"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AvatarComponent, decorators: [{
type: Component,
args: [{ selector: 'nj-avatar', encapsulation: ViewEncapsulation.None, standalone: true, imports: [BadgeComponent, TooltipDirective, CommonModule], template: "<ng-container *ngTemplateOutlet=\"avatarTemplate\"></ng-container>\n\n<ng-template #tagContent>\n <ng-content></ng-content>\n <p class=\"nj-sr-only\">{{label}}</p>\n <span aria-hidden=\"true\">{{getFormattedInitials()}}</span>\n\n <nj-badge *ngIf=\"notification && size !== 'sm'\"\n [value]=\"notification\"\n [capedValue]=\"notificationCapedValue\"\n [size]=\"getBadgeSize()\"\n [variant]=\"notificationVariant\"\n [emphasis]=\"notificationEmphasis\"\n [unitLabel]=\"notificationUnitLabel\">\n </nj-badge>\n</ng-template>\n\n<ng-template #avatarTemplate>\n <a *ngIf=\"!tooltipOptions && href\" [href]=\"href\" class=\"nj-avatar\"\n [ngClass]=\"getAvatarClasses()\">\n <ng-container *ngTemplateOutlet=\"tagContent\"></ng-container>\n </a>\n <button *ngIf=\"!tooltipOptions && isClickable\" class=\"nj-avatar\"\n [ngClass]=\"getAvatarClasses()\">\n <ng-container *ngTemplateOutlet=\"tagContent\"></ng-container>\n </button>\n <div *ngIf=\"!tooltipOptions && !href && !isClickable\" class=\"nj-avatar\"\n [ngClass]=\"getAvatarClasses()\">\n <ng-container *ngTemplateOutlet=\"tagContent\"></ng-container>\n </div>\n <a *ngIf=\"tooltipOptions && href\" [href]=\"href\" class=\"nj-avatar\"\n njTooltip [tooltipOptions]=\"tooltipOptions\"\n [ngClass]=\"getAvatarClasses()\">\n <ng-container *ngTemplateOutlet=\"tagContent\"></ng-container>\n </a>\n <button *ngIf=\"tooltipOptions && isClickable\" class=\"nj-avatar\"\n njTooltip [tooltipOptions]=\"tooltipOptions\"\n [ngClass]=\"getAvatarClasses()\">\n <ng-container *ngTemplateOutlet=\"tagContent\"></ng-container>\n </button>\n <div *ngIf=\"tooltipOptions && !href && !isClickable\" class=\"nj-avatar\"\n njTooltip [tooltipOptions]=\"tooltipOptions\"\n [ngClass]=\"getAvatarClasses()\">\n <ng-container *ngTemplateOutlet=\"tagContent\"></ng-container>\n </div>\n</ng-template>\n" }]
}], ctorParameters: function () { return []; }, propDecorators: { href: [{
type: Input
}], initials: [{
type: Input
}], label: [{
type: Input
}], size: [{
type: Input
}], hasPicture: [{
type: Input
}], isClickable: [{
type: Input
}], notification: [{
type: Input
}], notificationCapedValue: [{
type: Input
}], notificationEmphasis: [{
type: Input
}], notificationVariant: [{
type: Input
}], notificationUnitLabel: [{
type: Input
}], isRemainingCount: [{
type: Input
}], tooltipOptions: [{
type: Input
}], avatarTemplate: [{
type: ViewChild,
args: ['avatarTemplate']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F2YXRhci9hdmF0YXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXZhdGFyL2F2YXRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUNBQXlDLENBQUM7OztBQVczRSxNQUFNLE9BQU8sZUFBZTtJQXlFMUI7UUF4RVEsb0JBQWUsR0FBRyxXQUFXLENBQUM7UUErQ3RDOztXQUVHO1FBQ00sd0JBQW1CLEdBQWlCLGFBQWEsQ0FBQztJQXNCNUMsQ0FBQztJQUVoQjs7T0FFRztJQUNILG9CQUFvQjtRQUNsQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM3QixPQUFPLElBQUksRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNuQzthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ3RCO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWTtRQUNWLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNqQixLQUFLLElBQUk7Z0JBQ1AsT0FBTyxJQUFJLENBQUM7WUFDZDtnQkFDRSxPQUFPLElBQUksQ0FBQztTQUNmO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsa0JBQWtCO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2xFLENBQUM7SUFFRDs7T0FFRztJQUNILHlCQUF5QjtRQUN2QixPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2hHLENBQUM7SUFFRDs7T0FFRztJQUNILHNCQUFzQjtRQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDM0YsQ0FBQztJQUVEOztPQUVHO0lBQ0gseUJBQXlCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN0RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ25FLENBQUM7SUFFRDs7T0FFRztJQUNILDhCQUE4QjtRQUM1QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2pGLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDVCxPQUFPLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNqRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0I7UUFDZCxPQUFPO1lBQ0wsSUFBSSxDQUFDLHlCQUF5QixFQUFFO1lBQ2hDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUN6QixJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDN0IsSUFBSSxDQUFDLHlCQUF5QixFQUFFO1lBQ2hDLElBQUksQ0FBQyw4QkFBOEIsRUFBRTtZQUNyQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7U0FDMUIsQ0FBQztJQUNKLENBQUM7K0dBL0pVLGVBQWU7bUdBQWYsZUFBZSw2bEJDaEI1QixnOERBOENBLDRDRGhDWSxjQUFjLDZKQUFFLGdCQUFnQixvSUFBRSxZQUFZOzs0RkFFN0MsZUFBZTtrQkFQM0IsU0FBUzsrQkFDRSxXQUFXLGlCQUVOLGlCQUFpQixDQUFDLElBQUksY0FDekIsSUFBSSxXQUNQLENBQUMsY0FBYyxFQUFFLGdCQUFnQixFQUFFLFlBQVksQ0FBQzswRUFRaEQsSUFBSTtzQkFBWixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csS0FBSztzQkFBYixLQUFLO2dCQUtHLElBQUk7c0JBQVosS0FBSztnQkFLRyxVQUFVO3NCQUFsQixLQUFLO2dCQUtHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS0csWUFBWTtzQkFBcEIsS0FBSztnQkFLRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBS0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUtHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFLRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBS0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUtHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBS3VCLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVdGlscyB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWxzLnV0aWwnO1xuaW1wb3J0IHsgQmFkZ2VDb21wb25lbnQgfSBmcm9tICcuLi9iYWRnZS9iYWRnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQmFkZ2VFbXBoYXNpcywgQmFkZ2VTaXplLCBCYWRnZVZhcmlhbnQgfSBmcm9tICcuLi9iYWRnZS9iYWRnZS5tb2RlbCc7XG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnLi4vdG9vbHRpcC9kaXJlY3RpdmVzL3Rvb2x0aXAuZGlyZWN0aXZlJztcbmltcG9ydCB7IFRvb2x0aXBPcHRpb25zIH0gZnJvbSAnLi4vdG9vbHRpcC90b29sdGlwLm1vZGVsJztcbmltcG9ydCB7IEF2YXRhclNpemUgfSBmcm9tICcuL2F2YXRhci5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25qLWF2YXRhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdmF0YXIuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQmFkZ2VDb21wb25lbnQsIFRvb2x0aXBEaXJlY3RpdmUsIENvbW1vbk1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgQXZhdGFyQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBhdmF0YXJDbGFzc05hbWUgPSAnbmotYXZhdGFyJztcblxuICAvKipcbiAgICogTGluayBocmVmLCBpZiBzZXQgYXZhdGFyIGlzIGEgbGluayA8YT5cbiAgICovXG4gIEBJbnB1dCgpIGhyZWY6IHN0cmluZztcblxuICAvKipcbiAgICogSW5pdGlhbHMgb2YgYXZhdGFyLCBtYXggMyBjaGFyYWN0ZXJzIGlmIGEgc3RyaW5nIHdpdGggYSBiaWdnZXIgbGVuZ3RoIHRoYW4gMyBjaGFyYWN0ZXJzIG9ubHkgMyBmaXJzdCBjaGFyYWN0ZXJzIGFyZSB0YWtlblxuICAgKi9cbiAgQElucHV0KCkgaW5pdGlhbHM6IHN0cmluZztcblxuICAvKipcbiAgICogVGV4dCBhbHRlcm5hdGl2ZSBmb3IgdGhlIGF2YXRhclxuICAgKi9cbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQXZhdGFyIHNpemVcbiAgICovXG4gIEBJbnB1dCgpIHNpemU6IEF2YXRhclNpemU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYXZhdGFyIGhhcyBhIHBpY3R1cmUgb3Igbm90XG4gICAqL1xuICBASW5wdXQoKSBoYXNQaWN0dXJlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGF2YXRhciBpcyBjbGlja2FibGUgb3Igbm90XG4gICAqL1xuICBASW5wdXQoKSBpc0NsaWNrYWJsZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogTm90aWZpY2F0aW9ucyBudW1iZXIgb3Igc3RyaW5nXG4gICAqL1xuICBASW5wdXQoKSBub3RpZmljYXRpb246IG51bWJlciB8IHN0cmluZztcblxuICAvKipcbiAgICogTWF4IG5vdGlmaWNhdGlvbiBudW1iZXJcbiAgICovXG4gIEBJbnB1dCgpIG5vdGlmaWNhdGlvbkNhcGVkVmFsdWU6IG51bWJlcjtcblxuICAvKipcbiAgICogTm90aWZpY2F0aW9uIGVtcGhhc2lzXG4gICAqL1xuICBASW5wdXQoKSBub3RpZmljYXRpb25FbXBoYXNpczogQmFkZ2VFbXBoYXNpcztcblxuICAvKipcbiAgICogTm90aWZpY2F0aW9uIGNvbG9yXG4gICAqL1xuICBASW5wdXQoKSBub3RpZmljYXRpb25WYXJpYW50OiBCYWRnZVZhcmlhbnQgPSAnaW5mb3JtYXRpb24nO1xuXG4gIC8qKlxuICAgKiBVbml0IGxhYmVsIGZvciBgbmotYmFkZ2VgXG4gICAqL1xuICBASW5wdXQoKSBub3RpZmljYXRpb25Vbml0TGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqICBVc2VkIGZvciBOSkF2YXRhckdyb3VwIGFzIHRoZSBsYXN0IHRpbGUgb2YgdGhlIGdyb3VwXG4gICAqKi9cbiAgQElucHV0KCkgaXNSZW1haW5pbmdDb3VudD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqICBUb29sdGlwJ3Mgb3B0aW9uc1xuICAgKiovXG4gIEBJbnB1dCgpIHRvb2x0aXBPcHRpb25zPzogVG9vbHRpcE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIEBWaWV3Q2hpbGQoJ2F2YXRhclRlbXBsYXRlJykgYXZhdGFyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBnZXRGb3JtYXR0ZWRJbml0aWFscygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmluaXRpYWxzPy5sZW5ndGggPiAzKSB7XG4gICAgICByZXR1cm4gdGhpcz8uaW5pdGlhbHMuc2xpY2UoMCwgMyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmluaXRpYWxzO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBnZXRCYWRnZVNpemUoKTogQmFkZ2VTaXplIHtcbiAgICBzd2l0Y2ggKHRoaXMuc2l6ZSkge1xuICAgICAgY2FzZSAneGwnOlxuICAgICAgICByZXR1cm4gJ2xnJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnbWQnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBnZXRBdmF0YXJTaXplQ2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zaXplID8gYCR7dGhpcy5hdmF0YXJDbGFzc05hbWV9LS0ke3RoaXMuc2l6ZX1gIDogJyc7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZ2V0QXZhdGFyRGVmYXVsdEljb25DbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiAhdGhpcy5oYXNJbml0aWFscygpICYmICF0aGlzLmhhc1BpY3R1cmUgPyBgJHt0aGlzLmF2YXRhckNsYXNzTmFtZX0tLWRlZmF1bHQtaWNvbmAgOiAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBnZXRBdmF0YXJJbml0aWFsc0NsYXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaGFzSW5pdGlhbHMoKSAmJiAhdGhpcy5oYXNQaWN0dXJlID8gYCR7dGhpcy5hdmF0YXJDbGFzc05hbWV9LS1pbml0aWFsc2AgOiAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBnZXRBdmF0YXJJc0NsaWNrYWJsZUNsYXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNDbGlja2FibGUgPyBgJHt0aGlzLmF2YXRhckNsYXNzTmFtZX0tLWNsaWNrYWJsZWAgOiAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBnZXRIYXNQaWN0dXJlQ2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5oYXNQaWN0dXJlID8gYCR7dGhpcy5hdmF0YXJDbGFzc05hbWV9LS1waWN0dXJlYCA6ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGdldEF2YXRhcklzUmVtYWluaW5nQ291bnRDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlzUmVtYWluaW5nQ291bnQgPyBgJHt0aGlzLmF2YXRhckNsYXNzTmFtZX0tLXJlbWFpbmluZy1jb3VudGAgOiAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBoYXNJbml0aWFscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIVV0aWxzLmlzVW5kZWZpbmVkT3JOdWxsKHRoaXMuaW5pdGlhbHMpICYmIHRoaXMuaW5pdGlhbHM/LnRyaW0oKSAhPT0gJyc7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZ2V0QXZhdGFyQ2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuZ2V0QXZhdGFyRGVmYXVsdEljb25DbGFzcygpLFxuICAgICAgdGhpcy5nZXRBdmF0YXJTaXplQ2xhc3MoKSxcbiAgICAgIHRoaXMuZ2V0QXZhdGFySW5pdGlhbHNDbGFzcygpLFxuICAgICAgdGhpcy5nZXRBdmF0YXJJc0NsaWNrYWJsZUNsYXNzKCksXG4gICAgICB0aGlzLmdldEF2YXRhcklzUmVtYWluaW5nQ291bnRDbGFzcygpLFxuICAgICAgdGhpcy5nZXRIYXNQaWN0dXJlQ2xhc3MoKVxuICAgIF07XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhdmF0YXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3RhZ0NvbnRlbnQ+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPHAgY2xhc3M9XCJuai1zci1vbmx5XCI+e3tsYWJlbH19PC9wPlxuICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj57e2dldEZvcm1hdHRlZEluaXRpYWxzKCl9fTwvc3Bhbj5cblxuICA8bmotYmFkZ2UgKm5nSWY9XCJub3RpZmljYXRpb24gJiYgc2l6ZSAhPT0gJ3NtJ1wiXG4gICAgICAgICAgICBbdmFsdWVdPVwibm90aWZpY2F0aW9uXCJcbiAgICAgICAgICAgIFtjYXBlZFZhbHVlXT1cIm5vdGlmaWNhdGlvbkNhcGVkVmFsdWVcIlxuICAgICAgICAgICAgW3NpemVdPVwiZ2V0QmFkZ2VTaXplKClcIlxuICAgICAgICAgICAgW3ZhcmlhbnRdPVwibm90aWZpY2F0aW9uVmFyaWFudFwiXG4gICAgICAgICAgICBbZW1waGFzaXNdPVwibm90aWZpY2F0aW9uRW1waGFzaXNcIlxuICAgICAgICAgICAgW3VuaXRMYWJlbF09XCJub3RpZmljYXRpb25Vbml0TGFiZWxcIj5cbiAgPC9uai1iYWRnZT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYXZhdGFyVGVtcGxhdGU+XG4gIDxhICpuZ0lmPVwiIXRvb2x0aXBPcHRpb25zICYmIGhyZWZcIiBbaHJlZl09XCJocmVmXCIgY2xhc3M9XCJuai1hdmF0YXJcIlxuICAgICBbbmdDbGFzc109XCJnZXRBdmF0YXJDbGFzc2VzKClcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFnQ29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICA8L2E+XG4gIDxidXR0b24gKm5nSWY9XCIhdG9vbHRpcE9wdGlvbnMgJiYgaXNDbGlja2FibGVcIiBjbGFzcz1cIm5qLWF2YXRhclwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0QXZhdGFyQ2xhc3NlcygpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhZ0NvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9idXR0b24+XG4gIDxkaXYgKm5nSWY9XCIhdG9vbHRpcE9wdGlvbnMgJiYgIWhyZWYgJiYgIWlzQ2xpY2thYmxlXCIgY2xhc3M9XCJuai1hdmF0YXJcIlxuICAgICAgIFtuZ0NsYXNzXT1cImdldEF2YXRhckNsYXNzZXMoKVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWdDb250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuICA8YSAqbmdJZj1cInRvb2x0aXBPcHRpb25zICYmIGhyZWZcIiBbaHJlZl09XCJocmVmXCIgY2xhc3M9XCJuai1hdmF0YXJcIlxuICAgICBualRvb2x0aXAgW3Rvb2x0aXBPcHRpb25zXT1cInRvb2x0aXBPcHRpb25zXCJcbiAgICAgW25nQ2xhc3NdPVwiZ2V0QXZhdGFyQ2xhc3NlcygpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhZ0NvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9hPlxuICA8YnV0dG9uICpuZ0lmPVwidG9vbHRpcE9wdGlvbnMgJiYgaXNDbGlja2FibGVcIiBjbGFzcz1cIm5qLWF2YXRhclwiXG4gICAgICAgICAgbmpUb29sdGlwIFt0b29sdGlwT3B0aW9uc109XCJ0b29sdGlwT3B0aW9uc1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0QXZhdGFyQ2xhc3NlcygpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhZ0NvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9idXR0b24+XG4gIDxkaXYgKm5nSWY9XCJ0b29sdGlwT3B0aW9ucyAmJiAhaHJlZiAmJiAhaXNDbGlja2FibGVcIiBjbGFzcz1cIm5qLWF2YXRhclwiXG4gICAgICAgbmpUb29sdGlwIFt0b29sdGlwT3B0aW9uc109XCJ0b29sdGlwT3B0aW9uc1wiXG4gICAgICAgW25nQ2xhc3NdPVwiZ2V0QXZhdGFyQ2xhc3NlcygpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhZ0NvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19