UNPKG

@engie-group/fluid-design-system-angular

Version:

Fluid Design System Angular

165 lines 22.9 kB
import { CommonModule } from '@angular/common'; import { booleanAttribute, ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { IconComponent } from '../icon/icon.component'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; export class CheckboxComponent { /** * Whether the checkbox is checked or not */ set isChecked(value) { this._checked = value; this.cdr.markForCheck(); } get isChecked() { return this._checked; } constructor(cdr) { this.cdr = cdr; this.checkboxClassName = 'nj-checkbox'; /** * Checkbox size */ this.size = 'md'; /** * Whether checkbox is only presentational and state handled by a parent, can be useful for lists of checkboxes. * When set to `true`, the checkbox won't have any interaction. */ this.isPresentational = false; /** * Output that emits checked value on change only */ this.valueChange = new EventEmitter(); /** * @ignore */ this._onChange = (_) => { }; /** * @ignore */ this._onTouched = () => { }; } /** * @ignore */ _onChangeEvent(event) { event.stopPropagation(); if (this._inputElement?.nativeElement) { this.isChecked = this._inputElement.nativeElement.checked; this._onChange(this.isChecked); this.valueChange.emit(this.isChecked); } } /** * @ignore */ _onInputClick(event) { // We have to stop propagation for click events on the visually hidden input element. // By default, when a user clicks on a label element, a generated click event will be // dispatched on the associated input element. Since we are using a label element as our // root container, the click event on the `slide-toggle` will be executed twice. // The real click event will bubble up, and the generated click event also tries to bubble up. // This will lead to multiple click events. // Preventing bubbling for the second event will solve that issue. event.stopPropagation(); } /** * Implemented as part of ControlValueAccessor. * @ignore */ writeValue(value) { this.isChecked = !!value; } /** * Implemented as part of ControlValueAccessor. * @ignore */ registerOnChange(fn) { this._onChange = fn; } /** * Implemented as part of ControlValueAccessor. * @ignore */ registerOnTouched(fn) { this._onTouched = fn; } /** * Implemented as part of ControlValueAccessor. * @ignore */ setDisabledState(isDisabled) { this.isDisabled = isDisabled; this.cdr.markForCheck(); } /** * @ignore */ getSubscriptId() { return `${this.inputId}-hint`; } get checkboxSizeClass() { return this.size !== 'md' ? `${this.checkboxClassName}--${this.size}` : ''; } get checkboxClasses() { return { 'nj-checkbox--error': this.hasError, 'nj-checkbox--success': this.hasSuccess, [this.checkboxSizeClass]: true }; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CheckboxComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "16.2.12", type: CheckboxComponent, isStandalone: true, selector: "nj-checkbox", inputs: { inputId: "inputId", name: "name", isRequired: "isRequired", isChecked: "isChecked", size: "size", value: "value", isDisabled: "isDisabled", hasError: "hasError", hasSuccess: "hasSuccess", subscriptMessage: "subscriptMessage", errorMessage: "errorMessage", ariaLabel: "ariaLabel", ariaLabelledby: "ariaLabelledby", isPresentational: "isPresentational", indeterminate: ["indeterminate", "indeterminate", booleanAttribute] }, outputs: { valueChange: "valueChange" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CheckboxComponent), multi: true }], viewQueries: [{ propertyName: "_inputElement", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<div class=\"nj-checkbox\"\n [ngClass]=\"checkboxClasses\"\n [attr.inert]=\"isPresentational ? 'true' : null\">\n <label [attr.for]=\"inputId\">\n <input\n type=\"checkbox\"\n #input\n [indeterminate]=\"indeterminate\"\n [required]=\"isRequired\"\n [checked]=\"isChecked\"\n [disabled]=\"isDisabled\"\n [attr.id]=\"inputId\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-invalid]=\"hasError ? 'true' : null\"\n [attr.aria-describedby]=\"subscriptMessage || errorMessage ? getSubscriptId() : null\"\n (change)=\"_onChangeEvent($event)\"\n (click)=\"_onInputClick($event)\">\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n </label>\n <div *ngIf=\"subscriptMessage || errorMessage\" class=\"nj-checkbox__subscript\" [attr.id]=\"getSubscriptId()\">\n <nj-icon *ngIf=\"hasError\" variant=\"inherit\" name=\"warning\" size=\"sm\"></nj-icon>\n <nj-icon *ngIf=\"hasSuccess && !hasError\" variant=\"inherit\" name=\"check\" size=\"sm\"></nj-icon>\n {{errorMessage ? errorMessage : subscriptMessage}}\n </div>\n</div>\n\n<ng-template #content>\n <span class=\"nj-checkbox__label\">\n <ng-content></ng-content>\n <span *ngIf=\"isRequired\" aria-hidden=\"true\" class=\"nj-checkbox__required\">\n *\n </span>\n </span>\n</ng-template>\n", styles: [":host{display:inline-flex}.nj-checkbox{-webkit-user-select:none;user-select:none}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "nj-icon", inputs: ["size", "variant"] }, { 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CheckboxComponent, decorators: [{ type: Component, args: [{ selector: 'nj-checkbox', providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CheckboxComponent), multi: true }], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [IconComponent, CommonModule], template: "<div class=\"nj-checkbox\"\n [ngClass]=\"checkboxClasses\"\n [attr.inert]=\"isPresentational ? 'true' : null\">\n <label [attr.for]=\"inputId\">\n <input\n type=\"checkbox\"\n #input\n [indeterminate]=\"indeterminate\"\n [required]=\"isRequired\"\n [checked]=\"isChecked\"\n [disabled]=\"isDisabled\"\n [attr.id]=\"inputId\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-invalid]=\"hasError ? 'true' : null\"\n [attr.aria-describedby]=\"subscriptMessage || errorMessage ? getSubscriptId() : null\"\n (change)=\"_onChangeEvent($event)\"\n (click)=\"_onInputClick($event)\">\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n </label>\n <div *ngIf=\"subscriptMessage || errorMessage\" class=\"nj-checkbox__subscript\" [attr.id]=\"getSubscriptId()\">\n <nj-icon *ngIf=\"hasError\" variant=\"inherit\" name=\"warning\" size=\"sm\"></nj-icon>\n <nj-icon *ngIf=\"hasSuccess && !hasError\" variant=\"inherit\" name=\"check\" size=\"sm\"></nj-icon>\n {{errorMessage ? errorMessage : subscriptMessage}}\n </div>\n</div>\n\n<ng-template #content>\n <span class=\"nj-checkbox__label\">\n <ng-content></ng-content>\n <span *ngIf=\"isRequired\" aria-hidden=\"true\" class=\"nj-checkbox__required\">\n *\n </span>\n </span>\n</ng-template>\n", styles: [":host{display:inline-flex}.nj-checkbox{-webkit-user-select:none;user-select:none}\n"] }] }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { inputId: [{ type: Input }], name: [{ type: Input }], isRequired: [{ type: Input }], isChecked: [{ type: Input }], size: [{ type: Input }], value: [{ type: Input }], isDisabled: [{ type: Input }], hasError: [{ type: Input }], hasSuccess: [{ type: Input }], subscriptMessage: [{ type: Input }], errorMessage: [{ type: Input }], ariaLabel: [{ type: Input }], ariaLabelledby: [{ type: Input }], isPresentational: [{ type: Input }], indeterminate: [{ type: Input, args: [{ transform: booleanAttribute }] }], valueChange: [{ type: Output }], _inputElement: [{ type: ViewChild, args: ['input'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBdUIsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7OztBQWdCckQsTUFBTSxPQUFPLGlCQUFpQjtJQW9CNUI7O09BRUc7SUFDSCxJQUNJLFNBQVMsQ0FBQyxLQUFjO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBbUVELFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBakd6QixzQkFBaUIsR0FBRyxhQUFhLENBQUM7UUFnQ25EOztXQUVHO1FBQ00sU0FBSSxHQUFrQixJQUFJLENBQUM7UUEyQ3BDOzs7V0FHRztRQUNNLHFCQUFnQixHQUFJLEtBQUssQ0FBQztRQU9uQzs7V0FFRztRQUNPLGdCQUFXLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7UUFRM0U7O1dBRUc7UUFDSyxjQUFTLEdBQUcsQ0FBQyxDQUFNLEVBQVEsRUFBRTtRQUNyQyxDQUFDLENBQUM7UUFFRjs7V0FFRztRQUNLLGVBQVUsR0FBRyxHQUFTLEVBQUU7UUFDaEMsQ0FBQyxDQUFDO0lBWkYsQ0FBQztJQWNEOztPQUVHO0lBQ0gsY0FBYyxDQUFDLEtBQVk7UUFDekIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUU7WUFDckMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7WUFDMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYSxDQUFDLEtBQVk7UUFDeEIscUZBQXFGO1FBQ3JGLHFGQUFxRjtRQUNyRix3RkFBd0Y7UUFDeEYsZ0ZBQWdGO1FBQ2hGLDhGQUE4RjtRQUM5RiwyQ0FBMkM7UUFDM0Msa0VBQWtFO1FBQ2xFLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVSxDQUFDLEtBQVU7UUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWM7UUFDWixPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sT0FBTyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFZLGlCQUFpQjtRQUMzQixPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM3RSxDQUFDO0lBRUQsSUFBYyxlQUFlO1FBQzNCLE9BQU87WUFDTCxvQkFBb0IsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUNuQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUN2QyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLElBQUk7U0FDL0IsQ0FBQztJQUNKLENBQUM7K0dBN0xVLGlCQUFpQjttR0FBakIsaUJBQWlCLDJjQXdGVCxnQkFBZ0IseURBakd4QixDQUFDO2dCQUNWLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUM7Z0JBQ2hELEtBQUssRUFBRSxJQUFJO2FBQ1osQ0FBQyxrSUN6QkosODRDQW9DQSw2SURSWSxhQUFhLGdGQUFFLFlBQVk7OzRGQUUxQixpQkFBaUI7a0JBYjdCLFNBQVM7K0JBQ0UsYUFBYSxhQUdaLENBQUM7NEJBQ1YsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUM7NEJBQ2hELEtBQUssRUFBRSxJQUFJO3lCQUNaLENBQUMsbUJBQ2UsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1AsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDO3dHQVU3QixPQUFPO3NCQUFmLEtBQUs7Z0JBS0csSUFBSTtzQkFBWixLQUFLO2dCQUtHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBTUYsU0FBUztzQkFEWixLQUFLO2dCQWFHLElBQUk7c0JBQVosS0FBSztnQkFLRyxLQUFLO3NCQUFiLEtBQUs7Z0JBS0csVUFBVTtzQkFBbEIsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBS0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQU1HLFlBQVk7c0JBQXBCLEtBQUs7Z0JBS0csU0FBUztzQkFBakIsS0FBSztnQkFLRyxjQUFjO3NCQUF0QixLQUFLO2dCQU1HLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFLZ0MsYUFBYTtzQkFBbEQsS0FBSzt1QkFBQyxFQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBQztnQkFLMUIsV0FBVztzQkFBcEIsTUFBTTtnQkFHQyxhQUFhO3NCQURwQixTQUFTO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0ljb25Db21wb25lbnR9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHtDaGVja2JveFNpemV9IGZyb20gJy4vY2hlY2tib3gubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduai1jaGVja2JveCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGVja2JveC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NoZWNrYm94LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW3tcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDaGVja2JveENvbXBvbmVudCksXG4gICAgbXVsdGk6IHRydWVcbiAgfV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbSWNvbkNvbXBvbmVudCwgQ29tbW9uTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBDaGVja2JveENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjaGVja2JveENsYXNzTmFtZSA9ICduai1jaGVja2JveCc7XG5cbiAgcHJpdmF0ZSBfY2hlY2tlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5wdXQgaWRcbiAgICovXG4gIEBJbnB1dCgpIGlucHV0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogSW5wdXQgbmFtZVxuICAgKi9cbiAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGlucHV0IGlzIHJlcXVpcmVkIG9yIG5vdFxuICAgKi9cbiAgQElucHV0KCkgaXNSZXF1aXJlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNoZWNrYm94IGlzIGNoZWNrZWQgb3Igbm90XG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgaXNDaGVja2VkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fY2hlY2tlZCA9IHZhbHVlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IGlzQ2hlY2tlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2hlY2tlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja2JveCBzaXplXG4gICAqL1xuICBASW5wdXQoKSBzaXplPzogQ2hlY2tib3hTaXplID0gJ21kJztcblxuICAvKipcbiAgICogSW5wdXQgdmFsdWVcbiAgICovXG4gIEBJbnB1dCgpIHZhbHVlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjaGVja2JveCBpcyBkaXNhYmxlZCBvciBub3RcbiAgICovXG4gIEBJbnB1dCgpIGlzRGlzYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjaGVja2JveCBpcyBpbiBlcnJvciBzdGF0ZVxuICAgKi9cbiAgQElucHV0KCkgaGFzRXJyb3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjaGVja2JveCBpcyBpbiBzdWNjZXNzIHN0YXRlXG4gICAqL1xuICBASW5wdXQoKSBoYXNTdWNjZXNzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTWVzc2FnZSB0byBkaXNwbGF5IGFzIGhpbnQgYmVsb3cgY2hlY2tib3hcbiAgICovXG4gIEBJbnB1dCgpIHN1YnNjcmlwdE1lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBEZXByZWNhdGVkXG4gICAqIE1lc3NhZ2UgdG8gZGlzcGxheSBpZiBjaGVja2JveCBpcyBpbiBlcnJvciBzdGF0ZVxuICAgKi9cbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBcmlhIGxhYmVsLCBmb3IgYWNjZXNzaWJpbGl0eSByZWFzb25zXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFyaWEgbGFiZWxsZWQgYnksIGZvciBhY2Nlc3NpYmlsaXR5IHJlYXNvbnNcbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbGxlZGJ5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGNoZWNrYm94IGlzIG9ubHkgcHJlc2VudGF0aW9uYWwgYW5kIHN0YXRlIGhhbmRsZWQgYnkgYSBwYXJlbnQsIGNhbiBiZSB1c2VmdWwgZm9yIGxpc3RzIG9mIGNoZWNrYm94ZXMuXG4gICAqIFdoZW4gc2V0IHRvIGB0cnVlYCwgdGhlIGNoZWNrYm94IHdvbid0IGhhdmUgYW55IGludGVyYWN0aW9uLlxuICAgKi9cbiAgQElucHV0KCkgaXNQcmVzZW50YXRpb25hbD8gPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY2hlY2tib3ggaXMgaW4gaW5kZXRlcm1pbmF0ZSBzdGF0ZSBvciBub3QuXG4gICAqL1xuICBASW5wdXQoe3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pIGluZGV0ZXJtaW5hdGU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE91dHB1dCB0aGF0IGVtaXRzIGNoZWNrZWQgdmFsdWUgb24gY2hhbmdlIG9ubHlcbiAgICovXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JylcbiAgcHJpdmF0ZSBfaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgX29uQ2hhbmdlID0gKF86IGFueSk6IHZvaWQgPT4ge1xuICB9O1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIF9vblRvdWNoZWQgPSAoKTogdm9pZCA9PiB7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIF9vbkNoYW5nZUV2ZW50KGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLl9pbnB1dEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuaXNDaGVja2VkID0gdGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2hlY2tlZDtcbiAgICAgIHRoaXMuX29uQ2hhbmdlKHRoaXMuaXNDaGVja2VkKTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmlzQ2hlY2tlZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIF9vbklucHV0Q2xpY2soZXZlbnQ6IEV2ZW50KSB7XG4gICAgLy8gV2UgaGF2ZSB0byBzdG9wIHByb3BhZ2F0aW9uIGZvciBjbGljayBldmVudHMgb24gdGhlIHZpc3VhbGx5IGhpZGRlbiBpbnB1dCBlbGVtZW50LlxuICAgIC8vIEJ5IGRlZmF1bHQsIHdoZW4gYSB1c2VyIGNsaWNrcyBvbiBhIGxhYmVsIGVsZW1lbnQsIGEgZ2VuZXJhdGVkIGNsaWNrIGV2ZW50IHdpbGwgYmVcbiAgICAvLyBkaXNwYXRjaGVkIG9uIHRoZSBhc3NvY2lhdGVkIGlucHV0IGVsZW1lbnQuIFNpbmNlIHdlIGFyZSB1c2luZyBhIGxhYmVsIGVsZW1lbnQgYXMgb3VyXG4gICAgLy8gcm9vdCBjb250YWluZXIsIHRoZSBjbGljayBldmVudCBvbiB0aGUgYHNsaWRlLXRvZ2dsZWAgd2lsbCBiZSBleGVjdXRlZCB0d2ljZS5cbiAgICAvLyBUaGUgcmVhbCBjbGljayBldmVudCB3aWxsIGJ1YmJsZSB1cCwgYW5kIHRoZSBnZW5lcmF0ZWQgY2xpY2sgZXZlbnQgYWxzbyB0cmllcyB0byBidWJibGUgdXAuXG4gICAgLy8gVGhpcyB3aWxsIGxlYWQgdG8gbXVsdGlwbGUgY2xpY2sgZXZlbnRzLlxuICAgIC8vIFByZXZlbnRpbmcgYnViYmxpbmcgZm9yIHRoZSBzZWNvbmQgZXZlbnQgd2lsbCBzb2x2ZSB0aGF0IGlzc3VlLlxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuaXNDaGVja2VkID0gISF2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgKiBAaWdub3JlXG4gICAqL1xuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGdldFN1YnNjcmlwdElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuaW5wdXRJZH0taGludGA7XG4gIH1cblxuICBwcml2YXRlIGdldCBjaGVja2JveFNpemVDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNpemUgIT09ICdtZCcgPyBgJHt0aGlzLmNoZWNrYm94Q2xhc3NOYW1lfS0tJHt0aGlzLnNpemV9YCA6ICcnO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBjaGVja2JveENsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICduai1jaGVja2JveC0tZXJyb3InOiB0aGlzLmhhc0Vycm9yLFxuICAgICAgJ25qLWNoZWNrYm94LS1zdWNjZXNzJzogdGhpcy5oYXNTdWNjZXNzLFxuICAgICAgW3RoaXMuY2hlY2tib3hTaXplQ2xhc3NdOiB0cnVlXG4gICAgfTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm5qLWNoZWNrYm94XCJcbiAgICAgW25nQ2xhc3NdPVwiY2hlY2tib3hDbGFzc2VzXCJcbiAgICAgW2F0dHIuaW5lcnRdPVwiaXNQcmVzZW50YXRpb25hbCA/ICd0cnVlJyA6IG51bGxcIj5cbiAgPGxhYmVsIFthdHRyLmZvcl09XCJpbnB1dElkXCI+XG4gICAgPGlucHV0XG4gICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgI2lucHV0XG4gICAgICBbaW5kZXRlcm1pbmF0ZV09XCJpbmRldGVybWluYXRlXCJcbiAgICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcbiAgICAgIFtjaGVja2VkXT1cImlzQ2hlY2tlZFwiXG4gICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICBbYXR0ci5pZF09XCJpbnB1dElkXCJcbiAgICAgIFthdHRyLm5hbWVdPVwibmFtZVwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkYnlcIlxuICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImhhc0Vycm9yID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cInN1YnNjcmlwdE1lc3NhZ2UgfHwgZXJyb3JNZXNzYWdlID8gZ2V0U3Vic2NyaXB0SWQoKSA6IG51bGxcIlxuICAgICAgKGNoYW5nZSk9XCJfb25DaGFuZ2VFdmVudCgkZXZlbnQpXCJcbiAgICAgIChjbGljayk9XCJfb25JbnB1dENsaWNrKCRldmVudClcIj5cbiAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGVudFwiPjwvbmctdGVtcGxhdGU+XG4gIDwvbGFiZWw+XG4gIDxkaXYgKm5nSWY9XCJzdWJzY3JpcHRNZXNzYWdlIHx8IGVycm9yTWVzc2FnZVwiIGNsYXNzPVwibmotY2hlY2tib3hfX3N1YnNjcmlwdFwiIFthdHRyLmlkXT1cImdldFN1YnNjcmlwdElkKClcIj5cbiAgICA8bmotaWNvbiAqbmdJZj1cImhhc0Vycm9yXCIgdmFyaWFudD1cImluaGVyaXRcIiBuYW1lPVwid2FybmluZ1wiIHNpemU9XCJzbVwiPjwvbmotaWNvbj5cbiAgICA8bmotaWNvbiAqbmdJZj1cImhhc1N1Y2Nlc3MgJiYgIWhhc0Vycm9yXCIgdmFyaWFudD1cImluaGVyaXRcIiBuYW1lPVwiY2hlY2tcIiBzaXplPVwic21cIj48L25qLWljb24+XG4gICAge3tlcnJvck1lc3NhZ2UgPyBlcnJvck1lc3NhZ2UgOiBzdWJzY3JpcHRNZXNzYWdlfX1cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICA8c3BhbiBjbGFzcz1cIm5qLWNoZWNrYm94X19sYWJlbFwiPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8c3BhbiAqbmdJZj1cImlzUmVxdWlyZWRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cIm5qLWNoZWNrYm94X19yZXF1aXJlZFwiPlxuICAgICAgKlxuICAgIDwvc3Bhbj5cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==