@cqa-lib/cqa-ui 1.0.55 → 1.0.57

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.
@@ -21,10 +21,10 @@ export class ChartCardComponent {
21
21
  }
22
22
  }
23
23
  ChartCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ChartCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
24
- ChartCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ChartCardComponent, selector: "cqa-chart-card", inputs: { title: "title", subtitle: "subtitle", cardClass: "cardClass", height: "height", info: "info", isEmpty: "isEmpty", emptyStateConfig: "emptyStateConfig" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-ui-root\">\n <div\n class=\"cqa-border cqa-border-solid cqa-border-border-default cqa-rounded-[8px] cqa-shadow-card cqa-h-full\"\n [ngClass]=\"cardClass\">\n <!-- Header -->\n <div class=\"cqa-px-[16px] cqa-py-4\">\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-3 cqa-flex-wrap\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <div class=\"cqa-text-[16px] cqa-leading-6 cqa-text-[#111827] cqa-font-medium\">{{ title }}</div>\n <mat-icon \n *ngIf=\"info\" \n class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px] cqa-cursor-help cqa-flex-shrink-0\"\n [matTooltip]=\"info\"\n matTooltipPosition=\"above\"\n style=\"color: #64748B;\">\n info_outline\n </mat-icon>\n </div>\n <!-- Chart actions slot (segments) -->\n <ng-content select=\"[chart-actions]\"></ng-content>\n </div>\n <div *ngIf=\"subtitle\" class=\"cqa-text-[12px] cqa-leading-4 cqa-text-[#6A7282] cqa-mt-0.5\">{{ subtitle }}</div>\n </div>\n\n <!-- Chart/content area -->\n <div class=\"cqa-px-[13px]\">\n <div class=\"cqa-w-full cqa-chart-card-area\">\n <!-- Empty State -->\n <ng-container *ngIf=\"isEmpty\">\n <cqa-empty-state\n [title]=\"emptyStateConfig.title\"\n [description]=\"emptyStateConfig.description\"\n [imageUrl]=\"emptyStateConfig.imageUrl\"\n [actions]=\"emptyStateConfig.actions\"\n (actionClick)=\"$event.onClick?.()\"\n ></cqa-empty-state>\n </ng-container>\n \n <!-- Default Content -->\n <ng-container *ngIf=\"!isEmpty\">\n <div class=\"cqa-w-full cqa-h-full\">\n <ng-content></ng-content>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2.EmptyStateComponent, selector: "cqa-empty-state", inputs: ["preset", "imageUrl", "title", "description", "actions"], outputs: ["actionClick"] }], directives: [{ type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
24
+ ChartCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ChartCardComponent, selector: "cqa-chart-card", inputs: { title: "title", subtitle: "subtitle", cardClass: "cardClass", height: "height", info: "info", isEmpty: "isEmpty", emptyStateConfig: "emptyStateConfig" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-ui-root\">\n <div\n class=\"cqa-border cqa-border-solid cqa-border-border-default cqa-rounded-[8px] cqa-shadow-card cqa-h-full\"\n [ngClass]=\"cardClass\">\n <!-- Header -->\n <div class=\"cqa-px-[16px] cqa-py-4\">\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-3 cqa-flex-wrap\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <div class=\"cqa-text-[16px] cqa-leading-6 cqa-text-[#111827] cqa-font-medium\">{{ title }}</div>\n <mat-icon \n *ngIf=\"info\" \n class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px] cqa-cursor-help cqa-flex-shrink-0\"\n [matTooltip]=\"info\"\n matTooltipPosition=\"above\"\n style=\"color: #64748B;\">\n info\n </mat-icon>\n </div>\n <!-- Chart actions slot (segments) -->\n <ng-content select=\"[chart-actions]\"></ng-content>\n </div>\n <div *ngIf=\"subtitle\" class=\"cqa-text-[12px] cqa-leading-4 cqa-text-[#6A7282] cqa-mt-0.5\">{{ subtitle }}</div>\n </div>\n\n <!-- Chart/content area -->\n <div class=\"cqa-px-[13px]\">\n <div class=\"cqa-w-full cqa-chart-card-area\">\n <!-- Empty State -->\n <ng-container *ngIf=\"isEmpty\">\n <cqa-empty-state\n [title]=\"emptyStateConfig.title\"\n [description]=\"emptyStateConfig.description\"\n [imageUrl]=\"emptyStateConfig.imageUrl\"\n [actions]=\"emptyStateConfig.actions\"\n (actionClick)=\"$event.onClick?.()\"\n ></cqa-empty-state>\n </ng-container>\n \n <!-- Default Content -->\n <ng-container *ngIf=\"!isEmpty\">\n <div class=\"cqa-w-full cqa-h-full\">\n <ng-content></ng-content>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2.EmptyStateComponent, selector: "cqa-empty-state", inputs: ["preset", "imageUrl", "title", "description", "actions"], outputs: ["actionClick"] }], directives: [{ type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
25
25
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ChartCardComponent, decorators: [{
26
26
  type: Component,
27
- args: [{ selector: 'cqa-chart-card', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-ui-root\">\n <div\n class=\"cqa-border cqa-border-solid cqa-border-border-default cqa-rounded-[8px] cqa-shadow-card cqa-h-full\"\n [ngClass]=\"cardClass\">\n <!-- Header -->\n <div class=\"cqa-px-[16px] cqa-py-4\">\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-3 cqa-flex-wrap\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <div class=\"cqa-text-[16px] cqa-leading-6 cqa-text-[#111827] cqa-font-medium\">{{ title }}</div>\n <mat-icon \n *ngIf=\"info\" \n class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px] cqa-cursor-help cqa-flex-shrink-0\"\n [matTooltip]=\"info\"\n matTooltipPosition=\"above\"\n style=\"color: #64748B;\">\n info_outline\n </mat-icon>\n </div>\n <!-- Chart actions slot (segments) -->\n <ng-content select=\"[chart-actions]\"></ng-content>\n </div>\n <div *ngIf=\"subtitle\" class=\"cqa-text-[12px] cqa-leading-4 cqa-text-[#6A7282] cqa-mt-0.5\">{{ subtitle }}</div>\n </div>\n\n <!-- Chart/content area -->\n <div class=\"cqa-px-[13px]\">\n <div class=\"cqa-w-full cqa-chart-card-area\">\n <!-- Empty State -->\n <ng-container *ngIf=\"isEmpty\">\n <cqa-empty-state\n [title]=\"emptyStateConfig.title\"\n [description]=\"emptyStateConfig.description\"\n [imageUrl]=\"emptyStateConfig.imageUrl\"\n [actions]=\"emptyStateConfig.actions\"\n (actionClick)=\"$event.onClick?.()\"\n ></cqa-empty-state>\n </ng-container>\n \n <!-- Default Content -->\n <ng-container *ngIf=\"!isEmpty\">\n <div class=\"cqa-w-full cqa-h-full\">\n <ng-content></ng-content>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>", styles: [] }]
27
+ args: [{ selector: 'cqa-chart-card', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-ui-root\">\n <div\n class=\"cqa-border cqa-border-solid cqa-border-border-default cqa-rounded-[8px] cqa-shadow-card cqa-h-full\"\n [ngClass]=\"cardClass\">\n <!-- Header -->\n <div class=\"cqa-px-[16px] cqa-py-4\">\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-3 cqa-flex-wrap\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <div class=\"cqa-text-[16px] cqa-leading-6 cqa-text-[#111827] cqa-font-medium\">{{ title }}</div>\n <mat-icon \n *ngIf=\"info\" \n class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px] cqa-cursor-help cqa-flex-shrink-0\"\n [matTooltip]=\"info\"\n matTooltipPosition=\"above\"\n style=\"color: #64748B;\">\n info\n </mat-icon>\n </div>\n <!-- Chart actions slot (segments) -->\n <ng-content select=\"[chart-actions]\"></ng-content>\n </div>\n <div *ngIf=\"subtitle\" class=\"cqa-text-[12px] cqa-leading-4 cqa-text-[#6A7282] cqa-mt-0.5\">{{ subtitle }}</div>\n </div>\n\n <!-- Chart/content area -->\n <div class=\"cqa-px-[13px]\">\n <div class=\"cqa-w-full cqa-chart-card-area\">\n <!-- Empty State -->\n <ng-container *ngIf=\"isEmpty\">\n <cqa-empty-state\n [title]=\"emptyStateConfig.title\"\n [description]=\"emptyStateConfig.description\"\n [imageUrl]=\"emptyStateConfig.imageUrl\"\n [actions]=\"emptyStateConfig.actions\"\n (actionClick)=\"$event.onClick?.()\"\n ></cqa-empty-state>\n </ng-container>\n \n <!-- Default Content -->\n <ng-container *ngIf=\"!isEmpty\">\n <div class=\"cqa-w-full cqa-h-full\">\n <ng-content></ng-content>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>", styles: [] }]
28
28
  }], propDecorators: { title: [{
29
29
  type: Input
30
30
  }], subtitle: [{
@@ -40,4 +40,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
40
40
  }], emptyStateConfig: [{
41
41
  type: Input
42
42
  }] } });
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Rhc2hib2FyZHMvY2hhcnQtY2FyZC9jaGFydC1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZGFzaGJvYXJkcy9jaGFydC1jYXJkL2NoYXJ0LWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7OztBQVNoRixNQUFNLE9BQU8sa0JBQWtCO0lBUC9CO1FBUVcsVUFBSyxHQUFXLE9BQU8sQ0FBQztRQUV4QixjQUFTLEdBQVcsRUFBRSxDQUFDO1FBSWhDLDBDQUEwQztRQUNqQyxZQUFPLEdBQVksS0FBSyxDQUFDO1FBQ2xDLGdDQUFnQztRQUN2QixxQkFBZ0IsR0FBcUI7WUFDNUMsS0FBSyxFQUFFLGVBQWU7WUFDdEIsV0FBVyxFQUFFLHdDQUF3QztZQUNyRCxRQUFRLEVBQUUsa0JBQWtCLENBQUMsZUFBZTtZQUM1QyxPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUM7S0FDSDs7K0dBaEJZLGtCQUFrQjttR0FBbEIsa0JBQWtCLG1RQ1gvQiwyMkRBK0NNOzJGRHBDTyxrQkFBa0I7a0JBUDlCLFNBQVM7K0JBQ0UsZ0JBQWdCLG1CQUdULHVCQUF1QixDQUFDLE1BQU0sUUFDekMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFOzhCQUdyQixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlQ29uZmlnIH0gZnJvbSAnLi4vLi4vZW1wdHktc3RhdGUvZW1wdHktc3RhdGUtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFTVBUWV9TVEFURV9JTUFHRVMgfSBmcm9tICcuLi8uLi9hc3NldHMvaW1hZ2VzL2ltYWdlLWFzc2V0cy5jb25zdGFudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtY2hhcnQtY2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGFydC1jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfVxufSlcbmV4cG9ydCBjbGFzcyBDaGFydENhcmRDb21wb25lbnQge1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nID0gJ0NoYXJ0JztcbiAgQElucHV0KCkgc3VidGl0bGU/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNhcmRDbGFzczogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGhlaWdodD86IHN0cmluZzsgLy8gQ3VzdG9tIGhlaWdodCBmb3IgdGhlIGNoYXJ0IGFyZWEgKGUuZy4sICczMDBweCcsICc0MDBweCcsICdhdXRvJylcbiAgLyoqIEluZm8gdG9vbHRpcCB0ZXh0IHRvIGRpc3BsYXkgb24gaG92ZXIgb2YgaW5mbyBpY29uICovXG4gIEBJbnB1dCgpIGluZm8/OiBzdHJpbmc7XG4gIC8qKiBTaG93IGVtcHR5IHN0YXRlIGluc3RlYWQgb2YgY29udGVudCAqL1xuICBASW5wdXQoKSBpc0VtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBFbXB0eSBzdGF0ZSBjb25maWd1cmF0aW9uICovXG4gIEBJbnB1dCgpIGVtcHR5U3RhdGVDb25maWc6IEVtcHR5U3RhdGVDb25maWcgPSB7XG4gICAgdGl0bGU6ICdObyBjaGFydCBkYXRhJyxcbiAgICBkZXNjcmlwdGlvbjogJ1RoZXJlIGlzIG5vIGRhdGEgYXZhaWxhYmxlIHRvIGRpc3BsYXkuJyxcbiAgICBpbWFnZVVybDogRU1QVFlfU1RBVEVfSU1BR0VTLkFOQUxZVElDU19DSEFSVCxcbiAgICBhY3Rpb25zOiBbXVxuICB9O1xufVxuXG5cbiIsIjxkaXYgY2xhc3M9XCJjcWEtdWktcm9vdFwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1ib3JkZXItZGVmYXVsdCBjcWEtcm91bmRlZC1bOHB4XSBjcWEtc2hhZG93LWNhcmQgY3FhLWgtZnVsbFwiXG4gICAgW25nQ2xhc3NdPVwiY2FyZENsYXNzXCI+XG4gICAgPCEtLSBIZWFkZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1weC1bMTZweF0gY3FhLXB5LTRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtc3RhcnQgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtZ2FwLTMgY3FhLWZsZXgtd3JhcFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEuNVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTZweF0gY3FhLWxlYWRpbmctNiBjcWEtdGV4dC1bIzExMTgyN10gY3FhLWZvbnQtbWVkaXVtXCI+e3sgdGl0bGUgfX08L2Rpdj5cbiAgICAgICAgICA8bWF0LWljb24gXG4gICAgICAgICAgICAqbmdJZj1cImluZm9cIiBcbiAgICAgICAgICAgIGNsYXNzPVwiIWNxYS13LTQgIWNxYS1oLTQgIWNxYS10ZXh0LVsxNnB4XSBjcWEtY3Vyc29yLWhlbHAgY3FhLWZsZXgtc2hyaW5rLTBcIlxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiaW5mb1wiXG4gICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiXG4gICAgICAgICAgICBzdHlsZT1cImNvbG9yOiAjNjQ3NDhCO1wiPlxuICAgICAgICAgICAgaW5mb19vdXRsaW5lXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gQ2hhcnQgYWN0aW9ucyBzbG90IChzZWdtZW50cykgLS0+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltjaGFydC1hY3Rpb25zXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cInN1YnRpdGxlXCIgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctNCBjcWEtdGV4dC1bIzZBNzI4Ml0gY3FhLW10LTAuNVwiPnt7IHN1YnRpdGxlIH19PC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENoYXJ0L2NvbnRlbnQgYXJlYSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLXB4LVsxM3B4XVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS13LWZ1bGwgY3FhLWNoYXJ0LWNhcmQtYXJlYVwiPlxuICAgICAgICA8IS0tIEVtcHR5IFN0YXRlIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFbXB0eVwiPlxuICAgICAgICAgIDxjcWEtZW1wdHktc3RhdGVcbiAgICAgICAgICAgIFt0aXRsZV09XCJlbXB0eVN0YXRlQ29uZmlnLnRpdGxlXCJcbiAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCJlbXB0eVN0YXRlQ29uZmlnLmRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgIFtpbWFnZVVybF09XCJlbXB0eVN0YXRlQ29uZmlnLmltYWdlVXJsXCJcbiAgICAgICAgICAgIFthY3Rpb25zXT1cImVtcHR5U3RhdGVDb25maWcuYWN0aW9uc1wiXG4gICAgICAgICAgICAoYWN0aW9uQ2xpY2spPVwiJGV2ZW50Lm9uQ2xpY2s/LigpXCJcbiAgICAgICAgICA+PC9jcWEtZW1wdHktc3RhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICBcbiAgICAgICAgPCEtLSBEZWZhdWx0IENvbnRlbnQgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNFbXB0eVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdy1mdWxsIGNxYS1oLWZ1bGxcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Rhc2hib2FyZHMvY2hhcnQtY2FyZC9jaGFydC1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZGFzaGJvYXJkcy9jaGFydC1jYXJkL2NoYXJ0LWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7OztBQVNoRixNQUFNLE9BQU8sa0JBQWtCO0lBUC9CO1FBUVcsVUFBSyxHQUFXLE9BQU8sQ0FBQztRQUV4QixjQUFTLEdBQVcsRUFBRSxDQUFDO1FBSWhDLDBDQUEwQztRQUNqQyxZQUFPLEdBQVksS0FBSyxDQUFDO1FBQ2xDLGdDQUFnQztRQUN2QixxQkFBZ0IsR0FBcUI7WUFDNUMsS0FBSyxFQUFFLGVBQWU7WUFDdEIsV0FBVyxFQUFFLHdDQUF3QztZQUNyRCxRQUFRLEVBQUUsa0JBQWtCLENBQUMsZUFBZTtZQUM1QyxPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUM7S0FDSDs7K0dBaEJZLGtCQUFrQjttR0FBbEIsa0JBQWtCLG1RQ1gvQixtMkRBK0NNOzJGRHBDTyxrQkFBa0I7a0JBUDlCLFNBQVM7K0JBQ0UsZ0JBQWdCLG1CQUdULHVCQUF1QixDQUFDLE1BQU0sUUFDekMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFOzhCQUdyQixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlQ29uZmlnIH0gZnJvbSAnLi4vLi4vZW1wdHktc3RhdGUvZW1wdHktc3RhdGUtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFTVBUWV9TVEFURV9JTUFHRVMgfSBmcm9tICcuLi8uLi9hc3NldHMvaW1hZ2VzL2ltYWdlLWFzc2V0cy5jb25zdGFudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtY2hhcnQtY2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGFydC1jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfVxufSlcbmV4cG9ydCBjbGFzcyBDaGFydENhcmRDb21wb25lbnQge1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nID0gJ0NoYXJ0JztcbiAgQElucHV0KCkgc3VidGl0bGU/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNhcmRDbGFzczogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGhlaWdodD86IHN0cmluZzsgLy8gQ3VzdG9tIGhlaWdodCBmb3IgdGhlIGNoYXJ0IGFyZWEgKGUuZy4sICczMDBweCcsICc0MDBweCcsICdhdXRvJylcbiAgLyoqIEluZm8gdG9vbHRpcCB0ZXh0IHRvIGRpc3BsYXkgb24gaG92ZXIgb2YgaW5mbyBpY29uICovXG4gIEBJbnB1dCgpIGluZm8/OiBzdHJpbmc7XG4gIC8qKiBTaG93IGVtcHR5IHN0YXRlIGluc3RlYWQgb2YgY29udGVudCAqL1xuICBASW5wdXQoKSBpc0VtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBFbXB0eSBzdGF0ZSBjb25maWd1cmF0aW9uICovXG4gIEBJbnB1dCgpIGVtcHR5U3RhdGVDb25maWc6IEVtcHR5U3RhdGVDb25maWcgPSB7XG4gICAgdGl0bGU6ICdObyBjaGFydCBkYXRhJyxcbiAgICBkZXNjcmlwdGlvbjogJ1RoZXJlIGlzIG5vIGRhdGEgYXZhaWxhYmxlIHRvIGRpc3BsYXkuJyxcbiAgICBpbWFnZVVybDogRU1QVFlfU1RBVEVfSU1BR0VTLkFOQUxZVElDU19DSEFSVCxcbiAgICBhY3Rpb25zOiBbXVxuICB9O1xufVxuXG5cbiIsIjxkaXYgY2xhc3M9XCJjcWEtdWktcm9vdFwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1ib3JkZXItZGVmYXVsdCBjcWEtcm91bmRlZC1bOHB4XSBjcWEtc2hhZG93LWNhcmQgY3FhLWgtZnVsbFwiXG4gICAgW25nQ2xhc3NdPVwiY2FyZENsYXNzXCI+XG4gICAgPCEtLSBIZWFkZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1weC1bMTZweF0gY3FhLXB5LTRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtc3RhcnQgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtZ2FwLTMgY3FhLWZsZXgtd3JhcFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEuNVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTZweF0gY3FhLWxlYWRpbmctNiBjcWEtdGV4dC1bIzExMTgyN10gY3FhLWZvbnQtbWVkaXVtXCI+e3sgdGl0bGUgfX08L2Rpdj5cbiAgICAgICAgICA8bWF0LWljb24gXG4gICAgICAgICAgICAqbmdJZj1cImluZm9cIiBcbiAgICAgICAgICAgIGNsYXNzPVwiIWNxYS13LTQgIWNxYS1oLTQgIWNxYS10ZXh0LVsxNnB4XSBjcWEtY3Vyc29yLWhlbHAgY3FhLWZsZXgtc2hyaW5rLTBcIlxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiaW5mb1wiXG4gICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiXG4gICAgICAgICAgICBzdHlsZT1cImNvbG9yOiAjNjQ3NDhCO1wiPlxuICAgICAgICAgICAgaW5mb1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIENoYXJ0IGFjdGlvbnMgc2xvdCAoc2VnbWVudHMpIC0tPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbY2hhcnQtYWN0aW9uc11cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJzdWJ0aXRsZVwiIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLTQgY3FhLXRleHQtWyM2QTcyODJdIGNxYS1tdC0wLjVcIj57eyBzdWJ0aXRsZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDaGFydC9jb250ZW50IGFyZWEgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1weC1bMTNweF1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdy1mdWxsIGNxYS1jaGFydC1jYXJkLWFyZWFcIj5cbiAgICAgICAgPCEtLSBFbXB0eSBTdGF0ZSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRW1wdHlcIj5cbiAgICAgICAgICA8Y3FhLWVtcHR5LXN0YXRlXG4gICAgICAgICAgICBbdGl0bGVdPVwiZW1wdHlTdGF0ZUNvbmZpZy50aXRsZVwiXG4gICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiZW1wdHlTdGF0ZUNvbmZpZy5kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICBbaW1hZ2VVcmxdPVwiZW1wdHlTdGF0ZUNvbmZpZy5pbWFnZVVybFwiXG4gICAgICAgICAgICBbYWN0aW9uc109XCJlbXB0eVN0YXRlQ29uZmlnLmFjdGlvbnNcIlxuICAgICAgICAgICAgKGFjdGlvbkNsaWNrKT1cIiRldmVudC5vbkNsaWNrPy4oKVwiXG4gICAgICAgICAgPjwvY3FhLWVtcHR5LXN0YXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgXG4gICAgICAgIDwhLS0gRGVmYXVsdCBDb250ZW50IC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzRW1wdHlcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXctZnVsbCBjcWEtaC1mdWxsXCI+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+Il19
@@ -43,72 +43,31 @@ export class TailwindOverlayContainer extends OverlayContainer {
43
43
  // Also check immediately in case overlays already exist
44
44
  requestAnimationFrame(() => this.updateContainerClass());
45
45
  }
