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

224 lines 23.7 kB
import { Component, inject, Input } from '@angular/core'; import { downloadDetail, LangService, } from '../../shared'; import * as i0 from "@angular/core"; // Ne peut pas être déplacé dans 'shared' à cause de la dépendance sur DsfrBadge et DsfrTag export const DEFAULT_HEADING_LEVEL = 'H3'; export class BasePanelComponent { constructor() { /** * Permet de positionner des badges (jusqu'à 4 badges maxi) en haut du composant, optionnel. * * @see DsfrBadge */ this.badges = []; /** * Permet d'avoir un fond gris ou transparent. */ this.customBackground = 'default'; /** * Permet d'afficher une ombre ou ne pas mettre de bordure. */ this.customBorder = 'default'; /** * Permet de désactiver le composant. */ this.disabled = false; /** * Equivalent à l'attribut html natif 'download'. * - true : la fenêtre de téléchargement s'affiche directement, * - false : le fichier est ouvert avant d'être téléchargé, * - string : nouveau nom de fichier proposé au téléchargement. */ this.downloadDirect = true; /** * Si 'true' (défaut) : le détail du téléchargement est automatiquement renseigné par le script DSFR. */ this.downloadAssessFile = true; /** * Permet de désactiver le lien étendu de la carte. */ this.enlargeLink = true; /** * Le niveau de titre devant être utilisé (tag `h4` par défaut). * Cette balise ne produit pas de style, mais de la structure. */ this.headingLevel = DEFAULT_HEADING_LEVEL; /** * Passe le composant en mode horizontal. */ this.horizontal = false; /** * Dimension du composant, 'MD' par défaut ('SM, 'MD' uniquement pour la tuile). */ this.panelSize = 'MD'; /** * Permet d'avoir un bouton à la place d'un lien. * * @since 1.12 */ this.enlargeButton = false; this._download = false; this._tags = []; this.langService = inject(LangService); } get downloadSizeUnit() { return this._downloadSizeUnit || this.langService.lang ? 'octets' : 'bytes'; } /* get linkTarget(): DsfrLinkTarget { return this._linkTarget; }*/ get tags() { return this._tags; } get itemLink() { const label = this.heading ? this.heading : ''; const itemLink = { label: label, ariaLabel: this.ariaLabel }; // ariaLabel (since 1.7) if (this.link) { itemLink.link = this.link; } else if (this.route) { itemLink.route = this.route; } return itemLink; } get download() { return this._download; } get detailBottom() { return !this.download ? this._detailBottom : this.downloadDetail; } /** * Dimension du composant, 'MD' par défaut ('SM, 'MD' uniquement pour la tuile). * * @deprecated since(1.15.0) utiliser 'panelSize' à la place */ get size() { return this.panelSize; } /** * Dans le cas d'un téléchargement sans l'option 'downloadAssessFile', * on crée le détail à l'aide des propriétés 'downloadSizeBytes', 'downloadMimeType'. * @internal */ get downloadDetail() { return downloadDetail(this.downloadMimeType, this.downloadSizeBytes, this.downloadSizeUnit); } /** * Dimension du composant, 'MD' par défaut ('SM, 'MD' uniquement pour la tuile). * * @deprecated since(1.15.0) utiliser 'panelSize' à la place */ set size(value) { this.panelSize = value; } /** * Transforme le composant classique en composant de téléchargement. */ set download(download) { this._download = download; if (this._download) this.enlargeLink = true; } /** Zone de détail se trouvant visuellement sous la description et à côté de l’icône, optionnel. * Pour la tuile, on peut passer un slot de sélecteur "detail". * En cas de téléchargement le détail est remplacé par les informations du fichier calculées selon downloadAssessFile. */ set detailBottom(value) { this._detailBottom = value; } /** * Force l'unité par défaut qui dépend de la langue du site, en octets (ko, Mo, ...) pour 'fr', en 'bytes' (KB, MB...) pour les autres langues. */ set downloadSizeUnit(value) { this._downloadSizeUnit = value; } /** * Permet de positionner des tags en haut de la carte (cliquables ou non), optionnel. * voir DsfrTag */ set tags(tags) { this._tags = tags; // Vérifie si un tag est cliquable pour désactiver enlargeLink. if (tags?.find((tag) => tag.link)) this.enlargeLink = false; } /** * Activation du router Angular. * Provoque un bug accessibilité sur la navigation au clavier (ajout d'un tabindex=0) * * @deprecated (since 1.11.5) utiliser `routePath` à la place. */ set routerLink(value) { if (value) this.routePath = value; } /** @internal */ hasLink() { return !!(this.link || this.route || this.routePath); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BasePanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BasePanelComponent, selector: "ng-component", inputs: { ariaLabel: "ariaLabel", badges: "badges", customBackground: "customBackground", customBorder: "customBorder", description: "description", disabled: "disabled", downloadDirect: "downloadDirect", downloadAssessFile: "downloadAssessFile", downloadLangCode: "downloadLangCode", downloadMimeType: "downloadMimeType", downloadSizeBytes: "downloadSizeBytes", enlargeLink: "enlargeLink", heading: "heading", headingLevel: "headingLevel", horizontal: "horizontal", link: "link", route: "route", routePath: "routePath", routerLinkActive: "routerLinkActive", routerLinkExtras: "routerLinkExtras", panelSize: "panelSize", enlargeButton: "enlargeButton", linkTarget: "linkTarget", size: "size", download: "download", detailBottom: "detailBottom", downloadSizeUnit: "downloadSizeUnit", tags: "tags", routerLink: "routerLink" }, ngImport: i0, template: '', isInline: true }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BasePanelComponent, decorators: [{ type: Component, args: [{ template: '' }] }], ctorParameters: () => [], propDecorators: { ariaLabel: [{ type: Input }], badges: [{ type: Input }], customBackground: [{ type: Input }], customBorder: [{ type: Input }], description: [{ type: Input }], disabled: [{ type: Input }], downloadDirect: [{ type: Input }], downloadAssessFile: [{ type: Input }], downloadLangCode: [{ type: Input }], downloadMimeType: [{ type: Input }], downloadSizeBytes: [{ type: Input }], enlargeLink: [{ type: Input }], heading: [{ type: Input }], headingLevel: [{ type: Input }], horizontal: [{ type: Input }], link: [{ type: Input }], route: [{ type: Input }], routePath: [{ type: Input }], routerLinkActive: [{ type: Input }], routerLinkExtras: [{ type: Input }], panelSize: [{ type: Input }], enlargeButton: [{ type: Input }], linkTarget: [{ type: Input }], size: [{ type: Input }], download: [{ type: Input }], detailBottom: [{ type: Input }], downloadSizeUnit: [{ type: Input }], tags: [{ type: Input }], routerLink: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1wYW5lbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZHNmci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYXJkL2Jhc2UtcGFuZWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQ0wsY0FBYyxFQU9kLFdBQVcsR0FDWixNQUFNLGNBQWMsQ0FBQzs7QUFJdEIsMkZBQTJGO0FBRTNGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFxQixJQUFJLENBQUM7QUFHNUQsTUFBTSxPQUFnQixrQkFBa0I7SUF3SXRDO1FBaElBOzs7O1dBSUc7UUFDTSxXQUFNLEdBQWdCLEVBQUUsQ0FBQztRQUVsQzs7V0FFRztRQUNNLHFCQUFnQixHQUF3QixTQUFTLENBQUM7UUFFM0Q7O1dBRUc7UUFDTSxpQkFBWSxHQUFvQixTQUFTLENBQUM7UUFPbkQ7O1dBRUc7UUFDTSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRTFCOzs7OztXQUtHO1FBQ00sbUJBQWMsR0FBcUIsSUFBSSxDQUFDO1FBRWpEOztXQUVHO1FBQ00sdUJBQWtCLEdBQUcsSUFBSSxDQUFDO1FBa0JuQzs7V0FFRztRQUNNLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBUzVCOzs7V0FHRztRQUNNLGlCQUFZLEdBQVcscUJBQXFCLENBQUM7UUFFdEQ7O1dBRUc7UUFDTSxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBNEI1Qjs7V0FFRztRQUNNLGNBQVMsR0FBYSxJQUFJLENBQUM7UUFFcEM7Ozs7V0FJRztRQUNNLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBT3ZCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFbEIsVUFBSyxHQUFjLEVBQUUsQ0FBQztRQUV0QixnQkFBVyxHQUFHLE1BQU0s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bmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkV4dHJhcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBkb3dubG9hZERldGFpbCxcbiAgRHNmckZpbGVTaXplVW5pdCxcbiAgRHNmckhlYWRpbmdMZXZlbCxcbiAgRHNmckxpbmssXG4gIERzZnJMaW5rVGFyZ2V0LFxuICBEc2ZyTmF2aWdhdGlvbixcbiAgRHNmclNpemUsXG4gIExhbmdTZXJ2aWNlLFxufSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuaW1wb3J0IHsgRHNmckJhZGdlIH0gZnJvbSAnLi4vYmFkZ2UnO1xuaW1wb3J0IHsgRHNmclRhZyB9IGZyb20gJy4uL3RhZyc7XG5pbXBvcnQgeyBEc2ZyUGFuZWxCYWNrZ3JvdW5kLCBEc2ZyUGFuZWxCb3JkZXIgfSBmcm9tICcuL2Jhc2UtcGFuZWwubW9kZWwnO1xuLy8gTmUgcGV1dCBwYXMgw6p0cmUgZMOpcGxhY8OpIGRhbnMgJ3NoYXJlZCcgw6AgY2F1c2UgZGUgbGEgZMOpcGVuZGFuY2Ugc3VyIERzZnJCYWRnZSBldCBEc2ZyVGFnXG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFQURJTkdfTEVWRUw6IERzZnJIZWFkaW5nTGV2ZWwgPSAnSDMnO1xuXG5AQ29tcG9uZW50KHsgdGVtcGxhdGU6ICcnIH0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVBhbmVsQ29tcG9uZW50IGltcGxlbWVudHMgRHNmck5hdmlnYXRpb24ge1xuICAvKipcbiAgICogTGEgcHJvcHJpw6l0w6kgYXJpYUxhYmVsIGTDqWZpbml0IHVuZSB2YWxldXIgZGUgY2hhw65uZSBxdWkgw6l0aXF1ZXR0ZSB1biDDqWzDqW1lbnQgaW50ZXJhY3RpZi5cbiAgICpcbiAgICogQHNpbmNlIDEuN1xuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQZXJtZXQgZGUgcG9zaXRpb25uZXIgZGVzIGJhZGdlcyAoanVzcXUnw6AgNCBiYWRnZXMgbWF4aSkgZW4gaGF1dCBkdSBjb21wb3NhbnQsIG9wdGlvbm5lbC5cbiAgICpcbiAgICogQHNlZSBEc2ZyQmFkZ2VcbiAgICovXG4gIEBJbnB1dCgpIGJhZGdlczogRHNmckJhZGdlW10gPSBbXTtcblxuICAvKipcbiAgICogUGVybWV0IGQnYXZvaXIgdW4gZm9uZCBncmlzIG91IHRyYW5zcGFyZW50LlxuICAgKi9cbiAgQElucHV0KCkgY3VzdG9tQmFja2dyb3VuZDogRHNmclBhbmVsQmFja2dyb3VuZCA9ICdkZWZhdWx0JztcblxuICAvKipcbiAgICogUGVybWV0IGQnYWZmaWNoZXIgdW5lIG9tYnJlIG91IG5lIHBhcyBtZXR0cmUgZGUgYm9yZHVyZS5cbiAgICovXG4gIEBJbnB1dCgpIGN1c3RvbUJvcmRlcjogRHNmclBhbmVsQm9yZGVyID0gJ2RlZmF1bHQnO1xuXG4gIC8qKlxuICAgKiBVbmUgZGVzY3JpcHRpb24gb3B0aW9ubmVsbGUgcGxlaW4gdGV4dGUuXG4gICAqL1xuICBASW5wdXQoKSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQZXJtZXQgZGUgZMOpc2FjdGl2ZXIgbGUgY29tcG9zYW50LlxuICAgKi9cbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogRXF1aXZhbGVudCDDoCBsJ2F0dHJpYnV0IGh0bWwgbmF0aWYgJ2Rvd25sb2FkJy5cbiAgICogLSB0cnVlIDogbGEgZmVuw6p0cmUgZGUgdMOpbMOpY2hhcmdlbWVudCBzJ2FmZmljaGUgZGlyZWN0ZW1lbnQsXG4gICAqIC0gZmFsc2UgOiBsZSBmaWNoaWVyIGVzdCBvdXZlcnQgYXZhbnQgZCfDqnRyZSB0w6lsw6ljaGFyZ8OpLFxuICAgKiAtIHN0cmluZyA6IG5vdXZlYXUgbm9tIGRlIGZpY2hpZXIgcHJvcG9zw6kgYXUgdMOpbMOpY2hhcmdlbWVudC5cbiAgICovXG4gIEBJbnB1dCgpIGRvd25sb2FkRGlyZWN0OiBib29sZWFuIHwgc3RyaW5nID0gdHJ1ZTtcblxuICAvKipcbiAgICogU2kgJ3RydWUnIChkw6lmYXV0KSA6IGxlIGTDqXRhaWwgZHUgdMOpbMOpY2hhcmdlbWVudCBlc3QgYXV0b21hdGlxdWVtZW50IHJlbnNlaWduw6kgcGFyIGxlIHNjcmlwdCBEU0ZSLlxuICAgKi9cbiAgQElucHV0KCkgZG93bmxvYWRBc3Nlc3NGaWxlID0gdHJ1ZTtcblxuICAvKipcbiAgICogT2JsaWdhdG9pcmUsIGRhbnMgbGUgY2FzIGQndW4gdMOpbMOpY2hhcmdlbWVudCBzaSBsZSBkb2N1bWVudCBuJ2VzdCBwYXMgZHUgbcOqbWUgbGFuZ2FnZSBxdWUgbGEgcGFnZSBjb3VyYW50ZS5cbiAgICogRXggOiBkb3dubG9hZExhbmdDb2RlPVwiZW5cIi5cbiAgICovXG4gIEBJbnB1dCgpIGRvd25sb2FkTGFuZ0NvZGU6IHN0cmluZztcblxuICAvKipcbiAgICogRm9ybWF0IGR1IGZpY2hpZXIsIMOgIHJlbnNlaWduZXIgc2kgZG93bmxvYWRBc3Nlc3NGaWxlIGVzdCBmYXV4LlxuICAgKi9cbiAgQElucHV0KCkgZG93bmxvYWRNaW1lVHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQb2lkcyBkdSBmaWNoaWVyIGVuIG9jdGV0cywgw6AgcmVuc2VpZ25lciBzaSBkb3dubG9hZEFzc2Vzc0ZpbGUgZXN0IGZhdXguXG4gICAqICovXG4gIEBJbnB1dCgpIGRvd25sb2FkU2l6ZUJ5dGVzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFBlcm1ldCBkZSBkw6lzYWN0aXZlciBsZSBsaWVuIMOpdGVuZHUgZGUgbGEgY2FydGUuXG4gICAqL1xuICBASW5wdXQoKSBlbmxhcmdlTGluayA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFRpdHJlIGR1IGNvbXBvc2FudC5cbiAgICogTGUgZmFpdCBkZSB2YWxvcmlzZXIgY2V0dGUgcHJvcHJpw6l0w6kgZXN0IHByaW9yaXRhaXJlIHN1ciBsZSBuZy1jb250ZW50IFtoZWFkaW5nXS5cbiAgICogQXR0ZW50aW9uIGZvbmN0aW9ubmVsbGVtZW50IGxhIHByw6lzZW5jZSBkJ3VuIHRpdHJlIGVzdCBvYmxpZ2F0b2lyZS5cbiAgICovXG4gIEBJbnB1dCgpIGhlYWRpbmc6IHN0cmluZztcblxuICAvKipcbiAgICogTGUgbml2ZWF1IGRlIHRpdHJlIGRldmFudCDDqnRyZSB1dGlsaXPDqSAodGFnIGBoNGAgcGFyIGTDqWZhdXQpLlxuICAgKiBDZXR0ZSBiYWxpc2UgbmUgcHJvZHVpdCBwYXMgZGUgc3R5bGUsIG1haXMgZGUgbGEgc3RydWN0dXJlLlxuICAgKi9cbiAgQElucHV0KCkgaGVhZGluZ0xldmVsOiBzdHJpbmcgPSBERUZBVUxUX0hFQURJTkdfTEVWRUw7XG5cbiAgLyoqXG4gICAqIFBhc3NlIGxlIGNvbXBvc2FudCBlbiBtb2RlIGhvcml6b250YWwuXG4gICAqL1xuICBASW5wdXQoKSBob3Jpem9udGFsID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFBlcm1ldCBkZSBwb3NpdGlvbm5lciB1biBsaWVuIGRlIHR5cGUgaHJlZi5cbiAgICogU2VydCBhdXNzaSBkZSBsaWVuIGRlIHTDqWzDqWNoYXJnZW1lbnQuXG4gICAqL1xuICBASW5wdXQoKSBsaW5rOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBlcm1ldCBkZSBwb3NpdGlvbm5lciB1bmUgcm91dGUgQW5ndWxhciBxdWkgc2VyYSByw6ljdXDDqXLDqWUgdmlhICdvdXRwdXQgdGlsZVNlbGVjdC5cbiAgICovXG4gIEBJbnB1dCgpIHJvdXRlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggYW5ndWxhciBnw6lyw6kgZW4gdGFudCBxdWUgZGlyZWN0aXZlIHJvdXRlckxpbmsuIFByaW9yaXRhaXJlIGV0IGV4Y2x1c2lmIGF2ZWMgbGluayBldCByb3V0ZS5cbiAgICovXG4gIEBJbnB1dCgpIHJvdXRlUGF0aDogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENsYXNzZSBDU1MgdXRpbGlzw6llIHBvdXIgbGEgZGlyZWN0aXZlIHJvdXRlckxpbmsgYWN0aXZlLlxuICAgKi9cbiAgQElucHV0KCkgcm91dGVyTGlua0FjdGl2ZTogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFJvdXRlckxpbmsgOiB2YWxldXJzIGFkZGl0aW9ubmVsbGVzIGRlIG5hdmlnYXRpb24gcG91ciBsZSByb3V0ZXJMaW5rIChxdWVyeVBhcmFtcywgc3RhdGUsIGV0Yy4pXG4gICAqL1xuICBASW5wdXQoKSByb3V0ZXJMaW5rRXh0cmFzOiBOYXZpZ2F0aW9uRXh0cmFzO1xuXG4gIC8qKlxuICAgKiBEaW1lbnNpb24gZHUgY29tcG9zYW50LCAnTUQnIHBhciBkw6lmYXV0ICgnU00sICdNRCcgdW5pcXVlbWVudCBwb3VyIGxhIHR1aWxlKS5cbiAgICovXG4gIEBJbnB1dCgpIHBhbmVsU2l6ZTogRHNmclNpemUgPSAnTUQnO1xuXG4gIC8qKlxuICAgKiBQZXJtZXQgZCdhdm9pciB1biBib3V0b24gw6AgbGEgcGxhY2UgZCd1biBsaWVuLlxuICAgKlxuICAgKiBAc2luY2UgMS4xMlxuICAgKi9cbiAgQElucHV0KCkgZW5sYXJnZUJ1dHRvbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBdHRyaWJ1dCB0YXJnZXQgZHUgbGllbi5cbiAgICovXG4gIEBJbnB1dCgpIGxpbmtUYXJnZXQ6IERzZnJMaW5rVGFyZ2V0O1xuXG4gIHByaXZhdGUgX2Rvd25sb2FkID0gZmFsc2U7XG4gIHByaXZhdGUgX2Rvd25sb2FkU2l6ZVVuaXQ6IERzZnJGaWxlU2l6ZVVuaXQ7XG4gIHByaXZhdGUgX3RhZ3M6IERzZnJUYWdbXSA9IFtdO1xuICBwcml2YXRlIF9kZXRhaWxCb3R0b206IHN0cmluZztcbiAgcHJpdmF0ZSBsYW5nU2VydmljZSA9IGluamVjdChMYW5nU2VydmljZSk7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge31cblxuICBnZXQgZG93bmxvYWRTaXplVW5pdCgpOiBEc2ZyRmlsZVNpemVVbml0IHtcbiAgICByZXR1cm4gdGhpcy5fZG93bmxvYWRTaXplVW5pdCB8fCB0aGlzLmxhbmdTZXJ2aWNlLmxhbmcgPyAnb2N0ZXRzJyA6ICdieXRlcyc7XG4gIH1cblxuICAvKiAgZ2V0IGxpbmtUYXJnZXQoKTogRHNmckxpbmtUYXJnZXQge1xuICAgIHJldHVybiB0aGlzLl9saW5rVGFyZ2V0O1xuICB9Ki9cblxuICBnZXQgdGFncygpOiBEc2ZyVGFnW10ge1xuICAgIHJldHVybiB0aGlzLl90YWdzO1xuICB9XG5cbiAgZ2V0IGl0ZW1MaW5rKCk6IERzZnJMaW5rIHtcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuaGVhZGluZyA/IHRoaXMuaGVhZGluZyA6ICcnO1xuICAgIGNvbnN0IGl0ZW1MaW5rOiBEc2ZyTGluayA9IHsgbGFiZWw6IGxhYmVsLCBhcmlhTGFiZWw6IHRoaXMuYXJpYUxhYmVsIH07IC8vIGFyaWFMYWJlbCAoc2luY2UgMS43KVxuICAgIGlmICh0aGlzLmxpbmspIHtcbiAgICAgIGl0ZW1MaW5rLmxpbmsgPSB0aGlzLmxpbms7XG4gICAgfSBlbHNlIGlmICh0aGlzLnJvdXRlKSB7XG4gICAgICBpdGVtTGluay5yb3V0ZSA9IHRoaXMucm91dGU7XG4gICAgfVxuICAgIHJldHVybiBpdGVtTGluaztcbiAgfVxuXG4gIGdldCBkb3dubG9hZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZG93bmxvYWQ7XG4gIH1cblxuICBnZXQgZGV0YWlsQm90dG9tKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICF0aGlzLmRvd25sb2FkID8gdGhpcy5fZGV0YWlsQm90dG9tIDogdGhpcy5kb3dubG9hZERldGFpbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaW1lbnNpb24gZHUgY29tcG9zYW50LCAnTUQnIHBhciBkw6lmYXV0ICgnU00sICdNRCcgdW5pcXVlbWVudCBwb3VyIGxhIHR1aWxlKS5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgc2luY2UoMS4xNS4wKSB1dGlsaXNlciAncGFuZWxTaXplJyDDoCBsYSBwbGFjZVxuICAgKi9cbiAgZ2V0IHNpemUoKTogRHNmclNpemUge1xuICAgIHJldHVybiB0aGlzLnBhbmVsU2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEYW5zIGxlIGNhcyBkJ3VuIHTDqWzDqWNoYXJnZW1lbnQgc2FucyBsJ29wdGlvbiAnZG93bmxvYWRBc3Nlc3NGaWxlJyxcbiAgICogb24gY3LDqWUgbGUgZMOpdGFpbCDDoCBsJ2FpZGUgZGVzIHByb3ByacOpdMOpcyAnZG93bmxvYWRTaXplQnl0ZXMnLCAnZG93bmxvYWRNaW1lVHlwZScuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBkb3dubG9hZERldGFpbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBkb3dubG9hZERldGFpbCh0aGlzLmRvd25sb2FkTWltZVR5cGUsIHRoaXMuZG93bmxvYWRTaXplQnl0ZXMsIHRoaXMuZG93bmxvYWRTaXplVW5pdCk7XG4gIH1cblxuICAvKipcbiAgICogRGltZW5zaW9uIGR1IGNvbXBvc2FudCwgJ01EJyBwYXIgZMOpZmF1dCAoJ1NNLCAnTUQnIHVuaXF1ZW1lbnQgcG91ciBsYSB0dWlsZSkuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIHNpbmNlKDEuMTUuMCkgdXRpbGlzZXIgJ3BhbmVsU2l6ZScgw6AgbGEgcGxhY2VcbiAgICovXG4gIEBJbnB1dCgpIHNldCBzaXplKHZhbHVlOiBEc2ZyU2l6ZSkge1xuICAgIHRoaXMucGFuZWxTaXplID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtZSBsZSBjb21wb3NhbnQgY2xhc3NpcXVlIGVuIGNvbXBvc2FudCBkZSB0w6lsw6ljaGFyZ2VtZW50LlxuICAgKi9cbiAgQElucHV0KCkgc2V0IGRvd25sb2FkKGRvd25sb2FkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZG93bmxvYWQgPSBkb3dubG9hZDtcbiAgICBpZiAodGhpcy5fZG93bmxvYWQpIHRoaXMuZW5sYXJnZUxpbmsgPSB0cnVlO1xuICB9XG5cbiAgLyoqIFpvbmUgZGUgZMOpdGFpbCBzZSB0cm91dmFudCB2aXN1ZWxsZW1lbnQgc291cyBsYSBkZXNjcmlwdGlvbiBldCDDoCBjw7R0w6kgZGUgbOKAmWljw7RuZSwgb3B0aW9ubmVsLlxuICAgKiBQb3VyIGxhIHR1aWxlLCBvbiBwZXV0IHBhc3NlciB1biBzbG90IGRlIHPDqWxlY3RldXIgXCJkZXRhaWxcIi5cbiAgICogRW4gY2FzIGRlIHTDqWzDqWNoYXJnZW1lbnQgbGUgZMOpdGFpbCBlc3QgcmVtcGxhY8OpIHBhciBsZXMgaW5mb3JtYXRpb25zIGR1IGZpY2hpZXIgY2FsY3Vsw6llcyBzZWxvbiBkb3dubG9hZEFzc2Vzc0ZpbGUuXG4gICAqL1xuICBASW5wdXQoKSBzZXQgZGV0YWlsQm90dG9tKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9kZXRhaWxCb3R0b20gPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JjZSBsJ3VuaXTDqSBwYXIgZMOpZmF1dCBxdWkgZMOpcGVuZCBkZSBsYSBsYW5ndWUgZHUgc2l0ZSwgZW4gb2N0ZXRzIChrbywgTW8sIC4uLikgcG91ciAnZnInLCBlbiAnYnl0ZXMnIChLQiwgTUIuLi4pIHBvdXIgbGVzIGF1dHJlcyBsYW5ndWVzLlxuICAgKi9cbiAgQElucHV0KCkgc2V0IGRvd25sb2FkU2l6ZVVuaXQodmFsdWU6IERzZnJGaWxlU2l6ZVVuaXQpIHtcbiAgICB0aGlzLl9kb3dubG9hZFNpemVVbml0ID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUGVybWV0IGRlIHBvc2l0aW9ubmVyIGRlcyB0YWdzIGVuIGhhdXQgZGUgbGEgY2FydGUgKGNsaXF1YWJsZXMgb3Ugbm9uKSwgb3B0aW9ubmVsLlxuICAgKiB2b2lyIERzZnJUYWdcbiAgICovXG4gIEBJbnB1dCgpIHNldCB0YWdzKHRhZ3M6IERzZnJUYWdbXSkge1xuICAgIHRoaXMuX3RhZ3MgPSB0YWdzO1xuXG4gICAgLy8gVsOpcmlmaWUgc2kgdW4gdGFnIGVzdCBjbGlxdWFibGUgcG91ciBkw6lzYWN0aXZlciBlbmxhcmdlTGluay5cbiAgICBpZiAodGFncz8uZmluZCgodGFnKSA9PiB0YWcubGluaykpIHRoaXMuZW5sYXJnZUxpbmsgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0aW9uIGR1IHJvdXRlciBBbmd1bGFyLlxuICAgKiBQcm92b3F1ZSB1biBidWcgYWNjZXNzaWJpbGl0w6kgc3VyIGxhIG5hdmlnYXRpb24gYXUgY2xhdmllciAoYWpvdXQgZCd1biB0YWJpbmRleD0wKVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCAoc2luY2UgMS4xMS41KSB1dGlsaXNlciBgcm91dGVQYXRoYCDDoCBsYSBwbGFjZS5cbiAgICovXG4gIEBJbnB1dCgpIHNldCByb3V0ZXJMaW5rKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSkgdGhpcy5yb3V0ZVBhdGggPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgaGFzTGluaygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5saW5rIHx8IHRoaXMucm91dGUgfHwgdGhpcy5yb3V0ZVBhdGgpO1xuICB9XG59XG4iXX0=