@engie-group/fluid-design-system-angular
Version:
Fluid Design System Angular
148 lines • 20.1 kB
JavaScript
import { CommonModule } from '@angular/common';
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostBinding, HostListener, inject, Input, Output, ViewEncapsulation, } from '@angular/core';
import { CheckboxComponent } from '../checkbox/checkbox.component';
import { IconComponent } from '../icon/icon.component';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
export class ListItemComponent {
/**
* @ignore
*/
get className() {
return 'nj-list-deprecated__item';
}
/**
* @ignore
*/
get isClickable() {
const hasRoleOption = this.role === 'option';
return this.hasClickableChildren || hasRoleOption;
}
/**
* @ignore
*/
get getTabindex() {
return this.role === 'option' ? -1 : null;
}
/**
* @ignore
*/
onMouseClick(event) {
// Ignore the event if the list item is a button or a link, the click event is bound to
// the wrapped <button> or <a>
if (!this.hasClickableChildren) {
this.itemClick.emit(event);
}
}
constructor(el) {
this.el = el;
this.cdr = inject(ChangeDetectorRef);
/**
* Whether the border should be on the right
*/
this.hasRightBorder = false;
this.ariaSelected = null;
/**
* Whether content should be in a checkbox
*/
this.isCheckboxContent = false;
/**
* Whether only icon should be displayed
*/
this.isIconOnly = false;
/**
* Emits an event on item click
*/
this.itemClick = new EventEmitter();
}
/**
* Get value of item, returns value if set else returns textContent of item.
* Used in `<nj-select>` component
*/
getValue() {
return this.value ?? this.getLabel();
}
/**
* Get label of item, returns textContent of item.
* Used in `<nj-select>` component
*/
getLabel() {
return this.el?.nativeElement?.textContent;
}
/**
* @ignore
*/
updateSelected(isSelected) {
this.ariaSelected = isSelected;
this.isActive = isSelected;
this.cdr.markForCheck();
}
/**
* @ignore
*/
get hasClickableChildren() {
return this.type === 'button' || this.type === 'link';
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListItemComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ListItemComponent, isStandalone: true, selector: "[nj-list-item]", inputs: { isActive: "isActive", isDisabled: "isDisabled", hasRightBorder: "hasRightBorder", role: "role", ariaSelected: "ariaSelected", iconName: "iconName", iconAriaLabel: "iconAriaLabel", type: "type", href: "href", value: "value", isCheckboxContent: "isCheckboxContent", isIconOnly: "isIconOnly", checkboxContentId: "checkboxContentId" }, outputs: { itemClick: "itemClick" }, host: { listeners: { "click": "onMouseClick($event)" }, properties: { "class": "this.className", "class.nj-list-deprecated__item--active": "this.isActive", "class.nj-list-deprecated__item--disabled": "this.isDisabled", "class.nj-list-deprecated__item--clickable": "this.isClickable", "class.nj-list-deprecated__item--right-border": "this.hasRightBorder", "attr.role": "this.role", "attr.tabindex": "this.getTabindex", "attr.aria-selected": "this.ariaSelected" } }, ngImport: i0, template: "<ng-template #itemContent>\n <nj-icon\n *ngIf=\"iconName\"\n [name]=\"iconName\"\n [ariaLabel]=\"iconAriaLabel\"\n class=\"nj-list-deprecated__item-icon\">\n </nj-icon>\n <ng-container *ngIf=\"!isIconOnly\" [ngTemplateOutlet]=\"isCheckboxContent ? checkboxContent : brutContent\"></ng-container>\n <div *ngIf=\"!isIconOnly\" class=\"nj-list-deprecated__item-right-content\">\n <ng-content select=\"[njListItemRightContent]\"></ng-content>\n </div>\n</ng-template>\n\n<button *ngIf=\"type === 'button'\" type=\"button\" (click)=\"itemClick.emit($event)\">\n <ng-container [ngTemplateOutlet]=\"itemContent\"></ng-container>\n</button>\n\n<a *ngIf=\"type === 'link'\" (click)=\"itemClick.emit($event)\" [attr.href]=\"href\">\n <ng-container [ngTemplateOutlet]=\"itemContent\"></ng-container>\n</a>\n\n<ng-container\n *ngIf=\"!type || type === 'list'\"\n [ngTemplateOutlet]=\"itemContent\"\n></ng-container>\n\n<ng-template #checkboxContent>\n <nj-checkbox [isChecked]=\"isActive\" [inputId]=\"checkboxContentId\" [isPresentational]=\"true\">\n <ng-container [ngTemplateOutlet]=\"brutContent\"></ng-container>\n </nj-checkbox>\n</ng-template>\n\n<ng-template #brutContent>\n <ng-content></ng-content>\n</ng-template>\n", styles: [".nj-list-deprecated__item-right-content:empty{display:none}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "nj-icon", inputs: ["size", "variant"] }, { kind: "component", type: CheckboxComponent, selector: "nj-checkbox", inputs: ["inputId", "name", "isRequired", "isChecked", "size", "value", "isDisabled", "hasError", "hasSuccess", "subscriptMessage", "errorMessage", "ariaLabel", "ariaLabelledby", "isPresentational", "indeterminate"], outputs: ["valueChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListItemComponent, decorators: [{
type: Component,
args: [{ selector: '[nj-list-item]', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [IconComponent, CheckboxComponent, CommonModule], template: "<ng-template #itemContent>\n <nj-icon\n *ngIf=\"iconName\"\n [name]=\"iconName\"\n [ariaLabel]=\"iconAriaLabel\"\n class=\"nj-list-deprecated__item-icon\">\n </nj-icon>\n <ng-container *ngIf=\"!isIconOnly\" [ngTemplateOutlet]=\"isCheckboxContent ? checkboxContent : brutContent\"></ng-container>\n <div *ngIf=\"!isIconOnly\" class=\"nj-list-deprecated__item-right-content\">\n <ng-content select=\"[njListItemRightContent]\"></ng-content>\n </div>\n</ng-template>\n\n<button *ngIf=\"type === 'button'\" type=\"button\" (click)=\"itemClick.emit($event)\">\n <ng-container [ngTemplateOutlet]=\"itemContent\"></ng-container>\n</button>\n\n<a *ngIf=\"type === 'link'\" (click)=\"itemClick.emit($event)\" [attr.href]=\"href\">\n <ng-container [ngTemplateOutlet]=\"itemContent\"></ng-container>\n</a>\n\n<ng-container\n *ngIf=\"!type || type === 'list'\"\n [ngTemplateOutlet]=\"itemContent\"\n></ng-container>\n\n<ng-template #checkboxContent>\n <nj-checkbox [isChecked]=\"isActive\" [inputId]=\"checkboxContentId\" [isPresentational]=\"true\">\n <ng-container [ngTemplateOutlet]=\"brutContent\"></ng-container>\n </nj-checkbox>\n</ng-template>\n\n<ng-template #brutContent>\n <ng-content></ng-content>\n</ng-template>\n", styles: [".nj-list-deprecated__item-right-content:empty{display:none}\n"] }]
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { className: [{
type: HostBinding,
args: ['class']
}], isActive: [{
type: HostBinding,
args: ['class.nj-list-deprecated__item--active']
}, {
type: Input
}], isDisabled: [{
type: HostBinding,
args: ['class.nj-list-deprecated__item--disabled']
}, {
type: Input
}], isClickable: [{
type: HostBinding,
args: ['class.nj-list-deprecated__item--clickable']
}], hasRightBorder: [{
type: HostBinding,
args: ['class.nj-list-deprecated__item--right-border']
}, {
type: Input
}], role: [{
type: HostBinding,
args: ['attr.role']
}, {
type: Input
}], getTabindex: [{
type: HostBinding,
args: ['attr.tabindex']
}], ariaSelected: [{
type: HostBinding,
args: ['attr.aria-selected']
}, {
type: Input
}], iconName: [{
type: Input
}], iconAriaLabel: [{
type: Input
}], type: [{
type: Input
}], href: [{
type: Input
}], value: [{
type: Input
}], isCheckboxContent: [{
type: Input
}], isIconOnly: [{
type: Input
}], checkboxContentId: [{
type: Input
}], itemClick: [{
type: Output
}], onMouseClick: [{
type: HostListener,
args: ['click', ['$event']]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2xpc3QtaXRlbS9saXN0LWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbGlzdC1pdGVtL2xpc3QtaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUVULFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7OztBQWNyRCxNQUFNLE9BQU8saUJBQWlCO0lBSTVCOztPQUVHO0lBQ0gsSUFDSSxTQUFTO1FBQ1gsT0FBTywwQkFBMEIsQ0FBQztJQUNwQyxDQUFDO0lBZ0JEOztPQUVHO0lBQ0gsSUFDSSxXQUFXO1FBQ2IsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7UUFDN0MsT0FBTyxJQUFJLENBQUMsb0JBQW9CLElBQUksYUFBYSxDQUFDO0lBQ3BELENBQUM7SUFjRDs7T0FFRztJQUNILElBQ0ksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDNUMsQ0FBQztJQXdERDs7T0FFRztJQUNnQyxZQUFZLENBQUMsS0FBaUI7UUFDL0QsdUZBQXVGO1FBQ3ZGLDhCQUE4QjtRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVELFlBQTRCLEVBQTJCO1FBQTNCLE9BQUUsR0FBRixFQUFFLENBQXlCO1FBdEh0QyxRQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFpQ2pEOztXQUVHO1FBR0gsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFpQnZCLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBZ0M3Qjs7V0FFRztRQUNNLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUU1Qzs7V0FFRztRQUNNLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFPckM7O1dBRUc7UUFDTyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQWMsQ0FBQztJQWNyRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7T0FHRztJQUNILFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjLENBQUMsVUFBbUI7UUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUM7UUFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7UUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLG9CQUFvQjtRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDO0lBQ3hELENBQUM7K0dBekpVLGlCQUFpQjttR0FBakIsaUJBQWlCLHM1QkM3QjlCLDh0Q0FtQ0EsdUhEUlksYUFBYSxpRkFBRSxpQkFBaUIsMFNBQUUsWUFBWTs7NEZBRTdDLGlCQUFpQjtrQkFWN0IsU0FBUzsrQkFFRSxnQkFBZ0IsaUJBR1gsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1AsQ0FBQyxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxDQUFDO2lHQVVyRCxTQUFTO3NCQURaLFdBQVc7dUJBQUMsT0FBTztnQkFVcEIsUUFBUTtzQkFGUCxXQUFXO3VCQUFDLHdDQUF3Qzs7c0JBQ3BELEtBQUs7Z0JBUU4sVUFBVTtzQkFGVCxXQUFXO3VCQUFDLDBDQUEwQzs7c0JBQ3RELEtBQUs7Z0JBT0YsV0FBVztzQkFEZCxXQUFXO3VCQUFDLDJDQUEyQztnQkFXeEQsY0FBYztzQkFGYixXQUFXO3VCQUFDLDhDQUE4Qzs7c0JBQzFELEtBQUs7Z0JBTU4sSUFBSTtzQkFGSCxXQUFXO3VCQUFDLFdBQVc7O3NCQUN2QixLQUFLO2dCQU9GLFdBQVc7c0JBRGQsV0FBVzt1QkFBQyxlQUFlO2dCQU81QixZQUFZO3NCQUZYLFdBQVc7dUJBQUMsb0JBQW9COztzQkFDaEMsS0FBSztnQkFNRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBVUcsSUFBSTtzQkFBWixLQUFLO2dCQUtHLElBQUk7c0JBQVosS0FBSztnQkFLRyxLQUFLO3NCQUFiLEtBQUs7Z0JBS0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUtHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBS0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUtJLFNBQVM7c0JBQWxCLE1BQU07Z0JBSzRCLFlBQVk7c0JBQTlDLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q2hlY2tib3hDb21wb25lbnR9IGZyb20gJy4uL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudCc7XG5pbXBvcnQge0ljb25Db21wb25lbnR9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuXG5pbXBvcnQge1RMaXN0SXRlbVR5cGV9IGZyb20gJy4vbGlzdC1pdGVtLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yICovXG4gIHNlbGVjdG9yOiAnW25qLWxpc3QtaXRlbV0nLFxuICB0ZW1wbGF0ZVVybDogJy4vbGlzdC1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC1pdGVtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbSWNvbkNvbXBvbmVudCwgQ2hlY2tib3hDb21wb25lbnQsIENvbW1vbk1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgTGlzdEl0ZW1Db21wb25lbnQge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCBjbGFzc05hbWUoKSB7XG4gICAgcmV0dXJuICduai1saXN0LWRlcHJlY2F0ZWRfX2l0ZW0nO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgaXRlbSBpcyBhY3RpdmUgb3Igbm90XG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm5qLWxpc3QtZGVwcmVjYXRlZF9faXRlbS0tYWN0aXZlJylcbiAgQElucHV0KClcbiAgaXNBY3RpdmU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgaXRlbSBpcyBkaXNhYmxlZCBvciBub3RcbiAgICovXG4gIEBIb3N0QmluZGluZygnY2xhc3MubmotbGlzdC1kZXByZWNhdGVkX19pdGVtLS1kaXNhYmxlZCcpXG4gIEBJbnB1dCgpXG4gIGlzRGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIEBIb3N0QmluZGluZygnY2xhc3MubmotbGlzdC1kZXByZWNhdGVkX19pdGVtLS1jbGlja2FibGUnKVxuICBnZXQgaXNDbGlja2FibGUoKSB7XG4gICAgY29uc3QgaGFzUm9sZU9wdGlvbiA9IHRoaXMucm9sZSA9PT0gJ29wdGlvbic7XG4gICAgcmV0dXJuIHRoaXMuaGFzQ2xpY2thYmxlQ2hpbGRyZW4gfHwgaGFzUm9sZU9wdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBib3JkZXIgc2hvdWxkIGJlIG9uIHRoZSByaWdodFxuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5uai1saXN0LWRlcHJlY2F0ZWRfX2l0ZW0tLXJpZ2h0LWJvcmRlcicpXG4gIEBJbnB1dCgpXG4gIGhhc1JpZ2h0Qm9yZGVyID0gZmFsc2U7XG5cbiAgLyoqIE92ZXJyaWRlIGFyaWEgcm9sZSBpZiByZXF1aXJlZC4gKi9cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICBASW5wdXQoKVxuICByb2xlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxuICBnZXQgZ2V0VGFiaW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMucm9sZSA9PT0gJ29wdGlvbicgPyAtMSA6IG51bGw7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1zZWxlY3RlZCcpXG4gIEBJbnB1dCgpXG4gIGFyaWFTZWxlY3RlZDogYm9vbGVhbiA9IG51bGw7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGljb25cbiAgICovXG4gIEBJbnB1dCgpIGljb25OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFyaWEgbGFiZWwgb2YgdGhlIGljb25cbiAgICovXG4gIEBJbnB1dCgpIGljb25BcmlhTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogTGlzdCBpdGVtIHR5cGUgPGJyPlxuICAgKiBgbGlzdGAgLT4gYDxsaT4uLi48L2xpPmAgPGJyPlxuICAgKiBgbGlua2AgLT4gYDxsaT48YT4uLi48L2E+PC9saT5gIDxicj5cbiAgICogYGJ1dHRvbmAgLT4gYDxsaT48YnV0dG9uPi4uLjwvYnV0dG9uPjwvbGk+YFxuICAgKlxuICAgKiBAZGVmYXVsdCBcImxpc3RcIlxuICAgKi9cbiAgQElucHV0KCkgdHlwZT86IFRMaXN0SXRlbVR5cGU7XG5cbiAgLyoqXG4gICAqIExpc3QgaXRlbSBocmVmIHdoZW4gYHR5cGVgIGlzIGBsaW5rYFxuICAgKi9cbiAgQElucHV0KCkgaHJlZj86IHN0cmluZztcblxuICAvKipcbiAgICogTGlzdCBpdGVtIGF0dHJpYnV0ZSB2YWx1ZVxuICAgKi9cbiAgQElucHV0KCkgdmFsdWU6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciBjb250ZW50IHNob3VsZCBiZSBpbiBhIGNoZWNrYm94XG4gICAqL1xuICBASW5wdXQoKSBpc0NoZWNrYm94Q29udGVudDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9ubHkgaWNvbiBzaG91bGQgYmUgZGlzcGxheWVkXG4gICAqL1xuICBASW5wdXQoKSBpc0ljb25Pbmx5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIENoZWNrYm94IGlkIGlmIGBpc0NoZWNrYm94Q29udGVudGAgaXMgc2V0IHRvIGB0cnVlYFxuICAgKi9cbiAgQElucHV0KCkgY2hlY2tib3hDb250ZW50SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogRW1pdHMgYW4gZXZlbnQgb24gaXRlbSBjbGlja1xuICAgKi9cbiAgQE91dHB1dCgpIGl0ZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKSBvbk1vdXNlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAvLyBJZ25vcmUgdGhlIGV2ZW50IGlmIHRoZSBsaXN0IGl0ZW0gaXMgYSBidXR0b24gb3IgYSBsaW5rLCB0aGUgY2xpY2sgZXZlbnQgaXMgYm91bmQgdG9cbiAgICAvLyB0aGUgd3JhcHBlZCA8YnV0dG9uPiBvciA8YT5cbiAgICBpZiAoIXRoaXMuaGFzQ2xpY2thYmxlQ2hpbGRyZW4pIHtcbiAgICAgIHRoaXMuaXRlbUNsaWNrLmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBlbDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdmFsdWUgb2YgaXRlbSwgcmV0dXJucyB2YWx1ZSBpZiBzZXQgZWxzZSByZXR1cm5zIHRleHRDb250ZW50IG9mIGl0ZW0uXG4gICAqIFVzZWQgaW4gYDxuai1zZWxlY3Q+YCBjb21wb25lbnRcbiAgICovXG4gIGdldFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUgPz8gdGhpcy5nZXRMYWJlbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBsYWJlbCBvZiBpdGVtLCByZXR1cm5zIHRleHRDb250ZW50IG9mIGl0ZW0uXG4gICAqIFVzZWQgaW4gYDxuai1zZWxlY3Q+YCBjb21wb25lbnRcbiAgICovXG4gIGdldExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWw/Lm5hdGl2ZUVsZW1lbnQ/LnRleHRDb250ZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHVwZGF0ZVNlbGVjdGVkKGlzU2VsZWN0ZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmFyaWFTZWxlY3RlZCA9IGlzU2VsZWN0ZWQ7XG4gICAgdGhpcy5pc0FjdGl2ZSA9IGlzU2VsZWN0ZWQ7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZ2V0IGhhc0NsaWNrYWJsZUNoaWxkcmVuKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdidXR0b24nIHx8IHRoaXMudHlwZSA9PT0gJ2xpbmsnO1xuICB9XG59XG4iLCI8bmctdGVtcGxhdGUgI2l0ZW1Db250ZW50PlxuICA8bmotaWNvblxuICAgICpuZ0lmPVwiaWNvbk5hbWVcIlxuICAgIFtuYW1lXT1cImljb25OYW1lXCJcbiAgICBbYXJpYUxhYmVsXT1cImljb25BcmlhTGFiZWxcIlxuICAgIGNsYXNzPVwibmotbGlzdC1kZXByZWNhdGVkX19pdGVtLWljb25cIj5cbiAgPC9uai1pY29uPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzSWNvbk9ubHlcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJpc0NoZWNrYm94Q29udGVudCA/IGNoZWNrYm94Q29udGVudCA6IGJydXRDb250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gIDxkaXYgKm5nSWY9XCIhaXNJY29uT25seVwiIGNsYXNzPVwibmotbGlzdC1kZXByZWNhdGVkX19pdGVtLXJpZ2h0LWNvbnRlbnRcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbmpMaXN0SXRlbVJpZ2h0Q29udGVudF1cIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPGJ1dHRvbiAqbmdJZj1cInR5cGUgPT09ICdidXR0b24nXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJpdGVtQ2xpY2suZW1pdCgkZXZlbnQpXCI+XG4gIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbUNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbjwvYnV0dG9uPlxuXG48YSAqbmdJZj1cInR5cGUgPT09ICdsaW5rJ1wiIChjbGljayk9XCJpdGVtQ2xpY2suZW1pdCgkZXZlbnQpXCIgW2F0dHIuaHJlZl09XCJocmVmXCI+XG4gIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbUNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbjwvYT5cblxuPG5nLWNvbnRhaW5lclxuICAqbmdJZj1cIiF0eXBlIHx8IHR5cGUgPT09ICdsaXN0J1wiXG4gIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1Db250ZW50XCJcbj48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNjaGVja2JveENvbnRlbnQ+XG4gIDxuai1jaGVja2JveCBbaXNDaGVja2VkXT1cImlzQWN0aXZlXCIgW2lucHV0SWRdPVwiY2hlY2tib3hDb250ZW50SWRcIiBbaXNQcmVzZW50YXRpb25hbF09XCJ0cnVlXCI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJicnV0Q29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICA8L25qLWNoZWNrYm94PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNicnV0Q29udGVudD5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==