UNPKG

@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).

95 lines 19.5 kB
import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core'; import { DsfrSeverityConst, DsfrSizeConst } from '../../shared'; import { DsfrAlertSizeConst } from './alert.size'; import * as i0 from "@angular/core"; import * as i1 from "../../shared"; import * as i2 from "@angular/common"; export class DsfrAlertComponent { constructor(i18n, el, renderer) { this.i18n = i18n; this.el = el; this.renderer = renderer; /** La valeur à utiliser pour le rôle ARIA. 'alert' par défaut. */ this.ariaRoleValue = 'alert'; /** Doit être vrai si l'alerte apparait dynamiquement en cours de navigation. (ajout de role=alert pour l'accessibilité), * false par défaut */ // https://www.systeme-de-design.gouv.fr/elements-d-interface/composants/alerte // Pour les développeurs. // Nous avons retiré l’attribut role="alert" des exemples de code pour les alertes présentes au chargement de la page. // En effet, l'élément avec un role="alert" sont les premières choses lues par les technologies d'assistance. // De ce fait, le role="alert" doit être réservé aux alertes ajoutées (/injectées) dynamiquement au cours de la navigation. // Ex : alertes de notification suite à une action utilisateur ou mise à jour d’un statut. this.hasAriaRole = false; /** L'alerte peut être masquée */ this.closeable = false; /** Signale la fermeture de l'alerte. */ this.conceal = new EventEmitter(); this.closeControlLabel = this.i18n.t('alert.close'); this.severity = DsfrSeverityConst.INFO; this.size = DsfrAlertSizeConst.MD; } /** @deprecated @since 1.7.0 use 'closeable' instead (avec un 'e') */ get closable() { return this.closeable; } /** @deprecated (@since 1.7.0) utiliser `closeable` à la place (avec un 'e') */ set closable(value) { this.closeable = value; } /** @internal */ getClasses() { const classes = ['fr-alert']; if (this.severity === DsfrSeverityConst.ERROR) classes.push('fr-alert--error'); if (this.severity === DsfrSeverityConst.SUCCESS) classes.push('fr-alert--success'); if (this.severity === DsfrSeverityConst.INFO) classes.push('fr-alert--info'); if (this.severity === DsfrSeverityConst.WARNING) classes.push('fr-alert--warning'); if (this.size === DsfrSizeConst.SM) classes.push('fr-alert--sm'); return classes; } /** @internal */ isSmall() { return this.size == DsfrSizeConst.SM; } /** @internal */ onClose(event) { const parentNode = this.el.nativeElement?.parentNode; if (parentNode) { this.renderer.removeChild(parentNode, this.el.nativeElement, true); } this.conceal.emit(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DsfrAlertComponent, deps: [{ token: i1.I18nService }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DsfrAlertComponent, selector: "dsfr-alert", inputs: { heading: "heading", headingLevel: "headingLevel", message: "message", severity: "severity", ariaRoleValue: "ariaRoleValue", size: "size", closeControlLabel: "closeControlLabel", hasAriaRole: "hasAriaRole", closeable: "closeable", closable: "closable" }, outputs: { conceal: "conceal" }, ngImport: i0, template: "<div [attr.role]=\"hasAriaRole ? ariaRoleValue : null\" [ngClass]=\"getClasses()\">\n <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n <p>{{ message }}</p>\n <button\n *ngIf=\"closable\"\n type=\"button\"\n class=\"fr-btn--close fr-btn\"\n [title]=\"closeControlLabel\"\n (click)=\"onClose($event)\">\n {{ closeControlLabel }}\n </button>\n</div>\n\n<!-- Templates ----------------------------------------------------------------------------------------------------- -->\n<ng-template #headingTemplate>\n <ng-container [ngSwitch]=\"headingLevel\">\n <h2 *ngSwitchCase=\"'H2'\" class=\"fr-alert__title\">\n <ng-container *ngTemplateOutlet=\"headingPropTemplate\"></ng-container>\n </h2>\n <h3 *ngSwitchCase=\"'H3'\" class=\"fr-alert__title\">\n <ng-container *ngTemplateOutlet=\"headingPropTemplate\"></ng-container>\n </h3>\n <h4 *ngSwitchCase=\"'H4'\" class=\"fr-alert__title\">\n <ng-container *ngTemplateOutlet=\"headingPropTemplate\"></ng-container>\n </h4>\n <h5 *ngSwitchCase=\"'H5'\" class=\"fr-alert__title\">\n <ng-container *ngTemplateOutlet=\"headingPropTemplate\"></ng-container>\n </h5>\n <h6 *ngSwitchCase=\"'H6'\" class=\"fr-alert__title\">\n <ng-container *ngTemplateOutlet=\"headingPropTemplate\"></ng-container>\n </h6>\n <p *ngSwitchDefault class=\"fr-alert__title\">\n <ng-container *ngTemplateOutlet=\"headingPropTemplate\"></ng-container>\n </p>\n </ng-container>\n</ng-template>\n\n<ng-template #headingPropTemplate>\n <ng-container *ngIf=\"heading; else headingContentTemplate\"><span outerHTML=\"{{ heading }}\"></span></ng-container>\n</ng-template>\n\n<ng-template #headingContentTemplate>\n <ng-content></ng-content>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }], encapsulation: i0.ViewEncapsulation.None }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DsfrAlertComponent, decorators: [{ type: Component, args: [{ selector: 'dsfr-alert', encapsulation: ViewEncapsulation.None, template: "<div [attr.role]=\"hasAriaRole ? ariaRoleValue : null\" [ngClass]=\"getClasses()\">\n <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n <p>{{ message }}</p>\n <button\n *ngIf=\"closable\"\n type=\"button\"\n class=\"fr-btn--close fr-btn\"\n [title]=\"closeControlLabel\"\n (click)=\"onClose($event)\">\n {{ closeControlLabel }}\n </button>\n</div>\n\n<!-- Templates ----------------------------------------------------------------------------------------------------- -->\n<ng-template #headingTemplate>\n <ng-container [ngSwitch]=\"headingLevel\">\n <h2 *ngSwitchCase=\"'H2'\" class=\"fr-alert__title\">\n <ng-container *ngTemplateOutlet=\"headingPropTemplate\"></ng-container>\n </h2>\n <h3 *ngSwitchCase=\"'H3'\" class=\"fr-alert__title\">\n <ng-container *ngTemplateOutlet=\"headingPropTemplate\"></ng-container>\n </h3>\n <h4 *ngSwitchCase=\"'H4'\" class=\"fr-alert__title\">\n <ng-container *ngTemplateOutlet=\"headingPropTemplate\"></ng-container>\n </h4>\n <h5 *ngSwitchCase=\"'H5'\" class=\"fr-alert__title\">\n <ng-container *ngTemplateOutlet=\"headingPropTemplate\"></ng-container>\n </h5>\n <h6 *ngSwitchCase=\"'H6'\" class=\"fr-alert__title\">\n <ng-container *ngTemplateOutlet=\"headingPropTemplate\"></ng-container>\n </h6>\n <p *ngSwitchDefault class=\"fr-alert__title\">\n <ng-container *ngTemplateOutlet=\"headingPropTemplate\"></ng-container>\n </p>\n </ng-container>\n</ng-template>\n\n<ng-template #headingPropTemplate>\n <ng-container *ngIf=\"heading; else headingContentTemplate\"><span outerHTML=\"{{ heading }}\"></span></ng-container>\n</ng-template>\n\n<ng-template #headingContentTemplate>\n <ng-content></ng-content>\n</ng-template>\n" }] }], ctorParameters: function () { return [{ type: i1.I18nService }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { heading: [{ type: Input }], headingLevel: [{ type: Input }], message: [{ type: Input }], severity: [{ type: Input }], ariaRoleValue: [{ type: Input }], size: [{ type: Input }], closeControlLabel: [{ type: Input }], hasAriaRole: [{ type: Input }], closeable: [{ type: Input }], conceal: [{ type: Output }], closable: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWRzZnItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvYWxlcnQvYWxlcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWRzZnItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvYWxlcnQvYWxlcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBYSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQWtDLGlCQUFpQixFQUFFLGFBQWEsRUFBZSxNQUFNLGNBQWMsQ0FBQztBQUM3RyxPQUFPLEVBQWlCLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDOzs7O0FBT2pFLE1BQU0sT0FBTyxrQkFBa0I7SUFzQzdCLFlBQ1UsSUFBaUIsRUFDakIsRUFBYyxFQUNkLFFBQW1CO1FBRm5CLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQVc7UUE1QjdCLGtFQUFrRTtRQUN6RCxrQkFBYSxHQUF1QixPQUFPLENBQUM7UUFRckQ7K0JBQ3VCO1FBQ3ZCLCtFQUErRTtRQUMvRSx5QkFBeUI7UUFDekIsc0hBQXNIO1FBQ3RILDZHQUE2RztRQUM3RywySEFBMkg7UUFDM0gsMEZBQTBGO1FBQ2pGLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRTdCLGlDQUFpQztRQUN4QixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRTNCLHdDQUF3QztRQUM5QixZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQU8zQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELHFFQUFxRTtJQUNyRSxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELCtFQUErRTtJQUMvRSxJQUFhLFFBQVEsQ0FBQyxLQUFjO1FBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsVUFBVTtRQUNSLE1BQU0sT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLGlCQUFpQixDQUFDLEtBQUs7WUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDL0UsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLGlCQUFpQixDQUFDLE9BQU87WUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDbkYsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLGlCQUFpQixDQUFDLElBQUk7WUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDN0UsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLGlCQUFpQixDQUFDLE9BQU87WUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDbkYsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxFQUFFO1lBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNqRSxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsZ0JBQWdCO0lBQ2hCLE9BQU87UUFDTCxPQUFPLElBQUksQ0FBQyxJQUFJLElBQUksYUFBYSxDQUFDLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsZ0JBQWdCO0lBQ2hCLE9BQU8sQ0FBQyxLQUFZO1FBQ2xCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQztRQUNyRCxJQUFJLFVBQVUsRUFBRTtZQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNwRTtRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEIsQ0FBQzsrR0FsRlUsa0JBQWtCO21HQUFsQixrQkFBa0IsMlZDVC9CLGl2REE0Q0E7OzRGRG5DYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsWUFBWSxpQkFFUCxpQkFBaUIsQ0FBQyxJQUFJO21KQUk1QixPQUFPO3NCQUFmLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxPQUFPO3NCQUFmLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLElBQUk7c0JBQVosS0FBSztnQkFHRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBVUcsV0FBVztzQkFBbkIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdJLE9BQU87c0JBQWhCLE1BQU07Z0JBa0JNLFFBQVE7c0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgUmVuZGVyZXIyLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHNmckhlYWRpbmdMZXZlbCwgRHNmclNldmVyaXR5LCBEc2ZyU2V2ZXJpdHlDb25zdCwgRHNmclNpemVDb25zdCwgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuaW1wb3J0IHsgRHNmckFsZXJ0U2l6ZSwgRHNmckFsZXJ0U2l6ZUNvbnN0IH0gZnJvbSAnLi9hbGVydC5zaXplJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZHNmci1hbGVydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hbGVydC5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIERzZnJBbGVydENvbXBvbmVudCB7XG4gIC8qKiBMZSB0aXRyZSBkZSBsJ2FsZXJ0ZSAoaHRtbCBhdXRvcmlzw6kpLiAqL1xuICBASW5wdXQoKSBoZWFkaW5nOiBzdHJpbmc7XG5cbiAgLyoqIExlIG5pdmVhdSBkZSB0aXRyZSBkZXZhbnQgw6p0cmUgdXRpbGlzw6ksIHVuZSBiYWxpc2UgPHA+IHNlcmEgdXRpbGlzw6llIHNpIGxhIHByb3ByacOpdMOpIG4nZXN0IHBhcyByZW5zZWlnbsOpZS4gKi9cbiAgQElucHV0KCkgaGVhZGluZ0xldmVsOiBEc2ZySGVhZGluZ0xldmVsO1xuXG4gIC8qKiBMZSBjb3JwcyBkdSBtZXNzYWdlIGRlIGwnYWxlcnRlICh0ZXh0ZXggc2ltcGxlKS4gKi9cbiAgQElucHV0KCkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKiBMZSBuaXZlYXUgZCdhbGVydGUuICdpbmZvJyBwYXIgZMOpZmF1dC4gKi9cbiAgQElucHV0KCkgc2V2ZXJpdHk6IERzZnJTZXZlcml0eTtcblxuICAvKiogTGEgdmFsZXVyIMOgIHV0aWxpc2VyIHBvdXIgbGUgcsO0bGUgQVJJQS4gJ2FsZXJ0JyBwYXIgZMOpZmF1dC4gKi9cbiAgQElucHV0KCkgYXJpYVJvbGVWYWx1ZTogJ2FsZXJ0JyB8ICdzdGF0dXMnID0gJ2FsZXJ0JztcblxuICAvKiogTGEgdGFpbGxlIGRlIGwnYWxlcnRlLiAnTUQnIHBhciBkw6lmYXV0LiAqL1xuICBASW5wdXQoKSBzaXplOiBEc2ZyQWxlcnRTaXplO1xuXG4gIC8qKiBMZSBsaWJlbGzDqSBhc3NvY2nDqSBhdSBib3V0b24gZGUgZmVybWV0dXJlIGRlIGwnYWxlcnRlLiAqL1xuICBASW5wdXQoKSBjbG9zZUNvbnRyb2xMYWJlbDogc3RyaW5nO1xuXG4gIC8qKiBEb2l0IMOqdHJlIHZyYWkgc2kgbCdhbGVydGUgYXBwYXJhaXQgZHluYW1pcXVlbWVudCBlbiBjb3VycyBkZSBuYXZpZ2F0aW9uLiAoYWpvdXQgZGUgcm9sZT1hbGVydCBwb3VyIGwnYWNjZXNzaWJpbGl0w6kpLFxuICAgKiAgZmFsc2UgcGFyIGTDqWZhdXQgKi9cbiAgLy8gaHR0cHM6Ly93d3cuc3lzdGVtZS1kZS1kZXNpZ24uZ291di5mci9lbGVtZW50cy1kLWludGVyZmFjZS9jb21wb3NhbnRzL2FsZXJ0ZVxuICAvLyBQb3VyIGxlcyBkw6l2ZWxvcHBldXJzLlxuICAvLyBOb3VzIGF2b25zIHJldGlyw6kgbOKAmWF0dHJpYnV0IHJvbGU9XCJhbGVydFwiIGRlcyBleGVtcGxlcyBkZSBjb2RlIHBvdXIgbGVzIGFsZXJ0ZXMgcHLDqXNlbnRlcyBhdSBjaGFyZ2VtZW50IGRlIGxhIHBhZ2UuXG4gIC8vIEVuIGVmZmV0LCBsJ8OpbMOpbWVudCBhdmVjIHVuIHJvbGU9XCJhbGVydFwiIHNvbnQgbGVzIHByZW1pw6hyZXMgY2hvc2VzIGx1ZXMgcGFyIGxlcyB0ZWNobm9sb2dpZXMgZCdhc3Npc3RhbmNlLlxuICAvLyBEZSBjZSBmYWl0LCBsZSByb2xlPVwiYWxlcnRcIiBkb2l0IMOqdHJlIHLDqXNlcnbDqSBhdXggYWxlcnRlcyBham91dMOpZXMgKC9pbmplY3TDqWVzKSBkeW5hbWlxdWVtZW50IGF1IGNvdXJzIGRlIGxhIG5hdmlnYXRpb24uXG4gIC8vIEV4IDogYWxlcnRlcyBkZSBub3RpZmljYXRpb24gc3VpdGUgw6AgdW5lIGFjdGlvbiB1dGlsaXNhdGV1ciBvdSBtaXNlIMOgIGpvdXIgZOKAmXVuIHN0YXR1dC5cbiAgQElucHV0KCkgaGFzQXJpYVJvbGUgPSBmYWxzZTtcblxuICAvKiogTCdhbGVydGUgcGV1dCDDqnRyZSBtYXNxdcOpZSAqL1xuICBASW5wdXQoKSBjbG9zZWFibGUgPSBmYWxzZTtcblxuICAvKiogU2lnbmFsZSBsYSBmZXJtZXR1cmUgZGUgbCdhbGVydGUuICovXG4gIEBPdXRwdXQoKSBjb25jZWFsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaTE4bjogSTE4blNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICkge1xuICAgIHRoaXMuY2xvc2VDb250cm9sTGFiZWwgPSB0aGlzLmkxOG4udCgnYWxlcnQuY2xvc2UnKTtcbiAgICB0aGlzLnNldmVyaXR5ID0gRHNmclNldmVyaXR5Q29uc3QuSU5GTztcbiAgICB0aGlzLnNpemUgPSBEc2ZyQWxlcnRTaXplQ29uc3QuTUQ7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgQHNpbmNlIDEuNy4wIHVzZSAnY2xvc2VhYmxlJyBpbnN0ZWFkIChhdmVjIHVuICdlJykgKi9cbiAgZ2V0IGNsb3NhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNsb3NlYWJsZTtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCAoQHNpbmNlIDEuNy4wKSB1dGlsaXNlciBgY2xvc2VhYmxlYCDDoCBsYSBwbGFjZSAoYXZlYyB1biAnZScpICovXG4gIEBJbnB1dCgpIHNldCBjbG9zYWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuY2xvc2VhYmxlID0gdmFsdWU7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIGdldENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNsYXNzZXMgPSBbJ2ZyLWFsZXJ0J107XG4gICAgaWYgKHRoaXMuc2V2ZXJpdHkgPT09IERzZnJTZXZlcml0eUNvbnN0LkVSUk9SKSBjbGFzc2VzLnB1c2goJ2ZyLWFsZXJ0LS1lcnJvcicpO1xuICAgIGlmICh0aGlzLnNldmVyaXR5ID09PSBEc2ZyU2V2ZXJpdHlDb25zdC5TVUNDRVNTKSBjbGFzc2VzLnB1c2goJ2ZyLWFsZXJ0LS1zdWNjZXNzJyk7XG4gICAgaWYgKHRoaXMuc2V2ZXJpdHkgPT09IERzZnJTZXZlcml0eUNvbnN0LklORk8pIGNsYXNzZXMucHVzaCgnZnItYWxlcnQtLWluZm8nKTtcbiAgICBpZiAodGhpcy5zZXZlcml0eSA9PT0gRHNmclNldmVyaXR5Q29uc3QuV0FSTklORykgY2xhc3Nlcy5wdXNoKCdmci1hbGVydC0td2FybmluZycpO1xuICAgIGlmICh0aGlzLnNpemUgPT09IERzZnJTaXplQ29uc3QuU00pIGNsYXNzZXMucHVzaCgnZnItYWxlcnQtLXNtJyk7XG4gICAgcmV0dXJuIGNsYXNzZXM7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIGlzU21hbGwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSA9PSBEc2ZyU2l6ZUNvbnN0LlNNO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBvbkNsb3NlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ/LnBhcmVudE5vZGU7XG4gICAgaWYgKHBhcmVudE5vZGUpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQocGFyZW50Tm9kZSwgdGhpcy5lbC5uYXRpdmVFbGVtZW50LCB0cnVlKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmNlYWwuZW1pdCgpO1xuICB9XG59XG4iLCI8ZGl2IFthdHRyLnJvbGVdPVwiaGFzQXJpYVJvbGUgPyBhcmlhUm9sZVZhbHVlIDogbnVsbFwiIFtuZ0NsYXNzXT1cImdldENsYXNzZXMoKVwiPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGluZ1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gIDxwPnt7IG1lc3NhZ2UgfX08L3A+XG4gIDxidXR0b25cbiAgICAqbmdJZj1cImNsb3NhYmxlXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBjbGFzcz1cImZyLWJ0bi0tY2xvc2UgZnItYnRuXCJcbiAgICBbdGl0bGVdPVwiY2xvc2VDb250cm9sTGFiZWxcIlxuICAgIChjbGljayk9XCJvbkNsb3NlKCRldmVudClcIj5cbiAgICB7eyBjbG9zZUNvbnRyb2xMYWJlbCB9fVxuICA8L2J1dHRvbj5cbjwvZGl2PlxuXG48IS0tIFRlbXBsYXRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cbjxuZy10ZW1wbGF0ZSAjaGVhZGluZ1RlbXBsYXRlPlxuICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJoZWFkaW5nTGV2ZWxcIj5cbiAgICA8aDIgKm5nU3dpdGNoQ2FzZT1cIidIMidcIiBjbGFzcz1cImZyLWFsZXJ0X190aXRsZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRpbmdQcm9wVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2gyPlxuICAgIDxoMyAqbmdTd2l0Y2hDYXNlPVwiJ0gzJ1wiIGNsYXNzPVwiZnItYWxlcnRfX3RpdGxlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGluZ1Byb3BUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvaDM+XG4gICAgPGg0ICpuZ1N3aXRjaENhc2U9XCInSDQnXCIgY2xhc3M9XCJmci1hbGVydF9fdGl0bGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkaW5nUHJvcFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9oND5cbiAgICA8aDUgKm5nU3dpdGNoQ2FzZT1cIidINSdcIiBjbGFzcz1cImZyLWFsZXJ0X190aXRsZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRpbmdQcm9wVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2g1PlxuICAgIDxoNiAqbmdTd2l0Y2hDYXNlPVwiJ0g2J1wiIGNsYXNzPVwiZnItYWxlcnRfX3RpdGxlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGluZ1Byb3BUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvaDY+XG4gICAgPHAgKm5nU3dpdGNoRGVmYXVsdCBjbGFzcz1cImZyLWFsZXJ0X190aXRsZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRpbmdQcm9wVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L3A+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNoZWFkaW5nUHJvcFRlbXBsYXRlPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGluZzsgZWxzZSBoZWFkaW5nQ29udGVudFRlbXBsYXRlXCI+PHNwYW4gb3V0ZXJIVE1MPVwie3sgaGVhZGluZyB9fVwiPjwvc3Bhbj48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaGVhZGluZ0NvbnRlbnRUZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==