46
- isElementClosing(element) {
47
- // Check if element is closing (very low opacity AND shrinking dimensions)
48
- const style = window.getComputedStyle(element);
49
- const opacity = parseFloat(style.opacity);
50
- const rect = element.getBoundingClientRect();
51
- // If opacity is very low (< 0.1) AND dimensions are very small, it's likely closing
52
- // This helps filter out closing animations while allowing opening animations
53
- return opacity < 0.1 && (rect.width < 10 || rect.height < 10);
54
- }
55
46
  updateContainerClass() {
56
47
  if (!this._containerElement)
57
48
  return;
58
49
  // Count library overlays (dialogs, select panels, datepicker panels)
59
- // Count them if they exist in DOM (even during opening animations)
60
- // But exclude them if they're clearly closing (very low opacity + small size)
61
- // Library dialogs - count if not closing
62
- const libraryDialogs = Array.from(this._containerElement.querySelectorAll('.cqa-dialog-panel'));
63
- const activeLibraryDialogs = libraryDialogs.filter(dialog => {
64
- const style = window.getComputedStyle(dialog);
65
- return style.display !== 'none' && !this.isElementClosing(dialog);
66
- }).length;
67
- // Library backdrops - check if showing (backdrops can be transparent but still present)
68
- const libraryBackdrops = Array.from(this._containerElement.querySelectorAll('.cqa-dialog-backdrop'));
69
- const activeLibraryBackdrops = libraryBackdrops.filter(backdrop => {
70
- const style = window.getComputedStyle(backdrop);
71
- // Backdrop is active if it's showing (has the showing class) and not display: none
72
- return style.display !== 'none' && backdrop.classList.contains('cdk-overlay-backdrop-showing');
73
- }).length;
74
- // Select panels - count if not closing
75
- const selectPanels = Array.from(this._containerElement.querySelectorAll('.ctc-select-panel'));
76
- const activeSelectPanels = selectPanels.filter(panel => {
77
- const style = window.getComputedStyle(panel);
78
- return style.display !== 'none' && !this.isElementClosing(panel);
79
- }).length;
80
- // Date panels - count if not closing
81
- const datePanels = Array.from(this._containerElement.querySelectorAll('.ctc-date-range-panel'));
82
- const activeDatePanels = datePanels.filter(panel => {
83
- const style = window.getComputedStyle(panel);
84
- return style.display !== 'none' && !this.isElementClosing(panel);
85
- }).length;
86
- const totalLibraryOverlays = activeLibraryDialogs + activeLibraryBackdrops + activeSelectPanels + activeDatePanels;
50
+ // These are library-specific classes that indicate library components
51
+ // Only count overlays that are actually in the DOM (CDK removes them when closed)
52
+ const libraryDialogs = this._containerElement.querySelectorAll('.cqa-dialog-panel').length;
53
+ const libraryBackdrops = this._containerElement.querySelectorAll('.cqa-dialog-backdrop').length;
54
+ const librarySelectPanels = this._containerElement.querySelectorAll('.ctc-select-panel').length;
55
+ const libraryDatePanels = this._containerElement.querySelectorAll('.ctc-date-range-panel').length;
56
+ const totalLibraryOverlays = libraryDialogs + libraryBackdrops + librarySelectPanels + libraryDatePanels;
87
57
  // Check for portal Material dialogs (those without .cqa-dialog-panel class)
88
58
  // Portal dialogs use .mat-dialog-container but NOT .cqa-dialog-panel
89
- // Only count visible portal dialogs to avoid false positives
90
- const portalDialogs = Array.from(this._containerElement.querySelectorAll('.mat-dialog-container:not(.cqa-dialog-panel)'));
91
- const visiblePortalDialogs = portalDialogs.filter(dialog => {
92
- const style = window.getComputedStyle(dialog);
93
- const rect = dialog.getBoundingClientRect();
94
- return style.display !== 'none' &&
95
- parseFloat(style.opacity) > 0.1 &&
96
- rect.width > 0 &&
97
- rect.height > 0;
98
- }).length;
99
- // Decision logic: Add cqa-ui-root when library overlays are present (even during opening animations)
100
- // Remove it only when library overlays are clearly gone or closing
101
- // This ensures library overlays get styles immediately, while portal dialogs don't get affected
59
+ const portalDialogs = this._containerElement.querySelectorAll('.mat-dialog-container:not(.cqa-dialog-panel)').length;
60
+ // Decision logic: Only add cqa-ui-root when library overlays are present
61
+ // This ensures portal Material dialogs don't get affected by library CSS
102
62
  if (totalLibraryOverlays > 0) {
103
63
  // Library overlays exist - add the class (they need Tailwind styles scoped to .cqa-ui-root)
104
64
  this._containerElement.classList.add('cqa-ui-root');
105
65
  }
106
66
  else {
107
- // No active library overlays exist - remove the class
108
- // This handles:
67
+ // No library overlays exist - remove the class
68
+ // This handles both cases:
109
69
  // 1. Only portal dialogs exist (should not have cqa-ui-root)
110
- // 2. Library overlays are closing/closed (should not have cqa-ui-root)
111
- // 3. No overlays exist at all (clean state)
70
+ // 2. No overlays exist at all (clean state)
112
71
  this._containerElement.classList.remove('cqa-ui-root');
113
72
  }
114
73
  // Note: If both library overlays and portal dialogs exist simultaneously,
@@ -123,4 +82,4 @@ TailwindOverlayContainer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0
123
82
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TailwindOverlayContainer, decorators: [{
124
83
  type: Injectable
125
84
  }] });
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHctb3ZlcmxheS1jb250YWluZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3V0aWxzL3R3LW92ZXJsYXktY29udGFpbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBRXhEOzs7Ozs7O0dBT0c7QUFFSCxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsZ0JBQWdCO0lBRDlEOztRQUVVLGtCQUFhLEdBQWtCLElBQUksQ0FBQztLQXdIN0M7SUF0SG9CLGdCQUFnQjtRQUNqQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN6QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQix5RkFBeUY7WUFDekYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFdkQsNkVBQTZFO1lBQzdFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQjtZQUFFLE9BQU87UUFFcEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUU7WUFDekMsc0VBQXNFO1lBQ3RFLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxJQUFJLEVBQUU7Z0JBQy9CLG9CQUFvQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUMxQztZQUNELElBQUksQ0FBQyxhQUFhLEdBQUcscUJBQXFCLENBQUMsR0FBRyxFQUFFO2dCQUM5QyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFDTCxD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QWEsQ0FBQyxDQUFDO1NBQ3JEO2FBQU07WUFDTCxzREFBc0Q7WUFDdEQsZ0JBQWdCO1lBQ2hCLDZEQUE2RDtZQUM3RCx1RUFBdUU7WUFDdkUsNENBQTRDO1lBQzVDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3hEO1FBRUQsMEVBQTBFO1FBQzFFLDRFQUE0RTtRQUM1RSwrRUFBK0U7UUFDL0UsNEVBQTRFO1FBQzVFLG9EQUFvRDtJQUN0RCxDQUFDOztxSEF4SFUsd0JBQXdCO3lIQUF4Qix3QkFBd0I7MkZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE92ZXJsYXlDb250YWluZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5cbi8qKlxuICogRW5zdXJlcyBBbmd1bGFyIENESyBvdmVybGF5IGNvbnRlbnQgKGUuZy4sIE1hdFNlbGVjdCwgRGF0ZXBpY2tlciBwYW5lbHMsIGxpYnJhcnkgZGlhbG9ncylcbiAqIGlzIG5lc3RlZCB1bmRlciBhbiBlbGVtZW50IHdpdGggY2xhc3M9XCJjcWEtdWktcm9vdFwiIHNvIFRhaWx3aW5kIHV0aWxpdGllc1xuICogY29uZmlndXJlZCB3aXRoIGltcG9ydGFudDogJy5jcWEtdWktcm9vdCcgYXJlIGFwcGxpZWQgaW5zaWRlIG92ZXJsYXlzLlxuICogXG4gKiBJTVBPUlRBTlQ6IE9ubHkgc2V0cyBjbGFzcz1cImNxYS11aS1yb290XCIgd2hlbiBsaWJyYXJ5IG92ZXJsYXlzIGFyZSBwcmVzZW50LlxuICogUG9ydGFsIE1hdGVyaWFsIGRpYWxvZ3Mgc2hvdWxkIE5PVCBoYXZlIHRoaXMgY2xhc3MgdG8gcHJldmVudCBsaWJyYXJ5IENTUyBmcm9tIGFmZmVjdGluZyB0aGVtLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGFpbHdpbmRPdmVybGF5Q29udGFpbmVyIGV4dGVuZHMgT3ZlcmxheUNvbnRhaW5lciB7XG4gIHByaXZhdGUgdXBkYXRlVGltZW91dDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIF9jcmVhdGVDb250YWluZXIoKTogdm9pZCB7XG4gICAgc3VwZXIuX2NyZWF0ZUNvbnRhaW5lcigpO1xuICAgIGlmICh0aGlzLl9jb250YWluZXJFbGVtZW50KSB7XG4gICAgICAvLyBEb24ndCBzZXQgY2xhc3MgaW5pdGlhbGx5IC0gd2UnbGwgc2V0IGl0IGR5bmFtaWNhbGx5IHdoZW4gbGlicmFyeSBvdmVybGF5cyBhcmUgY3JlYXRlZFxuICAgICAgdGhpcy5fY29udGFpbmVyRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdjcWEtdWktcm9vdCcpO1xuICAgICAgXG4gICAgICAvLyBVc2UgTXV0YXRpb25PYnNlcnZlciB0byBkZXRlY3Qgd2hlbiBsaWJyYXJ5IG92ZXJsYXlzIGFyZSBjcmVhdGVkL2Rlc3Ryb3llZFxuICAgICAgdGhpcy5vYnNlcnZlTGlicmFyeU92ZXJsYXlzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvYnNlcnZlTGlicmFyeU92ZXJsYXlzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fY29udGFpbmVyRWxlbWVudCkgcmV0dXJuO1xuXG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4gICAgICAvLyBEZWJvdW5jZSB1cGRhdGVzIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBjaGVja3MgZHVyaW5nIHJhcGlkIERPTSBjaGFuZ2VzXG4gICAgICBpZiAodGhpcy51cGRhdGVUaW1lb3V0ICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMudXBkYXRlVGltZW91dCk7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVRpbWVvdXQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbnRhaW5lckNsYXNzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlVGltZW91dCA9IG51bGw7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIG9ic2VydmVyLm9ic2VydmUodGhpcy5fY29udGFpbmVyRWxlbWVudCwge1xuICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIEFsc28gY2hlY2sgaW1tZWRpYXRlbHkgaW4gY2FzZSBvdmVybGF5cyBhbHJlYWR5IGV4aXN0XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMudXBkYXRlQ29udGFpbmVyQ2xhc3MoKSk7XG4gIH1cblxuICBwcml2YXRlIGlzRWxlbWVudENsb3NpbmcoZWxlbWVudDogRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIC8vIENoZWNrIGlmIGVsZW1lbnQgaXMgY2xvc2luZyAodmVyeSBsb3cgb3BhY2l0eSBBTkQgc2hyaW5raW5nIGRpbWVuc2lvbnMpXG4gICAgY29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgICBjb25zdCBvcGFjaXR5ID0gcGFyc2VGbG9hdChzdHlsZS5vcGFjaXR5KTtcbiAgICBjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBcbiAgICAvLyBJZiBvcGFjaXR5IGlzIHZlcnkgbG93ICg8IDAuMSkgQU5EIGRpbWVuc2lvbnMgYXJlIHZlcnkgc21hbGwsIGl0J3MgbGlrZWx5IGNsb3NpbmdcbiAgICAvLyBUaGlzIGhlbHBzIGZpbHRlciBvdXQgY2xvc2luZyBhbmltYXRpb25zIHdoaWxlIGFsbG93aW5nIG9wZW5pbmcgYW5pbWF0aW9uc1xuICAgIHJldHVybiBvcGFjaXR5IDwgMC4xICYmIChyZWN0LndpZHRoIDwgMTAgfHwgcmVjdC5oZWlnaHQgPCAxMCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbnRhaW5lckNsYXNzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fY29udGFpbmVyRWxlbWVudCkgcmV0dXJuO1xuXG4gICAgLy8gQ291bnQgbGlicmFyeSBvdmVybGF5cyAoZGlhbG9ncywgc2VsZWN0IHBhbmVscywgZGF0ZXBpY2tlciBwYW5lbHMpXG4gICAgLy8gQ291bnQgdGhlbSBpZiB0aGV5IGV4aXN0IGluIERPTSAoZXZlbiBkdXJpbmcgb3BlbmluZyBhbmltYXRpb25zKVxuICAgIC8vIEJ1dCBleGNsdWRlIHRoZW0gaWYgdGhleSdyZSBjbGVhcmx5IGNsb3NpbmcgKHZlcnkgbG93IG9wYWNpdHkgKyBzbWFsbCBzaXplKVxuICAgIFxuICAgIC8vIExpYnJhcnkgZGlhbG9ncyAtIGNvdW50IGlmIG5vdCBjbG9zaW5nXG4gICAgY29uc3QgbGlicmFyeURpYWxvZ3MgPSBBcnJheS5mcm9tKHRoaXMuX2NvbnRhaW5lckVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmNxYS1kaWFsb2ctcGFuZWwnKSk7XG4gICAgY29uc3QgYWN0aXZlTGlicmFyeURpYWxvZ3MgPSBsaWJyYXJ5RGlhbG9ncy5maWx0ZXIoZGlhbG9nID0+IHtcbiAgICAgIGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZGlhbG9nKTtcbiAgICAgIHJldHVybiBzdHlsZS5kaXNwbGF5ICE9PSAnbm9uZScgJiYgIXRoaXMuaXNFbGVtZW50Q2xvc2luZyhkaWFsb2cpO1xuICAgIH0pLmxlbmd0aDtcbiAgICBcbiAgICAvLyBMaWJyYXJ5IGJhY2tkcm9wcyAtIGNoZWNrIGlmIHNob3dpbmcgKGJhY2tkcm9wcyBjYW4gYmUgdHJhbnNwYXJlbnQgYnV0IHN0aWxsIHByZXNlbnQpXG4gICAgY29uc3QgbGlicmFyeUJhY2tkcm9wcyA9IEFycmF5LmZyb20odGhpcy5fY29udGFpbmVyRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY3FhLWRpYWxvZy1iYWNrZHJvcCcpKTtcbiAgICBjb25zdCBhY3RpdmVMaWJyYXJ5QmFja2Ryb3BzID0gbGlicmFyeUJhY2tkcm9wcy5maWx0ZXIoYmFja2Ryb3AgPT4ge1xuICAgICAgY29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShiYWNrZHJvcCk7XG4gICAgICAvLyBCYWNrZHJvcCBpcyBhY3RpdmUgaWYgaXQncyBzaG93aW5nIChoYXMgdGhlIHNob3dpbmcgY2xhc3MpIGFuZCBub3QgZGlzcGxheTogbm9uZVxuICAgICAgcmV0dXJuIHN0eWxlLmRpc3BsYXkgIT09ICdub25lJyAmJiBiYWNrZHJvcC5jbGFzc0xpc3QuY29udGFpbnMoJ2Nkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmcnKTtcbiAgICB9KS5sZW5ndGg7XG4gICAgXG4gICAgLy8gU2VsZWN0IHBhbmVscyAtIGNvdW50IGlmIG5vdCBjbG9zaW5nXG4gICAgY29uc3Qgc2VsZWN0UGFuZWxzID0gQXJyYXkuZnJvbSh0aGlzLl9jb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5jdGMtc2VsZWN0LXBhbmVsJykpO1xuICAgIGNvbnN0IGFjdGl2ZVNlbGVjdFBhbmVscyA9IHNlbGVjdFBhbmVscy5maWx0ZXIocGFuZWwgPT4ge1xuICAgICAgY29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYW5lbCk7XG4gICAgICByZXR1cm4gc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnICYmICF0aGlzLmlzRWxlbWVudENsb3NpbmcocGFuZWwpO1xuICAgIH0pLmxlbmd0aDtcbiAgICBcbiAgICAvLyBEYXRlIHBhbmVscyAtIGNvdW50IGlmIG5vdCBjbG9zaW5nXG4gICAgY29uc3QgZGF0ZVBhbmVscyA9IEFycmF5LmZyb20odGhpcy5fY29udGFpbmVyRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY3RjLWRhdGUtcmFuZ2UtcGFuZWwnKSk7XG4gICAgY29uc3QgYWN0aXZlRGF0ZVBhbmVscyA9IGRhdGVQYW5lbHMuZmlsdGVyKHBhbmVsID0+IHtcbiAgICAgIGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUocGFuZWwpO1xuICAgICAgcmV0dXJuIHN0eWxlLmRpc3BsYXkgIT09ICdub25lJyAmJiAhdGhpcy5pc0VsZW1lbnRDbG9zaW5nKHBhbmVsKTtcbiAgICB9KS5sZW5ndGg7XG4gICAgXG4gICAgY29uc3QgdG90YWxMaWJyYXJ5T3ZlcmxheXMgPSBhY3RpdmVMaWJyYXJ5RGlhbG9ncyArIGFjdGl2ZUxpYnJhcnlCYWNrZHJvcHMgKyBhY3RpdmVTZWxlY3RQYW5lbHMgKyBhY3RpdmVEYXRlUGFuZWxzO1xuICAgIFxuICAgIC8vIENoZWNrIGZvciBwb3J0YWwgTWF0ZXJpYWwgZGlhbG9ncyAodGhvc2Ugd2l0aG91dCAuY3FhLWRpYWxvZy1wYW5lbCBjbGFzcylcbiAgICAvLyBQb3J0YWwgZGlhbG9ncyB1c2UgLm1hdC1kaWFsb2ctY29udGFpbmVyIGJ1dCBOT1QgLmNxYS1kaWFsb2ctcGFuZWxcbiAgICAvLyBPbmx5IGNvdW50IHZpc2libGUgcG9ydGFsIGRpYWxvZ3MgdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmVzXG4gICAgY29uc3QgcG9ydGFsRGlhbG9ncyA9IEFycmF5LmZyb20odGhpcy5fY29udGFpbmVyRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubWF0LWRpYWxvZy1jb250YWluZXI6bm90KC5jcWEtZGlhbG9nLXBhbmVsKScpKTtcbiAgICBjb25zdCB2aXNpYmxlUG9ydGFsRGlhbG9ncyA9IHBvcnRhbERpYWxvZ3MuZmlsdGVyKGRpYWxvZyA9PiB7XG4gICAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRpYWxvZyk7XG4gICAgICBjb25zdCByZWN0ID0gZGlhbG9nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgcmV0dXJuIHN0eWxlLmRpc3BsYXkgIT09ICdub25lJyAmJiBcbiAgICAgICAgICAgICBwYXJzZUZsb2F0KHN0eWxlLm9wYWNpdHkpID4gMC4xICYmIFxuICAgICAgICAgICAgIHJlY3Qud2lkdGggPiAwICYmIFxuICAgICAgICAgICAgIHJlY3QuaGVpZ2h0ID4gMDtcbiAgICB9KS5sZW5ndGg7XG5cbiAgICAvLyBEZWNpc2lvbiBsb2dpYzogQWRkIGNxYS11aS1yb290IHdoZW4gbGlicmFyeSBvdmVybGF5cyBhcmUgcHJlc2VudCAoZXZlbiBkdXJpbmcgb3BlbmluZyBhbmltYXRpb25zKVxuICAgIC8vIFJlbW92ZSBpdCBvbmx5IHdoZW4gbGlicmFyeSBvdmVybGF5cyBhcmUgY2xlYXJseSBnb25lIG9yIGNsb3NpbmdcbiAgICAvLyBUaGlzIGVuc3VyZXMgbGlicmFyeSBvdmVybGF5cyBnZXQgc3R5bGVzIGltbWVkaWF0ZWx5LCB3aGlsZSBwb3J0YWwgZGlhbG9ncyBkb24ndCBnZXQgYWZmZWN0ZWRcbiAgICBcbiAgICBpZiAodG90YWxMaWJyYXJ5T3ZlcmxheXMgPiAwKSB7XG4gICAgICAvLyBMaWJyYXJ5IG92ZXJsYXlzIGV4aXN0IC0gYWRkIHRoZSBjbGFzcyAodGhleSBuZWVkIFRhaWx3aW5kIHN0eWxlcyBzY29wZWQgdG8gLmNxYS11aS1yb290KVxuICAgICAgdGhpcy5fY29udGFpbmVyRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdjcWEtdWktcm9vdCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBhY3RpdmUgbGlicmFyeSBvdmVybGF5cyBleGlzdCAtIHJlbW92ZSB0aGUgY2xhc3NcbiAgICAgIC8vIFRoaXMgaGFuZGxlczpcbiAgICAgIC8vIDEuIE9ubHkgcG9ydGFsIGRpYWxvZ3MgZXhpc3QgKHNob3VsZCBub3QgaGF2ZSBjcWEtdWktcm9vdClcbiAgICAgIC8vIDIuIExpYnJhcnkgb3ZlcmxheXMgYXJlIGNsb3NpbmcvY2xvc2VkIChzaG91bGQgbm90IGhhdmUgY3FhLXVpLXJvb3QpXG4gICAgICAvLyAzLiBObyBvdmVybGF5cyBleGlzdCBhdCBhbGwgKGNsZWFuIHN0YXRlKVxuICAgICAgdGhpcy5fY29udGFpbmVyRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdjcWEtdWktcm9vdCcpO1xuICAgIH1cbiAgICBcbiAgICAvLyBOb3RlOiBJZiBib3RoIGxpYnJhcnkgb3ZlcmxheXMgYW5kIHBvcnRhbCBkaWFsb2dzIGV4aXN0IHNpbXVsdGFuZW91c2x5LFxuICAgIC8vIHRoZSBjbGFzcyB3aWxsIGJlIHByZXNlbnQgYmVjYXVzZSBsaWJyYXJ5IG92ZXJsYXlzIG5lZWQgaXQuIEluIHRoaXMgY2FzZSxcbiAgICAvLyBwb3J0YWwgZGlhbG9ncyBtYXkgYmUgYWZmZWN0ZWQgYnkgbGlicmFyeSBDU1MuIFRvIGF2b2lkIHRoaXMsIGVuc3VyZSBsaWJyYXJ5XG4gICAgLy8gb3ZlcmxheXMgYXJlIGNsb3NlZCBiZWZvcmUgb3BlbmluZyBwb3J0YWwgZGlhbG9ncywgb3IgdXNlIENTUyBzcGVjaWZpY2l0eVxuICAgIC8vIHRvIG92ZXJyaWRlIGxpYnJhcnkgc3R5bGVzIHdpdGhpbiBwb3J0YWwgZGlhbG9ncy5cbiAgfVxufVxuXG5cbiJdfQ==
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHctb3ZlcmxheS1jb250YWluZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3V0aWxzL3R3LW92ZXJsYXktY29udGFpbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBRXhEOzs7Ozs7O0dBT0c7QUFFSCxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsZ0JBQWdCO0lBRDlEOztRQUVVLGtCQUFhLEdBQWtCLElBQUksQ0FBQztLQXlFN0M7SUF2RW9CLGdCQUFnQjtRQUNqQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN6QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQix5RkFBeUY7WUFDekYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFdkQsNkVBQTZFO1lBQzdFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQjtZQUFFLE9BQU87UUFFcEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUU7WUFDekMsc0VBQXNFO1lBQ3RFLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxJQUFJLEVBQUU7Z0JBQy9CLG9CQUFvQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUMxQztZQUNELElBQUksQ0FBQyxhQUFhLEdBQUcscUJBQXFCLENBQUMsR0FBRyxFQUFFO2dCQUM5QyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3ZDLFNBQVMsRUFBRSxJQUFJO1lBQ2YsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFDLENBQUM7UUFFSCx3REFBd0Q7UUFDeEQscUJBQXFCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCO1lBQUUsT0FBTztRQUVwQyxxRUFBcUU7UUFDckUsc0VBQXNFO1FBQ3RFLGtGQUFrRjtRQUNsRixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDM0YsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDaEcsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDaEcsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFbEcsTUFBTSxvQkFBb0IsR0FBRyxjQUFjLEdBQUcsZ0JBQWdCLEdBQUcsbUJBQW1CLEdBQUcsaUJBQWlCLENBQUM7UUFFekcsNEVBQTRFO1FBQzVFLHFFQUFxRTtRQUNyRSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsOENBQThDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFckgseUVBQXlFO1FBQ3pFLHlFQUF5RTtRQUV6RSxJQUFJLG9CQUFvQixHQUFHLENBQUMsRUFBRTtZQUM1Qiw0RkFBNEY7WUFDNUYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDckQ7YUFBTTtZQUNMLCtDQUErQztZQUMvQywyQkFBMkI7WUFDM0IsNkRBQTZEO1lBQzdELDRDQUE0QztZQUM1QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUN4RDtRQUVELDBFQUEwRTtRQUMxRSw0RUFBNEU7UUFDNUUsK0VBQStFO1FBQy9FLDRFQUE0RTtRQUM1RSxvREFBb0Q7SUFDdEQsQ0FBQzs7cUhBekVVLHdCQUF3Qjt5SEFBeEIsd0JBQXdCOzJGQUF4Qix3QkFBd0I7a0JBRHBDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPdmVybGF5Q29udGFpbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuXG4vKipcbiAqIEVuc3VyZXMgQW5ndWxhciBDREsgb3ZlcmxheSBjb250ZW50IChlLmcuLCBNYXRTZWxlY3QsIERhdGVwaWNrZXIgcGFuZWxzLCBsaWJyYXJ5IGRpYWxvZ3MpXG4gKiBpcyBuZXN0ZWQgdW5kZXIgYW4gZWxlbWVudCB3aXRoIGNsYXNzPVwiY3FhLXVpLXJvb3RcIiBzbyBUYWlsd2luZCB1dGlsaXRpZXNcbiAqIGNvbmZpZ3VyZWQgd2l0aCBpbXBvcnRhbnQ6ICcuY3FhLXVpLXJvb3QnIGFyZSBhcHBsaWVkIGluc2lkZSBvdmVybGF5cy5cbiAqIFxuICogSU1QT1JUQU5UOiBPbmx5IHNldHMgY2xhc3M9XCJjcWEtdWktcm9vdFwiIHdoZW4gbGlicmFyeSBvdmVybGF5cyBhcmUgcHJlc2VudC5cbiAqIFBvcnRhbCBNYXRlcmlhbCBkaWFsb2dzIHNob3VsZCBOT1QgaGF2ZSB0aGlzIGNsYXNzIHRvIHByZXZlbnQgbGlicmFyeSBDU1MgZnJvbSBhZmZlY3RpbmcgdGhlbS5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRhaWx3aW5kT3ZlcmxheUNvbnRhaW5lciBleHRlbmRzIE92ZXJsYXlDb250YWluZXIge1xuICBwcml2YXRlIHVwZGF0ZVRpbWVvdXQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBfY3JlYXRlQ29udGFpbmVyKCk6IHZvaWQge1xuICAgIHN1cGVyLl9jcmVhdGVDb250YWluZXIoKTtcbiAgICBpZiAodGhpcy5fY29udGFpbmVyRWxlbWVudCkge1xuICAgICAgLy8gRG9uJ3Qgc2V0IGNsYXNzIGluaXRpYWxseSAtIHdlJ2xsIHNldCBpdCBkeW5hbWljYWxseSB3aGVuIGxpYnJhcnkgb3ZlcmxheXMgYXJlIGNyZWF0ZWRcbiAgICAgIHRoaXMuX2NvbnRhaW5lckVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnY3FhLXVpLXJvb3QnKTtcbiAgICAgIFxuICAgICAgLy8gVXNlIE11dGF0aW9uT2JzZXJ2ZXIgdG8gZGV0ZWN0IHdoZW4gbGlicmFyeSBvdmVybGF5cyBhcmUgY3JlYXRlZC9kZXN0cm95ZWRcbiAgICAgIHRoaXMub2JzZXJ2ZUxpYnJhcnlPdmVybGF5cygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb2JzZXJ2ZUxpYnJhcnlPdmVybGF5cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2NvbnRhaW5lckVsZW1lbnQpIHJldHVybjtcblxuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgLy8gRGVib3VuY2UgdXBkYXRlcyB0byBhdm9pZCBleGNlc3NpdmUgY2hlY2tzIGR1cmluZyByYXBpZCBET00gY2hhbmdlc1xuICAgICAgaWYgKHRoaXMudXBkYXRlVGltZW91dCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnVwZGF0ZVRpbWVvdXQpO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVUaW1lb3V0ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVDb250YWluZXJDbGFzcygpO1xuICAgICAgICB0aGlzLnVwZGF0ZVRpbWVvdXQgPSBudWxsO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBvYnNlcnZlci5vYnNlcnZlKHRoaXMuX2NvbnRhaW5lckVsZW1lbnQsIHtcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBBbHNvIGNoZWNrIGltbWVkaWF0ZWx5IGluIGNhc2Ugb3ZlcmxheXMgYWxyZWFkeSBleGlzdFxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLnVwZGF0ZUNvbnRhaW5lckNsYXNzKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb250YWluZXJDbGFzcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2NvbnRhaW5lckVsZW1lbnQpIHJldHVybjtcblxuICAgIC8vIENvdW50IGxpYnJhcnkgb3ZlcmxheXMgKGRpYWxvZ3MsIHNlbGVjdCBwYW5lbHMsIGRhdGVwaWNrZXIgcGFuZWxzKVxuICAgIC8vIFRoZXNlIGFyZSBsaWJyYXJ5LXNwZWNpZmljIGNsYXNzZXMgdGhhdCBpbmRpY2F0ZSBsaWJyYXJ5IGNvbXBvbmVudHNcbiAgICAvLyBPbmx5IGNvdW50IG92ZXJsYXlzIHRoYXQgYXJlIGFjdHVhbGx5IGluIHRoZSBET00gKENESyByZW1vdmVzIHRoZW0gd2hlbiBjbG9zZWQpXG4gICAgY29uc3QgbGlicmFyeURpYWxvZ3MgPSB0aGlzLl9jb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5jcWEtZGlhbG9nLXBhbmVsJykubGVuZ3RoO1xuICAgIGNvbnN0IGxpYnJhcnlCYWNrZHJvcHMgPSB0aGlzLl9jb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5jcWEtZGlhbG9nLWJhY2tkcm9wJykubGVuZ3RoO1xuICAgIGNvbnN0IGxpYnJhcnlTZWxlY3RQYW5lbHMgPSB0aGlzLl9jb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5jdGMtc2VsZWN0LXBhbmVsJykubGVuZ3RoO1xuICAgIGNvbnN0IGxpYnJhcnlEYXRlUGFuZWxzID0gdGhpcy5fY29udGFpbmVyRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY3RjLWRhdGUtcmFuZ2UtcGFuZWwnKS5sZW5ndGg7XG4gICAgXG4gICAgY29uc3QgdG90YWxMaWJyYXJ5T3ZlcmxheXMgPSBsaWJyYXJ5RGlhbG9ncyArIGxpYnJhcnlCYWNrZHJvcHMgKyBsaWJyYXJ5U2VsZWN0UGFuZWxzICsgbGlicmFyeURhdGVQYW5lbHM7XG4gICAgXG4gICAgLy8gQ2hlY2sgZm9yIHBvcnRhbCBNYXRlcmlhbCBkaWFsb2dzICh0aG9zZSB3aXRob3V0IC5jcWEtZGlhbG9nLXBhbmVsIGNsYXNzKVxuICAgIC8vIFBvcnRhbCBkaWFsb2dzIHVzZSAubWF0LWRpYWxvZy1jb250YWluZXIgYnV0IE5PVCAuY3FhLWRpYWxvZy1wYW5lbFxuICAgIGNvbnN0IHBvcnRhbERpYWxvZ3MgPSB0aGlzLl9jb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5tYXQtZGlhbG9nLWNvbnRhaW5lcjpub3QoLmNxYS1kaWFsb2ctcGFuZWwpJykubGVuZ3RoO1xuXG4gICAgLy8gRGVjaXNpb24gbG9naWM6IE9ubHkgYWRkIGNxYS11aS1yb290IHdoZW4gbGlicmFyeSBvdmVybGF5cyBhcmUgcHJlc2VudFxuICAgIC8vIFRoaXMgZW5zdXJlcyBwb3J0YWwgTWF0ZXJpYWwgZGlhbG9ncyBkb24ndCBnZXQgYWZmZWN0ZWQgYnkgbGlicmFyeSBDU1NcbiAgICBcbiAgICBpZiAodG90YWxMaWJyYXJ5T3ZlcmxheXMgPiAwKSB7XG4gICAgICAvLyBMaWJyYXJ5IG92ZXJsYXlzIGV4aXN0IC0gYWRkIHRoZSBjbGFzcyAodGhleSBuZWVkIFRhaWx3aW5kIHN0eWxlcyBzY29wZWQgdG8gLmNxYS11aS1yb290KVxuICAgICAgdGhpcy5fY29udGFpbmVyRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdjcWEtdWktcm9vdCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBsaWJyYXJ5IG92ZXJsYXlzIGV4aXN0IC0gcmVtb3ZlIHRoZSBjbGFzc1xuICAgICAgLy8gVGhpcyBoYW5kbGVzIGJvdGggY2FzZXM6XG4gICAgICAvLyAxLiBPbmx5IHBvcnRhbCBkaWFsb2dzIGV4aXN0IChzaG91bGQgbm90IGhhdmUgY3FhLXVpLXJvb3QpXG4gICAgICAvLyAyLiBObyBvdmVybGF5cyBleGlzdCBhdCBhbGwgKGNsZWFuIHN0YXRlKVxuICAgICAgdGhpcy5fY29udGFpbmVyRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdjcWEtdWktcm9vdCcpO1xuICAgIH1cbiAgICBcbiAgICAvLyBOb3RlOiBJZiBib3RoIGxpYnJhcnkgb3ZlcmxheXMgYW5kIHBvcnRhbCBkaWFsb2dzIGV4aXN0IHNpbXVsdGFuZW91c2x5LFxuICAgIC8vIHRoZSBjbGFzcyB3aWxsIGJlIHByZXNlbnQgYmVjYXVzZSBsaWJyYXJ5IG92ZXJsYXlzIG5lZWQgaXQuIEluIHRoaXMgY2FzZSxcbiAgICAvLyBwb3J0YWwgZGlhbG9ncyBtYXkgYmUgYWZmZWN0ZWQgYnkgbGlicmFyeSBDU1MuIFRvIGF2b2lkIHRoaXMsIGVuc3VyZSBsaWJyYXJ5XG4gICAgLy8gb3ZlcmxheXMgYXJlIGNsb3NlZCBiZWZvcmUgb3BlbmluZyBwb3J0YWwgZGlhbG9ncywgb3IgdXNlIENTUyBzcGVjaWZpY2l0eVxuICAgIC8vIHRvIG92ZXJyaWRlIGxpYnJhcnkgc3R5bGVzIHdpdGhpbiBwb3J0YWwgZGlhbG9ncy5cbiAgfVxufVxuXG5cbiJdfQ==
@@ -2522,10 +2522,10 @@ class ChartCardComponent {
2522
2522
  }
