@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).
121 lines • 24.9 kB
JavaScript
import { CommonModule } from '@angular/common';
import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output, ViewEncapsulation, } from '@angular/core';
import { DsfrButtonComponent } from '../button';
import { DsfrLinkComponent } from '../link';
import { DsfrToolLinkMenuComponent } from './component/tool-link-menu.component';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
export class DsfrUserMenuComponent {
constructor() {
/** Libellé du bouton du menu déroulant */
this.labelMenu = 'Mon espace';
/** Liste des liens. Prioritaire sur le slot linksUserTemplate */
this.links = [];
/** Afficher un bouton de déconnexion en footer */
this.showLogout = true;
/** Suppression de la bordure si false */
this.outline = true;
/** Evènement émis au clic sur un lien */
this.linkSelect = new EventEmitter();
/** Signale l'ouverture du menu. */
this.disclose = new EventEmitter();
/** Signale la fermeture du menu. */
this.conceal = new EventEmitter();
/** Au clic sur le bouton de déconnexion */
this.logoutSelect = new EventEmitter();
}
get resLinksTemplate() {
return this.linksUserTemplate ?? this.linksProfileTemplate;
}
get resFooterTemplate() {
return this.footerUserTemplate ?? this.footerProfileTemplate;
}
get resHeaderTemplate() {
return this.headerUserTemplate ?? this.headerProfileTemplate;
}
/**
* Nom de l'utilisateur connecté affiché dans le header
* @deprecated utiliser userName
*/
set profileName(value) {
if (value) {
this.userName = value;
}
}
/**
* Détail d'information sur l'utilisateur connecté
* @deprecated utiliser userDetails
*/
set profileDetails(value) {
if (value) {
this.userName = value;
}
}
onLogout() {
this.logoutSelect.emit();
}
onDisclose() {
this.disclose.emit();
}
onConceal() {
this.conceal.emit();
}
onLinkSelect(link) {
this.linkSelect.emit(link);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DsfrUserMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DsfrUserMenuComponent, isStandalone: true, selector: "dsfr-usermenu, dsfr-ext-profilemenu, dsfrx-profilemenu", inputs: { menuId: "menuId", labelMenu: "labelMenu", ariaLabelMenu: "ariaLabelMenu", disabled: "disabled", links: "links", userName: "userName", userDetails: "userDetails", showLogout: "showLogout", outline: "outline", profileName: "profileName", profileDetails: "profileDetails" }, outputs: { linkSelect: "linkSelect", disclose: "disclose", conceal: "conceal", logoutSelect: "logoutSelect" }, queries: [{ propertyName: "headerUserTemplate", first: true, predicate: ["headerUserTemplate"], descendants: true, static: true }, { propertyName: "footerUserTemplate", first: true, predicate: ["footerUserTemplate"], descendants: true, static: true }, { propertyName: "linksUserTemplate", first: true, predicate: ["linksUserTemplate"], descendants: true, static: true }, { propertyName: "linksProfileTemplate", first: true, predicate: ["linksProfileTemplate"], descendants: true, static: true }, { propertyName: "footerProfileTemplate", first: true, predicate: ["footerProfileTemplate"], descendants: true, static: true }, { propertyName: "headerProfileTemplate", first: true, predicate: ["headerProfileTemplate"], descendants: true, static: true }], ngImport: i0, template: "<dsfr-tool-link-menu\n [labelMenu]=\"labelMenu\"\n [links]=\"links\"\n [outline]=\"outline\"\n [disabled]=\"disabled\"\n [ariaLabelMenu]=\"ariaLabelMenu\"\n (conceal)=\"onConceal()\"\n (disclose)=\"onDisclose()\"\n customClass=\"edu-usermenu\"\n (linkSelect)=\"onLinkSelect($event)\"\n iconMenu=\"fr-icon-account-circle-fill\"\n [menuId]=\"menuId\">\n <ng-template #headerTemplate>\n @if (userName || userDetails) {\n <p>\n <span class=\"edu-tool-link-menu__desc\">{{ userName }}</span>\n <br />\n <span class=\"edu-tool-link-menu__detail\">{{ userDetails }}</span>\n </p>\n } @else if (headerUserTemplate) {\n <!-- Affichage du slot header -->\n <ng-container *ngTemplateOutlet=\"resHeaderTemplate\"></ng-container>\n }\n </ng-template>\n <ng-template #linksTemplate>\n <ng-container *ngTemplateOutlet=\"resLinksTemplate\"></ng-container>\n </ng-template>\n <ng-template #footerTemplate>\n @if (showLogout && !footerUserTemplate) {\n <dsfr-button\n label=\"Se d\u00E9connecter\"\n icon=\"fr-icon-logout-box-r-line\"\n iconPosition=\"left\"\n (click)=\"onLogout()\"\n variant=\"tertiary\"\n size=\"SM\"></dsfr-button>\n } @else if (footerUserTemplate) {\n <!-- Affichage du slot footer -->\n <ng-container *ngTemplateOutlet=\"resFooterTemplate\"></ng-container>\n }\n </ng-template>\n</dsfr-tool-link-menu>\n", styles: [".edu-menu-dropdown__btn,.fr-header__tools-links .fr-btns-group .edu-menu-dropdown__btn{margin:0}.edu-menu-dropdown__btn:after,.fr-header__tools-links .fr-btns-group .edu-menu-dropdown__btn:after{--data-uri-svg: url(\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' x='0px' y='0px' viewBox='0 0 24 24' ><path fill='%23929292' d='M12,13.1l5-4.9l1.4,1.4L12,15.9L5.6,9.5l1.4-1.4L12,13.1z'/></svg>\");flex:0 0 auto;display:inline-block;background-color:currentColor;width:var(--icon-size);height:var(--icon-size);mask-size:100% 100%;mask-image:var(--data-uri-svg);content:\"\";margin-left:.5rem;margin-right:-.125rem;transition:transform .3s}.edu-menu-dropdown__btn.fr-btn--sm,.fr-header__tools-links .fr-btns-group .edu-menu-dropdown__btn.fr-btn--sm{--icon-size: 1rem}.edu-menu-dropdown__btn.fr-btn--sm:after,.fr-header__tools-links .fr-btns-group .edu-menu-dropdown__btn.fr-btn--sm:after{--icon-size: 1rem;font-size:.875rem}.edu-menu-dropdown__btn.fr-btn--lg,.fr-header__tools-links .fr-btns-group .edu-menu-dropdown__btn.fr-btn--lg{--icon-size: 1.25rem;font-size:1.125rem}.edu-menu-dropdown__btn[aria-expanded=true],.fr-header__tools-links .fr-btns-group .edu-menu-dropdown__btn[aria-expanded=true]{background-color:var(--background-action-low-blue-france)}.edu-menu-dropdown__btn[aria-expanded=true]:after,.fr-header__tools-links .fr-btns-group .edu-menu-dropdown__btn[aria-expanded=true]:after{transform:rotate(-180deg)}\n", ".edu-tool-link-menu__desc{font-weight:700}.edu-tool-link-menu__detail{color:var(--text-mention-grey);font-size:.875rem}.edu-tool-link-menu__footer .fr-btn{width:100%;justify-content:center}.edu-tool-link-menu__footer:empty,.edu-tool-link-menu__header:empty{height:0;padding:0;border:none}.edu-usermenu.fr-menu{width:20rem}.edu-usermenu.fr-menu .fr-menu__list ul{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: DsfrButtonComponent, selector: "dsfr-button", inputs: ["label", "type", "tooltipMessage", "variant", "buttonSize", "icon", "iconPosition", "disabled", "uppercase", "loader", "ariaLabel", "invertedOutlineContrast", "id", "buttonId", "ariaControls", "ariaPressed", "ariaHasPopup", "ariaExpanded", "tabIndex", "customClass", "buttonRole", "labelSrOnly", "size"] }, { kind: "component", type: DsfrToolLinkMenuComponent, selector: "dsfr-tool-link-menu, dsfr-ext-toolsmenu, dsfrx-toolsmenu", inputs: ["menuId", "labelMenu", "ariaLabelMenu", "disabled", "iconMenu", "links", "customClass", "outline"], outputs: ["linkSelect", "disclose", "conceal"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DsfrUserMenuComponent, decorators: [{
type: Component,
args: [{ selector: 'dsfr-usermenu, dsfr-ext-profilemenu, dsfrx-profilemenu', standalone: true, imports: [CommonModule, DsfrLinkComponent, DsfrButtonComponent, DsfrToolLinkMenuComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<dsfr-tool-link-menu\n [labelMenu]=\"labelMenu\"\n [links]=\"links\"\n [outline]=\"outline\"\n [disabled]=\"disabled\"\n [ariaLabelMenu]=\"ariaLabelMenu\"\n (conceal)=\"onConceal()\"\n (disclose)=\"onDisclose()\"\n customClass=\"edu-usermenu\"\n (linkSelect)=\"onLinkSelect($event)\"\n iconMenu=\"fr-icon-account-circle-fill\"\n [menuId]=\"menuId\">\n <ng-template #headerTemplate>\n @if (userName || userDetails) {\n <p>\n <span class=\"edu-tool-link-menu__desc\">{{ userName }}</span>\n <br />\n <span class=\"edu-tool-link-menu__detail\">{{ userDetails }}</span>\n </p>\n } @else if (headerUserTemplate) {\n <!-- Affichage du slot header -->\n <ng-container *ngTemplateOutlet=\"resHeaderTemplate\"></ng-container>\n }\n </ng-template>\n <ng-template #linksTemplate>\n <ng-container *ngTemplateOutlet=\"resLinksTemplate\"></ng-container>\n </ng-template>\n <ng-template #footerTemplate>\n @if (showLogout && !footerUserTemplate) {\n <dsfr-button\n label=\"Se d\u00E9connecter\"\n icon=\"fr-icon-logout-box-r-line\"\n iconPosition=\"left\"\n (click)=\"onLogout()\"\n variant=\"tertiary\"\n size=\"SM\"></dsfr-button>\n } @else if (footerUserTemplate) {\n <!-- Affichage du slot footer -->\n <ng-container *ngTemplateOutlet=\"resFooterTemplate\"></ng-container>\n }\n </ng-template>\n</dsfr-tool-link-menu>\n", styles: [".edu-menu-dropdown__btn,.fr-header__tools-links .fr-btns-group .edu-menu-dropdown__btn{margin:0}.edu-menu-dropdown__btn:after,.fr-header__tools-links .fr-btns-group .edu-menu-dropdown__btn:after{--data-uri-svg: url(\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' x='0px' y='0px' viewBox='0 0 24 24' ><path fill='%23929292' d='M12,13.1l5-4.9l1.4,1.4L12,15.9L5.6,9.5l1.4-1.4L12,13.1z'/></svg>\");flex:0 0 auto;display:inline-block;background-color:currentColor;width:var(--icon-size);height:var(--icon-size);mask-size:100% 100%;mask-image:var(--data-uri-svg);content:\"\";margin-left:.5rem;margin-right:-.125rem;transition:transform .3s}.edu-menu-dropdown__btn.fr-btn--sm,.fr-header__tools-links .fr-btns-group .edu-menu-dropdown__btn.fr-btn--sm{--icon-size: 1rem}.edu-menu-dropdown__btn.fr-btn--sm:after,.fr-header__tools-links .fr-btns-group .edu-menu-dropdown__btn.fr-btn--sm:after{--icon-size: 1rem;font-size:.875rem}.edu-menu-dropdown__btn.fr-btn--lg,.fr-header__tools-links .fr-btns-group .edu-menu-dropdown__btn.fr-btn--lg{--icon-size: 1.25rem;font-size:1.125rem}.edu-menu-dropdown__btn[aria-expanded=true],.fr-header__tools-links .fr-btns-group .edu-menu-dropdown__btn[aria-expanded=true]{background-color:var(--background-action-low-blue-france)}.edu-menu-dropdown__btn[aria-expanded=true]:after,.fr-header__tools-links .fr-btns-group .edu-menu-dropdown__btn[aria-expanded=true]:after{transform:rotate(-180deg)}\n", ".edu-tool-link-menu__desc{font-weight:700}.edu-tool-link-menu__detail{color:var(--text-mention-grey);font-size:.875rem}.edu-tool-link-menu__footer .fr-btn{width:100%;justify-content:center}.edu-tool-link-menu__footer:empty,.edu-tool-link-menu__header:empty{height:0;padding:0;border:none}.edu-usermenu.fr-menu{width:20rem}.edu-usermenu.fr-menu .fr-menu__list ul{width:100%}\n"] }]
}], propDecorators: { menuId: [{
type: Input
}], labelMenu: [{
type: Input
}], ariaLabelMenu: [{
type: Input
}], disabled: [{
type: Input
}], links: [{
type: Input
}], userName: [{
type: Input
}], userDetails: [{
type: Input
}], showLogout: [{
type: Input
}], outline: [{
type: Input
}], headerUserTemplate: [{
type: ContentChild,
args: ['headerUserTemplate', { static: true }]
}], footerUserTemplate: [{
type: ContentChild,
args: ['footerUserTemplate', { static: true }]
}], linksUserTemplate: [{
type: ContentChild,
args: ['linksUserTemplate', { static: true }]
}], linkSelect: [{
type: Output
}], disclose: [{
type: Output
}], conceal: [{
type: Output
}], logoutSelect: [{
type: Output
}], linksProfileTemplate: [{
type: ContentChild,
args: ['linksProfileTemplate', { static: true }]
}], footerProfileTemplate: [{
type: ContentChild,
args: ['footerProfileTemplate', { static: true }]
}], headerProfileTemplate: [{
type: ContentChild,
args: ['headerProfileTemplate', { static: true }]
}], profileName: [{
type: Input
}], profileDetails: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcm1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWRzZnItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvdXNlcm1lbnUvdXNlcm1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWRzZnItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvdXNlcm1lbnUvdXNlcm1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFFTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM1QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7O0FBV2pGLE1BQU0sT0FBTyxxQkFBcUI7SUFUbEM7UUFhRSwwQ0FBMEM7UUFDakMsY0FBUyxHQUFHLFlBQVksQ0FBQztRQVFsQyxpRUFBaUU7UUFDeEQsVUFBSyxHQUFlLEVBQUUsQ0FBQztRQVFoQyxrREFBa0Q7UUFDekMsZUFBVSxHQUFHLElBQUksQ0FBQztRQUUzQix5Q0FBeUM7UUFDaEMsWUFBTyxHQUFHLElBQUksQ0FBQztRQVd4Qix5Q0FBeUM7UUFDdEIsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFFN0QsbUNBQW1DO1FBQ2hCLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXZELG9DQUFvQztRQUNqQixZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUV0RCw0Q0FBNEM7UUFDekIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0tBZ0U1RDtJQS9DQyxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDN0QsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztJQUMvRCxDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDO0lBQy9ELENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFhLFdBQVcsQ0FBQyxLQUFhO1FBQ3BDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQWEsY0FBYyxDQUFDLEtBQWE7UUFDdkMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDO0lBRVMsUUFBUTtRQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFUyxVQUFVO1FBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVTLFNBQVM7UUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRVMsWUFBWSxDQUFDLElBQWM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQzsrR0E5R1UscUJBQXFCO21HQUFyQixxQkFBcUIsMHVDQ3pCbEMsdTZDQTBDQSwyMUREdkJZLFlBQVksc01BQXFCLG1CQUFtQixrWEFBRSx5QkFBeUI7OzRGQU05RSxxQkFBcUI7a0JBVGpDLFNBQVM7K0JBQ0Usd0RBQXdELGNBQ3RELElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSx5QkFBeUIsQ0FBQyxtQkFHekUsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSTs4QkFJNUIsTUFBTTtzQkFBZCxLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLEtBQUs7c0JBQWIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFHRyxPQUFPO3NCQUFmLEtBQUs7Z0JBR2dELGtCQUFrQjtzQkFBdkUsWUFBWTt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR0Usa0JBQWtCO3NCQUF2RSxZQUFZO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHQyxpQkFBaUI7c0JBQXJFLFlBQVk7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdoQyxVQUFVO3NCQUE1QixNQUFNO2dCQUdZLFFBQVE7c0JBQTFCLE1BQU07Z0JBR1ksT0FBTztzQkFBekIsTUFBTTtnQkFHWSxZQUFZO3NCQUE5QixNQUFNO2dCQUtpRCxvQkFBb0I7c0JBQTNFLFlBQVk7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUtHLHFCQUFxQjtzQkFBN0UsWUFBWTt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBS0UscUJBQXFCO3NCQUE3RSxZQUFZO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFrQjFDLFdBQVc7c0JBQXZCLEtBQUs7Z0JBVU8sY0FBYztzQkFBMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERzZnJMaW5rIH0gZnJvbSAnLi4vLi4vc2hhcmVkJztcbmltcG9ydCB7IERzZnJCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9idXR0b24nO1xuaW1wb3J0IHsgRHNmckxpbmtDb21wb25lbnQgfSBmcm9tICcuLi9saW5rJztcbmltcG9ydCB7IERzZnJUb29sTGlua01lbnVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudC90b29sLWxpbmstbWVudS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkc2ZyLXVzZXJtZW51LCBkc2ZyLWV4dC1wcm9maWxlbWVudSwgZHNmcngtcHJvZmlsZW1lbnUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBEc2ZyTGlua0NvbXBvbmVudCwgRHNmckJ1dHRvbkNvbXBvbmVudCwgRHNmclRvb2xMaW5rTWVudUNvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi91c2VybWVudS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Ryb3Bkb3duLWJ1dHRvbi5jb21wb25lbnQuc2NzcycsICcuL3VzZXJtZW51LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBEc2ZyVXNlck1lbnVDb21wb25lbnQge1xuICAvKiogSWRlbnRpZmlhbnQgZHUgYm91dG9uIGR1IG1lbnUgKGfDqW7DqXLDqSBzaSBub24gcmVuc2VpZ27DqSkgKi9cbiAgQElucHV0KCkgbWVudUlkOiBzdHJpbmc7XG5cbiAgLyoqIExpYmVsbMOpIGR1IGJvdXRvbiBkdSBtZW51IGTDqXJvdWxhbnQgKi9cbiAgQElucHV0KCkgbGFiZWxNZW51ID0gJ01vbiBlc3BhY2UnO1xuXG4gIC8qKiBBdHRyaWJ1dCBhcmlhLWxhYmVsIGR1IGJvdXRvbiBkdSBtZW51IGTDqXJvdWxhbnQgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsTWVudTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBEw6lzYWN0aXZlciBsZSBtZW51ICovXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuO1xuXG4gIC8qKiBMaXN0ZSBkZXMgbGllbnMuIFByaW9yaXRhaXJlIHN1ciBsZSBzbG90IGxpbmtzVXNlclRlbXBsYXRlICovXG4gIEBJbnB1dCgpIGxpbmtzOiBEc2ZyTGlua1tdID0gW107XG5cbiAgLyoqIE5vbSBkZSBsJ3V0aWxpc2F0ZXVyIGNvbm5lY3TDqSBhZmZpY2jDqSBkYW5zIGxlIGhlYWRlciovXG4gIEBJbnB1dCgpIHVzZXJOYW1lOiBzdHJpbmc7XG5cbiAgLyoqIETDqXRhaWwgZCdpbmZvcm1hdGlvbiBzdXIgbCd1dGlsaXNhdGV1ciBjb25uZWN0w6kgKGV4LiBtYWlsKSBhZmZpY2jDqSBkYW5zIGxlIGhlYWRlciAqL1xuICBASW5wdXQoKSB1c2VyRGV0YWlsczogc3RyaW5nO1xuXG4gIC8qKiBBZmZpY2hlciB1biBib3V0b24gZGUgZMOpY29ubmV4aW9uIGVuIGZvb3RlciAqL1xuICBASW5wdXQoKSBzaG93TG9nb3V0ID0gdHJ1ZTtcblxuICAvKiogU3VwcHJlc3Npb24gZGUgbGEgYm9yZHVyZSBzaSBmYWxzZSAqL1xuICBASW5wdXQoKSBvdXRsaW5lID0gdHJ1ZTtcblxuICAvKiogQ29udGVudSBwZXJzb25uYWxpc8OpIGR1IGhlYWRlciBkdSBtZW51ICovXG4gIEBDb250ZW50Q2hpbGQoJ2hlYWRlclVzZXJUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIGhlYWRlclVzZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAvKiogQ29udGVudSBwZXJzb25uYWxpc8OpIGR1IGZvb3RlciBkdSBtZW51ICovXG4gIEBDb250ZW50Q2hpbGQoJ2Zvb3RlclVzZXJUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIGZvb3RlclVzZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAvKiogQ29udGVudSBwZXJzb25uYWxpc8OpIGRlcyBsaWVucyBkdSBtZW51ICovXG4gIEBDb250ZW50Q2hpbGQoJ2xpbmtzVXNlclRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgbGlua3NVc2VyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgLyoqIEV2w6huZW1lbnQgw6ltaXMgYXUgY2xpYyBzdXIgdW4gbGllbiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgbGlua1NlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8RHNmckxpbms+KCk7XG5cbiAgLyoqIFNpZ25hbGUgbCdvdXZlcnR1cmUgZHUgbWVudS4gKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGRpc2Nsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKiBTaWduYWxlIGxhIGZlcm1ldHVyZSBkdSBtZW51LiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgY29uY2VhbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKiogQXUgY2xpYyBzdXIgbGUgYm91dG9uIGRlIGTDqWNvbm5leGlvbiAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGxvZ291dFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXRpbGlzZXIgYGxpbmtzVXNlclRlbXBsYXRlYCDDoCBsYSBwbGFjZS5cbiAgICovXG4gIEBDb250ZW50Q2hpbGQoJ2xpbmtzUHJvZmlsZVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgbGlua3NQcm9maWxlVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVdGlsaXNlciBgZm9vdGVyVXNlclRlbXBsYXRlYCDDoCBsYSBwbGFjZS5cbiAgICovXG4gIEBDb250ZW50Q2hpbGQoJ2Zvb3RlclByb2ZpbGVUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIGZvb3RlclByb2ZpbGVUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFV0aWxpc2VyIGBoZWFkZXJVc2VyVGVtcGxhdGVgIMOgIGxhIHBsYWNlLlxuICAgKi9cbiAgQENvbnRlbnRDaGlsZCgnaGVhZGVyUHJvZmlsZVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgaGVhZGVyUHJvZmlsZVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcblxuICBnZXQgcmVzTGlua3NUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5saW5rc1VzZXJUZW1wbGF0ZSA/PyB0aGlzLmxpbmtzUHJvZmlsZVRlbXBsYXRlO1xuICB9XG5cbiAgZ2V0IHJlc0Zvb3RlclRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmZvb3RlclVzZXJUZW1wbGF0ZSA/PyB0aGlzLmZvb3RlclByb2ZpbGVUZW1wbGF0ZTtcbiAgfVxuXG4gIGdldCByZXNIZWFkZXJUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5oZWFkZXJVc2VyVGVtcGxhdGUgPz8gdGhpcy5oZWFkZXJQcm9maWxlVGVtcGxhdGU7XG4gIH1cblxuICAvKipcbiAgICogTm9tIGRlIGwndXRpbGlzYXRldXIgY29ubmVjdMOpIGFmZmljaMOpIGRhbnMgbGUgaGVhZGVyXG4gICAqIEBkZXByZWNhdGVkIHV0aWxpc2VyIHVzZXJOYW1lXG4gICAqL1xuICBASW5wdXQoKSBzZXQgcHJvZmlsZU5hbWUodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy51c2VyTmFtZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEw6l0YWlsIGQnaW5mb3JtYXRpb24gc3VyIGwndXRpbGlzYXRldXIgY29ubmVjdMOpXG4gICAqIEBkZXByZWNhdGVkIHV0aWxpc2VyIHVzZXJEZXRhaWxzXG4gICAqL1xuICBASW5wdXQoKSBzZXQgcHJvZmlsZURldGFpbHModmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy51c2VyTmFtZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvbkxvZ291dCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ291dFNlbGVjdC5lbWl0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25EaXNjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2Nsb3NlLmVtaXQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNvbmNlYWwoKTogdm9pZCB7XG4gICAgdGhpcy5jb25jZWFsLmVtaXQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkxpbmtTZWxlY3QobGluazogRHNmckxpbmspOiB2b2lkIHtcbiAgICB0aGlzLmxpbmtTZWxlY3QuZW1pdChsaW5rKTtcbiAgfVxufVxuIiwiPGRzZnItdG9vbC1saW5rLW1lbnVcbiAgW2xhYmVsTWVudV09XCJsYWJlbE1lbnVcIlxuICBbbGlua3NdPVwibGlua3NcIlxuICBbb3V0bGluZV09XCJvdXRsaW5lXCJcbiAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgW2FyaWFMYWJlbE1lbnVdPVwiYXJpYUxhYmVsTWVudVwiXG4gIChjb25jZWFsKT1cIm9uQ29uY2VhbCgpXCJcbiAgKGRpc2Nsb3NlKT1cIm9uRGlzY2xvc2UoKVwiXG4gIGN1c3RvbUNsYXNzPVwiZWR1LXVzZXJtZW51XCJcbiAgKGxpbmtTZWxlY3QpPVwib25MaW5rU2VsZWN0KCRldmVudClcIlxuICBpY29uTWVudT1cImZyLWljb24tYWNjb3VudC1jaXJjbGUtZmlsbFwiXG4gIFttZW51SWRdPVwibWVudUlkXCI+XG4gIDxuZy10ZW1wbGF0ZSAjaGVhZGVyVGVtcGxhdGU+XG4gICAgQGlmICh1c2VyTmFtZSB8fCB1c2VyRGV0YWlscykge1xuICAgICAgPHA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZWR1LXRvb2wtbGluay1tZW51X19kZXNjXCI+e3sgdXNlck5hbWUgfX08L3NwYW4+XG4gICAgICAgIDxiciAvPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImVkdS10b29sLWxpbmstbWVudV9fZGV0YWlsXCI+e3sgdXNlckRldGFpbHMgfX08L3NwYW4+XG4gICAgICA8L3A+XG4gICAgfSBAZWxzZSBpZiAoaGVhZGVyVXNlclRlbXBsYXRlKSB7XG4gICAgICA8IS0tIEFmZmljaGFnZSBkdSBzbG90IGhlYWRlciAgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVzSGVhZGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjbGlua3NUZW1wbGF0ZT5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVzTGlua3NUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI2Zvb3RlclRlbXBsYXRlPlxuICAgIEBpZiAoc2hvd0xvZ291dCAmJiAhZm9vdGVyVXNlclRlbXBsYXRlKSB7XG4gICAgICA8ZHNmci1idXR0b25cbiAgICAgICAgbGFiZWw9XCJTZSBkw6ljb25uZWN0ZXJcIlxuICAgICAgICBpY29uPVwiZnItaWNvbi1sb2dvdXQtYm94LXItbGluZVwiXG4gICAgICAgIGljb25Qb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAoY2xpY2spPVwib25Mb2dvdXQoKVwiXG4gICAgICAgIHZhcmlhbnQ9XCJ0ZXJ0aWFyeVwiXG4gICAgICAgIHNpemU9XCJTTVwiPjwvZHNmci1idXR0b24+XG4gICAgfSBAZWxzZSBpZiAoZm9vdGVyVXNlclRlbXBsYXRlKSB7XG4gICAgICA8IS0tIEFmZmljaGFnZSBkdSBzbG90IGZvb3RlciAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZXNGb290ZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZHNmci10b29sLWxpbmstbWVudT5cbiJdfQ==