cfc-ds
Version:
Design System do Conselho Federal de Contabilidade baseado no govbr-ds
82 lines • 20 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;
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<div class=\"ds-tab-container\" [class]=\"'ds-tab-density-' + density\">\r\n <div class=\"ds-tab-surface\">\r\n <div class=\"ds-tab-list-container\" \r\n [class.show-left-shadow]=\"showLeftShadow\"\r\n [class.show-right-shadow]=\"showRightShadow\"\r\n [class]=\"'ds-tab-align-' + tabAlignment\">\r\n <button *ngIf=\"showLeftShadow\" \r\n class=\"ds-tab-scroll-button ds-tab-scroll-left\" \r\n (click)=\"scrollLeft()\" \r\n aria-label=\"Rolar para esquerda\">\r\n <span class=\"ds-tab-scroll-icon\">❮</span>\r\n </button>\r\n \r\n <div #tabList \r\n class=\"ds-tab-list\" \r\n role=\"tablist\" \r\n tabindex=\"0\" \r\n (scroll)=\"checkScrollShadows()\">\r\n <ng-content select=\"cfc-tab-item\"></ng-content>\r\n </div>\r\n \r\n <button *ngIf=\"showRightShadow\" \r\n class=\"ds-tab-scroll-button ds-tab-scroll-right\" \r\n (click)=\"scrollRight()\" \r\n aria-label=\"Rolar para direita\">\r\n <span class=\"ds-tab-scroll-icon\">❯</span>\r\n </button>\r\n </div>\r\n <div class=\"ds-tab-divider\"></div>\r\n </div>\r\n \r\n <div class=\"ds-tab-content-container\">\r\n <ng-content select=\"cfc-tab-content\"></ng-content>\r\n </div>\r\n</div>", styles: ["@charset \"UTF-8\";.ds-tab-container{display:flex;flex-direction:column;width:100%}.ds-tab-surface{position:relative}.ds-tab-list-container{display:flex;position:relative;width:100%;overflow:hidden}.ds-tab-list-container.ds-tab-align-left{justify-content:flex-start}.ds-tab-list-container.ds-tab-align-center{justify-content:center}.ds-tab-list-container.ds-tab-align-right{justify-content:flex-end}.ds-tab-list{display:flex;overflow-x:auto;scrollbar-width:none;-ms-overflow-style:none;scroll-behavior:smooth}.ds-tab-list::-webkit-scrollbar{display:none}.ds-tab-density-low ::ng-deep cfc-tab-item{padding:16px 24px}.ds-tab-density-low ::ng-deep cfc-tab-item .tab-item-label{font-size:16px}.ds-tab-density-low ::ng-deep cfc-tab-item .tab-item-icon{font-size:24px}.ds-tab-density-default ::ng-deep cfc-tab-item{padding:12px 16px}.ds-tab-density-default ::ng-deep cfc-tab-item .tab-item-label{font-size:14px}.ds-tab-density-default ::ng-deep cfc-tab-item .tab-item-icon{font-size:20px}.ds-tab-density-high ::ng-deep cfc-tab-item{padding:8px 12px}.ds-tab-density-high ::ng-deep cfc-tab-item .tab-item-label{font-size:12px}.ds-tab-density-high ::ng-deep cfc-tab-item .tab-item-icon{font-size:16px}.ds-tab-divider{height:1px;width:100%;background-color:#e0e0e0}.ds-tab-scroll-button{position:absolute;top:0;height:100%;width:40px;display:flex;align-items:center;justify-content:center;background:linear-gradient(to right,#ffffffe6,#fff0);border:none;cursor:pointer;z-index:1}.ds-tab-scroll-button.ds-tab-scroll-left{left:0;background:linear-gradient(to right,#ffffffe6,#fff0)}.ds-tab-scroll-button.ds-tab-scroll-right{right:0;background:linear-gradient(to left,#ffffffe6,#fff0)}.ds-tab-scroll-button .ds-tab-scroll-icon{font-size:14px}.ds-tab-content-container{padding:16px 0}.ds-tab-list-container.show-left-shadow:before{content:\"\";position:absolute;left:0;top:0;height:100%;width:30px;background:linear-gradient(to right,rgba(0,0,0,.05),transparent);pointer-events:none;z-index:1}.ds-tab-list-container.show-right-shadow:after{content:\"\";position:absolute;right:0;top:0;height:100%;width:30px;background:linear-gradient(to left,rgba(0,0,0,.05),transparent);pointer-events:none;z-index:1}@media (max-width: 576px){.ds-tab-density-low ::ng-deep cfc-tab-item,.ds-tab-density-default ::ng-deep cfc-tab-item{padding:10px 12px}.ds-tab-density-high ::ng-deep cfc-tab-item{padding:6px 8px}}\n"], dependencies: [{ 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<div class=\"ds-tab-container\" [class]=\"'ds-tab-density-' + density\">\r\n <div class=\"ds-tab-surface\">\r\n <div class=\"ds-tab-list-container\" \r\n [class.show-left-shadow]=\"showLeftShadow\"\r\n [class.show-right-shadow]=\"showRightShadow\"\r\n [class]=\"'ds-tab-align-' + tabAlignment\">\r\n <button *ngIf=\"showLeftShadow\" \r\n class=\"ds-tab-scroll-button ds-tab-scroll-left\" \r\n (click)=\"scrollLeft()\" \r\n aria-label=\"Rolar para esquerda\">\r\n <span class=\"ds-tab-scroll-icon\">❮</span>\r\n </button>\r\n \r\n <div #tabList \r\n class=\"ds-tab-list\" \r\n role=\"tablist\" \r\n tabindex=\"0\" \r\n (scroll)=\"checkScrollShadows()\">\r\n <ng-content select=\"cfc-tab-item\"></ng-content>\r\n </div>\r\n \r\n <button *ngIf=\"showRightShadow\" \r\n class=\"ds-tab-scroll-button ds-tab-scroll-right\" \r\n (click)=\"scrollRight()\" \r\n aria-label=\"Rolar para direita\">\r\n <span class=\"ds-tab-scroll-icon\">❯</span>\r\n </button>\r\n </div>\r\n <div class=\"ds-tab-divider\"></div>\r\n </div>\r\n \r\n <div class=\"ds-tab-content-container\">\r\n <ng-content select=\"cfc-tab-content\"></ng-content>\r\n </div>\r\n</div>", styles: ["@charset \"UTF-8\";.ds-tab-container{display:flex;flex-direction:column;width:100%}.ds-tab-surface{position:relative}.ds-tab-list-container{display:flex;position:relative;width:100%;overflow:hidden}.ds-tab-list-container.ds-tab-align-left{justify-content:flex-start}.ds-tab-list-container.ds-tab-align-center{justify-content:center}.ds-tab-list-container.ds-tab-align-right{justify-content:flex-end}.ds-tab-list{display:flex;overflow-x:auto;scrollbar-width:none;-ms-overflow-style:none;scroll-behavior:smooth}.ds-tab-list::-webkit-scrollbar{display:none}.ds-tab-density-low ::ng-deep cfc-tab-item{padding:16px 24px}.ds-tab-density-low ::ng-deep cfc-tab-item .tab-item-label{font-size:16px}.ds-tab-density-low ::ng-deep cfc-tab-item .tab-item-icon{font-size:24px}.ds-tab-density-default ::ng-deep cfc-tab-item{padding:12px 16px}.ds-tab-density-default ::ng-deep cfc-tab-item .tab-item-label{font-size:14px}.ds-tab-density-default ::ng-deep cfc-tab-item .tab-item-icon{font-size:20px}.ds-tab-density-high ::ng-deep cfc-tab-item{padding:8px 12px}.ds-tab-density-high ::ng-deep cfc-tab-item .tab-item-label{font-size:12px}.ds-tab-density-high ::ng-deep cfc-tab-item .tab-item-icon{font-size:16px}.ds-tab-divider{height:1px;width:100%;background-color:#e0e0e0}.ds-tab-scroll-button{position:absolute;top:0;height:100%;width:40px;display:flex;align-items:center;justify-content:center;background:linear-gradient(to right,#ffffffe6,#fff0);border:none;cursor:pointer;z-index:1}.ds-tab-scroll-button.ds-tab-scroll-left{left:0;background:linear-gradient(to right,#ffffffe6,#fff0)}.ds-tab-scroll-button.ds-tab-scroll-right{right:0;background:linear-gradient(to left,#ffffffe6,#fff0)}.ds-tab-scroll-button .ds-tab-scroll-icon{font-size:14px}.ds-tab-content-container{padding:16px 0}.ds-tab-list-container.show-left-shadow:before{content:\"\";position:absolute;left:0;top:0;height:100%;width:30px;background:linear-gradient(to right,rgba(0,0,0,.05),transparent);pointer-events:none;z-index:1}.ds-tab-list-container.show-right-shadow:after{content:\"\";position:absolute;right:0;top:0;height:100%;width:30px;background:linear-gradient(to left,rgba(0,0,0,.05),transparent);pointer-events:none;z-index:1}@media (max-width: 576px){.ds-tab-density-low ::ng-deep cfc-tab-item,.ds-tab-density-default ::ng-deep cfc-tab-item{padding:10px 12px}.ds-tab-density-high ::ng-deep cfc-tab-item{padding:6px 8px}}\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NmYy1kcy9zcmMvbGliL2NvbXBvbmVudHMvdGFiL3RhYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZmMtZHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYi90YWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQW1CO0FBQ25CLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUErQixTQUFTLEVBQWMsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7QUFVMUUsTUFBTSxPQUFPLFlBQVk7SUFDWSxRQUFRLENBQStCO0lBQ3BDLFdBQVcsQ0FBa0M7SUFDMUMsT0FBTyxDQUF5QjtJQUV6RSw4Q0FBOEM7SUFDckMsT0FBTyxHQUFlLFNBQVMsQ0FBQztJQUV6QyxpRUFBaUU7SUFDeEQsWUFBWSxHQUFnQyxNQUFNLENBQUM7SUFFNUQsY0FBYyxHQUFXLENBQUMsQ0FBQztJQUMzQixjQUFjLEdBQVksS0FBSyxDQUFDO0lBQ2hDLGVBQWUsR0FBWSxLQUFLLENBQUM7SUFFakMsa0JBQWtCO1FBQ2hCLHdDQUF3QztRQUN4QyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsQ0FBQztRQUVELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxtRkFBbUY7WUFDbkYsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQWE7UUFDckIsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQztRQUVuRCwyQkFBMkI7UUFDM0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRCxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLFlBQVksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQzdCLENBQUM7UUFFRCw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBRTVELGlDQUFpQztRQUNqQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFELElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsZUFBZSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDaEMsQ0FBQztRQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDekUsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUUxQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUMzQyxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7SUFDeEYsQ0FBQzt3R0FuRVUsWUFBWTs0RkFBWixZQUFZLHNJQUNOLGdCQUFnQiw4Q0FDaEIsbUJBQW1CLGlJQ2Z0QywrM0NBbUNNOzs0RkR0Qk8sWUFBWTtrQkFMeEIsU0FBUzsrQkFDRSxTQUFTOzhCQUtnQixRQUFRO3NCQUExQyxlQUFlO3VCQUFDLGdCQUFnQjtnQkFDSyxXQUFXO3NCQUFoRCxlQUFlO3VCQUFDLG1CQUFtQjtnQkFDSyxPQUFPO3NCQUEvQyxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBRzlCLE9BQU87c0JBQWYsS0FBSztnQkFHRyxZQUFZO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdGFiLmNvbXBvbmVudC50c1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgUXVlcnlMaXN0LCBBZnRlckNvbnRlbnRJbml0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRhYkl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi90YWJJdGVtL3RhYi1pdGVtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRhYkNvbnRlbnRDb21wb25lbnQgfSBmcm9tICcuLi90YWJDb250ZW50L3RhYi1jb250ZW50LmNvbXBvbmVudCc7XHJcblxyXG4vLyBEZWZpbmnDp8OjbyBkbyB0aXBvIHBhcmEgZGVuc2lkYWRlXHJcbmV4cG9ydCB0eXBlIFRhYkRlbnNpdHkgPSAnbG93JyB8ICdkZWZhdWx0JyB8ICdoaWdoJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY2ZjLXRhYicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFiLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYkNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xyXG4gIEBDb250ZW50Q2hpbGRyZW4oVGFiSXRlbUNvbXBvbmVudCkgdGFiSXRlbXMhOiBRdWVyeUxpc3Q8VGFiSXRlbUNvbXBvbmVudD47XHJcbiAgQENvbnRlbnRDaGlsZHJlbihUYWJDb250ZW50Q29tcG9uZW50KSB0YWJDb250ZW50cyE6IFF1ZXJ5TGlzdDxUYWJDb250ZW50Q29tcG9uZW50PjtcclxuICBAVmlld0NoaWxkKCd0YWJMaXN0JywgeyBzdGF0aWM6IGZhbHNlIH0pIHRhYkxpc3Q6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XHJcbiAgXHJcbiAgLy8gTm92YSBwcm9wcmllZGFkZSBwYXJhIGNvbnRyb2xhciBhIGRlbnNpZGFkZVxyXG4gIEBJbnB1dCgpIGRlbnNpdHk6IFRhYkRlbnNpdHkgPSAnZGVmYXVsdCc7XHJcbiAgXHJcbiAgLy8gTm92YSBwcm9wcmllZGFkZSBwYXJhIGNvbnRyb2xhciBvIGFsaW5oYW1lbnRvIGRhIGxpc3RhIGRlIHRhYnNcclxuICBASW5wdXQoKSB0YWJBbGlnbm1lbnQ6ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JyA9ICdsZWZ0JztcclxuXHJcbiAgYWN0aXZlVGFiSW5kZXg6IG51bWJlciA9IDA7XHJcbiAgc2hvd0xlZnRTaGFkb3c6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93UmlnaHRTaGFkb3c6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgLy8gSW5pY2lhbGl6YXIgYSBwcmltZWlyYSB0YWIgY29tbyBhdGl2YVxyXG4gICAgaWYgKHRoaXMudGFiSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdFRhYigwKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLy8gVmVyaWZpY2FyIHNlIHByZWNpc2Ftb3MgZXhpYmlyIHNvbWJyYXMgZGUgc2Nyb2xsIGFww7NzIG8gY29udGXDumRvIHNlciByZW5kZXJpemFkb1xyXG4gICAgICB0aGlzLmNoZWNrU2Nyb2xsU2hhZG93cygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RUYWIoaW5kZXg6IG51bWJlcikge1xyXG4gICAgLy8gRGVzYXRpdmFyIHRvZGFzIGFzIHRhYnNcclxuICAgIHRoaXMudGFiSXRlbXMuZm9yRWFjaChpdGVtID0+IGl0ZW0uYWN0aXZlID0gZmFsc2UpO1xyXG4gICAgXHJcbiAgICAvLyBBdGl2YXIgYSB0YWIgc2VsZWNpb25hZGFcclxuICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IHRoaXMudGFiSXRlbXMudG9BcnJheSgpW2luZGV4XTtcclxuICAgIGlmIChzZWxlY3RlZEl0ZW0pIHtcclxuICAgICAgc2VsZWN0ZWRJdGVtLmFjdGl2ZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRXNjb25kZXIgdG9kb3Mgb3MgY29udGXDumRvc1xyXG4gICAgdGhpcy50YWJDb250ZW50cy5mb3JFYWNoKGNvbnRlbnQgPT4gY29udGVudC5hY3RpdmUgPSBmYWxzZSk7XHJcbiAgICBcclxuICAgIC8vIE1vc3RyYXIgbyBjb250ZcO6ZG8gc2VsZWNpb25hZG9cclxuICAgIGNvbnN0IHNlbGVjdGVkQ29udGVudCA9IHRoaXMudGFiQ29udGVudHMudG9BcnJheSgpW2luZGV4XTtcclxuICAgIGlmIChzZWxlY3RlZENvbnRlbnQpIHtcclxuICAgICAgc2VsZWN0ZWRDb250ZW50LmFjdGl2ZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hY3RpdmVUYWJJbmRleCA9IGluZGV4O1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsTGVmdCgpIHtcclxuICAgIGlmICh0aGlzLnRhYkxpc3QpIHtcclxuICAgICAgdGhpcy50YWJMaXN0Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsQnkoeyBsZWZ0OiAtMTAwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzY3JvbGxSaWdodCgpIHtcclxuICAgIGlmICh0aGlzLnRhYkxpc3QpIHtcclxuICAgICAgdGhpcy50YWJMaXN0Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsQnkoeyBsZWZ0OiAxMDAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrU2Nyb2xsU2hhZG93cygpIHtcclxuICAgIGlmICghdGhpcy50YWJMaXN0KSByZXR1cm47XHJcbiAgICBcclxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnRhYkxpc3QubmF0aXZlRWxlbWVudDtcclxuICAgIHRoaXMuc2hvd0xlZnRTaGFkb3cgPSBlbGVtZW50LnNjcm9sbExlZnQgPiAwO1xyXG4gICAgdGhpcy5zaG93UmlnaHRTaGFkb3cgPSBlbGVtZW50LnNjcm9sbFdpZHRoID4gZWxlbWVudC5jbGllbnRXaWR0aCArIGVsZW1lbnQuc2Nyb2xsTGVmdDtcclxuICB9XHJcbn0iLCI8IS0tIHRhYi5jb21wb25lbnQuaHRtbCAtLT5cclxuPGRpdiBjbGFzcz1cImRzLXRhYi1jb250YWluZXJcIiBbY2xhc3NdPVwiJ2RzLXRhYi1kZW5zaXR5LScgKyBkZW5zaXR5XCI+XHJcbiAgPGRpdiBjbGFzcz1cImRzLXRhYi1zdXJmYWNlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZHMtdGFiLWxpc3QtY29udGFpbmVyXCIgXHJcbiAgICAgICAgIFtjbGFzcy5zaG93LWxlZnQtc2hhZG93XT1cInNob3dMZWZ0U2hhZG93XCJcclxuICAgICAgICAgW2NsYXNzLnNob3ctcmlnaHQtc2hhZG93XT1cInNob3dSaWdodFNoYWRvd1wiXHJcbiAgICAgICAgIFtjbGFzc109XCInZHMtdGFiLWFsaWduLScgKyB0YWJBbGlnbm1lbnRcIj5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dMZWZ0U2hhZG93XCIgXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkcy10YWItc2Nyb2xsLWJ1dHRvbiBkcy10YWItc2Nyb2xsLWxlZnRcIiBcclxuICAgICAgICAgICAgICAoY2xpY2spPVwic2Nyb2xsTGVmdCgpXCIgXHJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlJvbGFyIHBhcmEgZXNxdWVyZGFcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImRzLXRhYi1zY3JvbGwtaWNvblwiPiYjMTAwOTQ7PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgXHJcbiAgICAgIDxkaXYgI3RhYkxpc3QgXHJcbiAgICAgICAgICAgY2xhc3M9XCJkcy10YWItbGlzdFwiIFxyXG4gICAgICAgICAgIHJvbGU9XCJ0YWJsaXN0XCIgXHJcbiAgICAgICAgICAgdGFiaW5kZXg9XCIwXCIgXHJcbiAgICAgICAgICAgKHNjcm9sbCk9XCJjaGVja1Njcm9sbFNoYWRvd3MoKVwiPlxyXG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImNmYy10YWItaXRlbVwiPjwvbmctY29udGVudD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIFxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd1JpZ2h0U2hhZG93XCIgXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkcy10YWItc2Nyb2xsLWJ1dHRvbiBkcy10YWItc2Nyb2xsLXJpZ2h0XCIgXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNjcm9sbFJpZ2h0KClcIiBcclxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUm9sYXIgcGFyYSBkaXJlaXRhXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkcy10YWItc2Nyb2xsLWljb25cIj4mIzEwMDk1Ozwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkcy10YWItZGl2aWRlclwiPjwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIFxyXG4gIDxkaXYgY2xhc3M9XCJkcy10YWItY29udGVudC1jb250YWluZXJcIj5cclxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImNmYy10YWItY29udGVudFwiPjwvbmctY29udGVudD5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19