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

172 lines 22.5 kB
import { CommonModule } from '@angular/common'; import { Component, CUSTOM_ELEMENTS_SCHEMA, Input, ViewEncapsulation } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { DsfrButtonTypeConst, DsfrButtonVariantConst, DsfrPositionConst, DsfrSizeConst, newUniqueId, } from '../../shared'; import * as i0 from "@angular/core"; import * as i1 from "../../shared"; import * as i2 from "@angular/common"; export class DsfrButtonComponent { constructor(logger) { this.logger = logger; /** Type du button, `button` par défaut. */ this.type = DsfrButtonTypeConst.BUTTON; /** Style du bouton, `primary` par défaut. */ this.variant = DsfrButtonVariantConst.PRIMARY; /** * Taille du bouton, `MD` par défaut */ this.buttonSize = DsfrSizeConst.MD; /** Permet de désactiver le bouton d'action, `false` par défaut. */ this.disabled = false; /** * Permet de passer le libellé du bouton en majuscules, 'false' par défaut. * * @deprecated (since 1.1.0) * * @internal */ this.uppercase = false; /** * Permet d'activer un visuel dénotant un "chargement" (busy), 'false' par défaut. * * @deprecated (since 1.1.0) * * @internal */ this.loader = false; /** Permet d'inverser le contraste du marqueur de focus, `false` par défaut. */ this.invertedOutlineContrast = false; /** * Identifiant de l'élément `<button>` */ this.buttonId = newUniqueId(); /** * Permet de définir le role donné à l'élément `button` * @since 1.15.0 */ this.buttonRole = 'button'; /** * Permet de masquer visuellement le libellé en le laissant accessible aux dispositifs d'assistance. * * A utiliser pour les boutons avec icône seule. * * @since 1.15.0 */ this.labelSrOnly = false; } /** * Taille du bouton, `MD` par défaut * * @deprecated since(1.15.0) utiliser 'buttonSize' à la place */ get size() { return this.buttonSize; } /** * Taille du bouton, `MD` par défaut * * @deprecated since(1.15.0) utiliser 'buttonSize' à la place */ set size(value) { this.buttonSize = value; } ngOnInit() { if (!this.label && !this.ariaLabel && !this.tooltipMessage) { this.logger.warn('dsfr-button: le composant doit obligatoirement contenir un label, un aria-label ou un tooltipMessage'); } } /** @internal */ getClasses() { const classes = ['fr-btn']; if (this.customClass) classes.push(this.customClass); if (this.variant === DsfrButtonVariantConst.SECONDARY) classes.push('fr-btn--secondary'); else if (this.variant === DsfrButtonVariantConst.TERTIARY) classes.push('fr-btn--tertiary'); else if (this.variant === DsfrButtonVariantConst.TERTIARY_NO_OUTLINE) classes.push('fr-btn--tertiary-no-outline'); if (this.icon) { classes.push(this.icon); if (this.label && !this.labelSrOnly) { if (this.iconPosition === DsfrPositionConst.RIGHT) { classes.push('fr-btn--icon-right'); } else { classes.push('fr-btn--icon-left'); } } } if (this.buttonSize === DsfrSizeConst.SM) classes.push('fr-btn--sm'); else if (this.buttonSize === DsfrSizeConst.LG) classes.push('fr-btn--lg'); // 'déprécié' if (this.uppercase) classes.push('uppercase'); if (this.invertedOutlineContrast) classes.push('inverted-outline-contrast'); return classes; } /** * Empêche que l'appuie sur la barre Espace soit considéré comme un clic si le rôle du button est 'link' */ handleSpaceKeyClick(evt) { if (this.buttonRole === 'link') { evt.preventDefault(); } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DsfrButtonComponent, deps: [{ token: i1.LoggerService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DsfrButtonComponent, isStandalone: true, selector: "dsfr-button", inputs: { label: "label", type: "type", tooltipMessage: "tooltipMessage", variant: "variant", buttonSize: "buttonSize", icon: "icon", iconPosition: "iconPosition", disabled: "disabled", uppercase: "uppercase", loader: "loader", ariaLabel: "ariaLabel", invertedOutlineContrast: "invertedOutlineContrast", id: "id", buttonId: "buttonId", ariaControls: "ariaControls", ariaPressed: "ariaPressed", ariaHasPopup: "ariaHasPopup", ariaExpanded: "ariaExpanded", tabIndex: "tabIndex", customClass: "customClass", buttonRole: "buttonRole", labelSrOnly: "labelSrOnly", size: "size" }, ngImport: i0, template: "<button\n [attr.id]=\"buttonId\"\n [ngClass]=\"getClasses()\"\n [attr.type]=\"type\"\n [attr.title]=\"tooltipMessage || null\"\n [disabled]=\"disabled || null\"\n [attr.role]=\"buttonRole === 'button' ? null : buttonRole\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-pressed]=\"ariaPressed || null\"\n [attr.aria-expanded]=\"ariaExpanded === undefined ? null : ariaExpanded\"\n [attr.aria-haspopup]=\"ariaHasPopup || null\"\n [attr.aria-controls]=\"ariaControls || null\"\n [attr.data-fr-opened]=\"ariaControls ? false : null\"\n [attr.tabindex]=\"tabIndex || null\"\n (keydown.Space)=\"handleSpaceKeyClick($event)\">\n @if (label) {\n {{ label }}\n }\n</button>\n", styles: [".sr-only{position:absolute!important;border:0!important;height:1px!important;width:1px!important;padding:0!important;overflow:hidden!important;clip:rect(0,0,0,0)!important}.uppercase{text-transform:uppercase}button.inverted-outline-contrast:focus-visible{outline-color:var(--grey-950-100)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }], encapsulation: i0.ViewEncapsulation.None }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DsfrButtonComponent, decorators: [{ type: Component, args: [{ selector: 'dsfr-button', encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule, FormsModule], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<button\n [attr.id]=\"buttonId\"\n [ngClass]=\"getClasses()\"\n [attr.type]=\"type\"\n [attr.title]=\"tooltipMessage || null\"\n [disabled]=\"disabled || null\"\n [attr.role]=\"buttonRole === 'button' ? null : buttonRole\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-pressed]=\"ariaPressed || null\"\n [attr.aria-expanded]=\"ariaExpanded === undefined ? null : ariaExpanded\"\n [attr.aria-haspopup]=\"ariaHasPopup || null\"\n [attr.aria-controls]=\"ariaControls || null\"\n [attr.data-fr-opened]=\"ariaControls ? false : null\"\n [attr.tabindex]=\"tabIndex || null\"\n (keydown.Space)=\"handleSpaceKeyClick($event)\">\n @if (label) {\n {{ label }}\n }\n</button>\n", styles: [".sr-only{position:absolute!important;border:0!important;height:1px!important;width:1px!important;padding:0!important;overflow:hidden!important;clip:rect(0,0,0,0)!important}.uppercase{text-transform:uppercase}button.inverted-outline-contrast:focus-visible{outline-color:var(--grey-950-100)}\n"] }] }], ctorParameters: () => [{ type: i1.LoggerService }], propDecorators: { label: [{ type: Input }], type: [{ type: Input }], tooltipMessage: [{ type: Input }], variant: [{ type: Input }], buttonSize: [{ type: Input }], icon: [{ type: Input }], iconPosition: [{ type: Input }], disabled: [{ type: Input }], uppercase: [{ type: Input }], loader: [{ type: Input }], ariaLabel: [{ type: Input }], invertedOutlineContrast: [{ type: Input }], id: [{ type: Input }], buttonId: [{ type: Input }], ariaControls: [{ type: Input }], ariaPressed: [{ type: Input }], ariaHasPopup: [{ type: Input }], ariaExpanded: [{ type: Input }], tabIndex: [{ type: Input }], customClass: [{ type: Input }], buttonRole: [{ type: Input }], labelSrOnly: [{ type: Input }], size: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1kc2ZyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2J1dHRvbi9idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWRzZnItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxLQUFLLEVBQVUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFHTCxtQkFBbUIsRUFFbkIsc0JBQXNCLEVBRXRCLGlCQUFpQixFQUVqQixhQUFhLEVBRWIsV0FBVyxHQUNaLE1BQU0sY0FBYyxDQUFDOzs7O0FBV3RCLE1BQU0sT0FBTyxtQkFBbUI7SUFtSDlCLFlBQW9CLE1BQXFCO1FBQXJCLFdBQU0sR0FBTixNQUFNLENBQWU7UUE1R3pDLDJDQUEyQztRQUNsQyxTQUFJLEdBQW1CLG1CQUFtQixDQUFDLE1BQU0sQ0FBQztRQU8zRCw2Q0FBNkM7UUFDcEMsWUFBTyxHQUFzQixzQkFBc0IsQ0FBQyxPQUFPLENBQUM7UUFFckU7O1dBRUc7UUFDTSxlQUFVLEdBQWEsYUFBYSxDQUFDLEVBQUUsQ0FBQztRQVFqRCxtRUFBbUU7UUFDMUQsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUUxQjs7Ozs7O1dBTUc7UUFDTSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRTNCOzs7Ozs7V0FNRztRQUNNLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFLeEIsK0VBQStFO1FBQ3RFLDRCQUF1QixHQUFHLEtBQUssQ0FBQztRQVN6Qzs7V0FFRztRQUNNLGFBQVEsR0FBVyxXQUFXLEVBQUUsQ0FBQztRQWtDMUM7OztXQUdHO1FBQ00sZUFBVSxHQUFXLFFBQVEsQ0FBQztRQUV2Qzs7Ozs7O1dBTUc7UUFDTSxnQkFBVyxHQUFZLEtBQUssQ0FBQztJQUVNLENBQUM7SUFFN0M7Ozs7T0FJRztJQUNILElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQWEsSUFBSSxDQUFDLEtBQWU7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDM0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2Qsc0dBQXNHLENBQ3ZHLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQjtJQUNoQixVQUFVO1FBQ1IsTUFBTSxPQUFPLEdBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVyQyxJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFckQsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLHNCQUFzQixDQUFDLFNBQVM7WUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7YUFDcEYsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLHNCQUFzQixDQUFDLFFBQVE7WUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7YUFDdkYsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLHNCQUFzQixDQUFDLG1CQUFtQjtZQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUVsSCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hCLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNsRCxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQ3JDLENBQUM7cUJBQU0sQ0FBQztvQkFDTixPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQ3BDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxhQUFhLENBQUMsRUFBRTtZQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDaEUsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGFBQWEsQ0FBQyxFQUFFO1lBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUUxRSxhQUFhO1FBQ2IsSUFBSSxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUMsSUFBSSxJQUFJLENBQUMsdUJBQXVCO1lBQUUsT0FBTyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBRTVFLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNPLG1CQUFtQixDQUFDLEdBQVU7UUFDdEMsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQy9CLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQzsrR0FyTFUsbUJBQW1CO21HQUFuQixtQkFBbUIscW9CQzFCaEMsd3JCQW1CQSw0VkRJWSxZQUFZLDRIQUFFLFdBQVc7OzRGQUd4QixtQkFBbUI7a0JBVC9CLFNBQVM7K0JBQ0UsYUFBYSxpQkFHUixpQkFBaUIsQ0FBQyxJQUFJLGNBQ3pCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsV0FDM0IsQ0FBQyxzQkFBc0IsQ0FBQztrRkFPeEIsS0FBSztzQkFBYixLQUFLO2dCQUdHLElBQUk7c0JBQVosS0FBSztnQkFLRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFLRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLElBQUk7c0JBQVosS0FBSztnQkFHRyxZQUFZO3NCQUFwQixLQUFLO2dCQUdHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBU0csU0FBUztzQkFBakIsS0FBSztnQkFTRyxNQUFNO3NCQUFkLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFHRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBT0csRUFBRTtzQkFBVixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBTUcsWUFBWTtzQkFBcEIsS0FBSztnQkFLRyxXQUFXO3NCQUFuQixLQUFLO2dCQUtHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBS0csWUFBWTtzQkFBcEIsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQU1HLFdBQVc7c0JBQW5CLEtBQUs7Z0JBTUcsVUFBVTtzQkFBbEIsS0FBSztnQkFTRyxXQUFXO3NCQUFuQixLQUFLO2dCQWtCTyxJQUFJO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgSW5wdXQsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgRHNmckJ1dHRvbixcbiAgRHNmckJ1dHRvblR5cGUsXG4gIERzZnJCdXR0b25UeXBlQ29uc3QsXG4gIERzZnJCdXR0b25WYXJpYW50LFxuICBEc2ZyQnV0dG9uVmFyaWFudENvbnN0LFxuICBEc2ZyUG9zaXRpb24sXG4gIERzZnJQb3NpdGlvbkNvbnN0LFxuICBEc2ZyU2l6ZSxcbiAgRHNmclNpemVDb25zdCxcbiAgTG9nZ2VyU2VydmljZSxcbiAgbmV3VW5pcXVlSWQsXG59IGZyb20gJy4uLy4uL3NoYXJlZCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RzZnItYnV0dG9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2J1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2J1dHRvbi5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZV0sXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgRHNmckJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIERzZnJCdXR0b24sIE9uSW5pdCB7XG4gIC8qKiBMaWJlbGzDqSBkdSBib3V0b24uXG4gICAqXG4gICAqIERhbnMgbGUgY2FzIGQndW5lIHV0aWxpc2F0aW9uIHBvdXIgdW5lIGljw7RuZSBzZXVsZSBuZSBwYXMgcmVuc2VpZ25lciBgbGFiZWxgLiBSZW5zZWlnbmVyIHNvaXQgYGFyaWEtbGFiZWxgIHNvaXQgYHRvb2x0aXBNZXNzYWdlYC5cbiAgICovXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqIFR5cGUgZHUgYnV0dG9uLCBgYnV0dG9uYCBwYXIgZMOpZmF1dC4gKi9cbiAgQElucHV0KCkgdHlwZTogRHNmckJ1dHRvblR5cGUgPSBEc2ZyQnV0dG9uVHlwZUNvbnN0LkJVVFRPTjtcblxuICAvKipcbiAgICogTWVzc2FnZSBkdSBgdG9vbHRpcGAgKGF0dHJpYnV0IGB0aXRsZWAgZHUgYm91dG9uKS5cbiAgICovXG4gIEBJbnB1dCgpIHRvb2x0aXBNZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqIFN0eWxlIGR1IGJvdXRvbiwgYHByaW1hcnlgIHBhciBkw6lmYXV0LiAqL1xuICBASW5wdXQoKSB2YXJpYW50OiBEc2ZyQnV0dG9uVmFyaWFudCA9IERzZnJCdXR0b25WYXJpYW50Q29uc3QuUFJJTUFSWTtcblxuICAvKipcbiAgICogVGFpbGxlIGR1IGJvdXRvbiwgYE1EYCBwYXIgZMOpZmF1dFxuICAgKi9cbiAgQElucHV0KCkgYnV0dG9uU2l6ZTogRHNmclNpemUgPSBEc2ZyU2l6ZUNvbnN0Lk1EO1xuXG4gIC8qKiBOb20gZGUgbCdpY8O0bmUuICovXG4gIEBJbnB1dCgpIGljb246IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKiogUG9zaXRpb24gZGUgbCdpY8O0bmUsIMOgIGdhdWNoZSBwYXIgZMOpZmF1dC4gKi9cbiAgQElucHV0KCkgaWNvblBvc2l0aW9uOiBEc2ZyUG9zaXRpb247XG5cbiAgLyoqIFBlcm1ldCBkZSBkw6lzYWN0aXZlciBsZSBib3V0b24gZCdhY3Rpb24sIGBmYWxzZWAgcGFyIGTDqWZhdXQuICovXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFBlcm1ldCBkZSBwYXNzZXIgbGUgbGliZWxsw6kgZHUgYm91dG9uIGVuIG1hanVzY3VsZXMsICdmYWxzZScgcGFyIGTDqWZhdXQuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIChzaW5jZSAxLjEuMClcbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBASW5wdXQoKSB1cHBlcmNhc2UgPSBmYWxzZTtcblxuICAvKipcbiAgICogUGVybWV0IGQnYWN0aXZlciB1biB2aXN1ZWwgZMOpbm90YW50IHVuIFwiY2hhcmdlbWVudFwiIChidXN5KSwgJ2ZhbHNlJyBwYXIgZMOpZmF1dC5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgKHNpbmNlIDEuMS4wKVxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEBJbnB1dCgpIGxvYWRlciA9IGZhbHNlO1xuXG4gIC8qKiDwn5GTIFNww6ljaWZpZSBsZSBsaWJlbGzDqSBxdWkgc2VyYSByZXRyYW5zY3JpdCBwYXIgbGVzIG5hcnJhdGV1cnMgZCfDqWNyYW4uICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbDogc3RyaW5nO1xuXG4gIC8qKiBQZXJtZXQgZCdpbnZlcnNlciBsZSBjb250cmFzdGUgZHUgbWFycXVldXIgZGUgZm9jdXMsIGBmYWxzZWAgcGFyIGTDqWZhdXQuICovXG4gIEBJbnB1dCgpIGludmVydGVkT3V0bGluZUNvbnRyYXN0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIElkZW50aWZpYW50IGRlIGwnw6lsw6ltZW50IGA8YnV0dG9uPmBcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgKHNpbmNlIDEuMTQuMCkgdXRpbGlzZXIgYnV0dG9uSWRcbiAgICovXG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElkZW50aWZpYW50IGRlIGwnw6lsw6ltZW50IGA8YnV0dG9uPmBcbiAgICovXG4gIEBJbnB1dCgpIGJ1dHRvbklkOiBzdHJpbmcgPSBuZXdVbmlxdWVJZCgpO1xuXG4gIC8qKlxuICAgKiDwn5GTIGBhcmlhQ29udHJvbHNgIGVzdCB1dGlsaXPDqSBwb3VyIGxhIG1hbmlwdWxhdGlvbiBkJ3VuZSBtb2RhbGUgcGFyIGV4ZW1wbGUuXG4gICAqIChwcmlzZSBlbiBjaGFyZ2UgZHUgcmV0b3VyIGRlIGZvY3VzIMOgIGxhIGZlcm1ldHVyZSBkZSBsYSBtb2RhbGUpLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUNvbnRyb2xzOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIPCfkZMgU3DDqWNpZmllIGwnYXR0cmlidXQgYGFyaWEtcHJlc3NlZGAgcG91ciBpbmRpcXVlciB1biDDqXRhdCAodG9nZ2xlKVxuICAgKi9cbiAgQElucHV0KCkgYXJpYVByZXNzZWQ6IHN0cmluZztcblxuICAvKipcbiAgICog8J+RkyBTcMOpY2lmaWUgbCdhdHRyaWJ1dCBgYXJpYS1oYXNwb3B1cGAgZW4gY2FzIGQnb3V2ZXJ0dXJlIGRlIHBvcHVwXG4gICAqL1xuICBASW5wdXQoKSBhcmlhSGFzUG9wdXA6IHN0cmluZztcblxuICAvKipcbiAgICog8J+RkyBTcMOpY2lmaWUgbCdhdHRyaWJ1dCBgYXJpYS1leHBhbmRlZGBcbiAgICovXG4gIEBJbnB1dCgpIGFyaWFFeHBhbmRlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICog8J+RkyBTcMOpY2lmaWUgbCdhdHRyaWJ1dCBgdGFiaW5kZXhgIHBvdXIgbGEgZ2VzdGlvbiBkdSBmb2N1c1xuICAgKi9cbiAgQElucHV0KCkgdGFiSW5kZXg6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFN0eWxlIHBlcnNvbm5hbGlzw6lcbiAgICogQHNpbmNlIDEuMy4wXG4gICAqL1xuICBASW5wdXQoKSBjdXN0b21DbGFzczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQZXJtZXQgZGUgZMOpZmluaXIgbGUgcm9sZSBkb25uw6kgw6AgbCfDqWzDqW1lbnQgYGJ1dHRvbmBcbiAgICogQHNpbmNlIDEuMTUuMFxuICAgKi9cbiAgQElucHV0KCkgYnV0dG9uUm9sZTogc3RyaW5nID0gJ2J1dHRvbic7XG5cbiAgLyoqXG4gICAqIFBlcm1ldCBkZSBtYXNxdWVyIHZpc3VlbGxlbWVudCBsZSBsaWJlbGzDqSBlbiBsZSBsYWlzc2FudCBhY2Nlc3NpYmxlIGF1eCBkaXNwb3NpdGlmcyBkJ2Fzc2lzdGFuY2UuXG4gICAqXG4gICAqIEEgdXRpbGlzZXIgcG91ciBsZXMgYm91dG9ucyBhdmVjIGljw7RuZSBzZXVsZS5cbiAgICpcbiAgICogQHNpbmNlIDEuMTUuMFxuICAgKi9cbiAgQElucHV0KCkgbGFiZWxTck9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxvZ2dlcjogTG9nZ2VyU2VydmljZSkge31cblxuICAvKipcbiAgICogVGFpbGxlIGR1IGJvdXRvbiwgYE1EYCBwYXIgZMOpZmF1dFxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBzaW5jZSgxLjE1LjApIHV0aWxpc2VyICdidXR0b25TaXplJyDDoCBsYSBwbGFjZVxuICAgKi9cbiAgZ2V0IHNpemUoKTogRHNmclNpemUge1xuICAgIHJldHVybiB0aGlzLmJ1dHRvblNpemU7XG4gIH1cblxuICAvKipcbiAgICogVGFpbGxlIGR1IGJvdXRvbiwgYE1EYCBwYXIgZMOpZmF1dFxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBzaW5jZSgxLjE1LjApIHV0aWxpc2VyICdidXR0b25TaXplJyDDoCBsYSBwbGFjZVxuICAgKi9cbiAgQElucHV0KCkgc2V0IHNpemUodmFsdWU6IERzZnJTaXplKSB7XG4gICAgdGhpcy5idXR0b25TaXplID0gdmFsdWU7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubGFiZWwgJiYgIXRoaXMuYXJpYUxhYmVsICYmICF0aGlzLnRvb2x0aXBNZXNzYWdlKSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKFxuICAgICAgICAnZHNmci1idXR0b246IGxlIGNvbXBvc2FudCBkb2l0IG9ibGlnYXRvaXJlbWVudCBjb250ZW5pciB1biBsYWJlbCwgdW4gYXJpYS1sYWJlbCBvdSB1biB0b29sdGlwTWVzc2FnZScsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgZ2V0Q2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgY2xhc3Nlczogc3RyaW5nW10gPSBbJ2ZyLWJ0biddO1xuXG4gICAgaWYgKHRoaXMuY3VzdG9tQ2xhc3MpIGNsYXNzZXMucHVzaCh0aGlzLmN1c3RvbUNsYXNzKTtcblxuICAgIGlmICh0aGlzLnZhcmlhbnQgPT09IERzZnJCdXR0b25WYXJpYW50Q29uc3QuU0VDT05EQVJZKSBjbGFzc2VzLnB1c2goJ2ZyLWJ0bi0tc2Vjb25kYXJ5Jyk7XG4gICAgZWxzZSBpZiAodGhpcy52YXJpYW50ID09PSBEc2ZyQnV0dG9uVmFyaWFudENvbnN0LlRFUlRJQVJZKSBjbGFzc2VzLnB1c2goJ2ZyLWJ0bi0tdGVydGlhcnknKTtcbiAgICBlbHNlIGlmICh0aGlzLnZhcmlhbnQgPT09IERzZnJCdXR0b25WYXJpYW50Q29uc3QuVEVSVElBUllfTk9fT1VUTElORSkgY2xhc3Nlcy5wdXNoKCdmci1idG4tLXRlcnRpYXJ5LW5vLW91dGxpbmUnKTtcblxuICAgIGlmICh0aGlzLmljb24pIHtcbiAgICAgIGNsYXNzZXMucHVzaCh0aGlzLmljb24pO1xuICAgICAgaWYgKHRoaXMubGFiZWwgJiYgIXRoaXMubGFiZWxTck9ubHkpIHtcbiAgICAgICAgaWYgKHRoaXMuaWNvblBvc2l0aW9uID09PSBEc2ZyUG9zaXRpb25Db25zdC5SSUdIVCkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnZnItYnRuLS1pY29uLXJpZ2h0Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCdmci1idG4tLWljb24tbGVmdCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYnV0dG9uU2l6ZSA9PT0gRHNmclNpemVDb25zdC5TTSkgY2xhc3Nlcy5wdXNoKCdmci1idG4tLXNtJyk7XG4gICAgZWxzZSBpZiAodGhpcy5idXR0b25TaXplID09PSBEc2ZyU2l6ZUNvbnN0LkxHKSBjbGFzc2VzLnB1c2goJ2ZyLWJ0bi0tbGcnKTtcblxuICAgIC8vICdkw6lwcsOpY2nDqSdcbiAgICBpZiAodGhpcy51cHBlcmNhc2UpIGNsYXNzZXMucHVzaCgndXBwZXJjYXNlJyk7XG4gICAgaWYgKHRoaXMuaW52ZXJ0ZWRPdXRsaW5lQ29udHJhc3QpIGNsYXNzZXMucHVzaCgnaW52ZXJ0ZWQtb3V0bGluZS1jb250cmFzdCcpO1xuXG4gICAgcmV0dXJuIGNsYXNzZXM7XG4gIH1cblxuICAvKipcbiAgICogRW1ww6pjaGUgcXVlIGwnYXBwdWllIHN1ciBsYSBiYXJyZSBFc3BhY2Ugc29pdCBjb25zaWTDqXLDqSBjb21tZSB1biBjbGljIHNpIGxlIHLDtGxlIGR1IGJ1dHRvbiBlc3QgJ2xpbmsnXG4gICAqL1xuICBwcm90ZWN0ZWQgaGFuZGxlU3BhY2VLZXlDbGljayhldnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYnV0dG9uUm9sZSA9PT0gJ2xpbmsnKSB7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxidXR0b25cbiAgW2F0dHIuaWRdPVwiYnV0dG9uSWRcIlxuICBbbmdDbGFzc109XCJnZXRDbGFzc2VzKClcIlxuICBbYXR0ci50eXBlXT1cInR5cGVcIlxuICBbYXR0ci50aXRsZV09XCJ0b29sdGlwTWVzc2FnZSB8fCBudWxsXCJcbiAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IG51bGxcIlxuICBbYXR0ci5yb2xlXT1cImJ1dHRvblJvbGUgPT09ICdidXR0b24nID8gbnVsbCA6IGJ1dHRvblJvbGVcIlxuICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbCB8fCBudWxsXCJcbiAgW2F0dHIuYXJpYS1wcmVzc2VkXT1cImFyaWFQcmVzc2VkIHx8IG51bGxcIlxuICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImFyaWFFeHBhbmRlZCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGFyaWFFeHBhbmRlZFwiXG4gIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiYXJpYUhhc1BvcHVwIHx8IG51bGxcIlxuICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImFyaWFDb250cm9scyB8fCBudWxsXCJcbiAgW2F0dHIuZGF0YS1mci1vcGVuZWRdPVwiYXJpYUNvbnRyb2xzID8gZmFsc2UgOiBudWxsXCJcbiAgW2F0dHIudGFiaW5kZXhdPVwidGFiSW5kZXggfHwgbnVsbFwiXG4gIChrZXlkb3duLlNwYWNlKT1cImhhbmRsZVNwYWNlS2V5Q2xpY2soJGV2ZW50KVwiPlxuICBAaWYgKGxhYmVsKSB7XG4gICAge3sgbGFiZWwgfX1cbiAgfVxuPC9idXR0b24+XG4iXX0=