2523
2523
  }
2524
2524
  ChartCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ChartCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2525
- ChartCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ChartCardComponent, selector: "cqa-chart-card", inputs: { title: "title", subtitle: "subtitle", cardClass: "cardClass", height: "height", info: "info", isEmpty: "isEmpty", emptyStateConfig: "emptyStateConfig" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-ui-root\">\n <div\n class=\"cqa-border cqa-border-solid cqa-border-border-default cqa-rounded-[8px] cqa-shadow-card cqa-h-full\"\n [ngClass]=\"cardClass\">\n <!-- Header -->\n <div class=\"cqa-px-[16px] cqa-py-4\">\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-3 cqa-flex-wrap\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <div class=\"cqa-text-[16px] cqa-leading-6 cqa-text-[#111827] cqa-font-medium\">{{ title }}</div>\n <mat-icon \n *ngIf=\"info\" \n class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px] cqa-cursor-help cqa-flex-shrink-0\"\n [matTooltip]=\"info\"\n matTooltipPosition=\"above\"\n style=\"color: #64748B;\">\n info_outline\n </mat-icon>\n </div>\n <!-- Chart actions slot (segments) -->\n <ng-content select=\"[chart-actions]\"></ng-content>\n </div>\n <div *ngIf=\"subtitle\" class=\"cqa-text-[12px] cqa-leading-4 cqa-text-[#6A7282] cqa-mt-0.5\">{{ subtitle }}</div>\n </div>\n\n <!-- Chart/content area -->\n <div class=\"cqa-px-[13px]\">\n <div class=\"cqa-w-full cqa-chart-card-area\">\n <!-- Empty State -->\n <ng-container *ngIf=\"isEmpty\">\n <cqa-empty-state\n [title]=\"emptyStateConfig.title\"\n [description]=\"emptyStateConfig.description\"\n [imageUrl]=\"emptyStateConfig.imageUrl\"\n [actions]=\"emptyStateConfig.actions\"\n (actionClick)=\"$event.onClick?.()\"\n ></cqa-empty-state>\n </ng-container>\n \n <!-- Default Content -->\n <ng-container *ngIf=\"!isEmpty\">\n <div class=\"cqa-w-full cqa-h-full\">\n <ng-content></ng-content>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: EmptyStateComponent, selector: "cqa-empty-state", inputs: ["preset", "imageUrl", "title", "description", "actions"], outputs: ["actionClick"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4$2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2525
+ ChartCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ChartCardComponent, selector: "cqa-chart-card", inputs: { title: "title", subtitle: "subtitle", cardClass: "cardClass", height: "height", info: "info", isEmpty: "isEmpty", emptyStateConfig: "emptyStateConfig" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-ui-root\">\n <div\n class=\"cqa-border cqa-border-solid cqa-border-border-default cqa-rounded-[8px] cqa-shadow-card cqa-h-full\"\n [ngClass]=\"cardClass\">\n <!-- Header -->\n <div class=\"cqa-px-[16px] cqa-py-4\">\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-3 cqa-flex-wrap\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <div class=\"cqa-text-[16px] cqa-leading-6 cqa-text-[#111827] cqa-font-medium\">{{ title }}</div>\n <mat-icon \n *ngIf=\"info\" \n class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px] cqa-cursor-help cqa-flex-shrink-0\"\n [matTooltip]=\"info\"\n matTooltipPosition=\"above\"\n style=\"color: #64748B;\">\n info\n </mat-icon>\n </div>\n <!-- Chart actions slot (segments) -->\n <ng-content select=\"[chart-actions]\"></ng-content>\n </div>\n <div *ngIf=\"subtitle\" class=\"cqa-text-[12px] cqa-leading-4 cqa-text-[#6A7282] cqa-mt-0.5\">{{ subtitle }}</div>\n </div>\n\n <!-- Chart/content area -->\n <div class=\"cqa-px-[13px]\">\n <div class=\"cqa-w-full cqa-chart-card-area\">\n <!-- Empty State -->\n <ng-container *ngIf=\"isEmpty\">\n <cqa-empty-state\n [title]=\"emptyStateConfig.title\"\n [description]=\"emptyStateConfig.description\"\n [imageUrl]=\"emptyStateConfig.imageUrl\"\n [actions]=\"emptyStateConfig.actions\"\n (actionClick)=\"$event.onClick?.()\"\n ></cqa-empty-state>\n </ng-container>\n \n <!-- Default Content -->\n <ng-container *ngIf=\"!isEmpty\">\n <div class=\"cqa-w-full cqa-h-full\">\n <ng-content></ng-content>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: EmptyStateComponent, selector: "cqa-empty-state", inputs: ["preset", "imageUrl", "title", "description", "actions"], outputs: ["actionClick"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4$2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2526
2526
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ChartCardComponent, decorators: [{
2527
2527
  type: Component,
2528
- args: [{ selector: 'cqa-chart-card', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-ui-root\">\n <div\n class=\"cqa-border cqa-border-solid cqa-border-border-default cqa-rounded-[8px] cqa-shadow-card cqa-h-full\"\n [ngClass]=\"cardClass\">\n <!-- Header -->\n <div class=\"cqa-px-[16px] cqa-py-4\">\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-3 cqa-flex-wrap\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <div class=\"cqa-text-[16px] cqa-leading-6 cqa-text-[#111827] cqa-font-medium\">{{ title }}</div>\n <mat-icon \n *ngIf=\"info\" \n class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px] cqa-cursor-help cqa-flex-shrink-0\"\n [matTooltip]=\"info\"\n matTooltipPosition=\"above\"\n style=\"color: #64748B;\">\n info_outline\n </mat-icon>\n </div>\n <!-- Chart actions slot (segments) -->\n <ng-content select=\"[chart-actions]\"></ng-content>\n </div>\n <div *ngIf=\"subtitle\" class=\"cqa-text-[12px] cqa-leading-4 cqa-text-[#6A7282] cqa-mt-0.5\">{{ subtitle }}</div>\n </div>\n\n <!-- Chart/content area -->\n <div class=\"cqa-px-[13px]\">\n <div class=\"cqa-w-full cqa-chart-card-area\">\n <!-- Empty State -->\n <ng-container *ngIf=\"isEmpty\">\n <cqa-empty-state\n [title]=\"emptyStateConfig.title\"\n [description]=\"emptyStateConfig.description\"\n [imageUrl]=\"emptyStateConfig.imageUrl\"\n [actions]=\"emptyStateConfig.actions\"\n (actionClick)=\"$event.onClick?.()\"\n ></cqa-empty-state>\n </ng-container>\n \n <!-- Default Content -->\n <ng-container *ngIf=\"!isEmpty\">\n <div class=\"cqa-w-full cqa-h-full\">\n <ng-content></ng-content>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>", styles: [] }]
2528
+ args: [{ selector: 'cqa-chart-card', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-ui-root\">\n <div\n class=\"cqa-border cqa-border-solid cqa-border-border-default cqa-rounded-[8px] cqa-shadow-card cqa-h-full\"\n [ngClass]=\"cardClass\">\n <!-- Header -->\n <div class=\"cqa-px-[16px] cqa-py-4\">\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-3 cqa-flex-wrap\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <div class=\"cqa-text-[16px] cqa-leading-6 cqa-text-[#111827] cqa-font-medium\">{{ title }}</div>\n <mat-icon \n *ngIf=\"info\" \n class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px] cqa-cursor-help cqa-flex-shrink-0\"\n [matTooltip]=\"info\"\n matTooltipPosition=\"above\"\n style=\"color: #64748B;\">\n info\n </mat-icon>\n </div>\n <!-- Chart actions slot (segments) -->\n <ng-content select=\"[chart-actions]\"></ng-content>\n </div>\n <div *ngIf=\"subtitle\" class=\"cqa-text-[12px] cqa-leading-4 cqa-text-[#6A7282] cqa-mt-0.5\">{{ subtitle }}</div>\n </div>\n\n <!-- Chart/content area -->\n <div class=\"cqa-px-[13px]\">\n <div class=\"cqa-w-full cqa-chart-card-area\">\n <!-- Empty State -->\n <ng-container *ngIf=\"isEmpty\">\n <cqa-empty-state\n [title]=\"emptyStateConfig.title\"\n [description]=\"emptyStateConfig.description\"\n [imageUrl]=\"emptyStateConfig.imageUrl\"\n [actions]=\"emptyStateConfig.actions\"\n (actionClick)=\"$event.onClick?.()\"\n ></cqa-empty-state>\n </ng-container>\n \n <!-- Default Content -->\n <ng-container *ngIf=\"!isEmpty\">\n <div class=\"cqa-w-full cqa-h-full\">\n <ng-content></ng-content>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>", styles: [] }]
2529
2529
  }], propDecorators: { title: [{
2530
2530
  type: Input
2531
2531
  }], subtitle: [{
@@ -4255,72 +4255,31 @@ class TailwindOverlayContainer extends OverlayContainer {
4255
4255
  // Also check immediately in case overlays already exist
4256
4256
  requestAnimationFrame(() => this.updateContainerClass());
4257
4257
  }
4258
- isElementClosing(element) {
4259
- // Check if element is closing (very low opacity AND shrinking dimensions)
4260
- const style = window.getComputedStyle(element);
4261
- const opacity = parseFloat(style.opacity);
4262
- const rect = element.getBoundingClientRect();
4263
- // If opacity is very low (< 0.1) AND dimensions are very small, it's likely closing
4264
- // This helps filter out closing animations while allowing opening animations
4265
- return opacity < 0.1 && (rect.width < 10 || rect.height < 10);
4266
- }
4267
4258
  updateContainerClass() {
4268
4259
  if (!this._containerElement)
4269
4260
  return;
4270
4261
  // Count library overlays (dialogs, select panels, datepicker panels)
4271
- // Count them if they exist in DOM (even during opening animations)
4272
- // But exclude them if they're clearly closing (very low opacity + small size)
4273
- // Library dialogs - count if not closing
4274
- const libraryDialogs = Array.from(this._containerElement.querySelectorAll('.cqa-dialog-panel'));
4275
- const activeLibraryDialogs = libraryDialogs.filter(dialog => {
4276
- const style = window.getComputedStyle(dialog);
4277
- return style.display !== 'none' && !this.isElementClosing(dialog);
4278
- }).length;
4279
- // Library backdrops - check if showing (backdrops can be transparent but still present)
4280
- const libraryBackdrops = Array.from(this._containerElement.querySelectorAll('.cqa-dialog-backdrop'));
4281
- const activeLibraryBackdrops = libraryBackdrops.filter(backdrop => {
4282
- const style = window.getComputedStyle(backdrop);
4283
- // Backdrop is active if it's showing (has the showing class) and not display: none
4284
- return style.display !== 'none' && backdrop.classList.contains('cdk-overlay-backdrop-showing');
4285
- }).length;
4286
- // Select panels - count if not closing
4287
- const selectPanels = Array.from(this._containerElement.querySelectorAll('.ctc-select-panel'));
4288
- const activeSelectPanels = selectPanels.filter(panel => {
4289
- const style = window.getComputedStyle(panel);
4290
- return style.display !== 'none' && !this.isElementClosing(panel);
4291
- }).length;
4292
- // Date panels - count if not closing
4293
- const datePanels = Array.from(this._containerElement.querySelectorAll('.ctc-date-range-panel'));
4294
- const activeDatePanels = datePanels.filter(panel => {
4295
- const style = window.getComputedStyle(panel);
4296
- return style.display !== 'none' && !this.isElementClosing(panel);
4297
- }).length;
4298
- const totalLibraryOverlays = activeLibraryDialogs + activeLibraryBackdrops + activeSelectPanels + activeDatePanels;
4262
+ // These are library-specific classes that indicate library components
4263
+ // Only count overlays that are actually in the DOM (CDK removes them when closed)
4264
+ const libraryDialogs = this._containerElement.querySelectorAll('.cqa-dialog-panel').length;
4265
+ const libraryBackdrops = this._containerElement.querySelectorAll('.cqa-dialog-backdrop').length;
4266
+ const librarySelectPanels = this._containerElement.querySelectorAll('.ctc-select-panel').length;
4267
+ const libraryDatePanels = this._containerElement.querySelectorAll('.ctc-date-range-panel').length;
4268
+ const totalLibraryOverlays = libraryDialogs + libraryBackdrops + librarySelectPanels + libraryDatePanels;
4299
4269
  // Check for portal Material dialogs (those without .cqa-dialog-panel class)
4300
4270
  // Portal dialogs use .mat-dialog-container but NOT .cqa-dialog-panel
4301
- // Only count visible portal dialogs to avoid false positives
4302
- const portalDialogs = Array.from(this._containerElement.querySelectorAll('.mat-dialog-container:not(.cqa-dialog-panel)'));
4303
- const visiblePortalDialogs = portalDialogs.filter(dialog => {
4304
- const style = window.getComputedStyle(dialog);
4305
- const rect = dialog.getBoundingClientRect();
4306
- return style.display !== 'none' &&
4307
- parseFloat(style.opacity) > 0.1 &&
4308
- rect.width > 0 &&
4309
- rect.height > 0;
4310
- }).length;
4311
- // Decision logic: Add cqa-ui-root when library overlays are present (even during opening animations)
4312
- // Remove it only when library overlays are clearly gone or closing
4313
- // This ensures library overlays get styles immediately, while portal dialogs don't get affected
4271
+ const portalDialogs = this._containerElement.querySelectorAll('.mat-dialog-container:not(.cqa-dialog-panel)').length;
4272
+ // Decision logic: Only add cqa-ui-root when library overlays are present
4273
+ // This ensures portal Material dialogs don't get affected by library CSS
4314
4274
  if (totalLibraryOverlays > 0) {
4315
4275
  // Library overlays exist - add the class (they need Tailwind styles scoped to .cqa-ui-root)
4316
4276
  this._containerElement.classList.add('cqa-ui-root');
4317
4277
  }
4318
4278
  else {
4319
- // No active library overlays exist - remove the class
4320
- // This handles:
4279
+ // No library overlays exist - remove the class
4280
+ // This handles both cases:
4321
4281
  // 1. Only portal dialogs exist (should not have cqa-ui-root)
4322
- // 2. Library overlays are closing/closed (should not have cqa-ui-root)
4323
- // 3. No overlays exist at all (clean state)
4282
+ // 2. No overlays exist at all (clean state)
4324
4283
  this._containerElement.classList.remove('cqa-ui-root');
4325
4284
  }
4326
4285
  // Note: If both library overlays and portal dialogs exist simultaneously,