cfc-ds
Version:
Design System do Conselho Federal de Contabilidade baseado no govbr-ds
86 lines • 17.4 kB
JavaScript
// tab.component.ts
import { Component, ContentChildren, ViewChild, Input } from '@angular/core';
import { TabItemComponent } from '../tabItem/tab-item.component';
import { TabContentComponent } from '../tabContent/tab-content.component';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
export class TabComponent {
tabItems;
tabContents;
tabList;
// Nova propriedade para controlar a densidade
density = 'default';
// Nova propriedade para controlar o alinhamento da lista de tabs
tabAlignment = 'left';
activeTabIndex = 0;
showLeftShadow = false;
showRightShadow = false;
// Indica se algum item possui contador (ativa o data-counter do GovBR-DS)
get hasCounters() {
return !!this.tabItems && this.tabItems.toArray().some(item => item.counter !== undefined);
}
ngAfterContentInit() {
// Inicializar a primeira tab como ativa
if (this.tabItems.length > 0) {
this.selectTab(0);
}
setTimeout(() => {
// Verificar se precisamos exibir sombras de scroll após o conteúdo ser renderizado
this.checkScrollShadows();
});
}
selectTab(index) {
// Desativar todas as tabs
this.tabItems.forEach(item => item.active = false);
// Ativar a tab selecionada
const selectedItem = this.tabItems.toArray()[index];
if (selectedItem) {
selectedItem.active = true;
}
// Esconder todos os conteúdos
this.tabContents.forEach(content => content.active = false);
// Mostrar o conteúdo selecionado
const selectedContent = this.tabContents.toArray()[index];
if (selectedContent) {
selectedContent.active = true;
}
this.activeTabIndex = index;
}
scrollLeft() {
if (this.tabList) {
this.tabList.nativeElement.scrollBy({ left: -100, behavior: 'smooth' });
}
}
scrollRight() {
if (this.tabList) {
this.tabList.nativeElement.scrollBy({ left: 100, behavior: 'smooth' });
}
}
checkScrollShadows() {
if (!this.tabList)
return;
const element = this.tabList.nativeElement;
this.showLeftShadow = element.scrollLeft > 0;
this.showRightShadow = element.scrollWidth > element.clientWidth + element.scrollLeft;
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TabComponent, selector: "cfc-tab", inputs: { density: "density", tabAlignment: "tabAlignment" }, queries: [{ propertyName: "tabItems", predicate: TabItemComponent }, { propertyName: "tabContents", predicate: TabContentComponent }], viewQueries: [{ propertyName: "tabList", first: true, predicate: ["tabList"], descendants: true }], ngImport: i0, template: "<!-- tab.component.html -->\r\n<!-- Layout segue o padr\u00E3o \"br-tab\" do GovBR-DS (core.min.css carregado globalmente). -->\r\n<div class=\"br-tab\"\r\n [class.small]=\"density === 'high'\"\r\n [class.medium]=\"density === 'default'\"\r\n [class.large]=\"density === 'low'\"\r\n [attr.data-counter]=\"hasCounters ? 'true' : null\">\r\n\r\n <nav class=\"tab-nav\">\r\n <ul [class]=\"'tab-align-' + tabAlignment\">\r\n <li *ngFor=\"let item of tabItems; let i = index\"\r\n class=\"tab-item\"\r\n [class.active]=\"i === activeTabIndex\"\r\n [class.disabled]=\"item.disabled\"\r\n [attr.title]=\"item.label || null\">\r\n <button type=\"button\"\r\n [attr.data-panel]=\"item.id || null\"\r\n [disabled]=\"item.disabled\"\r\n (click)=\"selectTab(i)\">\r\n <span class=\"name\" *ngIf=\"!item.icon\">{{ item.label }}</span>\r\n <span class=\"name\" *ngIf=\"item.icon\">\r\n <span class=\"d-flex flex-column flex-sm-row align-items-center\">\r\n <span class=\"icon mb-1 mb-sm-0 mr-sm-1\">\r\n <i [class]=\"item.icon\" aria-hidden=\"true\"></i>\r\n </span>\r\n <span class=\"name\">{{ item.label }}</span>\r\n </span>\r\n </span>\r\n </button>\r\n <span *ngIf=\"item.counter !== undefined\" class=\"results\">({{ item.counter }})</span>\r\n </li>\r\n </ul>\r\n </nav>\r\n\r\n <div class=\"tab-content\">\r\n <ng-content select=\"cfc-tab-content\"></ng-content>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";:host{display:block}.br-tab .tab-nav ul.tab-align-center{justify-content:center}.br-tab .tab-nav ul.tab-align-right{justify-content:flex-end}.br-tab .tab-item button{cursor:pointer}.br-tab .tab-item.disabled button{cursor:not-allowed}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TabComponent, decorators: [{
type: Component,
args: [{ selector: 'cfc-tab', template: "<!-- tab.component.html -->\r\n<!-- Layout segue o padr\u00E3o \"br-tab\" do GovBR-DS (core.min.css carregado globalmente). -->\r\n<div class=\"br-tab\"\r\n [class.small]=\"density === 'high'\"\r\n [class.medium]=\"density === 'default'\"\r\n [class.large]=\"density === 'low'\"\r\n [attr.data-counter]=\"hasCounters ? 'true' : null\">\r\n\r\n <nav class=\"tab-nav\">\r\n <ul [class]=\"'tab-align-' + tabAlignment\">\r\n <li *ngFor=\"let item of tabItems; let i = index\"\r\n class=\"tab-item\"\r\n [class.active]=\"i === activeTabIndex\"\r\n [class.disabled]=\"item.disabled\"\r\n [attr.title]=\"item.label || null\">\r\n <button type=\"button\"\r\n [attr.data-panel]=\"item.id || null\"\r\n [disabled]=\"item.disabled\"\r\n (click)=\"selectTab(i)\">\r\n <span class=\"name\" *ngIf=\"!item.icon\">{{ item.label }}</span>\r\n <span class=\"name\" *ngIf=\"item.icon\">\r\n <span class=\"d-flex flex-column flex-sm-row align-items-center\">\r\n <span class=\"icon mb-1 mb-sm-0 mr-sm-1\">\r\n <i [class]=\"item.icon\" aria-hidden=\"true\"></i>\r\n </span>\r\n <span class=\"name\">{{ item.label }}</span>\r\n </span>\r\n </span>\r\n </button>\r\n <span *ngIf=\"item.counter !== undefined\" class=\"results\">({{ item.counter }})</span>\r\n </li>\r\n </ul>\r\n </nav>\r\n\r\n <div class=\"tab-content\">\r\n <ng-content select=\"cfc-tab-content\"></ng-content>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";:host{display:block}.br-tab .tab-nav ul.tab-align-center{justify-content:center}.br-tab .tab-nav ul.tab-align-right{justify-content:flex-end}.br-tab .tab-item button{cursor:pointer}.br-tab .tab-item.disabled button{cursor:not-allowed}\n"] }]
}], propDecorators: { tabItems: [{
type: ContentChildren,
args: [TabItemComponent]
}], tabContents: [{
type: ContentChildren,
args: [TabContentComponent]
}], tabList: [{
type: ViewChild,
args: ['tabList', { static: false }]
}], density: [{
type: Input
}], tabAlignment: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NmYy1kcy9zcmMvbGliL2NvbXBvbmVudHMvdGFiL3RhYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZmMtZHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYi90YWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQW1CO0FBQ25CLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUErQixTQUFTLEVBQWMsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7QUFVMUUsTUFBTSxPQUFPLFlBQVk7SUFDWSxRQUFRLENBQStCO0lBQ3BDLFdBQVcsQ0FBa0M7SUFDMUMsT0FBTyxDQUF5QjtJQUV6RSw4Q0FBOEM7SUFDckMsT0FBTyxHQUFlLFNBQVMsQ0FBQztJQUV6QyxpRUFBaUU7SUFDeEQsWUFBWSxHQUFnQyxNQUFNLENBQUM7SUFFNUQsY0FBYyxHQUFXLENBQUMsQ0FBQztJQUMzQixjQUFjLEdBQVksS0FBSyxDQUFDO0lBQ2hDLGVBQWUsR0FBWSxLQUFLLENBQUM7SUFFakMsMEVBQTBFO0lBQzFFLElBQUksV0FBVztRQUNiLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsd0NBQXdDO1FBQ3hDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixDQUFDO1FBRUQsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLG1GQUFtRjtZQUNuRixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBYTtRQUNyQiwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBRW5ELDJCQUEyQjtRQUMzQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsWUFBWSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDN0IsQ0FBQztRQUVELDhCQUE4QjtRQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFFNUQsaUNBQWlDO1FBQ2pDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUQsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQixlQUFlLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNoQyxDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDMUUsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN6RSxDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBRTFCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQzNDLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztJQUN4RixDQUFDO3dHQXhFVSxZQUFZOzRGQUFaLFlBQVksc0lBQ04sZ0JBQWdCLDhDQUNoQixtQkFBbUIsaUlDZnRDLDJsREFzQ0E7OzRGRHpCYSxZQUFZO2tCQUx4QixTQUFTOytCQUNFLFNBQVM7OEJBS2dCLFFBQVE7c0JBQTFDLGVBQWU7dUJBQUMsZ0JBQWdCO2dCQUNLLFdBQVc7c0JBQWhELGVBQWU7dUJBQUMsbUJBQW1CO2dCQUNLLE9BQU87c0JBQS9DLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFHOUIsT0FBTztzQkFBZixLQUFLO2dCQUdHLFlBQVk7c0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0YWIuY29tcG9uZW50LnRzXHJcbmltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBRdWVyeUxpc3QsIEFmdGVyQ29udGVudEluaXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGFiSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL3RhYkl0ZW0vdGFiLWl0ZW0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFiQ29udGVudENvbXBvbmVudCB9IGZyb20gJy4uL3RhYkNvbnRlbnQvdGFiLWNvbnRlbnQuY29tcG9uZW50JztcclxuXHJcbi8vIERlZmluacOnw6NvIGRvIHRpcG8gcGFyYSBkZW5zaWRhZGVcclxuZXhwb3J0IHR5cGUgVGFiRGVuc2l0eSA9ICdsb3cnIHwgJ2RlZmF1bHQnIHwgJ2hpZ2gnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjZmMtdGFiJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFiLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFiQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XHJcbiAgQENvbnRlbnRDaGlsZHJlbihUYWJJdGVtQ29tcG9uZW50KSB0YWJJdGVtcyE6IFF1ZXJ5TGlzdDxUYWJJdGVtQ29tcG9uZW50PjtcclxuICBAQ29udGVudENoaWxkcmVuKFRhYkNvbnRlbnRDb21wb25lbnQpIHRhYkNvbnRlbnRzITogUXVlcnlMaXN0PFRhYkNvbnRlbnRDb21wb25lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYkxpc3QnLCB7IHN0YXRpYzogZmFsc2UgfSkgdGFiTGlzdDogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLy8gTm92YSBwcm9wcmllZGFkZSBwYXJhIGNvbnRyb2xhciBhIGRlbnNpZGFkZVxyXG4gIEBJbnB1dCgpIGRlbnNpdHk6IFRhYkRlbnNpdHkgPSAnZGVmYXVsdCc7XHJcblxyXG4gIC8vIE5vdmEgcHJvcHJpZWRhZGUgcGFyYSBjb250cm9sYXIgbyBhbGluaGFtZW50byBkYSBsaXN0YSBkZSB0YWJzXHJcbiAgQElucHV0KCkgdGFiQWxpZ25tZW50OiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcgPSAnbGVmdCc7XHJcblxyXG4gIGFjdGl2ZVRhYkluZGV4OiBudW1iZXIgPSAwO1xyXG4gIHNob3dMZWZ0U2hhZG93OiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd1JpZ2h0U2hhZG93OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIEluZGljYSBzZSBhbGd1bSBpdGVtIHBvc3N1aSBjb250YWRvciAoYXRpdmEgbyBkYXRhLWNvdW50ZXIgZG8gR292QlItRFMpXHJcbiAgZ2V0IGhhc0NvdW50ZXJzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy50YWJJdGVtcyAmJiB0aGlzLnRhYkl0ZW1zLnRvQXJyYXkoKS5zb21lKGl0ZW0gPT4gaXRlbS5jb3VudGVyICE9PSB1bmRlZmluZWQpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgLy8gSW5pY2lhbGl6YXIgYSBwcmltZWlyYSB0YWIgY29tbyBhdGl2YVxyXG4gICAgaWYgKHRoaXMudGFiSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdFRhYigwKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLy8gVmVyaWZpY2FyIHNlIHByZWNpc2Ftb3MgZXhpYmlyIHNvbWJyYXMgZGUgc2Nyb2xsIGFww7NzIG8gY29udGXDumRvIHNlciByZW5kZXJpemFkb1xyXG4gICAgICB0aGlzLmNoZWNrU2Nyb2xsU2hhZG93cygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RUYWIoaW5kZXg6IG51bWJlcikge1xyXG4gICAgLy8gRGVzYXRpdmFyIHRvZGFzIGFzIHRhYnNcclxuICAgIHRoaXMudGFiSXRlbXMuZm9yRWFjaChpdGVtID0+IGl0ZW0uYWN0aXZlID0gZmFsc2UpO1xyXG5cclxuICAgIC8vIEF0aXZhciBhIHRhYiBzZWxlY2lvbmFkYVxyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gdGhpcy50YWJJdGVtcy50b0FycmF5KClbaW5kZXhdO1xyXG4gICAgaWYgKHNlbGVjdGVkSXRlbSkge1xyXG4gICAgICBzZWxlY3RlZEl0ZW0uYWN0aXZlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFc2NvbmRlciB0b2RvcyBvcyBjb250ZcO6ZG9zXHJcbiAgICB0aGlzLnRhYkNvbnRlbnRzLmZvckVhY2goY29udGVudCA9PiBjb250ZW50LmFjdGl2ZSA9IGZhbHNlKTtcclxuXHJcbiAgICAvLyBNb3N0cmFyIG8gY29udGXDumRvIHNlbGVjaW9uYWRvXHJcbiAgICBjb25zdCBzZWxlY3RlZENvbnRlbnQgPSB0aGlzLnRhYkNvbnRlbnRzLnRvQXJyYXkoKVtpbmRleF07XHJcbiAgICBpZiAoc2VsZWN0ZWRDb250ZW50KSB7XHJcbiAgICAgIHNlbGVjdGVkQ29udGVudC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWN0aXZlVGFiSW5kZXggPSBpbmRleDtcclxuICB9XHJcblxyXG4gIHNjcm9sbExlZnQoKSB7XHJcbiAgICBpZiAodGhpcy50YWJMaXN0KSB7XHJcbiAgICAgIHRoaXMudGFiTGlzdC5uYXRpdmVFbGVtZW50LnNjcm9sbEJ5KHsgbGVmdDogLTEwMCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2Nyb2xsUmlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy50YWJMaXN0KSB7XHJcbiAgICAgIHRoaXMudGFiTGlzdC5uYXRpdmVFbGVtZW50LnNjcm9sbEJ5KHsgbGVmdDogMTAwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGVja1Njcm9sbFNoYWRvd3MoKSB7XHJcbiAgICBpZiAoIXRoaXMudGFiTGlzdCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnRhYkxpc3QubmF0aXZlRWxlbWVudDtcclxuICAgIHRoaXMuc2hvd0xlZnRTaGFkb3cgPSBlbGVtZW50LnNjcm9sbExlZnQgPiAwO1xyXG4gICAgdGhpcy5zaG93UmlnaHRTaGFkb3cgPSBlbGVtZW50LnNjcm9sbFdpZHRoID4gZWxlbWVudC5jbGllbnRXaWR0aCArIGVsZW1lbnQuc2Nyb2xsTGVmdDtcclxuICB9XHJcbn1cclxuIiwiPCEtLSB0YWIuY29tcG9uZW50Lmh0bWwgLS0+XHJcbjwhLS0gTGF5b3V0IHNlZ3VlIG8gcGFkcsOjbyBcImJyLXRhYlwiIGRvIEdvdkJSLURTIChjb3JlLm1pbi5jc3MgY2FycmVnYWRvIGdsb2JhbG1lbnRlKS4gLS0+XHJcbjxkaXYgY2xhc3M9XCJici10YWJcIlxyXG4gICAgIFtjbGFzcy5zbWFsbF09XCJkZW5zaXR5ID09PSAnaGlnaCdcIlxyXG4gICAgIFtjbGFzcy5tZWRpdW1dPVwiZGVuc2l0eSA9PT0gJ2RlZmF1bHQnXCJcclxuICAgICBbY2xhc3MubGFyZ2VdPVwiZGVuc2l0eSA9PT0gJ2xvdydcIlxyXG4gICAgIFthdHRyLmRhdGEtY291bnRlcl09XCJoYXNDb3VudGVycyA/ICd0cnVlJyA6IG51bGxcIj5cclxuXHJcbiAgPG5hdiBjbGFzcz1cInRhYi1uYXZcIj5cclxuICAgIDx1bCBbY2xhc3NdPVwiJ3RhYi1hbGlnbi0nICsgdGFiQWxpZ25tZW50XCI+XHJcbiAgICAgIDxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiB0YWJJdGVtczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICBjbGFzcz1cInRhYi1pdGVtXCJcclxuICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaSA9PT0gYWN0aXZlVGFiSW5kZXhcIlxyXG4gICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgW2F0dHIudGl0bGVdPVwiaXRlbS5sYWJlbCB8fCBudWxsXCI+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtcGFuZWxdPVwiaXRlbS5pZCB8fCBudWxsXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RUYWIoaSlcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmFtZVwiICpuZ0lmPVwiIWl0ZW0uaWNvblwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5hbWVcIiAqbmdJZj1cIml0ZW0uaWNvblwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBmbGV4LXNtLXJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gbWItMSBtYi1zbS0wIG1yLXNtLTFcIj5cclxuICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJpdGVtLmljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmFtZVwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0uY291bnRlciAhPT0gdW5kZWZpbmVkXCIgY2xhc3M9XCJyZXN1bHRzXCI+KHt7IGl0ZW0uY291bnRlciB9fSk8L3NwYW4+XHJcbiAgICAgIDwvbGk+XHJcbiAgICA8L3VsPlxyXG4gIDwvbmF2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwidGFiLWNvbnRlbnRcIj5cclxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImNmYy10YWItY29udGVudFwiPjwvbmctY29udGVudD5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==