lib-portal-angular 0.0.95 → 0.0.96

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  import * as i1 from "../../service/auth-service.service";
4
4
  import * as i2 from "@angular/common";
@@ -9,6 +9,7 @@ export class TabComponent {
9
9
  this.tabs = [];
10
10
  this.activeTabIndex = 0;
11
11
  this.tabChanged = new EventEmitter();
12
+ this.showTabs = true; // Controla a exibição do componente
12
13
  }
13
14
  ngOnInit() {
14
15
  if (this.hasComponentPermission() && this.tabs.length > 0) {
@@ -17,15 +18,16 @@ export class TabComponent {
17
18
  }
18
19
  ngOnChanges(changes) {
19
20
  if (changes['tabs'] && !changes['tabs'].firstChange) {
20
- this.activeTabIndex = 0; // Reinicia para a primeira aba
21
- this.cdr.markForCheck(); // Força a atualização do componente
21
+ this.tabs = [...this.tabs]; // Gera uma nova referência
22
+ this.activeTabIndex = 0;
23
+ this.cdr.markForCheck(); // Força a atualização
22
24
  }
23
25
  }
24
26
  selectTab(index, event) {
25
27
  if (event) {
26
- event.preventDefault(); // Impede o comportamento padrão do link
28
+ event.preventDefault();
27
29
  }
28
- if (this.hasPermission(this.tabs[index].permissions)) {
30
+ if (this.hasPermission(this.tabs[index]?.permissions)) {
29
31
  this.activeTabIndex = index;
30
32
  this.tabChanged.emit(this.activeTabIndex);
31
33
  }
@@ -34,32 +36,31 @@ export class TabComponent {
34
36
  if (!requiredPermissions || requiredPermissions.length === 0) {
35
37
  return true;
36
38
  }
37
- try {
38
- return this.authService.hasPermission(requiredPermissions);
39
- }
40
- catch (error) {
41
- console.error('Permission error:', error);
42
- return false;
43
- }
39
+ return this.authService.hasPermission(requiredPermissions);
44
40
  }
45
41
  hasComponentPermission() {
46
42
  if (!this.componentPermissions || this.componentPermissions.length === 0) {
47
- return true; // Se não há permissões necessárias, permite por padrão
48
- }
49
- try {
50
- return this.authService.hasPermission(this.componentPermissions);
51
- }
52
- catch (error) {
53
- console.error('Permission error:', error);
54
- return false;
43
+ return true;
55
44
  }
45
+ return this.authService.hasPermission(this.componentPermissions);
46
+ }
47
+ trackByIndex(index) {
48
+ return index;
49
+ }
50
+ // 🔹 Método para reiniciar o componente
51
+ refreshTabs() {
52
+ this.showTabs = false; // Remove o componente do DOM
53
+ setTimeout(() => {
54
+ this.showTabs = true; // Adiciona novamente
55
+ this.cdr.detectChanges(); // Força a atualização do template
56
+ });
56
57
  }
57
58
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TabComponent, deps: [{ token: i1.AuthService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
58
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TabComponent, selector: "argenta-tab", inputs: { tabs: "tabs", activeTabIndex: "activeTabIndex", componentPermissions: "componentPermissions" }, outputs: { tabChanged: "tabChanged" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"hasComponentPermission()\">\n <ul class=\"nav nav-tabs\">\n <ng-container *ngFor=\"let tab of tabs; let i = index\">\n <li class=\"nav-item\" *ngIf=\"hasPermission(tab.permissions)\">\n <a\n class=\"nav-link\"\n [class.active]=\"i === activeTabIndex\"\n (click)=\"selectTab(i, $event)\"\n href=\"#\"\n >{{ tab.label }}</a\n >\n </li>\n </ng-container>\n </ul>\n <div class=\"tab-content\">\n <div\n *ngFor=\"let tab of tabs; let i = index\"\n class=\"tab-pane fade\"\n [ngClass]=\"{ 'show active': i === activeTabIndex }\"\n >\n <ng-container *ngTemplateOutlet=\"tab.content\"></ng-container>\n </div>\n </div>\n</ng-container>\n", styles: [".nav-tabs .nav-item .nav-link{cursor:pointer;font-family:var(--font-family);border-top-left-radius:.3rem;border-top-right-radius:.3rem;font-size:14px;color:var(--primary-color);border:1px solid #ddd;transition:background-color .3s ease,color .3s ease}.nav-tabs .nav-item .nav-link.active{background-color:var(--primary-color);color:var(--background-color);border-color:transparent}.nav-tabs .nav-item .nav-link:hover{background-color:var(--secondary-color);color:var(--background-color)}.tab-content .tab-pane{padding:1rem;border:1px solid #ddd;border-top:none}.nav-tabs .nav-item .nav-link{color:var(--primary-color)}.nav-tabs .nav-item .nav-link.active{background-color:var(--primary-color);color:var(--text-color)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
59
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TabComponent, selector: "argenta-tab", inputs: { tabs: "tabs", activeTabIndex: "activeTabIndex", componentPermissions: "componentPermissions" }, outputs: { tabChanged: "tabChanged" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"showTabs\">\n <ng-container *ngIf=\"hasComponentPermission()\">\n <ul class=\"nav nav-tabs\">\n <ng-container *ngFor=\"let tab of tabs; let i = index; trackBy: trackByIndex\">\n <li class=\"nav-item\" *ngIf=\"hasPermission(tab.permissions)\">\n <a\n class=\"nav-link\"\n [class.active]=\"i === activeTabIndex\"\n (click)=\"selectTab(i, $event)\"\n href=\"#\"\n >{{ tab.label }}</a\n >\n </li>\n </ng-container>\n </ul>\n <div class=\"tab-content\">\n <div\n *ngFor=\"let tab of tabs; let i = index; trackBy: trackByIndex\"\n class=\"tab-pane fade\"\n [ngClass]=\"{ 'show active': i === activeTabIndex }\"\n >\n <ng-container *ngTemplateOutlet=\"tab.content\"></ng-container>\n </div>\n </div>\n </ng-container>\n</ng-container>\n", styles: [".nav-tabs .nav-item .nav-link{cursor:pointer;font-family:var(--font-family);border-top-left-radius:.3rem;border-top-right-radius:.3rem;font-size:14px;color:var(--primary-color);border:1px solid #ddd;transition:background-color .3s ease,color .3s ease}.nav-tabs .nav-item .nav-link.active{background-color:var(--primary-color);color:var(--background-color);border-color:transparent}.nav-tabs .nav-item .nav-link:hover{background-color:var(--secondary-color);color:var(--background-color)}.tab-content .tab-pane{padding:1rem;border:1px solid #ddd;border-top:none}.nav-tabs .nav-item .nav-link{color:var(--primary-color)}.nav-tabs .nav-item .nav-link.active{background-color:var(--primary-color);color:var(--text-color)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
59
60
  }
60
61
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TabComponent, decorators: [{
61
62
  type: Component,
62
- args: [{ selector: 'argenta-tab', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"hasComponentPermission()\">\n <ul class=\"nav nav-tabs\">\n <ng-container *ngFor=\"let tab of tabs; let i = index\">\n <li class=\"nav-item\" *ngIf=\"hasPermission(tab.permissions)\">\n <a\n class=\"nav-link\"\n [class.active]=\"i === activeTabIndex\"\n (click)=\"selectTab(i, $event)\"\n href=\"#\"\n >{{ tab.label }}</a\n >\n </li>\n </ng-container>\n </ul>\n <div class=\"tab-content\">\n <div\n *ngFor=\"let tab of tabs; let i = index\"\n class=\"tab-pane fade\"\n [ngClass]=\"{ 'show active': i === activeTabIndex }\"\n >\n <ng-container *ngTemplateOutlet=\"tab.content\"></ng-container>\n </div>\n </div>\n</ng-container>\n", styles: [".nav-tabs .nav-item .nav-link{cursor:pointer;font-family:var(--font-family);border-top-left-radius:.3rem;border-top-right-radius:.3rem;font-size:14px;color:var(--primary-color);border:1px solid #ddd;transition:background-color .3s ease,color .3s ease}.nav-tabs .nav-item .nav-link.active{background-color:var(--primary-color);color:var(--background-color);border-color:transparent}.nav-tabs .nav-item .nav-link:hover{background-color:var(--secondary-color);color:var(--background-color)}.tab-content .tab-pane{padding:1rem;border:1px solid #ddd;border-top:none}.nav-tabs .nav-item .nav-link{color:var(--primary-color)}.nav-tabs .nav-item .nav-link.active{background-color:var(--primary-color);color:var(--text-color)}\n"] }]
63
+ args: [{ selector: 'argenta-tab', template: "<ng-container *ngIf=\"showTabs\">\n <ng-container *ngIf=\"hasComponentPermission()\">\n <ul class=\"nav nav-tabs\">\n <ng-container *ngFor=\"let tab of tabs; let i = index; trackBy: trackByIndex\">\n <li class=\"nav-item\" *ngIf=\"hasPermission(tab.permissions)\">\n <a\n class=\"nav-link\"\n [class.active]=\"i === activeTabIndex\"\n (click)=\"selectTab(i, $event)\"\n href=\"#\"\n >{{ tab.label }}</a\n >\n </li>\n </ng-container>\n </ul>\n <div class=\"tab-content\">\n <div\n *ngFor=\"let tab of tabs; let i = index; trackBy: trackByIndex\"\n class=\"tab-pane fade\"\n [ngClass]=\"{ 'show active': i === activeTabIndex }\"\n >\n <ng-container *ngTemplateOutlet=\"tab.content\"></ng-container>\n </div>\n </div>\n </ng-container>\n</ng-container>\n", styles: [".nav-tabs .nav-item .nav-link{cursor:pointer;font-family:var(--font-family);border-top-left-radius:.3rem;border-top-right-radius:.3rem;font-size:14px;color:var(--primary-color);border:1px solid #ddd;transition:background-color .3s ease,color .3s ease}.nav-tabs .nav-item .nav-link.active{background-color:var(--primary-color);color:var(--background-color);border-color:transparent}.nav-tabs .nav-item .nav-link:hover{background-color:var(--secondary-color);color:var(--background-color)}.tab-content .tab-pane{padding:1rem;border:1px solid #ddd;border-top:none}.nav-tabs .nav-item .nav-link{color:var(--primary-color)}.nav-tabs .nav-item .nav-link.active{background-color:var(--primary-color);color:var(--text-color)}\n"] }]
63
64
  }], ctorParameters: function () { return [{ type: i1.AuthService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { tabs: [{
64
65
  type: Input
65
66
  }], activeTabIndex: [{
@@ -69,4 +70,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
69
70
  }], tabChanged: [{
70
71
  type: Output
71
72
  }] } });
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi1wb3J0YWwtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvdGFiL3RhYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItcG9ydGFsLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3RhYi90YWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEdBRVQsTUFBTSxlQUFlLENBQUM7Ozs7QUFTdkIsTUFBTSxPQUFPLFlBQVk7SUFNckIsWUFBb0IsV0FBd0IsRUFBVSxHQUFzQjtRQUF4RCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBTG5FLFNBQUksR0FBOEQsRUFBRSxDQUFDO1FBQ3JFLG1CQUFjLEdBQVcsQ0FBQyxDQUFDO1FBRTFCLGVBQVUsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztJQUVRLENBQUM7SUFFakYsUUFBUTtRQUNKLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUU7WUFDakQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQywrQkFBK0I7WUFDeEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLG9DQUFvQztTQUNoRTtJQUNMLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBYSxFQUFFLEtBQWtCO1FBQ3ZDLElBQUksS0FBSyxFQUFFO1lBQ1AsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsd0NBQXdDO1NBQ25FO1FBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDbEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7WUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQzdDO0lBQ0wsQ0FBQztJQUVELGFBQWEsQ0FBQyxtQkFBOEI7UUFDeEMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLG1CQUFtQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDMUQsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELElBQUk7WUFDQSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLENBQUM7U0FDOUQ7UUFBQyxPQUFPLEtBQWMsRUFBRTtZQUNyQixPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzFDLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO0lBQ0wsQ0FBQztJQUVELHNCQUFzQjtRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3RFLE9BQU8sSUFBSSxDQUFDLENBQUMsdURBQXVEO1NBQ3ZFO1FBQ0QsSUFBSTtZQUNBLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDcEU7UUFBQyxPQUFPLEtBQWMsRUFBRTtZQUNyQixPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzFDLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO0lBQ0wsQ0FBQzsrR0FyRFEsWUFBWTttR0FBWixZQUFZLHlOQ25CekIseXZCQXdCQTs7NEZETGEsWUFBWTtrQkFOeEIsU0FBUzsrQkFDSSxhQUFhLG1CQUdOLHVCQUF1QixDQUFDLE1BQU07a0lBR3RDLElBQUk7c0JBQVosS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2F1dGgtc2VydmljZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcmdlbnRhLXRhYicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFiLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFRhYkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgICBASW5wdXQoKSB0YWJzOiB7IGxhYmVsOiBzdHJpbmc7IGNvbnRlbnQ6IGFueTsgcGVybWlzc2lvbnM/OiBzdHJpbmdbXSB9W10gPSBbXTtcbiAgICBASW5wdXQoKSBhY3RpdmVUYWJJbmRleDogbnVtYmVyID0gMDtcbiAgICBASW5wdXQoKSBjb21wb25lbnRQZXJtaXNzaW9ucz86IHN0cmluZ1tdOyAvLyBQZXJtaXNzw7VlcyBwYXJhIG8gY29tcG9uZW50ZSBjb21vIHVtIHRvZG9cbiAgICBAT3V0cHV0KCkgdGFiQ2hhbmdlZDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHsgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NvbXBvbmVudFBlcm1pc3Npb24oKSAmJiB0aGlzLnRhYnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RUYWIodGhpcy5hY3RpdmVUYWJJbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzWyd0YWJzJ10gJiYgIWNoYW5nZXNbJ3RhYnMnXS5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVUYWJJbmRleCA9IDA7IC8vIFJlaW5pY2lhIHBhcmEgYSBwcmltZWlyYSBhYmFcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpOyAvLyBGb3LDp2EgYSBhdHVhbGl6YcOnw6NvIGRvIGNvbXBvbmVudGVcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdFRhYihpbmRleDogbnVtYmVyLCBldmVudD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBJbXBlZGUgbyBjb21wb3J0YW1lbnRvIHBhZHLDo28gZG8gbGlua1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhhc1Blcm1pc3Npb24odGhpcy50YWJzW2luZGV4XS5wZXJtaXNzaW9ucykpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVGFiSW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIHRoaXMudGFiQ2hhbmdlZC5lbWl0KHRoaXMuYWN0aXZlVGFiSW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFzUGVybWlzc2lvbihyZXF1aXJlZFBlcm1pc3Npb25zPzogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFyZXF1aXJlZFBlcm1pc3Npb25zIHx8IHJlcXVpcmVkUGVybWlzc2lvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UuaGFzUGVybWlzc2lvbihyZXF1aXJlZFBlcm1pc3Npb25zKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Blcm1pc3Npb24gZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFzQ29tcG9uZW50UGVybWlzc2lvbigpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbXBvbmVudFBlcm1pc3Npb25zIHx8IHRoaXMuY29tcG9uZW50UGVybWlzc2lvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gU2UgbsOjbyBow6EgcGVybWlzc8O1ZXMgbmVjZXNzw6FyaWFzLCBwZXJtaXRlIHBvciBwYWRyw6NvXG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLmhhc1Blcm1pc3Npb24odGhpcy5jb21wb25lbnRQZXJtaXNzaW9ucyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdQZXJtaXNzaW9uIGVycm9yOicsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNDb21wb25lbnRQZXJtaXNzaW9uKClcIj5cbiAgPHVsIGNsYXNzPVwibmF2IG5hdi10YWJzXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKm5nSWY9XCJoYXNQZXJtaXNzaW9uKHRhYi5wZXJtaXNzaW9ucylcIj5cbiAgICAgICAgPGFcbiAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rXCJcbiAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImkgPT09IGFjdGl2ZVRhYkluZGV4XCJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0VGFiKGksICRldmVudClcIlxuICAgICAgICAgIGhyZWY9XCIjXCJcbiAgICAgICAgICA+e3sgdGFiLmxhYmVsIH19PC9hXG4gICAgICAgID5cbiAgICAgIDwvbGk+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvdWw+XG4gIDxkaXYgY2xhc3M9XCJ0YWItY29udGVudFwiPlxuICAgIDxkaXZcbiAgICAgICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFiczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICBjbGFzcz1cInRhYi1wYW5lIGZhZGVcIlxuICAgICAgW25nQ2xhc3NdPVwieyAnc2hvdyBhY3RpdmUnOiBpID09PSBhY3RpdmVUYWJJbmRleCB9XCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFiLmNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi1wb3J0YWwtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvdGFiL3RhYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItcG9ydGFsLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3RhYi90YWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFHVCxNQUFNLGVBQWUsQ0FBQzs7OztBQVN2QixNQUFNLE9BQU8sWUFBWTtJQVFyQixZQUFvQixXQUF3QixFQUFVLEdBQXNCO1FBQXhELGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFQbkUsU0FBSSxHQUEyRSxFQUFFLENBQUM7UUFDbEYsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFFMUIsZUFBVSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBRXhFLGFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxvQ0FBb0M7SUFFMEIsQ0FBQztJQUVoRixRQUFRO1FBQ0osSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDdkM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRTtZQUNqRCxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQywyQkFBMkI7WUFDdkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLHNCQUFzQjtTQUNsRDtJQUNMLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBYSxFQUFFLEtBQWtCO1FBQ3ZDLElBQUksS0FBSyxFQUFFO1lBQ1AsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQzFCO1FBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUU7WUFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7WUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQzdDO0lBQ0wsQ0FBQztJQUVELGFBQWEsQ0FBQyxtQkFBOEI7UUFDeEMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLG1CQUFtQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDMUQsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsc0JBQXNCO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdEUsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFhO1FBQ3RCLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCx3Q0FBd0M7SUFDeEMsV0FBVztRQUNQLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsNkJBQTZCO1FBQ3BELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLHFCQUFxQjtZQUMzQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsa0NBQWtDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzsrR0EzRFEsWUFBWTttR0FBWixZQUFZLHlOQ25CekIsMjRCQTBCQTs7NEZEUGEsWUFBWTtrQkFOeEIsU0FBUzsrQkFDSSxhQUFhO2tJQU1kLElBQUk7c0JBQVosS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvYXV0aC1zZXJ2aWNlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FyZ2VudGEtdGFiJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFiLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90YWIuY29tcG9uZW50LnNjc3MnXSxcbiAgIC8vIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KCkgdGFiczogeyBsYWJlbDogc3RyaW5nOyBjb250ZW50OiBUZW1wbGF0ZVJlZjxhbnk+OyBwZXJtaXNzaW9ucz86IHN0cmluZ1tdIH1bXSA9IFtdO1xuICAgIEBJbnB1dCgpIGFjdGl2ZVRhYkluZGV4OiBudW1iZXIgPSAwO1xuICAgIEBJbnB1dCgpIGNvbXBvbmVudFBlcm1pc3Npb25zPzogc3RyaW5nW107XG4gICAgQE91dHB1dCgpIHRhYkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICBzaG93VGFicyA9IHRydWU7IC8vIENvbnRyb2xhIGEgZXhpYmnDp8OjbyBkbyBjb21wb25lbnRlXG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NvbXBvbmVudFBlcm1pc3Npb24oKSAmJiB0aGlzLnRhYnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RUYWIodGhpcy5hY3RpdmVUYWJJbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzWyd0YWJzJ10gJiYgIWNoYW5nZXNbJ3RhYnMnXS5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy50YWJzID0gWy4uLnRoaXMudGFic107IC8vIEdlcmEgdW1hIG5vdmEgcmVmZXLDqm5jaWFcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVGFiSW5kZXggPSAwO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7IC8vIEZvcsOnYSBhIGF0dWFsaXphw6fDo29cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdFRhYihpbmRleDogbnVtYmVyLCBldmVudD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhhc1Blcm1pc3Npb24odGhpcy50YWJzW2luZGV4XT8ucGVybWlzc2lvbnMpKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVRhYkluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICB0aGlzLnRhYkNoYW5nZWQuZW1pdCh0aGlzLmFjdGl2ZVRhYkluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc1Blcm1pc3Npb24ocmVxdWlyZWRQZXJtaXNzaW9ucz86IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghcmVxdWlyZWRQZXJtaXNzaW9ucyB8fCByZXF1aXJlZFBlcm1pc3Npb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UuaGFzUGVybWlzc2lvbihyZXF1aXJlZFBlcm1pc3Npb25zKTtcbiAgICB9XG5cbiAgICBoYXNDb21wb25lbnRQZXJtaXNzaW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuY29tcG9uZW50UGVybWlzc2lvbnMgfHwgdGhpcy5jb21wb25lbnRQZXJtaXNzaW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLmhhc1Blcm1pc3Npb24odGhpcy5jb21wb25lbnRQZXJtaXNzaW9ucyk7XG4gICAgfVxuXG4gICAgdHJhY2tCeUluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgLy8g8J+UuSBNw6l0b2RvIHBhcmEgcmVpbmljaWFyIG8gY29tcG9uZW50ZVxuICAgIHJlZnJlc2hUYWJzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNob3dUYWJzID0gZmFsc2U7IC8vIFJlbW92ZSBvIGNvbXBvbmVudGUgZG8gRE9NXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93VGFicyA9IHRydWU7IC8vIEFkaWNpb25hIG5vdmFtZW50ZVxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAvLyBGb3LDp2EgYSBhdHVhbGl6YcOnw6NvIGRvIHRlbXBsYXRlXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VGFic1wiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzQ29tcG9uZW50UGVybWlzc2lvbigpXCI+XG4gICAgPHVsIGNsYXNzPVwibmF2IG5hdi10YWJzXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFiczsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCI+XG4gICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKm5nSWY9XCJoYXNQZXJtaXNzaW9uKHRhYi5wZXJtaXNzaW9ucylcIj5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgY2xhc3M9XCJuYXYtbGlua1wiXG4gICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImkgPT09IGFjdGl2ZVRhYkluZGV4XCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RUYWIoaSwgJGV2ZW50KVwiXG4gICAgICAgICAgICBocmVmPVwiI1wiXG4gICAgICAgICAgICA+e3sgdGFiLmxhYmVsIH19PC9hXG4gICAgICAgICAgPlxuICAgICAgICA8L2xpPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC91bD5cbiAgICA8ZGl2IGNsYXNzPVwidGFiLWNvbnRlbnRcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5SW5kZXhcIlxuICAgICAgICBjbGFzcz1cInRhYi1wYW5lIGZhZGVcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdzaG93IGFjdGl2ZSc6IGkgPT09IGFjdGl2ZVRhYkluZGV4IH1cIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFiLmNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -3740,6 +3740,7 @@ class TabComponent {
3740
3740
  this.tabs = [];
3741
3741
  this.activeTabIndex = 0;
3742
3742
  this.tabChanged = new EventEmitter();
3743
+ this.showTabs = true; // Controla a exibição do componente
3743
3744
  }
3744
3745
  ngOnInit() {
3745
3746
  if (this.hasComponentPermission() && this.tabs.length > 0) {
@@ -3748,15 +3749,16 @@ class TabComponent {
3748
3749
  }
3749
3750
  ngOnChanges(changes) {
3750
3751
  if (changes['tabs'] && !changes['tabs'].firstChange) {
3751
- this.activeTabIndex = 0; // Reinicia para a primeira aba
3752
- this.cdr.markForCheck(); // Força a atualização do componente
3752
+ this.tabs = [...this.tabs]; // Gera uma nova referência
3753
+ this.activeTabIndex = 0;
3754
+ this.cdr.markForCheck(); // Força a atualização
3753
3755
  }
3754
3756
  }
3755
3757
  selectTab(index, event) {
3756
3758
  if (event) {
3757
- event.preventDefault(); // Impede o comportamento padrão do link
3759
+ event.preventDefault();
3758
3760
  }
3759
- if (this.hasPermission(this.tabs[index].permissions)) {
3761
+ if (this.hasPermission(this.tabs[index]?.permissions)) {
3760
3762
  this.activeTabIndex = index;
3761
3763
  this.tabChanged.emit(this.activeTabIndex);
3762
3764
  }
@@ -3765,32 +3767,31 @@ class TabComponent {
3765
3767
  if (!requiredPermissions || requiredPermissions.length === 0) {
3766
3768
  return true;
3767
3769
  }
3768
- try {
3769
- return this.authService.hasPermission(requiredPermissions);
3770
- }
3771
- catch (error) {
3772
- console.error('Permission error:', error);
3773
- return false;
3774
- }
3770
+ return this.authService.hasPermission(requiredPermissions);
3775
3771
  }
3776
3772
  hasComponentPermission() {
3777
3773
  if (!this.componentPermissions || this.componentPermissions.length === 0) {
3778
- return true; // Se não há permissões necessárias, permite por padrão
3779
- }
3780
- try {
3781
- return this.authService.hasPermission(this.componentPermissions);
3782
- }
3783
- catch (error) {
3784
- console.error('Permission error:', error);
3785
- return false;
3774
+ return true;
3786
3775
  }
3776
+ return this.authService.hasPermission(this.componentPermissions);
3777
+ }
3778
+ trackByIndex(index) {
3779
+ return index;
3780
+ }
3781
+ // 🔹 Método para reiniciar o componente
3782
+ refreshTabs() {
3783
+ this.showTabs = false; // Remove o componente do DOM
3784
+ setTimeout(() => {
3785
+ this.showTabs = true; // Adiciona novamente
3786
+ this.cdr.detectChanges(); // Força a atualização do template
3787
+ });
3787
3788
  }
3788
3789
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TabComponent, deps: [{ token: AuthService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
3789
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TabComponent, selector: "argenta-tab", inputs: { tabs: "tabs", activeTabIndex: "activeTabIndex", componentPermissions: "componentPermissions" }, outputs: { tabChanged: "tabChanged" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"hasComponentPermission()\">\n <ul class=\"nav nav-tabs\">\n <ng-container *ngFor=\"let tab of tabs; let i = index\">\n <li class=\"nav-item\" *ngIf=\"hasPermission(tab.permissions)\">\n <a\n class=\"nav-link\"\n [class.active]=\"i === activeTabIndex\"\n (click)=\"selectTab(i, $event)\"\n href=\"#\"\n >{{ tab.label }}</a\n >\n </li>\n </ng-container>\n </ul>\n <div class=\"tab-content\">\n <div\n *ngFor=\"let tab of tabs; let i = index\"\n class=\"tab-pane fade\"\n [ngClass]=\"{ 'show active': i === activeTabIndex }\"\n >\n <ng-container *ngTemplateOutlet=\"tab.content\"></ng-container>\n </div>\n </div>\n</ng-container>\n", styles: [".nav-tabs .nav-item .nav-link{cursor:pointer;font-family:var(--font-family);border-top-left-radius:.3rem;border-top-right-radius:.3rem;font-size:14px;color:var(--primary-color);border:1px solid #ddd;transition:background-color .3s ease,color .3s ease}.nav-tabs .nav-item .nav-link.active{background-color:var(--primary-color);color:var(--background-color);border-color:transparent}.nav-tabs .nav-item .nav-link:hover{background-color:var(--secondary-color);color:var(--background-color)}.tab-content .tab-pane{padding:1rem;border:1px solid #ddd;border-top:none}.nav-tabs .nav-item .nav-link{color:var(--primary-color)}.nav-tabs .nav-item .nav-link.active{background-color:var(--primary-color);color:var(--text-color)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3790
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TabComponent, selector: "argenta-tab", inputs: { tabs: "tabs", activeTabIndex: "activeTabIndex", componentPermissions: "componentPermissions" }, outputs: { tabChanged: "tabChanged" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"showTabs\">\n <ng-container *ngIf=\"hasComponentPermission()\">\n <ul class=\"nav nav-tabs\">\n <ng-container *ngFor=\"let tab of tabs; let i = index; trackBy: trackByIndex\">\n <li class=\"nav-item\" *ngIf=\"hasPermission(tab.permissions)\">\n <a\n class=\"nav-link\"\n [class.active]=\"i === activeTabIndex\"\n (click)=\"selectTab(i, $event)\"\n href=\"#\"\n >{{ tab.label }}</a\n >\n </li>\n </ng-container>\n </ul>\n <div class=\"tab-content\">\n <div\n *ngFor=\"let tab of tabs; let i = index; trackBy: trackByIndex\"\n class=\"tab-pane fade\"\n [ngClass]=\"{ 'show active': i === activeTabIndex }\"\n >\n <ng-container *ngTemplateOutlet=\"tab.content\"></ng-container>\n </div>\n </div>\n </ng-container>\n</ng-container>\n", styles: [".nav-tabs .nav-item .nav-link{cursor:pointer;font-family:var(--font-family);border-top-left-radius:.3rem;border-top-right-radius:.3rem;font-size:14px;color:var(--primary-color);border:1px solid #ddd;transition:background-color .3s ease,color .3s ease}.nav-tabs .nav-item .nav-link.active{background-color:var(--primary-color);color:var(--background-color);border-color:transparent}.nav-tabs .nav-item .nav-link:hover{background-color:var(--secondary-color);color:var(--background-color)}.tab-content .tab-pane{padding:1rem;border:1px solid #ddd;border-top:none}.nav-tabs .nav-item .nav-link{color:var(--primary-color)}.nav-tabs .nav-item .nav-link.active{background-color:var(--primary-color);color:var(--text-color)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
3790
3791
  }
3791
3792
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TabComponent, decorators: [{
3792
3793
  type: Component,
3793
- args: [{ selector: 'argenta-tab', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"hasComponentPermission()\">\n <ul class=\"nav nav-tabs\">\n <ng-container *ngFor=\"let tab of tabs; let i = index\">\n <li class=\"nav-item\" *ngIf=\"hasPermission(tab.permissions)\">\n <a\n class=\"nav-link\"\n [class.active]=\"i === activeTabIndex\"\n (click)=\"selectTab(i, $event)\"\n href=\"#\"\n >{{ tab.label }}</a\n >\n </li>\n </ng-container>\n </ul>\n <div class=\"tab-content\">\n <div\n *ngFor=\"let tab of tabs; let i = index\"\n class=\"tab-pane fade\"\n [ngClass]=\"{ 'show active': i === activeTabIndex }\"\n >\n <ng-container *ngTemplateOutlet=\"tab.content\"></ng-container>\n </div>\n </div>\n</ng-container>\n", styles: [".nav-tabs .nav-item .nav-link{cursor:pointer;font-family:var(--font-family);border-top-left-radius:.3rem;border-top-right-radius:.3rem;font-size:14px;color:var(--primary-color);border:1px solid #ddd;transition:background-color .3s ease,color .3s ease}.nav-tabs .nav-item .nav-link.active{background-color:var(--primary-color);color:var(--background-color);border-color:transparent}.nav-tabs .nav-item .nav-link:hover{background-color:var(--secondary-color);color:var(--background-color)}.tab-content .tab-pane{padding:1rem;border:1px solid #ddd;border-top:none}.nav-tabs .nav-item .nav-link{color:var(--primary-color)}.nav-tabs .nav-item .nav-link.active{background-color:var(--primary-color);color:var(--text-color)}\n"] }]
3794
+ args: [{ selector: 'argenta-tab', template: "<ng-container *ngIf=\"showTabs\">\n <ng-container *ngIf=\"hasComponentPermission()\">\n <ul class=\"nav nav-tabs\">\n <ng-container *ngFor=\"let tab of tabs; let i = index; trackBy: trackByIndex\">\n <li class=\"nav-item\" *ngIf=\"hasPermission(tab.permissions)\">\n <a\n class=\"nav-link\"\n [class.active]=\"i === activeTabIndex\"\n (click)=\"selectTab(i, $event)\"\n href=\"#\"\n >{{ tab.label }}</a\n >\n </li>\n </ng-container>\n </ul>\n <div class=\"tab-content\">\n <div\n *ngFor=\"let tab of tabs; let i = index; trackBy: trackByIndex\"\n class=\"tab-pane fade\"\n [ngClass]=\"{ 'show active': i === activeTabIndex }\"\n >\n <ng-container *ngTemplateOutlet=\"tab.content\"></ng-container>\n </div>\n </div>\n </ng-container>\n</ng-container>\n", styles: [".nav-tabs .nav-item .nav-link{cursor:pointer;font-family:var(--font-family);border-top-left-radius:.3rem;border-top-right-radius:.3rem;font-size:14px;color:var(--primary-color);border:1px solid #ddd;transition:background-color .3s ease,color .3s ease}.nav-tabs .nav-item .nav-link.active{background-color:var(--primary-color);color:var(--background-color);border-color:transparent}.nav-tabs .nav-item .nav-link:hover{background-color:var(--secondary-color);color:var(--background-color)}.tab-content .tab-pane{padding:1rem;border:1px solid #ddd;border-top:none}.nav-tabs .nav-item .nav-link{color:var(--primary-color)}.nav-tabs .nav-item .nav-link.active{background-color:var(--primary-color);color:var(--text-color)}\n"] }]
3794
3795
  }], ctorParameters: function () { return [{ type: AuthService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { tabs: [{
3795
3796
  type: Input
3796
3797
  }], activeTabIndex: [{