UNPKG

cfc-ds

Version:

Design System do Conselho Federal de Contabilidade baseado no govbr-ds

82 lines 20 kB
// 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\">&#10094;</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\">&#10095;</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\">&#10094;</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\">&#10095;</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