@edugouvfr/ngx-dsfr
Version:
NgxDsfr est un portage Angular des éléments d'interface du Système de Design de l'État Français (DSFR).
106 lines • 22.4 kB
JavaScript
import { CommonModule } from '@angular/common';
import { Component, forwardRef, Input, ViewEncapsulation } from '@angular/core';
import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
import { DefaultControlComponent, DsfrSeverityConst } from '../../shared';
import { EduMessageSeverityDirective } from '../../shared/directives/message-severity.directive';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "@angular/forms";
/*
* - fix 1.6 : La div messages est toujours présente même dans un groupe (cf. DSFR 1.9)
*/
export class DsfrFormCheckboxComponent extends DefaultControlComponent {
constructor(elementRef) {
super();
this.elementRef = elementRef;
/**
* Cache le label visuellement en le laissant disponible aux lecteurs d'écran.
*/
this.labelSrOnly = false;
/**
* Donne une taille de 16px au lieu de 24px.
*/
this.small = false;
/**
* Message d'information lié au composant
*/
this.message = undefined;
this.DsfrSeverity = DsfrSeverityConst;
this.value = false;
}
/** @since 1.5 */
get checked() {
return this.value ?? false;
}
/** @since 1.5 */
get indeterminateState() {
const nativeElt = this.elementRef.nativeElement;
const checkbox = nativeElt.querySelector('input');
return checkbox.indeterminate;
}
/**
* Message d'erreur, quand il est présent les couleurs du contrôle changent.
* @deprecated (@since 1.14) utiliser message et messageSeverity à la place
*/
set error(value) {
this.message = value;
this.messageSeverity = DsfrSeverityConst.ERROR;
}
/**
* Message de validation, quand il est présent les couleurs du contrôle changent.
* @deprecated (@since 1.14) utiliser message et messageSeverity à la place
*/
set valid(value) {
this.message = value;
this.messageSeverity = DsfrSeverityConst.VALID;
}
/** @since 1.4 */
set indeterminate(value) {
const nativeElt = this.elementRef.nativeElement;
const checkbox = nativeElt.querySelector('input');
if (value === true || value === false) {
checkbox.indeterminate = value;
}
}
/** @internal */
ngOnInit() {
super.ngOnInit();
this.defaultChecked = super.value ?? false;
this.messagesGroupId = `${this.inputId}-messages`;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DsfrFormCheckboxComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DsfrFormCheckboxComponent, isStandalone: true, selector: "dsfr-form-checkbox", inputs: { labelSrOnly: "labelSrOnly", ariaInvalid: "ariaInvalid", small: "small", message: "message", messageSeverity: "messageSeverity", error: "error", valid: "valid", indeterminate: "indeterminate" }, providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => DsfrFormCheckboxComponent),
multi: true,
},
], usesInheritance: true, ngImport: i0, template: "<div\n class=\"fr-checkbox-group\"\n [ngClass]=\"{\n 'fr-checkbox-group--error': message && messageSeverity === DsfrSeverity.ERROR,\n 'fr-checkbox-group--valid':\n message && (messageSeverity === DsfrSeverity.VALID || messageSeverity === DsfrSeverity.SUCCESS),\n 'edu-checkbox-group--info': message && messageSeverity === DsfrSeverity.INFO,\n 'edu-checkbox-group--warning': message && messageSeverity === DsfrSeverity.WARNING,\n 'fr-checkbox-group--sm': small,\n 'ngx-checkbox-group--sr-only': labelSrOnly,\n }\">\n <input\n [attr.aria-describedby]=\"message ? messagesGroupId : null\"\n type=\"checkbox\"\n [id]=\"inputId\"\n [attr.name]=\"name || null\"\n [disabled]=\"disabled\"\n [attr.checked]=\"defaultChecked || null\"\n [attr.aria-invalid]=\"ariaInvalid || null\"\n [(ngModel)]=\"value\" />\n <label class=\"fr-label\" [for]=\"inputId\">\n @if (labelSrOnly) {\n <span class=\"fr-sr-only\">\n <ng-container [ngTemplateOutlet]=\"labelTemplate\"></ng-container>\n </span>\n } @else {\n <ng-container [ngTemplateOutlet]=\"labelTemplate\"></ng-container>\n }\n\n @if (hint) {\n <span class=\"fr-hint-text\" [ngClass]=\"{ 'fr-sr-only': labelSrOnly }\">{{ hint }}</span>\n }\n </label>\n <div class=\"fr-messages-group\" [id]=\"messagesGroupId\" aria-live=\"polite\">\n @if (message) {\n <p class=\"fr-message\" [eduMessageSeverity]=\"messageSeverity\">\n {{ message }}\n </p>\n }\n </div>\n</div>\n\n<ng-template #labelTemplate>\n @if (label) {\n {{ label }}\n } @else {\n <ng-content select=\"[label]\"></ng-content>\n }\n</ng-template>\n", styles: [".fr-checkbox-group input[type=checkbox]:indeterminate+.fr-label:before{background-color:var(--background-active-blue-france);background-image:none}.fr-checkbox-group input[type=checkbox]:indeterminate+.fr-label:after{content:\"\";display:block;margin-right:.5rem;border-radius:.25rem;position:absolute;top:.7rem;left:-1.65rem;width:.75rem;height:.1rem;background:var(--background-contrast-blue-france)}.fr-checkbox-group input[type=checkbox]:indeterminate:disabled+.fr-label:before{background-color:var(--background-disabled-grey)}.fr-checkbox-group input[type=checkbox]:indeterminate:disabled+.fr-label:after{background:var(--text-disabled-grey)}.fr-checkbox-group.fr-checkbox-group--sm input[type=checkbox]:indeterminate+.fr-label:after{content:\"\";display:block;margin-right:.5rem;border-radius:.25rem;position:absolute;top:.675rem;left:-1.25rem;width:.5rem;height:.125rem;background:var(--background-contrast-blue-france)}.fr-checkbox-group.fr-checkbox-group--sm input[type=checkbox]:indeterminate:disabled+.fr-label:after{background:var(--text-disabled-grey)}.fr-checkbox-group.edu-checkbox-group--info:before,.fr-checkbox-group.edu-checkbox-group--warning:before{content:\"\";height:100%;left:-.75rem;position:absolute;top:0;width:2px}.fr-checkbox-group.edu-checkbox-group--info:before{--idle: transparent;--hover: var(--border-plain-info-hover);--active: var(--border-plain-info-active);background-color:var(--border-plain-info)}.fr-checkbox-group.edu-checkbox-group--warning:before{--idle: transparent;--hover: var(--border-plain-warning-hover);--active: var(--border-plain-warning-active);background-color:var(--border-plain-warning)}.ngx-checkbox-group--sr-only{height:1.5rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: EduMessageSeverityDirective, selector: "[eduMessageSeverity]", inputs: ["eduMessageSeverity"] }], encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DsfrFormCheckboxComponent, decorators: [{
type: Component,
args: [{ selector: 'dsfr-form-checkbox', encapsulation: ViewEncapsulation.None, providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => DsfrFormCheckboxComponent),
multi: true,
},
], standalone: true, imports: [CommonModule, FormsModule, EduMessageSeverityDirective], template: "<div\n class=\"fr-checkbox-group\"\n [ngClass]=\"{\n 'fr-checkbox-group--error': message && messageSeverity === DsfrSeverity.ERROR,\n 'fr-checkbox-group--valid':\n message && (messageSeverity === DsfrSeverity.VALID || messageSeverity === DsfrSeverity.SUCCESS),\n 'edu-checkbox-group--info': message && messageSeverity === DsfrSeverity.INFO,\n 'edu-checkbox-group--warning': message && messageSeverity === DsfrSeverity.WARNING,\n 'fr-checkbox-group--sm': small,\n 'ngx-checkbox-group--sr-only': labelSrOnly,\n }\">\n <input\n [attr.aria-describedby]=\"message ? messagesGroupId : null\"\n type=\"checkbox\"\n [id]=\"inputId\"\n [attr.name]=\"name || null\"\n [disabled]=\"disabled\"\n [attr.checked]=\"defaultChecked || null\"\n [attr.aria-invalid]=\"ariaInvalid || null\"\n [(ngModel)]=\"value\" />\n <label class=\"fr-label\" [for]=\"inputId\">\n @if (labelSrOnly) {\n <span class=\"fr-sr-only\">\n <ng-container [ngTemplateOutlet]=\"labelTemplate\"></ng-container>\n </span>\n } @else {\n <ng-container [ngTemplateOutlet]=\"labelTemplate\"></ng-container>\n }\n\n @if (hint) {\n <span class=\"fr-hint-text\" [ngClass]=\"{ 'fr-sr-only': labelSrOnly }\">{{ hint }}</span>\n }\n </label>\n <div class=\"fr-messages-group\" [id]=\"messagesGroupId\" aria-live=\"polite\">\n @if (message) {\n <p class=\"fr-message\" [eduMessageSeverity]=\"messageSeverity\">\n {{ message }}\n </p>\n }\n </div>\n</div>\n\n<ng-template #labelTemplate>\n @if (label) {\n {{ label }}\n } @else {\n <ng-content select=\"[label]\"></ng-content>\n }\n</ng-template>\n", styles: [".fr-checkbox-group input[type=checkbox]:indeterminate+.fr-label:before{background-color:var(--background-active-blue-france);background-image:none}.fr-checkbox-group input[type=checkbox]:indeterminate+.fr-label:after{content:\"\";display:block;margin-right:.5rem;border-radius:.25rem;position:absolute;top:.7rem;left:-1.65rem;width:.75rem;height:.1rem;background:var(--background-contrast-blue-france)}.fr-checkbox-group input[type=checkbox]:indeterminate:disabled+.fr-label:before{background-color:var(--background-disabled-grey)}.fr-checkbox-group input[type=checkbox]:indeterminate:disabled+.fr-label:after{background:var(--text-disabled-grey)}.fr-checkbox-group.fr-checkbox-group--sm input[type=checkbox]:indeterminate+.fr-label:after{content:\"\";display:block;margin-right:.5rem;border-radius:.25rem;position:absolute;top:.675rem;left:-1.25rem;width:.5rem;height:.125rem;background:var(--background-contrast-blue-france)}.fr-checkbox-group.fr-checkbox-group--sm input[type=checkbox]:indeterminate:disabled+.fr-label:after{background:var(--text-disabled-grey)}.fr-checkbox-group.edu-checkbox-group--info:before,.fr-checkbox-group.edu-checkbox-group--warning:before{content:\"\";height:100%;left:-.75rem;position:absolute;top:0;width:2px}.fr-checkbox-group.edu-checkbox-group--info:before{--idle: transparent;--hover: var(--border-plain-info-hover);--active: var(--border-plain-info-active);background-color:var(--border-plain-info)}.fr-checkbox-group.edu-checkbox-group--warning:before{--idle: transparent;--hover: var(--border-plain-warning-hover);--active: var(--border-plain-warning-active);background-color:var(--border-plain-warning)}.ngx-checkbox-group--sr-only{height:1.5rem}\n"] }]
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { labelSrOnly: [{
type: Input
}], ariaInvalid: [{
type: Input
}], small: [{
type: Input
}], message: [{
type: Input
}], messageSeverity: [{
type: Input
}], error: [{
type: Input
}], valid: [{
type: Input
}], indeterminate: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jaGVja2JveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZHNmci1jb21wb25lbnRzL3NyYy9saWIvZm9ybXMvZm9ybS1jaGVja2JveC9mb3JtLWNoZWNrYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1kc2ZyLWNvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy9mb3JtLWNoZWNrYm94L2Zvcm0tY2hlY2tib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQWMsVUFBVSxFQUFFLEtBQUssRUFBVSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRyxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHVCQUF1QixFQUFnQixpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN4RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7OztBQWlCakc7O0dBRUc7QUFDSCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsdUJBQWdDO0lBOEI3RSxZQUFvQixVQUFzQjtRQUN4QyxLQUFLLEVBQUUsQ0FBQztRQURVLGVBQVUsR0FBVixVQUFVLENBQVk7UUE3QjFDOztXQUVHO1FBQ00sZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFNN0I7O1dBRUc7UUFDTSxVQUFLLEdBQUcsS0FBSyxDQUFDO1FBRXZCOztXQUVHO1FBQ00sWUFBTyxHQUF1QixTQUFTLENBQUM7UUFPOUIsaUJBQVksR0FBRyxpQkFBaUIsQ0FBQztRQU9sRCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQsaUJBQWlCO0lBQ2pCLElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixJQUFJLGtCQUFrQjtRQUNwQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUNoRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xELE9BQU8sUUFBUSxDQUFDLGFBQWEsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBYSxLQUFLLENBQUMsS0FBeUI7UUFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQWEsS0FBSyxDQUFDLEtBQXlCO1FBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxlQUFlLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDO0lBQ2pELENBQUM7SUFFRCxpQkFBaUI7SUFDakIsSUFBYSxhQUFhLENBQUMsS0FBYztRQUN2QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUNoRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xELElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDdEMsUUFBUSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsUUFBUTtRQUNOLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO1FBQzNDLElBQUksQ0FBQyxlQUFlLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxXQUFXLENBQUM7SUFDcEQsQ0FBQzsrR0EvRVUseUJBQXlCO21HQUF6Qix5QkFBeUIsNlFBYnpCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQztnQkFDeEQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLGlEQ2pCSCx3b0RBaURBLGt0REQ5QlksWUFBWSxtU0FBRSxXQUFXLGdoQkFBRSwyQkFBMkI7OzRGQUtyRCx5QkFBeUI7a0JBbEJyQyxTQUFTOytCQUNFLG9CQUFvQixpQkFHZixpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDBCQUEwQixDQUFDOzRCQUN4RCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRixjQUNXLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsMkJBQTJCLENBQUM7K0VBU3hELFdBQVc7c0JBQW5CLEtBQUs7Z0JBSUcsV0FBVztzQkFBbkIsS0FBSztnQkFLRyxLQUFLO3NCQUFiLEtBQUs7Z0JBS0csT0FBTztzQkFBZixLQUFLO2dCQUtHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBNEJPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBU08sS0FBSztzQkFBakIsS0FBSztnQkFNTyxhQUFhO3NCQUF6QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgZm9yd2FyZFJlZiwgSW5wdXQsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERlZmF1bHRDb250cm9sQ29tcG9uZW50LCBEc2ZyU2V2ZXJpdHksIERzZnJTZXZlcml0eUNvbnN0IH0gZnJvbSAnLi4vLi4vc2hhcmVkJztcbmltcG9ydCB7IEVkdU1lc3NhZ2VTZXZlcml0eURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9kaXJlY3RpdmVzL21lc3NhZ2Utc2V2ZXJpdHkuZGlyZWN0aXZlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZHNmci1mb3JtLWNoZWNrYm94JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tY2hlY2tib3guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mb3JtLWNoZWNrYm94LmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRHNmckZvcm1DaGVja2JveENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgRWR1TWVzc2FnZVNldmVyaXR5RGlyZWN0aXZlXSxcbn0pXG4vKlxuICogLSBmaXggMS42IDogTGEgZGl2IG1lc3NhZ2VzIGVzdCB0b3Vqb3VycyBwcsOpc2VudGUgbcOqbWUgZGFucyB1biBncm91cGUgKGNmLiBEU0ZSIDEuOSlcbiAqL1xuZXhwb3J0IGNsYXNzIERzZnJGb3JtQ2hlY2tib3hDb21wb25lbnQgZXh0ZW5kcyBEZWZhdWx0Q29udHJvbENvbXBvbmVudDxib29sZWFuPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKlxuICAgKiBDYWNoZSBsZSBsYWJlbCB2aXN1ZWxsZW1lbnQgZW4gbGUgbGFpc3NhbnQgZGlzcG9uaWJsZSBhdXggbGVjdGV1cnMgZCfDqWNyYW4uXG4gICAqL1xuICBASW5wdXQoKSBsYWJlbFNyT25seSA9IGZhbHNlO1xuXG4gIC8qKiBBam91dGVyIGwnYXR0cmlidXQgJ2FyaWEtaW52YWxpZCcgc3VyIGxlIGNoYW1wIGRlIGZvcm11bGFpcmUuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhSW52YWxpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEb25uZSB1bmUgdGFpbGxlIGRlIDE2cHggYXUgbGlldSBkZSAyNHB4LlxuICAgKi9cbiAgQElucHV0KCkgc21hbGwgPSBmYWxzZTtcblxuICAvKipcbiAgICogTWVzc2FnZSBkJ2luZm9ybWF0aW9uIGxpw6kgYXUgY29tcG9zYW50XG4gICAqL1xuICBASW5wdXQoKSBtZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFJlcHLDqXNlbnRlIGxhIHPDqXbDqXJpdMOpIGR1IG1lc3NhZ2VcbiAgICovXG4gIEBJbnB1dCgpIG1lc3NhZ2VTZXZlcml0eTogRHNmclNldmVyaXR5O1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBEc2ZyU2V2ZXJpdHkgPSBEc2ZyU2V2ZXJpdHlDb25zdDtcblxuICBwcm90ZWN0ZWQgZGVmYXVsdENoZWNrZWQ6IGJvb2xlYW47IC8vIEluaXRpYWxpc8OpIMOgIGxhIHByZW1pw6hyZSB2YWxldXIgZGUgJ3ZhbHVlJy4gUGVybWV0IGRlIHBvc2l0aW9ubmVyIGwnYXR0cmlidXQgJ2NoZWNrZWQnXG4gIHByb3RlY3RlZCBtZXNzYWdlc0dyb3VwSWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudmFsdWUgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKiBAc2luY2UgMS41ICovXG4gIGdldCBjaGVja2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlID8/IGZhbHNlO1xuICB9XG5cbiAgLyoqIEBzaW5jZSAxLjUgKi9cbiAgZ2V0IGluZGV0ZXJtaW5hdGVTdGF0ZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBuYXRpdmVFbHQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBjaGVja2JveCA9IG5hdGl2ZUVsdC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICAgIHJldHVybiBjaGVja2JveC5pbmRldGVybWluYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgZCdlcnJldXIsIHF1YW5kIGlsIGVzdCBwcsOpc2VudCBsZXMgY291bGV1cnMgZHUgY29udHLDtGxlIGNoYW5nZW50LlxuICAgKiBAZGVwcmVjYXRlZCAoQHNpbmNlIDEuMTQpIHV0aWxpc2VyIG1lc3NhZ2UgZXQgbWVzc2FnZVNldmVyaXR5IMOgIGxhIHBsYWNlXG4gICAqL1xuICBASW5wdXQoKSBzZXQgZXJyb3IodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMubWVzc2FnZSA9IHZhbHVlO1xuICAgIHRoaXMubWVzc2FnZVNldmVyaXR5ID0gRHNmclNldmVyaXR5Q29uc3QuRVJST1I7XG4gIH1cblxuICAvKipcbiAgICogTWVzc2FnZSBkZSB2YWxpZGF0aW9uLCBxdWFuZCBpbCBlc3QgcHLDqXNlbnQgbGVzIGNvdWxldXJzIGR1IGNvbnRyw7RsZSBjaGFuZ2VudC5cbiAgICogQGRlcHJlY2F0ZWQgKEBzaW5jZSAxLjE0KSB1dGlsaXNlciBtZXNzYWdlIGV0IG1lc3NhZ2VTZXZlcml0eSDDoCBsYSBwbGFjZVxuICAgKi9cbiAgQElucHV0KCkgc2V0IHZhbGlkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSB2YWx1ZTtcbiAgICB0aGlzLm1lc3NhZ2VTZXZlcml0eSA9IERzZnJTZXZlcml0eUNvbnN0LlZBTElEO1xuICB9XG5cbiAgLyoqIEBzaW5jZSAxLjQgKi9cbiAgQElucHV0KCkgc2V0IGluZGV0ZXJtaW5hdGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBuYXRpdmVFbHQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBjaGVja2JveCA9IG5hdGl2ZUVsdC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIGNoZWNrYm94LmluZGV0ZXJtaW5hdGUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgdGhpcy5kZWZhdWx0Q2hlY2tlZCA9IHN1cGVyLnZhbHVlID8/IGZhbHNlO1xuICAgIHRoaXMubWVzc2FnZXNHcm91cElkID0gYCR7dGhpcy5pbnB1dElkfS1tZXNzYWdlc2A7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJmci1jaGVja2JveC1ncm91cFwiXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAnZnItY2hlY2tib3gtZ3JvdXAtLWVycm9yJzogbWVzc2FnZSAmJiBtZXNzYWdlU2V2ZXJpdHkgPT09IERzZnJTZXZlcml0eS5FUlJPUixcbiAgICAnZnItY2hlY2tib3gtZ3JvdXAtLXZhbGlkJzpcbiAgICAgIG1lc3NhZ2UgJiYgKG1lc3NhZ2VTZXZlcml0eSA9PT0gRHNmclNldmVyaXR5LlZBTElEIHx8IG1lc3NhZ2VTZXZlcml0eSA9PT0gRHNmclNldmVyaXR5LlNVQ0NFU1MpLFxuICAgICdlZHUtY2hlY2tib3gtZ3JvdXAtLWluZm8nOiBtZXNzYWdlICYmIG1lc3NhZ2VTZXZlcml0eSA9PT0gRHNmclNldmVyaXR5LklORk8sXG4gICAgJ2VkdS1jaGVja2JveC1ncm91cC0td2FybmluZyc6IG1lc3NhZ2UgJiYgbWVzc2FnZVNldmVyaXR5ID09PSBEc2ZyU2V2ZXJpdHkuV0FSTklORyxcbiAgICAnZnItY2hlY2tib3gtZ3JvdXAtLXNtJzogc21hbGwsXG4gICAgJ25neC1jaGVja2JveC1ncm91cC0tc3Itb25seSc6IGxhYmVsU3JPbmx5LFxuICB9XCI+XG4gIDxpbnB1dFxuICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwibWVzc2FnZSA/IG1lc3NhZ2VzR3JvdXBJZCA6IG51bGxcIlxuICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgW2lkXT1cImlucHV0SWRcIlxuICAgIFthdHRyLm5hbWVdPVwibmFtZSB8fCBudWxsXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFthdHRyLmNoZWNrZWRdPVwiZGVmYXVsdENoZWNrZWQgfHwgbnVsbFwiXG4gICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImFyaWFJbnZhbGlkIHx8IG51bGxcIlxuICAgIFsobmdNb2RlbCldPVwidmFsdWVcIiAvPlxuICA8bGFiZWwgY2xhc3M9XCJmci1sYWJlbFwiIFtmb3JdPVwiaW5wdXRJZFwiPlxuICAgIEBpZiAobGFiZWxTck9ubHkpIHtcbiAgICAgIDxzcGFuIGNsYXNzPVwiZnItc3Itb25seVwiPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvc3Bhbj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIH1cblxuICAgIEBpZiAoaGludCkge1xuICAgICAgPHNwYW4gY2xhc3M9XCJmci1oaW50LXRleHRcIiBbbmdDbGFzc109XCJ7ICdmci1zci1vbmx5JzogbGFiZWxTck9ubHkgfVwiPnt7IGhpbnQgfX08L3NwYW4+XG4gICAgfVxuICA8L2xhYmVsPlxuICA8ZGl2IGNsYXNzPVwiZnItbWVzc2FnZXMtZ3JvdXBcIiBbaWRdPVwibWVzc2FnZXNHcm91cElkXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgQGlmIChtZXNzYWdlKSB7XG4gICAgICA8cCBjbGFzcz1cImZyLW1lc3NhZ2VcIiBbZWR1TWVzc2FnZVNldmVyaXR5XT1cIm1lc3NhZ2VTZXZlcml0eVwiPlxuICAgICAgICB7eyBtZXNzYWdlIH19XG4gICAgICA8L3A+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2xhYmVsVGVtcGxhdGU+XG4gIEBpZiAobGFiZWwpIHtcbiAgICB7eyBsYWJlbCB9fVxuICB9IEBlbHNlIHtcbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbGFiZWxdXCI+PC9uZy1jb250ZW50PlxuICB9XG48L25nLXRlbXBsYXRlPlxuIl19