@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).
58 lines • 29.5 kB
JavaScript
import { CommonModule } from '@angular/common';
import { Component, Input, ViewEncapsulation } from '@angular/core';
import { RouterModule } from '@angular/router';
import { DsfrPositionConst } from '../../shared';
import { DsfrLinkComponent } from './link.component';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "@angular/router";
export class ItemLinkComponent extends DsfrLinkComponent {
constructor() {
super(...arguments);
// DsfrPositionConst.RIGHT pour être, malheureusement, compatible avec l'existant. undefined dans l'idéal.
this.defaultIconPosition = DsfrPositionConst.RIGHT;
}
/**@internal */
get item() {
return this._item;
}
/**
* Optionnel, utilisation avec un model DsfrLink (exclusif avec les autres propriétés).
*
* @since 1.7
*/
set item(value) {
this._item = value;
if (this._item) {
this.ariaControls = this._item.ariaControls;
this.ariaCurrent = this._item.active ? 'page' : undefined;
this.ariaLabel = this._item.ariaLabel;
this.routePath = this._item.routerLink;
this.route = this._item.route;
this.routerLinkActive = this._item.routerLinkActive;
this.routerLinkActiveOptions = this._item?.routerLinkActiveOptions;
this.routerLinkExtras = this._item.routerLinkExtras;
this.customClass = this.customClass || this._item.customClass;
this.disabled = this._item.disabled || false;
this.mode = this._item.mode;
this.icon = this._item.icon;
this.iconPosition = this._item.iconPosition || this.defaultIconPosition;
this.label = this._item.label;
this.link = this._item.link;
this.linkId = this._item.linkId;
this.linkTarget = this._item.linkTarget || this._item.target;
this.tooltipMessage = this._item.tooltipMessage;
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ItemLinkComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ItemLinkComponent, isStandalone: true, selector: "edu-item-link", inputs: { defaultIconPosition: "defaultIconPosition", item: "item" }, usesInheritance: true, ngImport: i0, template: "<!-- Lien externe ou g\u00E9r\u00E9 programmatiquement -->\n<!--FIXME : obligation de dupliquer ici pour g\u00E9rer a la fois innerHTML (/!\\ pas de outerHTML!) et la pr\u00E9sence du slot.\n voir pour fix en angular 19 d\u00E9tection d'un contenu dans le slot ou suppression de innerHTML en v2 -->\n@if (!hasRouterLink() && mode !== 'button') {\n @if (label) {\n <!-- Lien externe et label en innerHTML-->\n <a\n [attr.aria-controls]=\"ariaControls || null\"\n [attr.aria-current]=\"ariaCurrent || null\"\n [attr.aria-disabled]=\"disabled || null\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.data-fr-opened]=\"ariaControls ? false : null\"\n [attr.href]=\"getHref() || null\"\n [attr.id]=\"linkId || null\"\n [attr.rel]=\"linkTarget === '_blank' ? 'noopener external' : null\"\n [attr.role]=\"disabled ? 'link' : null\"\n [attr.target]=\"targetLink || null\"\n [attr.title]=\"tooltipMessage || null\"\n class=\"{{ customClass ? customClass : '' }}\"\n [className]=\"icon ? icon : ''\"\n [ngClass]=\"getClass()\"\n (click)=\"onLink($event)\"\n [innerHTML]=\"label\">\n </a>\n } @else {\n <!-- Lien externe et slot pour le label -->\n <a\n [attr.aria-controls]=\"ariaControls || null\"\n [attr.aria-current]=\"ariaCurrent || null\"\n [attr.aria-disabled]=\"disabled || null\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.data-fr-opened]=\"ariaControls ? false : null\"\n [attr.href]=\"getHref() || null\"\n [attr.id]=\"linkId || null\"\n [attr.rel]=\"linkTarget === '_blank' ? 'noopener external' : null\"\n [attr.role]=\"disabled ? 'link' : null\"\n [attr.target]=\"targetLink || null\"\n [attr.title]=\"tooltipMessage || null\"\n class=\"{{ customClass ? customClass : '' }}\"\n [className]=\"icon ? icon : ''\"\n [ngClass]=\"getClass()\"\n (click)=\"onLink($event)\">\n <ng-container [ngTemplateOutlet]=\"slot\"> </ng-container>\n </a>\n }\n} @else if (hasRouterLink() && mode !== 'button') {\n @if (label) {\n <!-- Routerlink et label en innerHTML-->\n <a\n [ariaCurrentWhenActive]=\"ariaCurrentWhenActive ?? 'page'\"\n [attr.aria-controls]=\"ariaControls || null\"\n [attr.aria-current]=\"ariaCurrent || null\"\n [attr.aria-disabled]=\"disabled || null\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.id]=\"linkId || null\"\n [attr.role]=\"disabled ? 'link' : null\"\n [attr.target]=\"targetLink || null\"\n [attr.title]=\"tooltipMessage || null\"\n class=\"{{ customClass ? customClass : '' }}\"\n [className]=\"icon ? icon : ''\"\n [fragment]=\"routerLinkExtras?.fragment\"\n [ngClass]=\"getClass()\"\n [preserveFragment]=\"routerLinkExtras?.preserveFragment\"\n [queryParams]=\"routerLinkExtras?.queryParams\"\n [queryParamsHandling]=\"routerLinkExtras?.queryParamsHandling\"\n [replaceUrl]=\"routerLinkExtras?.replaceUrl\"\n [routerLink]=\"routePath\"\n [routerLinkActive]=\"routerLinkActive ?? ''\"\n [routerLinkActiveOptions]=\"routerLinkActiveOptions ? routerLinkActiveOptions : { exact: false }\"\n [skipLocationChange]=\"routerLinkExtras?.skipLocationChange\"\n [state]=\"routerLinkExtras?.state\"\n (click)=\"onLink($event)\"\n [innerHTML]=\"label\">\n </a>\n } @else {\n <!-- Routerlink et slot pour le label -->\n <a\n [ariaCurrentWhenActive]=\"ariaCurrentWhenActive ?? 'page'\"\n [attr.aria-controls]=\"ariaControls || null\"\n [attr.aria-current]=\"ariaCurrent || null\"\n [attr.aria-disabled]=\"disabled || null\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.id]=\"linkId || null\"\n [attr.role]=\"disabled ? 'link' : null\"\n [attr.target]=\"targetLink || null\"\n [attr.title]=\"tooltipMessage || null\"\n class=\"{{ customClass ? customClass : '' }}\"\n [className]=\"icon ? icon : ''\"\n [fragment]=\"routerLinkExtras?.fragment\"\n [ngClass]=\"getClass()\"\n [preserveFragment]=\"routerLinkExtras?.preserveFragment\"\n [queryParams]=\"routerLinkExtras?.queryParams\"\n [queryParamsHandling]=\"routerLinkExtras?.queryParamsHandling\"\n [replaceUrl]=\"routerLinkExtras?.replaceUrl\"\n [routerLink]=\"routePath\"\n [routerLinkActive]=\"routerLinkActive ?? ''\"\n [routerLinkActiveOptions]=\"routerLinkActiveOptions ? routerLinkActiveOptions : { exact: false }\"\n [skipLocationChange]=\"routerLinkExtras?.skipLocationChange\"\n [state]=\"routerLinkExtras?.state\"\n (click)=\"onLink($event)\">\n <ng-container [ngTemplateOutlet]=\"slot\"> </ng-container>\n </a>\n }\n} @else if (mode === 'button') {\n @if (label) {\n <!-- Bouton et label en innerHTML-->\n <button\n type=\"button\"\n [attr.id]=\"linkId\"\n [attr.aria-controls]=\"ariaControls || null\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.data-fr-opened]=\"ariaControls ? false : null\"\n [attr.title]=\"tooltipMessage || null\"\n [disabled]=\"disabled\"\n [ngClass]=\"getButtonClasses()\"\n (click)=\"onLink($event)\"\n [innerHTML]=\"label\"></button>\n } @else {\n <!-- Bouton et slot pour le label-->\n <button\n type=\"button\"\n [attr.id]=\"linkId\"\n [attr.aria-controls]=\"ariaControls || null\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.data-fr-opened]=\"ariaControls ? false : null\"\n [attr.title]=\"tooltipMessage || null\"\n [disabled]=\"disabled\"\n [ngClass]=\"getButtonClasses()\"\n (click)=\"onLink($event)\">\n <ng-container [ngTemplateOutlet]=\"slot\"> </ng-container>\n </button>\n }\n}\n\n<!-- D\u00E9clar\u00E9 dans un template : le ng-content ne doit \u00EAtre pr\u00E9sent qu'une seule fois -->\n<ng-template #slot>\n <ng-content></ng-content>\n</ng-template>\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: RouterModule }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ItemLinkComponent, decorators: [{
type: Component,
args: [{ selector: 'edu-item-link', encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule, RouterModule], template: "<!-- Lien externe ou g\u00E9r\u00E9 programmatiquement -->\n<!--FIXME : obligation de dupliquer ici pour g\u00E9rer a la fois innerHTML (/!\\ pas de outerHTML!) et la pr\u00E9sence du slot.\n voir pour fix en angular 19 d\u00E9tection d'un contenu dans le slot ou suppression de innerHTML en v2 -->\n@if (!hasRouterLink() && mode !== 'button') {\n @if (label) {\n <!-- Lien externe et label en innerHTML-->\n <a\n [attr.aria-controls]=\"ariaControls || null\"\n [attr.aria-current]=\"ariaCurrent || null\"\n [attr.aria-disabled]=\"disabled || null\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.data-fr-opened]=\"ariaControls ? false : null\"\n [attr.href]=\"getHref() || null\"\n [attr.id]=\"linkId || null\"\n [attr.rel]=\"linkTarget === '_blank' ? 'noopener external' : null\"\n [attr.role]=\"disabled ? 'link' : null\"\n [attr.target]=\"targetLink || null\"\n [attr.title]=\"tooltipMessage || null\"\n class=\"{{ customClass ? customClass : '' }}\"\n [className]=\"icon ? icon : ''\"\n [ngClass]=\"getClass()\"\n (click)=\"onLink($event)\"\n [innerHTML]=\"label\">\n </a>\n } @else {\n <!-- Lien externe et slot pour le label -->\n <a\n [attr.aria-controls]=\"ariaControls || null\"\n [attr.aria-current]=\"ariaCurrent || null\"\n [attr.aria-disabled]=\"disabled || null\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.data-fr-opened]=\"ariaControls ? false : null\"\n [attr.href]=\"getHref() || null\"\n [attr.id]=\"linkId || null\"\n [attr.rel]=\"linkTarget === '_blank' ? 'noopener external' : null\"\n [attr.role]=\"disabled ? 'link' : null\"\n [attr.target]=\"targetLink || null\"\n [attr.title]=\"tooltipMessage || null\"\n class=\"{{ customClass ? customClass : '' }}\"\n [className]=\"icon ? icon : ''\"\n [ngClass]=\"getClass()\"\n (click)=\"onLink($event)\">\n <ng-container [ngTemplateOutlet]=\"slot\"> </ng-container>\n </a>\n }\n} @else if (hasRouterLink() && mode !== 'button') {\n @if (label) {\n <!-- Routerlink et label en innerHTML-->\n <a\n [ariaCurrentWhenActive]=\"ariaCurrentWhenActive ?? 'page'\"\n [attr.aria-controls]=\"ariaControls || null\"\n [attr.aria-current]=\"ariaCurrent || null\"\n [attr.aria-disabled]=\"disabled || null\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.id]=\"linkId || null\"\n [attr.role]=\"disabled ? 'link' : null\"\n [attr.target]=\"targetLink || null\"\n [attr.title]=\"tooltipMessage || null\"\n class=\"{{ customClass ? customClass : '' }}\"\n [className]=\"icon ? icon : ''\"\n [fragment]=\"routerLinkExtras?.fragment\"\n [ngClass]=\"getClass()\"\n [preserveFragment]=\"routerLinkExtras?.preserveFragment\"\n [queryParams]=\"routerLinkExtras?.queryParams\"\n [queryParamsHandling]=\"routerLinkExtras?.queryParamsHandling\"\n [replaceUrl]=\"routerLinkExtras?.replaceUrl\"\n [routerLink]=\"routePath\"\n [routerLinkActive]=\"routerLinkActive ?? ''\"\n [routerLinkActiveOptions]=\"routerLinkActiveOptions ? routerLinkActiveOptions : { exact: false }\"\n [skipLocationChange]=\"routerLinkExtras?.skipLocationChange\"\n [state]=\"routerLinkExtras?.state\"\n (click)=\"onLink($event)\"\n [innerHTML]=\"label\">\n </a>\n } @else {\n <!-- Routerlink et slot pour le label -->\n <a\n [ariaCurrentWhenActive]=\"ariaCurrentWhenActive ?? 'page'\"\n [attr.aria-controls]=\"ariaControls || null\"\n [attr.aria-current]=\"ariaCurrent || null\"\n [attr.aria-disabled]=\"disabled || null\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.id]=\"linkId || null\"\n [attr.role]=\"disabled ? 'link' : null\"\n [attr.target]=\"targetLink || null\"\n [attr.title]=\"tooltipMessage || null\"\n class=\"{{ customClass ? customClass : '' }}\"\n [className]=\"icon ? icon : ''\"\n [fragment]=\"routerLinkExtras?.fragment\"\n [ngClass]=\"getClass()\"\n [preserveFragment]=\"routerLinkExtras?.preserveFragment\"\n [queryParams]=\"routerLinkExtras?.queryParams\"\n [queryParamsHandling]=\"routerLinkExtras?.queryParamsHandling\"\n [replaceUrl]=\"routerLinkExtras?.replaceUrl\"\n [routerLink]=\"routePath\"\n [routerLinkActive]=\"routerLinkActive ?? ''\"\n [routerLinkActiveOptions]=\"routerLinkActiveOptions ? routerLinkActiveOptions : { exact: false }\"\n [skipLocationChange]=\"routerLinkExtras?.skipLocationChange\"\n [state]=\"routerLinkExtras?.state\"\n (click)=\"onLink($event)\">\n <ng-container [ngTemplateOutlet]=\"slot\"> </ng-container>\n </a>\n }\n} @else if (mode === 'button') {\n @if (label) {\n <!-- Bouton et label en innerHTML-->\n <button\n type=\"button\"\n [attr.id]=\"linkId\"\n [attr.aria-controls]=\"ariaControls || null\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.data-fr-opened]=\"ariaControls ? false : null\"\n [attr.title]=\"tooltipMessage || null\"\n [disabled]=\"disabled\"\n [ngClass]=\"getButtonClasses()\"\n (click)=\"onLink($event)\"\n [innerHTML]=\"label\"></button>\n } @else {\n <!-- Bouton et slot pour le label-->\n <button\n type=\"button\"\n [attr.id]=\"linkId\"\n [attr.aria-controls]=\"ariaControls || null\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.data-fr-opened]=\"ariaControls ? false : null\"\n [attr.title]=\"tooltipMessage || null\"\n [disabled]=\"disabled\"\n [ngClass]=\"getButtonClasses()\"\n (click)=\"onLink($event)\">\n <ng-container [ngTemplateOutlet]=\"slot\"> </ng-container>\n </button>\n }\n}\n\n<!-- D\u00E9clar\u00E9 dans un template : le ng-content ne doit \u00EAtre pr\u00E9sent qu'une seule fois -->\n<ng-template #slot>\n <ng-content></ng-content>\n</ng-template>\n" }]
}], propDecorators: { defaultIconPosition: [{
type: Input
}], item: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS1saW5rLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1kc2ZyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2xpbmsvaXRlbS1saW5rLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1kc2ZyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2xpbmsvbGluay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBMEIsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7QUFTckQsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGlCQUFpQjtJQVB4RDs7UUFRRSwwR0FBMEc7UUFDakcsd0JBQW1CLEdBQTZCLGlCQUFpQixDQUFDLEtBQUssQ0FBQztLQXNDbEY7SUFqQ0MsZUFBZTtJQUNmLElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQWEsSUFBSSxDQUFDLEtBQTJCO1FBQzNDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUM1QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUMxRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7WUFDdkMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUM5QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztZQUNwRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSx1QkFBdUIsQ0FBQztZQUNuRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztZQUNwRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7WUFDOUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7WUFDN0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztZQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDO1lBQ3hFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDOUIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztZQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDN0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQzsrR0F2Q1UsaUJBQWlCO21HQUFqQixpQkFBaUIsc0tDYjlCLDYwTEEwSUEsMkNEL0hZLFlBQVksbVNBQUUsWUFBWTs7NEZBRXpCLGlCQUFpQjtrQkFQN0IsU0FBUzsrQkFDRSxlQUFlLGlCQUVWLGlCQUFpQixDQUFDLElBQUksY0FDekIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQzs4QkFJNUIsbUJBQW1CO3NCQUEzQixLQUFLO2dCQWVPLElBQUk7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBEc2ZyTGluaywgRHNmclBvc2l0aW9uLCBEc2ZyUG9zaXRpb25Db25zdCB9IGZyb20gJy4uLy4uL3NoYXJlZCc7XG5pbXBvcnQgeyBEc2ZyTGlua0NvbXBvbmVudCB9IGZyb20gJy4vbGluay5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlZHUtaXRlbS1saW5rJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpbmsuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSb3V0ZXJNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBJdGVtTGlua0NvbXBvbmVudCBleHRlbmRzIERzZnJMaW5rQ29tcG9uZW50IHtcbiAgLy8gRHNmclBvc2l0aW9uQ29uc3QuUklHSFQgcG91ciDDqnRyZSwgbWFsaGV1cmV1c2VtZW50LCBjb21wYXRpYmxlIGF2ZWMgbCdleGlzdGFudC4gdW5kZWZpbmVkIGRhbnMgbCdpZMOpYWwuXG4gIEBJbnB1dCgpIGRlZmF1bHRJY29uUG9zaXRpb246IERzZnJQb3NpdGlvbiB8IHVuZGVmaW5lZCA9IERzZnJQb3NpdGlvbkNvbnN0LlJJR0hUO1xuXG4gIC8qKkBpbnRlcm5hbCAqL1xuICBwcml2YXRlIF9pdGVtOiBEc2ZyTGluayB8IHVuZGVmaW5lZDtcblxuICAvKipAaW50ZXJuYWwgKi9cbiAgZ2V0IGl0ZW0oKTogRHNmckxpbmsgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pdGVtO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wdGlvbm5lbCwgdXRpbGlzYXRpb24gYXZlYyB1biBtb2RlbCBEc2ZyTGluayAoZXhjbHVzaWYgYXZlYyBsZXMgYXV0cmVzIHByb3ByacOpdMOpcykuXG4gICAqXG4gICAqIEBzaW5jZSAxLjdcbiAgICovXG4gIEBJbnB1dCgpIHNldCBpdGVtKHZhbHVlOiBEc2ZyTGluayB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2l0ZW0gPSB2YWx1ZTtcbiAgICBpZiAodGhpcy5faXRlbSkge1xuICAgICAgdGhpcy5hcmlhQ29udHJvbHMgPSB0aGlzLl9pdGVtLmFyaWFDb250cm9scztcbiAgICAgIHRoaXMuYXJpYUN1cnJlbnQgPSB0aGlzLl9pdGVtLmFjdGl2ZSA/ICdwYWdlJyA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuYXJpYUxhYmVsID0gdGhpcy5faXRlbS5hcmlhTGFiZWw7XG4gICAgICB0aGlzLnJvdXRlUGF0aCA9IHRoaXMuX2l0ZW0ucm91dGVyTGluaztcbiAgICAgIHRoaXMucm91dGUgPSB0aGlzLl9pdGVtLnJvdXRlO1xuICAgICAgdGhpcy5yb3V0ZXJMaW5rQWN0aXZlID0gdGhpcy5faXRlbS5yb3V0ZXJMaW5rQWN0aXZlO1xuICAgICAgdGhpcy5yb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucyA9IHRoaXMuX2l0ZW0/LnJvdXRlckxpbmtBY3RpdmVPcHRpb25zO1xuICAgICAgdGhpcy5yb3V0ZXJMaW5rRXh0cmFzID0gdGhpcy5faXRlbS5yb3V0ZXJMaW5rRXh0cmFzO1xuICAgICAgdGhpcy5jdXN0b21DbGFzcyA9IHRoaXMuY3VzdG9tQ2xhc3MgfHwgdGhpcy5faXRlbS5jdXN0b21DbGFzcztcbiAgICAgIHRoaXMuZGlzYWJsZWQgPSB0aGlzLl9pdGVtLmRpc2FibGVkIHx8IGZhbHNlO1xuICAgICAgdGhpcy5tb2RlID0gdGhpcy5faXRlbS5tb2RlO1xuICAgICAgdGhpcy5pY29uID0gdGhpcy5faXRlbS5pY29uO1xuICAgICAgdGhpcy5pY29uUG9zaXRpb24gPSB0aGlzLl9pdGVtLmljb25Qb3NpdGlvbiB8fCB0aGlzLmRlZmF1bHRJY29uUG9zaXRpb247XG4gICAgICB0aGlzLmxhYmVsID0gdGhpcy5faXRlbS5sYWJlbDtcbiAgICAgIHRoaXMubGluayA9IHRoaXMuX2l0ZW0ubGluaztcbiAgICAgIHRoaXMubGlua0lkID0gdGhpcy5faXRlbS5saW5rSWQ7XG4gICAgICB0aGlzLmxpbmtUYXJnZXQgPSB0aGlzLl9pdGVtLmxpbmtUYXJnZXQgfHwgdGhpcy5faXRlbS50YXJnZXQ7XG4gICAgICB0aGlzLnRvb2x0aXBNZXNzYWdlID0gdGhpcy5faXRlbS50b29sdGlwTWVzc2FnZTtcbiAgICB9XG4gIH1cbn1cbiIsIjwhLS0gTGllbiBleHRlcm5lIG91IGfDqXLDqSBwcm9ncmFtbWF0aXF1ZW1lbnQgLS0+XG48IS0tRklYTUUgOiBvYmxpZ2F0aW9uIGRlIGR1cGxpcXVlciBpY2kgcG91ciBnw6lyZXIgYSBsYSBmb2lzIGlubmVySFRNTCAoLyFcXCBwYXMgZGUgb3V0ZXJIVE1MISkgZXQgbGEgcHLDqXNlbmNlIGR1IHNsb3QuXG4gdm9pciBwb3VyIGZpeCBlbiBhbmd1bGFyIDE5IGTDqXRlY3Rpb24gZCd1biBjb250ZW51IGRhbnMgbGUgc2xvdCBvdSBzdXBwcmVzc2lvbiBkZSBpbm5lckhUTUwgZW4gdjIgLS0+XG5AaWYgKCFoYXNSb3V0ZXJMaW5rKCkgJiYgbW9kZSAhPT0gJ2J1dHRvbicpIHtcbiAgQGlmIChsYWJlbCkge1xuICAgIDwhLS0gTGllbiBleHRlcm5lIGV0IGxhYmVsIGVuIGlubmVySFRNTC0tPlxuICAgIDxhXG4gICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImFyaWFDb250cm9scyB8fCBudWxsXCJcbiAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJhcmlhQ3VycmVudCB8fCBudWxsXCJcbiAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbnVsbFwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbCB8fCBudWxsXCJcbiAgICAgIFthdHRyLmRhdGEtZnItb3BlbmVkXT1cImFyaWFDb250cm9scyA/IGZhbHNlIDogbnVsbFwiXG4gICAgICBbYXR0ci5ocmVmXT1cImdldEhyZWYoKSB8fCBudWxsXCJcbiAgICAgIFthdHRyLmlkXT1cImxpbmtJZCB8fCBudWxsXCJcbiAgICAgIFthdHRyLnJlbF09XCJsaW5rVGFyZ2V0ID09PSAnX2JsYW5rJyA/ICdub29wZW5lciBleHRlcm5hbCcgOiBudWxsXCJcbiAgICAgIFthdHRyLnJvbGVdPVwiZGlzYWJsZWQgPyAnbGluaycgOiBudWxsXCJcbiAgICAgIFthdHRyLnRhcmdldF09XCJ0YXJnZXRMaW5rIHx8IG51bGxcIlxuICAgICAgW2F0dHIudGl0bGVdPVwidG9vbHRpcE1lc3NhZ2UgfHwgbnVsbFwiXG4gICAgICBjbGFzcz1cInt7IGN1c3RvbUNsYXNzID8gY3VzdG9tQ2xhc3MgOiAnJyB9fVwiXG4gICAgICBbY2xhc3NOYW1lXT1cImljb24gPyBpY29uIDogJydcIlxuICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2xhc3MoKVwiXG4gICAgICAoY2xpY2spPVwib25MaW5rKCRldmVudClcIlxuICAgICAgW2lubmVySFRNTF09XCJsYWJlbFwiPlxuICAgIDwvYT5cbiAgfSBAZWxzZSB7XG4gICAgPCEtLSBMaWVuIGV4dGVybmUgZXQgc2xvdCBwb3VyIGxlIGxhYmVsIC0tPlxuICAgIDxhXG4gICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImFyaWFDb250cm9scyB8fCBudWxsXCJcbiAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJhcmlhQ3VycmVudCB8fCBudWxsXCJcbiAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbnVsbFwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbCB8fCBudWxsXCJcbiAgICAgIFthdHRyLmRhdGEtZnItb3BlbmVkXT1cImFyaWFDb250cm9scyA/IGZhbHNlIDogbnVsbFwiXG4gICAgICBbYXR0ci5ocmVmXT1cImdldEhyZWYoKSB8fCBudWxsXCJcbiAgICAgIFthdHRyLmlkXT1cImxpbmtJZCB8fCBudWxsXCJcbiAgICAgIFthdHRyLnJlbF09XCJsaW5rVGFyZ2V0ID09PSAnX2JsYW5rJyA/ICdub29wZW5lciBleHRlcm5hbCcgOiBudWxsXCJcbiAgICAgIFthdHRyLnJvbGVdPVwiZGlzYWJsZWQgPyAnbGluaycgOiBudWxsXCJcbiAgICAgIFthdHRyLnRhcmdldF09XCJ0YXJnZXRMaW5rIHx8IG51bGxcIlxuICAgICAgW2F0dHIudGl0bGVdPVwidG9vbHRpcE1lc3NhZ2UgfHwgbnVsbFwiXG4gICAgICBjbGFzcz1cInt7IGN1c3RvbUNsYXNzID8gY3VzdG9tQ2xhc3MgOiAnJyB9fVwiXG4gICAgICBbY2xhc3NOYW1lXT1cImljb24gPyBpY29uIDogJydcIlxuICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2xhc3MoKVwiXG4gICAgICAoY2xpY2spPVwib25MaW5rKCRldmVudClcIj5cbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic2xvdFwiPiA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2E+XG4gIH1cbn0gQGVsc2UgaWYgKGhhc1JvdXRlckxpbmsoKSAmJiBtb2RlICE9PSAnYnV0dG9uJykge1xuICBAaWYgKGxhYmVsKSB7XG4gICAgPCEtLSBSb3V0ZXJsaW5rICBldCBsYWJlbCBlbiBpbm5lckhUTUwtLT5cbiAgICA8YVxuICAgICAgW2FyaWFDdXJyZW50V2hlbkFjdGl2ZV09XCJhcmlhQ3VycmVudFdoZW5BY3RpdmUgPz8gJ3BhZ2UnXCJcbiAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiYXJpYUNvbnRyb2xzIHx8IG51bGxcIlxuICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cImFyaWFDdXJyZW50IHx8IG51bGxcIlxuICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBudWxsXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsIHx8IG51bGxcIlxuICAgICAgW2F0dHIuaWRdPVwibGlua0lkIHx8IG51bGxcIlxuICAgICAgW2F0dHIucm9sZV09XCJkaXNhYmxlZCA/ICdsaW5rJyA6IG51bGxcIlxuICAgICAgW2F0dHIudGFyZ2V0XT1cInRhcmdldExpbmsgfHwgbnVsbFwiXG4gICAgICBbYXR0ci50aXRsZV09XCJ0b29sdGlwTWVzc2FnZSB8fCBudWxsXCJcbiAgICAgIGNsYXNzPVwie3sgY3VzdG9tQ2xhc3MgPyBjdXN0b21DbGFzcyA6ICcnIH19XCJcbiAgICAgIFtjbGFzc05hbWVdPVwiaWNvbiA/IGljb24gOiAnJ1wiXG4gICAgICBbZnJhZ21lbnRdPVwicm91dGVyTGlua0V4dHJhcz8uZnJhZ21lbnRcIlxuICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2xhc3MoKVwiXG4gICAgICBbcHJlc2VydmVGcmFnbWVudF09XCJyb3V0ZXJMaW5rRXh0cmFzPy5wcmVzZXJ2ZUZyYWdtZW50XCJcbiAgICAgIFtxdWVyeVBhcmFtc109XCJyb3V0ZXJMaW5rRXh0cmFzPy5xdWVyeVBhcmFtc1wiXG4gICAgICBbcXVlcnlQYXJhbXNIYW5kbGluZ109XCJyb3V0ZXJMaW5rRXh0cmFzPy5xdWVyeVBhcmFtc0hhbmRsaW5nXCJcbiAgICAgIFtyZXBsYWNlVXJsXT1cInJvdXRlckxpbmtFeHRyYXM/LnJlcGxhY2VVcmxcIlxuICAgICAgW3JvdXRlckxpbmtdPVwicm91dGVQYXRoXCJcbiAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cInJvdXRlckxpbmtBY3RpdmUgPz8gJydcIlxuICAgICAgW3JvdXRlckxpbmtBY3RpdmVPcHRpb25zXT1cInJvdXRlckxpbmtBY3RpdmVPcHRpb25zID8gcm91dGVyTGlua0FjdGl2ZU9wdGlvbnMgOiB7IGV4YWN0OiBmYWxzZSB9XCJcbiAgICAgIFtza2lwTG9jYXRpb25DaGFuZ2VdPVwicm91dGVyTGlua0V4dHJhcz8uc2tpcExvY2F0aW9uQ2hhbmdlXCJcbiAgICAgIFtzdGF0ZV09XCJyb3V0ZXJMaW5rRXh0cmFzPy5zdGF0ZVwiXG4gICAgICAoY2xpY2spPVwib25MaW5rKCRldmVudClcIlxuICAgICAgW2lubmVySFRNTF09XCJsYWJlbFwiPlxuICAgIDwvYT5cbiAgfSBAZWxzZSB7XG4gICAgPCEtLSBSb3V0ZXJsaW5rICBldCBzbG90IHBvdXIgbGUgbGFiZWwgLS0+XG4gICAgPGFcbiAgICAgIFthcmlhQ3VycmVudFdoZW5BY3RpdmVdPVwiYXJpYUN1cnJlbnRXaGVuQWN0aXZlID8/ICdwYWdlJ1wiXG4gICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImFyaWFDb250cm9scyB8fCBudWxsXCJcbiAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJhcmlhQ3VycmVudCB8fCBudWxsXCJcbiAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbnVsbFwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbCB8fCBudWxsXCJcbiAgICAgIFthdHRyLmlkXT1cImxpbmtJZCB8fCBudWxsXCJcbiAgICAgIFthdHRyLnJvbGVdPVwiZGlzYWJsZWQgPyAnbGluaycgOiBudWxsXCJcbiAgICAgIFthdHRyLnRhcmdldF09XCJ0YXJnZXRMaW5rIHx8IG51bGxcIlxuICAgICAgW2F0dHIudGl0bGVdPVwidG9vbHRpcE1lc3NhZ2UgfHwgbnVsbFwiXG4gICAgICBjbGFzcz1cInt7IGN1c3RvbUNsYXNzID8gY3VzdG9tQ2xhc3MgOiAnJyB9fVwiXG4gICAgICBbY2xhc3NOYW1lXT1cImljb24gPyBpY29uIDogJydcIlxuICAgICAgW2ZyYWdtZW50XT1cInJvdXRlckxpbmtFeHRyYXM/LmZyYWdtZW50XCJcbiAgICAgIFtuZ0NsYXNzXT1cImdldENsYXNzKClcIlxuICAgICAgW3ByZXNlcnZlRnJhZ21lbnRdPVwicm91dGVyTGlua0V4dHJhcz8ucHJlc2VydmVGcmFnbWVudFwiXG4gICAgICBbcXVlcnlQYXJhbXNdPVwicm91dGVyTGlua0V4dHJhcz8ucXVlcnlQYXJhbXNcIlxuICAgICAgW3F1ZXJ5UGFyYW1zSGFuZGxpbmddPVwicm91dGVyTGlua0V4dHJhcz8ucXVlcnlQYXJhbXNIYW5kbGluZ1wiXG4gICAgICBbcmVwbGFjZVVybF09XCJyb3V0ZXJMaW5rRXh0cmFzPy5yZXBsYWNlVXJsXCJcbiAgICAgIFtyb3V0ZXJMaW5rXT1cInJvdXRlUGF0aFwiXG4gICAgICBbcm91dGVyTGlua0FjdGl2ZV09XCJyb3V0ZXJMaW5rQWN0aXZlID8/ICcnXCJcbiAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJyb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucyA/IHJvdXRlckxpbmtBY3RpdmVPcHRpb25zIDogeyBleGFjdDogZmFsc2UgfVwiXG4gICAgICBbc2tpcExvY2F0aW9uQ2hhbmdlXT1cInJvdXRlckxpbmtFeHRyYXM/LnNraXBMb2NhdGlvbkNoYW5nZVwiXG4gICAgICBbc3RhdGVdPVwicm91dGVyTGlua0V4dHJhcz8uc3RhdGVcIlxuICAgICAgKGNsaWNrKT1cIm9uTGluaygkZXZlbnQpXCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNsb3RcIj4gPC9uZy1jb250YWluZXI+XG4gICAgPC9hPlxuICB9XG59IEBlbHNlIGlmIChtb2RlID09PSAnYnV0dG9uJykge1xuICBAaWYgKGxhYmVsKSB7XG4gICAgPCEtLSBCb3V0b24gIGV0IGxhYmVsIGVuIGlubmVySFRNTC0tPlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2F0dHIuaWRdPVwibGlua0lkXCJcbiAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiYXJpYUNvbnRyb2xzIHx8IG51bGxcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWwgfHwgbnVsbFwiXG4gICAgICBbYXR0ci5kYXRhLWZyLW9wZW5lZF09XCJhcmlhQ29udHJvbHMgPyBmYWxzZSA6IG51bGxcIlxuICAgICAgW2F0dHIudGl0bGVdPVwidG9vbHRpcE1lc3NhZ2UgfHwgbnVsbFwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW25nQ2xhc3NdPVwiZ2V0QnV0dG9uQ2xhc3NlcygpXCJcbiAgICAgIChjbGljayk9XCJvbkxpbmsoJGV2ZW50KVwiXG4gICAgICBbaW5uZXJIVE1MXT1cImxhYmVsXCI+PC9idXR0b24+XG4gIH0gQGVsc2Uge1xuICAgIDwhLS0gQm91dG9uICBldCBzbG90IHBvdXIgbGUgbGFiZWwtLT5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFthdHRyLmlkXT1cImxpbmtJZFwiXG4gICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImFyaWFDb250cm9scyB8fCBudWxsXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsIHx8IG51bGxcIlxuICAgICAgW2F0dHIuZGF0YS1mci1vcGVuZWRdPVwiYXJpYUNvbnRyb2xzID8gZmFsc2UgOiBudWxsXCJcbiAgICAgIFthdHRyLnRpdGxlXT1cInRvb2x0aXBNZXNzYWdlIHx8IG51bGxcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFtuZ0NsYXNzXT1cImdldEJ1dHRvbkNsYXNzZXMoKVwiXG4gICAgICAoY2xpY2spPVwib25MaW5rKCRldmVudClcIj5cbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic2xvdFwiPiA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2J1dHRvbj5cbiAgfVxufVxuXG48IS0tIETDqWNsYXLDqSBkYW5zIHVuIHRlbXBsYXRlIDogbGUgbmctY29udGVudCBuZSBkb2l0IMOqdHJlIHByw6lzZW50IHF1J3VuZSBzZXVsZSBmb2lzIC0tPlxuPG5nLXRlbXBsYXRlICNzbG90PlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19