keevo-components 1.8.443 → 1.8.444

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.
@@ -108,11 +108,11 @@ export class KvContentViewerComponent {
108
108
  }
109
109
  }
110
110
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvContentViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
111
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvContentViewerComponent, selector: "kv-content-viewer", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: false, transformFunction: null }, arquivo: { classPropertyName: "arquivo", publicName: "arquivo", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, blob: { classPropertyName: "blob", publicName: "blob", isSignal: true, isRequired: false, transformFunction: null }, ekpContent: { classPropertyName: "ekpContent", publicName: "ekpContent", isSignal: true, isRequired: false, transformFunction: null }, extencaoDocumento: { classPropertyName: "extencaoDocumento", publicName: "extencaoDocumento", isSignal: false, isRequired: false, transformFunction: null }, totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: false, isRequired: false, transformFunction: null }, visualizadorDocumentos: { classPropertyName: "visualizadorDocumentos", publicName: "visualizadorDocumentos", isSignal: false, isRequired: false, transformFunction: null }, cardTemplate: { classPropertyName: "cardTemplate", publicName: "cardTemplate", isSignal: false, isRequired: false, transformFunction: null }, contentTemplate: { classPropertyName: "contentTemplate", publicName: "contentTemplate", isSignal: false, isRequired: false, transformFunction: null }, noDocumentSelectedTemplate: { classPropertyName: "noDocumentSelectedTemplate", publicName: "noDocumentSelectedTemplate", isSignal: false, isRequired: false, transformFunction: null }, noDocumentListTemplate: { classPropertyName: "noDocumentListTemplate", publicName: "noDocumentListTemplate", isSignal: false, isRequired: false, transformFunction: null }, indvisualizado: { classPropertyName: "indvisualizado", publicName: "indvisualizado", isSignal: false, isRequired: false, transformFunction: null }, btnTelaCheia: { classPropertyName: "btnTelaCheia", publicName: "btnTelaCheia", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { onScrollHandler: "onScrollHandler", onSelectFile: "onSelectFile" }, ngImport: i0, template: "<div class=\"flex flex-column md:flex-row gap-2 mt-3 custom-max-height\" style=\"height: 100%;\">\r\n <!-- Lista de documentos -->\r\n <div\r\n class=\"card-perfil overflow-x-hidden col-12 md:col-4 lg:col-3\"\r\n (scroll)=\"scrollHandler($event)\"\r\n [ngClass]=\"{\r\n 'overflow-y-scroll': dataSource().length > 0,\r\n 'overflow-y-hidden': dataSource().length === 0\r\n }\"\r\n style=\"position: relative; height: 100%; min-height: 15rem;\"\r\n >\r\n <div *ngIf=\"dataSource().length > 0; else emptyDocumentList\" class=\"col-12\">\r\n <!-- Lista de cards -->\r\n <div\r\n *ngFor=\"let option of dataSource(); trackBy: trackByFn\"\r\n class=\"card-normal outline-none border-round-xl w-full p-2 m-1 grid p-fluid flex flex-row flex-nowrap align-items-center justify-content-center cursor-pointer\"\r\n (click)=\"visualizarPreview(option)\"\r\n [ngClass]=\"{\r\n 'card-naoVisualizado': !isVisualizado(option),\r\n 'card-selected': option === arquivoPreview(),\r\n 'card-normal': option !== arquivoPreview(),\r\n }\"\r\n >\r\n <div class=\"flex flex-grow-1 ml-2 flex-column gap-1 m-0 p-0 overflow-hidden text-overflow-ellipsis \" style=\"max-width: 100%;\">\r\n <ng-container *ngIf=\"cardTemplate; else defaultTemplate\">\r\n <ng-container \r\n *ngTemplateOutlet=\"cardTemplate; context: { $implicit: option }\"\r\n ></ng-container>\r\n </ng-container>\r\n </div>\r\n <ng-template #defaultTemplate>\r\n <div class=\"card-common-style default-card\">\r\n <h1 class=\"font-bold text-base p-0 m-0\">Bem-vindo!</h1>\r\n <p class=\"text-sm mt-2\">\r\n Kv-file-preview aguardando um template...\r\n </p>\r\n <p class=\"font-bold text-sm p-0 m-0\">Data: {{ todayDate() }}</p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <ng-template #emptyDocumentList>\r\n @if(!noDocumentListTemplate) {\r\n <div class=\"text-center text-gray-600 mt-4 m-3\" style=\"height: 100%\">\r\n <div class=\" flex align-items-center gap-1\">\r\n <span class=\"material-symbols-outlined\"> inbox </span>\r\n <p>Nenhum documento dispon\u00EDvel.</p>\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"text-center mt-4 m-3\" style=\"height: 100%\">\r\n <ng-container *ngTemplateOutlet=\"noDocumentListTemplate\"></ng-container>\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n <!-- Contador de documentos - Fixo na parte inferior -->\r\n <div\r\n class=\"sticky-counter flex flex-row flex-1 px-2 justify-content-center p-2\"\r\n style=\"position: sticky; bottom: 0; background-color: white\"\r\n >\r\n <span>{{ totalItensCarregado() }} de {{ totalRecords }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Visualizador -->\r\n <div id=\"fullscreenDiv\" class=\"card-perfil col-12 md:col-8 lg:col-9\" style=\"position: relative; height: 100%;\">\r\n @if(btnTelaCheia)\r\n {\r\n <div class=\"grid\">\r\n <div class=\"col\"></div>\r\n <span id=\"fullscreenBtn\" (click)=\"alternarTelaCheia()\" class=\"material-symbols-outlined p-2 text-xl cursor-pointer\">\r\n open_in_full\r\n </span>\r\n </div>\r\n }\r\n @if(visualizadorDocumentos) {\r\n <ng-container *ngIf=\"arquivo(); else noDocumentSelected\">\r\n @if(isLoading) {\r\n <ngx-loading\r\n [show]=\"isLoading\"\r\n [config]=\"{ backdropBorderRadius: '3px', fullScreenBackdrop: false }\"\r\n ></ngx-loading>\r\n }\r\n <kv-file-viewer-novo\r\n *ngIf=\"extencaoDocumento !== 'ekp'\"\r\n [arquivo]=\"arquivo()!\"\r\n [type]=\"type()!\"\r\n [blob]=\"blob()!\"\r\n [width]=\"'100%'\" \r\n [height]=\"'100%'\"\r\n class=\"file-viewer\"\r\n >\r\n </kv-file-viewer-novo>\r\n \r\n <div\r\n id=\"html-content\"\r\n [innerHTML]=\"ekpContent()\"\r\n *ngIf=\"extencaoDocumento === 'ekp'\"\r\n class=\"ekp-content\"\r\n ></div>\r\n </ng-container>\r\n } @else {\r\n <ng-container *ngIf=\"arquivoPreview(); else noDocumentSelected\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n contentTemplate;\r\n context: { $implicit: arquivoPreview() }\r\n \"\r\n ></ng-container>\r\n </ng-container>\r\n }\r\n <ng-template #noDocumentSelected>\r\n @if(!noDocumentSelectedTemplate) {\r\n <div\r\n class=\"no-document-message flex flex-column align-items-center justify-content-center\"\r\n style=\"height: 100%\"\r\n >\r\n <p class=\"text-center text-gray-500\">\r\n Selecione um arquivo para visualiza\u00E7\u00E3o\r\n </p>\r\n <img\r\n [src]=\"\r\n 'https://work-assets.keevo.com.br/img/Digital_personal_files-pana_3.png'\r\n \"\r\n style=\"max-height: 50%; margin-top: 2rem;\"\r\n alt=\"\"\r\n />\r\n </div>\r\n } @else {\r\n <ng-container\r\n *ngTemplateOutlet=\"noDocumentSelectedTemplate\"\r\n ></ng-container>\r\n }\r\n </ng-template>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.farol-statuspublicacao{margin-right:.5rem;width:.35rem;border-radius:1rem;-webkit-border-radius:1rem;-moz-border-radius:1rem;-ms-border-radius:1rem;-o-border-radius:1rem}:host ::ng-deep .p-sidebar{border-radius:5px;position:absolute;height:var(--sidebar-height)}:host ::ng-deep .p-sidebar .p-sidebar-content{overflow:auto;border:1px solid #e5e7eb;border-radius:5px;margin-top:1rem}.card-perfil{border:1.5px solid #CBD5E1;background:#fff;border-radius:6px;max-height:100%}:host ::ng-deep .p-fieldset .p-fieldset-content{padding-bottom:0}:host ::ng-deep .p-sidebar .p-sidebar-close{display:none}.card-normal{border:1.5px solid #CBD5E1}.card-naoVisualizado{border-left:4px solid #e6671f!important}.parent-container{height:100%;display:flex;flex-direction:column}.file-viewer{margin:auto}.ekp-content{min-height:20rem;padding:1rem;overflow-y:auto;border-radius:5px}ngx-loading{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1000}.card{transition:all .3s ease;border:1px solid transparent}.card-normal:hover{border:1px solid #a9a9a9;box-shadow:0 4px 8px #0000001a}.card-selected{background-color:#f0f0f0;border:1px solid #c0c0c0;box-shadow:0 6px 12px #00000026;transform:scale(1.02)}.loading-spinner{display:flex;align-items:center;justify-content:center;height:100%;font-size:1.5rem;color:#666}#html-content{width:100%;height:100%;overflow-y:auto}:host ::ng-deep .list-card-button .kv-button{width:22px;height:22px}:host ::ng-deep .list-card-button .kv-button .material-symbols-outlined.only-icon.icon-normal[_ngcontent-ng-c4083184952]{font-size:1rem}.download-icon{font-size:20px;cursor:pointer;transition:transform .3s ease,color .3s ease}.download-icon:hover{color:#0f6cbd;transform:scale(1.2)}\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"] }, { kind: "component", type: i2.KvFileViewerNovoComponent, selector: "kv-file-viewer-novo", inputs: ["arquivo", "type", "blob", "width", "height"] }, { kind: "component", type: i3.NgxLoadingComponent, selector: "ngx-loading", inputs: ["show", "config", "template"] }] }); }
111
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvContentViewerComponent, selector: "kv-content-viewer", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: false, transformFunction: null }, arquivo: { classPropertyName: "arquivo", publicName: "arquivo", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, blob: { classPropertyName: "blob", publicName: "blob", isSignal: true, isRequired: false, transformFunction: null }, ekpContent: { classPropertyName: "ekpContent", publicName: "ekpContent", isSignal: true, isRequired: false, transformFunction: null }, extencaoDocumento: { classPropertyName: "extencaoDocumento", publicName: "extencaoDocumento", isSignal: false, isRequired: false, transformFunction: null }, totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: false, isRequired: false, transformFunction: null }, visualizadorDocumentos: { classPropertyName: "visualizadorDocumentos", publicName: "visualizadorDocumentos", isSignal: false, isRequired: false, transformFunction: null }, cardTemplate: { classPropertyName: "cardTemplate", publicName: "cardTemplate", isSignal: false, isRequired: false, transformFunction: null }, contentTemplate: { classPropertyName: "contentTemplate", publicName: "contentTemplate", isSignal: false, isRequired: false, transformFunction: null }, noDocumentSelectedTemplate: { classPropertyName: "noDocumentSelectedTemplate", publicName: "noDocumentSelectedTemplate", isSignal: false, isRequired: false, transformFunction: null }, noDocumentListTemplate: { classPropertyName: "noDocumentListTemplate", publicName: "noDocumentListTemplate", isSignal: false, isRequired: false, transformFunction: null }, indvisualizado: { classPropertyName: "indvisualizado", publicName: "indvisualizado", isSignal: false, isRequired: false, transformFunction: null }, btnTelaCheia: { classPropertyName: "btnTelaCheia", publicName: "btnTelaCheia", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { onScrollHandler: "onScrollHandler", onSelectFile: "onSelectFile" }, ngImport: i0, template: "<div class=\"flex flex-column md:flex-row gap-2 mt-3 custom-max-height\" style=\"height: 100%;\">\r\n <!-- Lista de documentos -->\r\n <div\r\n class=\"card-perfil overflow-x-hidden col-12 md:col-4 lg:col-3\"\r\n (scroll)=\"scrollHandler($event)\"\r\n [ngClass]=\"{\r\n 'overflow-y-scroll': dataSource().length > 0,\r\n 'overflow-y-hidden': dataSource().length === 0\r\n }\"\r\n style=\"position: relative; height: 100%; min-height: 15rem;\"\r\n >\r\n <div *ngIf=\"dataSource().length > 0; else emptyDocumentList\" class=\"col-12\">\r\n <!-- Lista de cards -->\r\n <div\r\n *ngFor=\"let option of dataSource(); trackBy: trackByFn\"\r\n class=\"card-normal outline-none border-round-xl w-full p-2 m-1 grid p-fluid flex flex-row flex-nowrap align-items-center justify-content-center cursor-pointer\"\r\n (click)=\"visualizarPreview(option)\"\r\n [ngClass]=\"{\r\n 'card-naoVisualizado': !isVisualizado(option),\r\n 'card-selected': option === arquivoPreview(),\r\n 'card-normal': option !== arquivoPreview(),\r\n }\"\r\n >\r\n <div class=\"flex flex-grow-1 ml-2 flex-column gap-1 m-0 p-0 overflow-hidden text-overflow-ellipsis \" style=\"max-width: 100%;\">\r\n <ng-container *ngIf=\"cardTemplate; else defaultTemplate\">\r\n <ng-container \r\n *ngTemplateOutlet=\"cardTemplate; context: { $implicit: option }\"\r\n ></ng-container>\r\n </ng-container>\r\n </div>\r\n <ng-template #defaultTemplate>\r\n <div class=\"card-common-style default-card\">\r\n <h1 class=\"font-bold text-base p-0 m-0\">Bem-vindo!</h1>\r\n <p class=\"text-sm mt-2\">\r\n Kv-file-preview aguardando um template...\r\n </p>\r\n <p class=\"font-bold text-sm p-0 m-0\">Data: {{ todayDate() }}</p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <ng-template #emptyDocumentList>\r\n @if(!noDocumentListTemplate) {\r\n <div class=\"text-center text-gray-600 mt-4 m-3\" style=\"height: 100%\">\r\n <div class=\" flex align-items-center gap-1\">\r\n <span class=\"material-symbols-outlined\"> inbox </span>\r\n <p>Nenhum documento dispon\u00EDvel.</p>\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"text-center mt-4 m-3\" style=\"height: 100%\">\r\n <ng-container *ngTemplateOutlet=\"noDocumentListTemplate\"></ng-container>\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n <!-- Contador de documentos - Fixo na parte inferior -->\r\n <div\r\n class=\"sticky-counter flex flex-row flex-1 px-2 justify-content-center p-2\"\r\n style=\"position: sticky; bottom: -10px; background-color: white\"\r\n >\r\n <span>{{ totalItensCarregado() }} de {{ totalRecords }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Visualizador -->\r\n<div id=\"fullscreenDiv\" class=\"card-perfil col-12 md:col-8 lg:col-9\" style=\"position: relative; height: 100%; overflow-y: auto;\">\r\n @if(btnTelaCheia)\r\n {\r\n <div class=\"grid\">\r\n <div class=\"col\"></div>\r\n <span id=\"fullscreenBtn\" (click)=\"alternarTelaCheia()\" class=\"material-symbols-outlined p-2 text-xl cursor-pointer\">\r\n open_in_full\r\n </span>\r\n </div>\r\n }\r\n @if(visualizadorDocumentos) {\r\n <ng-container *ngIf=\"arquivo(); else noDocumentSelected\">\r\n @if(isLoading) {\r\n <ngx-loading\r\n [show]=\"isLoading\"\r\n [config]=\"{ backdropBorderRadius: '3px', fullScreenBackdrop: false }\"\r\n ></ngx-loading>\r\n }\r\n <kv-file-viewer-novo\r\n *ngIf=\"extencaoDocumento !== 'ekp'\"\r\n [arquivo]=\"arquivo()!\"\r\n [type]=\"type()!\"\r\n [blob]=\"blob()!\"\r\n [width]=\"'100%'\" \r\n [height]=\"'100%'\"\r\n class=\"file-viewer\"\r\n style=\"max-height: 100%;\"\r\n >\r\n </kv-file-viewer-novo>\r\n\r\n <div\r\n id=\"html-content\"\r\n [innerHTML]=\"ekpContent()\"\r\n *ngIf=\"extencaoDocumento === 'ekp'\"\r\n class=\"ekp-content\"\r\n style=\"overflow-y: auto; max-height: 100%;\"\r\n ></div>\r\n </ng-container>\r\n } @else {\r\n <ng-container *ngIf=\"arquivoPreview(); else noDocumentSelected\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n contentTemplate;\r\n context: { $implicit: arquivoPreview() }\r\n \"\r\n style=\"overflow-y: auto; max-height: 100%;\"\r\n ></ng-container>\r\n </ng-container>\r\n }\r\n <ng-template #noDocumentSelected>\r\n @if(!noDocumentSelectedTemplate) {\r\n <div\r\n class=\"no-document-message flex flex-column align-items-center justify-content-center\"\r\n style=\"height: 100%; overflow-y: auto;\"\r\n >\r\n <p class=\"text-center text-gray-500\">\r\n Selecione um arquivo para visualiza\u00E7\u00E3o\r\n </p>\r\n <img\r\n [src]=\"\r\n 'https://work-assets.keevo.com.br/img/Digital_personal_files-pana_3.png'\r\n \"\r\n style=\"max-height: 50%; margin-top: 2rem;\"\r\n alt=\"\"\r\n />\r\n </div>\r\n } @else {\r\n <ng-container\r\n *ngTemplateOutlet=\"noDocumentSelectedTemplate\"\r\n ></ng-container>\r\n }\r\n </ng-template>\r\n</div>\r\n\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.farol-statuspublicacao{margin-right:.5rem;width:.35rem;border-radius:1rem;-webkit-border-radius:1rem;-moz-border-radius:1rem;-ms-border-radius:1rem;-o-border-radius:1rem}:host ::ng-deep .p-sidebar{border-radius:5px;position:absolute;height:var(--sidebar-height)}:host ::ng-deep .p-sidebar .p-sidebar-content{overflow:auto;border:1px solid #e5e7eb;border-radius:5px;margin-top:1rem}.card-perfil{border:1.5px solid #CBD5E1;background:#fff;border-radius:6px;max-height:100%}:host ::ng-deep .p-fieldset .p-fieldset-content{padding-bottom:0}:host ::ng-deep .p-sidebar .p-sidebar-close{display:none}.card-normal{border:1.5px solid #CBD5E1}.card-naoVisualizado{border-left:4px solid #e6671f!important}.parent-container{height:100%;display:flex;flex-direction:column}.file-viewer{margin:auto}.ekp-content{min-height:20rem;padding:1rem;overflow-y:auto;border-radius:5px}ngx-loading{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1000}.card{transition:all .3s ease;border:1px solid transparent}.card-normal:hover{border:1px solid #a9a9a9;box-shadow:0 4px 8px #0000001a}.card-selected{background-color:#f0f0f0;border:1px solid #c0c0c0;box-shadow:0 6px 12px #00000026;transform:scale(1.02)}.loading-spinner{display:flex;align-items:center;justify-content:center;height:100%;font-size:1.5rem;color:#666}#html-content{width:100%;height:100%;overflow-y:auto}:host ::ng-deep .list-card-button .kv-button{width:22px;height:22px}:host ::ng-deep .list-card-button .kv-button .material-symbols-outlined.only-icon.icon-normal[_ngcontent-ng-c4083184952]{font-size:1rem}.download-icon{font-size:20px;cursor:pointer;transition:transform .3s ease,color .3s ease}.download-icon:hover{color:#0f6cbd;transform:scale(1.2)}\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"] }, { kind: "component", type: i2.KvFileViewerNovoComponent, selector: "kv-file-viewer-novo", inputs: ["arquivo", "type", "blob", "width", "height"] }, { kind: "component", type: i3.NgxLoadingComponent, selector: "ngx-loading", inputs: ["show", "config", "template"] }] }); }
112
112
  }
113
113
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvContentViewerComponent, decorators: [{
114
114
  type: Component,
115
- args: [{ selector: 'kv-content-viewer', template: "<div class=\"flex flex-column md:flex-row gap-2 mt-3 custom-max-height\" style=\"height: 100%;\">\r\n <!-- Lista de documentos -->\r\n <div\r\n class=\"card-perfil overflow-x-hidden col-12 md:col-4 lg:col-3\"\r\n (scroll)=\"scrollHandler($event)\"\r\n [ngClass]=\"{\r\n 'overflow-y-scroll': dataSource().length > 0,\r\n 'overflow-y-hidden': dataSource().length === 0\r\n }\"\r\n style=\"position: relative; height: 100%; min-height: 15rem;\"\r\n >\r\n <div *ngIf=\"dataSource().length > 0; else emptyDocumentList\" class=\"col-12\">\r\n <!-- Lista de cards -->\r\n <div\r\n *ngFor=\"let option of dataSource(); trackBy: trackByFn\"\r\n class=\"card-normal outline-none border-round-xl w-full p-2 m-1 grid p-fluid flex flex-row flex-nowrap align-items-center justify-content-center cursor-pointer\"\r\n (click)=\"visualizarPreview(option)\"\r\n [ngClass]=\"{\r\n 'card-naoVisualizado': !isVisualizado(option),\r\n 'card-selected': option === arquivoPreview(),\r\n 'card-normal': option !== arquivoPreview(),\r\n }\"\r\n >\r\n <div class=\"flex flex-grow-1 ml-2 flex-column gap-1 m-0 p-0 overflow-hidden text-overflow-ellipsis \" style=\"max-width: 100%;\">\r\n <ng-container *ngIf=\"cardTemplate; else defaultTemplate\">\r\n <ng-container \r\n *ngTemplateOutlet=\"cardTemplate; context: { $implicit: option }\"\r\n ></ng-container>\r\n </ng-container>\r\n </div>\r\n <ng-template #defaultTemplate>\r\n <div class=\"card-common-style default-card\">\r\n <h1 class=\"font-bold text-base p-0 m-0\">Bem-vindo!</h1>\r\n <p class=\"text-sm mt-2\">\r\n Kv-file-preview aguardando um template...\r\n </p>\r\n <p class=\"font-bold text-sm p-0 m-0\">Data: {{ todayDate() }}</p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <ng-template #emptyDocumentList>\r\n @if(!noDocumentListTemplate) {\r\n <div class=\"text-center text-gray-600 mt-4 m-3\" style=\"height: 100%\">\r\n <div class=\" flex align-items-center gap-1\">\r\n <span class=\"material-symbols-outlined\"> inbox </span>\r\n <p>Nenhum documento dispon\u00EDvel.</p>\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"text-center mt-4 m-3\" style=\"height: 100%\">\r\n <ng-container *ngTemplateOutlet=\"noDocumentListTemplate\"></ng-container>\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n <!-- Contador de documentos - Fixo na parte inferior -->\r\n <div\r\n class=\"sticky-counter flex flex-row flex-1 px-2 justify-content-center p-2\"\r\n style=\"position: sticky; bottom: 0; background-color: white\"\r\n >\r\n <span>{{ totalItensCarregado() }} de {{ totalRecords }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Visualizador -->\r\n <div id=\"fullscreenDiv\" class=\"card-perfil col-12 md:col-8 lg:col-9\" style=\"position: relative; height: 100%;\">\r\n @if(btnTelaCheia)\r\n {\r\n <div class=\"grid\">\r\n <div class=\"col\"></div>\r\n <span id=\"fullscreenBtn\" (click)=\"alternarTelaCheia()\" class=\"material-symbols-outlined p-2 text-xl cursor-pointer\">\r\n open_in_full\r\n </span>\r\n </div>\r\n }\r\n @if(visualizadorDocumentos) {\r\n <ng-container *ngIf=\"arquivo(); else noDocumentSelected\">\r\n @if(isLoading) {\r\n <ngx-loading\r\n [show]=\"isLoading\"\r\n [config]=\"{ backdropBorderRadius: '3px', fullScreenBackdrop: false }\"\r\n ></ngx-loading>\r\n }\r\n <kv-file-viewer-novo\r\n *ngIf=\"extencaoDocumento !== 'ekp'\"\r\n [arquivo]=\"arquivo()!\"\r\n [type]=\"type()!\"\r\n [blob]=\"blob()!\"\r\n [width]=\"'100%'\" \r\n [height]=\"'100%'\"\r\n class=\"file-viewer\"\r\n >\r\n </kv-file-viewer-novo>\r\n \r\n <div\r\n id=\"html-content\"\r\n [innerHTML]=\"ekpContent()\"\r\n *ngIf=\"extencaoDocumento === 'ekp'\"\r\n class=\"ekp-content\"\r\n ></div>\r\n </ng-container>\r\n } @else {\r\n <ng-container *ngIf=\"arquivoPreview(); else noDocumentSelected\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n contentTemplate;\r\n context: { $implicit: arquivoPreview() }\r\n \"\r\n ></ng-container>\r\n </ng-container>\r\n }\r\n <ng-template #noDocumentSelected>\r\n @if(!noDocumentSelectedTemplate) {\r\n <div\r\n class=\"no-document-message flex flex-column align-items-center justify-content-center\"\r\n style=\"height: 100%\"\r\n >\r\n <p class=\"text-center text-gray-500\">\r\n Selecione um arquivo para visualiza\u00E7\u00E3o\r\n </p>\r\n <img\r\n [src]=\"\r\n 'https://work-assets.keevo.com.br/img/Digital_personal_files-pana_3.png'\r\n \"\r\n style=\"max-height: 50%; margin-top: 2rem;\"\r\n alt=\"\"\r\n />\r\n </div>\r\n } @else {\r\n <ng-container\r\n *ngTemplateOutlet=\"noDocumentSelectedTemplate\"\r\n ></ng-container>\r\n }\r\n </ng-template>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.farol-statuspublicacao{margin-right:.5rem;width:.35rem;border-radius:1rem;-webkit-border-radius:1rem;-moz-border-radius:1rem;-ms-border-radius:1rem;-o-border-radius:1rem}:host ::ng-deep .p-sidebar{border-radius:5px;position:absolute;height:var(--sidebar-height)}:host ::ng-deep .p-sidebar .p-sidebar-content{overflow:auto;border:1px solid #e5e7eb;border-radius:5px;margin-top:1rem}.card-perfil{border:1.5px solid #CBD5E1;background:#fff;border-radius:6px;max-height:100%}:host ::ng-deep .p-fieldset .p-fieldset-content{padding-bottom:0}:host ::ng-deep .p-sidebar .p-sidebar-close{display:none}.card-normal{border:1.5px solid #CBD5E1}.card-naoVisualizado{border-left:4px solid #e6671f!important}.parent-container{height:100%;display:flex;flex-direction:column}.file-viewer{margin:auto}.ekp-content{min-height:20rem;padding:1rem;overflow-y:auto;border-radius:5px}ngx-loading{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1000}.card{transition:all .3s ease;border:1px solid transparent}.card-normal:hover{border:1px solid #a9a9a9;box-shadow:0 4px 8px #0000001a}.card-selected{background-color:#f0f0f0;border:1px solid #c0c0c0;box-shadow:0 6px 12px #00000026;transform:scale(1.02)}.loading-spinner{display:flex;align-items:center;justify-content:center;height:100%;font-size:1.5rem;color:#666}#html-content{width:100%;height:100%;overflow-y:auto}:host ::ng-deep .list-card-button .kv-button{width:22px;height:22px}:host ::ng-deep .list-card-button .kv-button .material-symbols-outlined.only-icon.icon-normal[_ngcontent-ng-c4083184952]{font-size:1rem}.download-icon{font-size:20px;cursor:pointer;transition:transform .3s ease,color .3s ease}.download-icon:hover{color:#0f6cbd;transform:scale(1.2)}\n"] }]
115
+ args: [{ selector: 'kv-content-viewer', template: "<div class=\"flex flex-column md:flex-row gap-2 mt-3 custom-max-height\" style=\"height: 100%;\">\r\n <!-- Lista de documentos -->\r\n <div\r\n class=\"card-perfil overflow-x-hidden col-12 md:col-4 lg:col-3\"\r\n (scroll)=\"scrollHandler($event)\"\r\n [ngClass]=\"{\r\n 'overflow-y-scroll': dataSource().length > 0,\r\n 'overflow-y-hidden': dataSource().length === 0\r\n }\"\r\n style=\"position: relative; height: 100%; min-height: 15rem;\"\r\n >\r\n <div *ngIf=\"dataSource().length > 0; else emptyDocumentList\" class=\"col-12\">\r\n <!-- Lista de cards -->\r\n <div\r\n *ngFor=\"let option of dataSource(); trackBy: trackByFn\"\r\n class=\"card-normal outline-none border-round-xl w-full p-2 m-1 grid p-fluid flex flex-row flex-nowrap align-items-center justify-content-center cursor-pointer\"\r\n (click)=\"visualizarPreview(option)\"\r\n [ngClass]=\"{\r\n 'card-naoVisualizado': !isVisualizado(option),\r\n 'card-selected': option === arquivoPreview(),\r\n 'card-normal': option !== arquivoPreview(),\r\n }\"\r\n >\r\n <div class=\"flex flex-grow-1 ml-2 flex-column gap-1 m-0 p-0 overflow-hidden text-overflow-ellipsis \" style=\"max-width: 100%;\">\r\n <ng-container *ngIf=\"cardTemplate; else defaultTemplate\">\r\n <ng-container \r\n *ngTemplateOutlet=\"cardTemplate; context: { $implicit: option }\"\r\n ></ng-container>\r\n </ng-container>\r\n </div>\r\n <ng-template #defaultTemplate>\r\n <div class=\"card-common-style default-card\">\r\n <h1 class=\"font-bold text-base p-0 m-0\">Bem-vindo!</h1>\r\n <p class=\"text-sm mt-2\">\r\n Kv-file-preview aguardando um template...\r\n </p>\r\n <p class=\"font-bold text-sm p-0 m-0\">Data: {{ todayDate() }}</p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <ng-template #emptyDocumentList>\r\n @if(!noDocumentListTemplate) {\r\n <div class=\"text-center text-gray-600 mt-4 m-3\" style=\"height: 100%\">\r\n <div class=\" flex align-items-center gap-1\">\r\n <span class=\"material-symbols-outlined\"> inbox </span>\r\n <p>Nenhum documento dispon\u00EDvel.</p>\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"text-center mt-4 m-3\" style=\"height: 100%\">\r\n <ng-container *ngTemplateOutlet=\"noDocumentListTemplate\"></ng-container>\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n <!-- Contador de documentos - Fixo na parte inferior -->\r\n <div\r\n class=\"sticky-counter flex flex-row flex-1 px-2 justify-content-center p-2\"\r\n style=\"position: sticky; bottom: -10px; background-color: white\"\r\n >\r\n <span>{{ totalItensCarregado() }} de {{ totalRecords }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Visualizador -->\r\n<div id=\"fullscreenDiv\" class=\"card-perfil col-12 md:col-8 lg:col-9\" style=\"position: relative; height: 100%; overflow-y: auto;\">\r\n @if(btnTelaCheia)\r\n {\r\n <div class=\"grid\">\r\n <div class=\"col\"></div>\r\n <span id=\"fullscreenBtn\" (click)=\"alternarTelaCheia()\" class=\"material-symbols-outlined p-2 text-xl cursor-pointer\">\r\n open_in_full\r\n </span>\r\n </div>\r\n }\r\n @if(visualizadorDocumentos) {\r\n <ng-container *ngIf=\"arquivo(); else noDocumentSelected\">\r\n @if(isLoading) {\r\n <ngx-loading\r\n [show]=\"isLoading\"\r\n [config]=\"{ backdropBorderRadius: '3px', fullScreenBackdrop: false }\"\r\n ></ngx-loading>\r\n }\r\n <kv-file-viewer-novo\r\n *ngIf=\"extencaoDocumento !== 'ekp'\"\r\n [arquivo]=\"arquivo()!\"\r\n [type]=\"type()!\"\r\n [blob]=\"blob()!\"\r\n [width]=\"'100%'\" \r\n [height]=\"'100%'\"\r\n class=\"file-viewer\"\r\n style=\"max-height: 100%;\"\r\n >\r\n </kv-file-viewer-novo>\r\n\r\n <div\r\n id=\"html-content\"\r\n [innerHTML]=\"ekpContent()\"\r\n *ngIf=\"extencaoDocumento === 'ekp'\"\r\n class=\"ekp-content\"\r\n style=\"overflow-y: auto; max-height: 100%;\"\r\n ></div>\r\n </ng-container>\r\n } @else {\r\n <ng-container *ngIf=\"arquivoPreview(); else noDocumentSelected\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n contentTemplate;\r\n context: { $implicit: arquivoPreview() }\r\n \"\r\n style=\"overflow-y: auto; max-height: 100%;\"\r\n ></ng-container>\r\n </ng-container>\r\n }\r\n <ng-template #noDocumentSelected>\r\n @if(!noDocumentSelectedTemplate) {\r\n <div\r\n class=\"no-document-message flex flex-column align-items-center justify-content-center\"\r\n style=\"height: 100%; overflow-y: auto;\"\r\n >\r\n <p class=\"text-center text-gray-500\">\r\n Selecione um arquivo para visualiza\u00E7\u00E3o\r\n </p>\r\n <img\r\n [src]=\"\r\n 'https://work-assets.keevo.com.br/img/Digital_personal_files-pana_3.png'\r\n \"\r\n style=\"max-height: 50%; margin-top: 2rem;\"\r\n alt=\"\"\r\n />\r\n </div>\r\n } @else {\r\n <ng-container\r\n *ngTemplateOutlet=\"noDocumentSelectedTemplate\"\r\n ></ng-container>\r\n }\r\n </ng-template>\r\n</div>\r\n\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.farol-statuspublicacao{margin-right:.5rem;width:.35rem;border-radius:1rem;-webkit-border-radius:1rem;-moz-border-radius:1rem;-ms-border-radius:1rem;-o-border-radius:1rem}:host ::ng-deep .p-sidebar{border-radius:5px;position:absolute;height:var(--sidebar-height)}:host ::ng-deep .p-sidebar .p-sidebar-content{overflow:auto;border:1px solid #e5e7eb;border-radius:5px;margin-top:1rem}.card-perfil{border:1.5px solid #CBD5E1;background:#fff;border-radius:6px;max-height:100%}:host ::ng-deep .p-fieldset .p-fieldset-content{padding-bottom:0}:host ::ng-deep .p-sidebar .p-sidebar-close{display:none}.card-normal{border:1.5px solid #CBD5E1}.card-naoVisualizado{border-left:4px solid #e6671f!important}.parent-container{height:100%;display:flex;flex-direction:column}.file-viewer{margin:auto}.ekp-content{min-height:20rem;padding:1rem;overflow-y:auto;border-radius:5px}ngx-loading{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1000}.card{transition:all .3s ease;border:1px solid transparent}.card-normal:hover{border:1px solid #a9a9a9;box-shadow:0 4px 8px #0000001a}.card-selected{background-color:#f0f0f0;border:1px solid #c0c0c0;box-shadow:0 6px 12px #00000026;transform:scale(1.02)}.loading-spinner{display:flex;align-items:center;justify-content:center;height:100%;font-size:1.5rem;color:#666}#html-content{width:100%;height:100%;overflow-y:auto}:host ::ng-deep .list-card-button .kv-button{width:22px;height:22px}:host ::ng-deep .list-card-button .kv-button .material-symbols-outlined.only-icon.icon-normal[_ngcontent-ng-c4083184952]{font-size:1rem}.download-icon{font-size:20px;cursor:pointer;transition:transform .3s ease,color .3s ease}.download-icon:hover{color:#0f6cbd;transform:scale(1.2)}\n"] }]
116
116
  }], propDecorators: { extencaoDocumento: [{
117
117
  type: Input
118
118
  }], totalRecords: [{
@@ -136,4 +136,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
136
136
  }], onSelectFile: [{
137
137
  type: Output
138
138
  }] } });
139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtY29udGVudC12aWV3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtY29udGVudC12aWV3ZXIva3YtY29udGVudC12aWV3ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtY29udGVudC12aWV3ZXIva3YtY29udGVudC12aWV3ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQWUsTUFBTSxFQUFFLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFRMUgsTUFBTSxPQUFPLHdCQUF3QjtJQUxyQztRQVNFLGtCQUFrQjtRQUNuQixlQUFVLEdBQXVCLEtBQUssQ0FBUSxFQUFFLENBQUMsQ0FBQztRQUNsRCxrQkFBYSxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUNsQyxZQUFPLEdBQUcsS0FBSyxDQUFxQixTQUFTLENBQUMsQ0FBQztRQUMvQyxtQkFBYyxHQUFHLE1BQU0sQ0FBTSxTQUFTLENBQUMsQ0FBQztRQUN4QyxnQkFBVyxHQUFHLE1BQU0sQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUNqQyxTQUFJLEdBQUcsS0FBSyxDQUFxQixTQUFTLENBQUMsQ0FBQztRQUM1QyxTQUFJLEdBQUcsS0FBSyxDQUFPLEVBQVMsQ0FBQyxDQUFDO1FBQzlCLGNBQVMsR0FBRyxNQUFNLENBQXFCLFNBQVMsQ0FBQyxDQUFDO1FBQ2xELGVBQVUsR0FBRyxLQUFLLENBQXVCLFNBQVMsQ0FBQyxDQUFDO1FBQ3BELHdCQUFtQixHQUFHLFFBQVEsQ0FDN0IsR0FBRyxFQUFFLENBQUMs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THBDLFNBQVM7K0JBQ0UsbUJBQW1COzhCQTBCdEIsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUdHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBSUcsc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFVSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBFdmVudEVtaXR0ZXIsIGlucHV0LCBJbnB1dCwgSW5wdXRTaWduYWwsIE91dHB1dCwgc2lnbmFsLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdrdi1jb250ZW50LXZpZXdlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2t2LWNvbnRlbnQtdmlld2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4va3YtY29udGVudC12aWV3ZXIuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBLdkNvbnRlbnRWaWV3ZXJDb21wb25lbnQge1xyXG5cclxuXHJcblxyXG4gIC8vICNyZWdpb24gU2lnbmFsc1xyXG4gZGF0YVNvdXJjZTogSW5wdXRTaWduYWw8YW55W10+ID0gaW5wdXQ8YW55W10+KFtdKTtcclxuIHBhZ2luYUluaWNpYWwgPSBzaWduYWw8bnVtYmVyPigxKTtcclxuIGFycXVpdm8gPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiBhcnF1aXZvUHJldmlldyA9IHNpZ25hbDxhbnk+KHVuZGVmaW5lZCk7XHJcbiBub21lQXJxdWl2byA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcclxuIHR5cGUgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiBibG9iID0gaW5wdXQ8QmxvYj4oJycgYXMgYW55KTtcclxuIGlkYXJxdWl2byA9IHNpZ25hbDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiBla3BDb250ZW50ID0gaW5wdXQ8U2FmZUh0bWwgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiB0b3RhbEl0ZW5zQ2FycmVnYWRvID0gY29tcHV0ZWQoXHJcbiAgKCkgPT4gdGhpcy5kYXRhU291cmNlKCk/Lmxlbmd0aCB8fCAwXHJcbik7XHJcbi8vICNlbmRyZWdpb25cclxuXHJcbi8vICNyZWdpb24gUHJvcGVydGllc1xyXG5lbXByZXNhU2VsZWNpb25hZGEhOiBhbnk7XHJcbmlkdGlwb2RvY3VtZW50byE6IG51bWJlcltdO1xyXG5ASW5wdXQoKSBleHRlbmNhb0RvY3VtZW50byE6IHN0cmluZztcclxucHJldmlld09uOiBib29sZWFuID0gZmFsc2U7XHJcbnNlbGVjdGVkSXRlbTogYW55ID0ge307XHJcbkBJbnB1dCgpIHRvdGFsUmVjb3JkczogbnVtYmVyID0gMDtcclxuaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbmRpc3BsYXlTaWRlYmFyOiBib29sZWFuID0gZmFsc2U7XHJcbmlzU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuQElucHV0KCkgdmlzdWFsaXphZG9yRG9jdW1lbnRvczogYm9vbGVhbiA9IGZhbHNlO1xyXG5ASW5wdXQoKSBjYXJkVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5ASW5wdXQoKSBjb250ZW50VGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5ASW5wdXQoKSBub0RvY3VtZW50U2VsZWN0ZWRUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbkBJbnB1dCgpIG5vRG9jdW1lbnRMaXN0VGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5ASW5wdXQoKSBpbmR2aXN1YWxpemFkbzogYm9vbGVhbiA9IGZhbHNlO1xyXG5ASW5wdXQoKSBidG5UZWxhQ2hlaWE6IGJvb2xlYW4gPSBmYWxzZTtcclxua2V5VmlzdWFsaXphZG86IHN0cmluZyA9ICdpbmR2aXN1YWxpemFkbyc7IFxyXG5cclxudG9kYXlEYXRlKCk6IHN0cmluZyB7XHJcbiAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gIHJldHVybiB0b2RheS50b0xvY2FsZURhdGVTdHJpbmcoJ3B0LUJSJywgeyBkYXk6ICcyLWRpZ2l0JywgbW9udGg6ICcyLWRpZ2l0JywgeWVhcjogJ251bWVyaWMnIH0pO1xyXG59XHJcbi8vICNlbmRyZWdpb25cclxuXHJcbi8vICNyZWdpb24gT3V0cHV0c1xyXG5AT3V0cHV0KCkgb25TY3JvbGxIYW5kbGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuQE91dHB1dCgpIG9uU2VsZWN0RmlsZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbi8vICNlbmRyZWdpb25cclxuXHJcbnRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpOiBhbnkge1xyXG4gIHJldHVybiBpdGVtLmlkYXJxdWl2bzsgXHJcbn1cclxuXHJcbmlzVmlzdWFsaXphZG8ob3B0aW9uOiBhbnkpOiBib29sZWFuIHtcclxuICByZXR1cm4gb3B0aW9uW3RoaXMua2V5VmlzdWFsaXphZG9dIHx8IGZhbHNlO1xyXG59XHJcblxyXG52aXN1YWxpemFyUHJldmlldyhhcnF1aXZvOiBhbnkpOiB2b2lkIHtcclxuICBhcnF1aXZvW3RoaXMua2V5VmlzdWFsaXphZG9dID0gdHJ1ZTtcclxuXHJcbiAgdGhpcy5hcnF1aXZvUHJldmlldy5zZXQoYXJxdWl2byk7XHJcbiAgdGhpcy5vblNlbGVjdEZpbGUuZW1pdChhcnF1aXZvKTtcclxuICBcclxufVxyXG5cclxuYWx0ZXJuYXJUZWxhQ2hlaWEoKSB7XHJcbiAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmdWxsc2NyZWVuRGl2Jyk7XHJcbiAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Z1bGxzY3JlZW5CdG4nKTtcclxuXHJcbiAgLy8gVmVyaWZpY2Egc2Ugb3MgZWxlbWVudG9zIGV4aXN0ZW1cclxuICBpZiAoZWxlbWVudCAmJiBidXR0b24pIHtcclxuICAgIGlmICghZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnQpIHtcclxuICAgICAgLy8gRXhwYW5kaXIgcGFyYSB0ZWxhIGNoZWlhXHJcbiAgICAgIGlmIChlbGVtZW50LnJlcXVlc3RGdWxsc2NyZWVuKSB7XHJcbiAgICAgICAgZWxlbWVudC5yZXF1ZXN0RnVsbHNjcmVlbigpO1xyXG4gICAgICB9IGVsc2UgaWYgKChlbGVtZW50IGFzIGFueSkubW96UmVxdWVzdEZ1bGxTY3JlZW4pIHsgLy8gUGFyYSBGaXJlZm94XHJcbiAgICAgICAgKGVsZW1lbnQgYXMgYW55KS5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpO1xyXG4gICAgICB9IGVsc2UgaWYgKChlbGVtZW50IGFzIGFueSkud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4pIHsgLy8gUGFyYSBDaHJvbWUsIFNhZmFyaSBlIE9wZXJhXHJcbiAgICAgICAgKGVsZW1lbnQgYXMgYW55KS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbigpO1xyXG4gICAgICB9IGVsc2UgaWYgKChlbGVtZW50IGFzIGFueSkubXNSZXF1ZXN0RnVsbHNjcmVlbikgeyAvLyBQYXJhIElFL0VkZ2VcclxuICAgICAgICAoZWxlbWVudCBhcyBhbnkpLm1zUmVxdWVzdEZ1bGxzY3JlZW4oKTtcclxuICAgICAgfVxyXG4gICAgICBidXR0b24udGV4dENvbnRlbnQgPSAnY2xvc2VfZnVsbHNjcmVlbic7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBTYWlyIGRhIHRlbGEgY2hlaWFcclxuICAgICAgaWYgKGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTtcclxuICAgICAgfSBlbHNlIGlmICgoZG9jdW1lbnQgYXMgYW55KS5tb3pDYW5jZWxGdWxsU2NyZWVuKSB7IC8vIFBhcmEgRmlyZWZveFxyXG4gICAgICAgIChkb2N1bWVudCBhcyBhbnkpLm1vekNhbmNlbEZ1bGxTY3JlZW4oKTtcclxuICAgICAgfSBlbHNlIGlmICgoZG9jdW1lbnQgYXMgYW55KS53ZWJraXRFeGl0RnVsbHNjcmVlbikgeyAvLyBQYXJhIENocm9tZSwgU2FmYXJpIGUgT3BlcmFcclxuICAgICAgICAoZG9jdW1lbnQgYXMgYW55KS53ZWJraXRFeGl0RnVsbHNjcmVlbigpO1xyXG4gICAgICB9IGVsc2UgaWYgKChkb2N1bWVudCBhcyBhbnkpLm1zRXhpdEZ1bGxzY3JlZW4pIHsgLy8gUGFyYSBJRS9FZGdlXHJcbiAgICAgICAgKGRvY3VtZW50IGFzIGFueSkubXNFeGl0RnVsbHNjcmVlbigpO1xyXG4gICAgICB9XHJcbiAgICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9ICdvcGVuX2luX2Z1bGwnO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxubmdPbkluaXQoKTogdm9pZCB7XHJcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZnVsbHNjcmVlbmNoYW5nZScsICgpID0+IHtcclxuICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmdWxsc2NyZWVuQnRuJyk7XHJcbiAgICBcclxuICAgIGlmIChidXR0b24pIHtcclxuICAgICAgaWYgKCFkb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudCkge1xyXG4gICAgICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9ICdvcGVuX2luX2Z1bGwnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9ICdjbG9zZV9mdWxsc2NyZWVuJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5zY3JvbGxIYW5kbGVyKCRldmVudDogRXZlbnQpIHtcclxuICBjb25zdCBlbGVtZW50ID0gJGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgLy9zZSBvIGVzY3JvbGwgY2hlZ2FyIGF0w6kgbyBmaW5hbFxyXG4gIGlmIChlbGVtZW50LnNjcm9sbEhlaWdodCAtIGVsZW1lbnQuc2Nyb2xsVG9wID09PSBlbGVtZW50LmNsaWVudEhlaWdodCkge1xyXG4gICAgLy8gdGhpcy5idXNjYXJQcm94aW1vc0RvY3VtZW50b3MoKTtcclxuICAgIHRoaXMub25TY3JvbGxIYW5kbGVyLmVtaXQoJGV2ZW50KTtcclxuICB9XHJcbn1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gbWQ6ZmxleC1yb3cgZ2FwLTIgbXQtMyBjdXN0b20tbWF4LWhlaWdodFwiIHN0eWxlPVwiaGVpZ2h0OiAxMDAlO1wiPlxyXG4gIDwhLS0gTGlzdGEgZGUgZG9jdW1lbnRvcyAtLT5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImNhcmQtcGVyZmlsIG92ZXJmbG93LXgtaGlkZGVuIGNvbC0xMiBtZDpjb2wtNCBsZzpjb2wtM1wiXHJcbiAgICAoc2Nyb2xsKT1cInNjcm9sbEhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICdvdmVyZmxvdy15LXNjcm9sbCc6IGRhdGFTb3VyY2UoKS5sZW5ndGggPiAwLFxyXG4gICAgICAnb3ZlcmZsb3cteS1oaWRkZW4nOiBkYXRhU291cmNlKCkubGVuZ3RoID09PSAwXHJcbiAgICB9XCJcclxuICAgIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlOyBoZWlnaHQ6IDEwMCU7IG1pbi1oZWlnaHQ6IDE1cmVtO1wiXHJcbiAgPlxyXG4gICAgPGRpdiAqbmdJZj1cImRhdGFTb3VyY2UoKS5sZW5ndGggPiAwOyBlbHNlIGVtcHR5RG9jdW1lbnRMaXN0XCIgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgPCEtLSBMaXN0YSBkZSBjYXJkcyAtLT5cclxuICAgICAgPGRpdlxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZGF0YVNvdXJjZSgpOyB0cmFja0J5OiB0cmFja0J5Rm5cIlxyXG4gICAgICAgIGNsYXNzPVwiY2FyZC1ub3JtYWwgb3V0bGluZS1ub25lIGJvcmRlci1yb3VuZC14bCB3LWZ1bGwgcC0yIG0tMSBncmlkIHAtZmx1aWQgZmxleCBmbGV4LXJvdyBmbGV4LW5vd3JhcCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgKGNsaWNrKT1cInZpc3VhbGl6YXJQcmV2aWV3KG9wdGlvbilcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICdjYXJkLW5hb1Zpc3VhbGl6YWRvJzogIWlzVmlzdWFsaXphZG8ob3B0aW9uKSxcclxuICAgICdjYXJkLXNlbGVjdGVkJzogb3B0aW9uID09PSBhcnF1aXZvUHJldmlldygpLFxyXG4gICAgJ2NhcmQtbm9ybWFsJzogb3B0aW9uICE9PSBhcnF1aXZvUHJldmlldygpLFxyXG4gICB9XCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtZ3Jvdy0xIG1sLTIgZmxleC1jb2x1bW4gZ2FwLTEgbS0wIHAtMCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1vdmVyZmxvdy1lbGxpcHNpcyBcIiBzdHlsZT1cIm1heC13aWR0aDogMTAwJTtcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYXJkVGVtcGxhdGU7IGVsc2UgZGVmYXVsdFRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgXHJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYXJkVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBvcHRpb24gfVwiXHJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRlbXBsYXRlPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29tbW9uLXN0eWxlIGRlZmF1bHQtY2FyZFwiPlxyXG4gICAgICAgICAgICA8aDEgY2xhc3M9XCJmb250LWJvbGQgdGV4dC1iYXNlIHAtMCBtLTBcIj5CZW0tdmluZG8hPC9oMT5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtIG10LTJcIj5cclxuICAgICAgICAgICAgICBLdi1maWxlLXByZXZpZXcgYWd1YXJkYW5kbyB1bSB0ZW1wbGF0ZS4uLlxyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtc20gcC0wIG0tMFwiPkRhdGE6IHt7IHRvZGF5RGF0ZSgpIH19PC9wPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI2VtcHR5RG9jdW1lbnRMaXN0PlxyXG4gICAgICBAaWYoIW5vRG9jdW1lbnRMaXN0VGVtcGxhdGUpIHtcclxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHRleHQtZ3JheS02MDAgbXQtNCBtLTNcIiBzdHlsZT1cImhlaWdodDogMTAwJVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCIgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBpbmJveCA8L3NwYW4+XHJcbiAgICAgICAgICA8cD5OZW5odW0gZG9jdW1lbnRvIGRpc3BvbsOtdmVsLjwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH0gQGVsc2Uge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgbXQtNCBtLTNcIiBzdHlsZT1cImhlaWdodDogMTAwJVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub0RvY3VtZW50TGlzdFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDwhLS0gQ29udGFkb3IgZGUgZG9jdW1lbnRvcyAtIEZpeG8gbmEgcGFydGUgaW5mZXJpb3IgLS0+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwic3RpY2t5LWNvdW50ZXIgZmxleCBmbGV4LXJvdyBmbGV4LTEgcHgtMiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHAtMlwiXHJcbiAgICAgIHN0eWxlPVwicG9zaXRpb246IHN0aWNreTsgYm90dG9tOiAwOyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZVwiXHJcbiAgICA+XHJcbiAgICAgIDxzcGFuPnt7IHRvdGFsSXRlbnNDYXJyZWdhZG8oKSB9fSBkZSB7eyB0b3RhbFJlY29yZHMgfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBWaXN1YWxpemFkb3IgLS0+XHJcbiAgPGRpdiAgaWQ9XCJmdWxsc2NyZWVuRGl2XCIgY2xhc3M9XCJjYXJkLXBlcmZpbCBjb2wtMTIgbWQ6Y29sLTggbGc6Y29sLTlcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTsgaGVpZ2h0OiAxMDAlO1wiPlxyXG4gICAgQGlmKGJ0blRlbGFDaGVpYSlcclxuICAgIHtcclxuICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPjwvZGl2PlxyXG4gICAgICA8c3BhbiBpZD1cImZ1bGxzY3JlZW5CdG5cIiAoY2xpY2spPVwiYWx0ZXJuYXJUZWxhQ2hlaWEoKVwiIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBwLTIgdGV4dC14bCBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgIG9wZW5faW5fZnVsbFxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgICBAaWYodmlzdWFsaXphZG9yRG9jdW1lbnRvcykge1xyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXJxdWl2bygpOyBlbHNlIG5vRG9jdW1lbnRTZWxlY3RlZFwiPlxyXG4gICAgICAgIEBpZihpc0xvYWRpbmcpIHtcclxuICAgICAgICA8bmd4LWxvYWRpbmdcclxuICAgICAgICAgIFtzaG93XT1cImlzTG9hZGluZ1wiXHJcbiAgICAgICAgICBbY29uZmlnXT1cInsgYmFja2Ryb3BCb3JkZXJSYWRpdXM6ICczcHgnLCBmdWxsU2NyZWVuQmFja2Ryb3A6IGZhbHNlIH1cIlxyXG4gICAgICAgID48L25neC1sb2FkaW5nPlxyXG4gICAgICAgIH1cclxuICAgICAgICA8a3YtZmlsZS12aWV3ZXItbm92b1xyXG4gICAgICAgICpuZ0lmPVwiZXh0ZW5jYW9Eb2N1bWVudG8gIT09ICdla3AnXCJcclxuICAgICAgICAgIFthcnF1aXZvXT1cImFycXVpdm8oKSFcIlxyXG4gICAgICAgICAgW3R5cGVdPVwidHlwZSgpIVwiXHJcbiAgICAgICAgICBbYmxvYl09XCJibG9iKCkhXCJcclxuICAgICAgICAgIFt3aWR0aF09XCInMTAwJSdcIiBcclxuICAgICAgICAgIFtoZWlnaHRdPVwiJzEwMCUnXCJcclxuICAgICAgICAgIGNsYXNzPVwiZmlsZS12aWV3ZXJcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L2t2LWZpbGUtdmlld2VyLW5vdm8+XHJcbiAgXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgaWQ9XCJodG1sLWNvbnRlbnRcIlxyXG4gICAgICAgICAgW2lubmVySFRNTF09XCJla3BDb250ZW50KClcIlxyXG4gICAgICAgICAgKm5nSWY9XCJleHRlbmNhb0RvY3VtZW50byA9PT0gJ2VrcCdcIlxyXG4gICAgICAgICAgY2xhc3M9XCJla3AtY29udGVudFwiXHJcbiAgICAgICAgPjwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIH0gQGVsc2Uge1xyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXJxdWl2b1ByZXZpZXcoKTsgZWxzZSBub0RvY3VtZW50U2VsZWN0ZWRcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICBjb250ZW50VGVtcGxhdGU7XHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBhcnF1aXZvUHJldmlldygpIH1cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIH1cclxuICAgIDxuZy10ZW1wbGF0ZSAjbm9Eb2N1bWVudFNlbGVjdGVkPlxyXG4gICAgICBAaWYoIW5vRG9jdW1lbnRTZWxlY3RlZFRlbXBsYXRlKSB7XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cIm5vLWRvY3VtZW50LW1lc3NhZ2UgZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXHJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEwMCVcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWNlbnRlciB0ZXh0LWdyYXktNTAwXCI+XHJcbiAgICAgICAgICBTZWxlY2lvbmUgdW0gYXJxdWl2byBwYXJhIHZpc3VhbGl6YcOnw6NvXHJcbiAgICAgICAgPC9wPlxyXG4gICAgICAgIDxpbWdcclxuICAgICAgICAgIFtzcmNdPVwiXHJcbiAgICAgICAgICAgICdodHRwczovL3dvcmstYXNzZXRzLmtlZXZvLmNvbS5ici9pbWcvRGlnaXRhbF9wZXJzb25hbF9maWxlcy1wYW5hXzMucG5nJ1xyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIHN0eWxlPVwibWF4LWhlaWdodDogNTAlOyBtYXJnaW4tdG9wOiAycmVtO1wiXHJcbiAgICAgICAgICBhbHQ9XCJcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9IEBlbHNlIHtcclxuICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9Eb2N1bWVudFNlbGVjdGVkVGVtcGxhdGVcIlxyXG4gICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIH1cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtY29udGVudC12aWV3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtY29udGVudC12aWV3ZXIva3YtY29udGVudC12aWV3ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtY29udGVudC12aWV3ZXIva3YtY29udGVudC12aWV3ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQWUsTUFBTSxFQUFFLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFRMUgsTUFBTSxPQUFPLHdCQUF3QjtJQUxyQztRQVNFLGtCQUFrQjtRQUNuQixlQUFVLEdBQXVCLEtBQUssQ0FBUSxFQUFFLENBQUMsQ0FBQztRQUNsRCxrQkFBYSxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUNsQyxZQUFPLEdBQUcsS0FBSyxDQUFxQixTQUFTLENBQUMsQ0FBQztRQUMvQyxtQkFBYyxHQUFHLE1BQU0sQ0FBTSxTQUFTLENBQUMsQ0FBQztRQUN4QyxnQkFBVyxHQUFHLE1BQU0sQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUNqQyxTQUFJLEdBQUcsS0FBSyxDQUFxQixTQUFTLENBQUMsQ0FBQztRQUM1QyxTQUFJLEdBQUcsS0FBSyxDQUFPLEVBQVMsQ0FBQyxDQUFDO1FBQzlCLGNBQVMsR0FBRyxNQUFNLENBQXFCLFNBQVMsQ0FBQyxDQUFDO1FBQ2xELGVBQVUsR0FBRyxLQUFLLENBQXVCLFNBQVMsQ0FBQyxDQUFDO1FBQ3BELHdCQUFtQixHQUFHLFFBQVEsQ0FDN0IsR0FBRyxFQUFFLENBQUMs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THBDLFNBQVM7K0JBQ0UsbUJBQW1COzhCQTBCdEIsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUdHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBSUcsc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFVSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBFdmVudEVtaXR0ZXIsIGlucHV0LCBJbnB1dCwgSW5wdXRTaWduYWwsIE91dHB1dCwgc2lnbmFsLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdrdi1jb250ZW50LXZpZXdlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2t2LWNvbnRlbnQtdmlld2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4va3YtY29udGVudC12aWV3ZXIuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBLdkNvbnRlbnRWaWV3ZXJDb21wb25lbnQge1xyXG5cclxuXHJcblxyXG4gIC8vICNyZWdpb24gU2lnbmFsc1xyXG4gZGF0YVNvdXJjZTogSW5wdXRTaWduYWw8YW55W10+ID0gaW5wdXQ8YW55W10+KFtdKTtcclxuIHBhZ2luYUluaWNpYWwgPSBzaWduYWw8bnVtYmVyPigxKTtcclxuIGFycXVpdm8gPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiBhcnF1aXZvUHJldmlldyA9IHNpZ25hbDxhbnk+KHVuZGVmaW5lZCk7XHJcbiBub21lQXJxdWl2byA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcclxuIHR5cGUgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiBibG9iID0gaW5wdXQ8QmxvYj4oJycgYXMgYW55KTtcclxuIGlkYXJxdWl2byA9IHNpZ25hbDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiBla3BDb250ZW50ID0gaW5wdXQ8U2FmZUh0bWwgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiB0b3RhbEl0ZW5zQ2FycmVnYWRvID0gY29tcHV0ZWQoXHJcbiAgKCkgPT4gdGhpcy5kYXRhU291cmNlKCk/Lmxlbmd0aCB8fCAwXHJcbik7XHJcbi8vICNlbmRyZWdpb25cclxuXHJcbi8vICNyZWdpb24gUHJvcGVydGllc1xyXG5lbXByZXNhU2VsZWNpb25hZGEhOiBhbnk7XHJcbmlkdGlwb2RvY3VtZW50byE6IG51bWJlcltdO1xyXG5ASW5wdXQoKSBleHRlbmNhb0RvY3VtZW50byE6IHN0cmluZztcclxucHJldmlld09uOiBib29sZWFuID0gZmFsc2U7XHJcbnNlbGVjdGVkSXRlbTogYW55ID0ge307XHJcbkBJbnB1dCgpIHRvdGFsUmVjb3JkczogbnVtYmVyID0gMDtcclxuaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbmRpc3BsYXlTaWRlYmFyOiBib29sZWFuID0gZmFsc2U7XHJcbmlzU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuQElucHV0KCkgdmlzdWFsaXphZG9yRG9jdW1lbnRvczogYm9vbGVhbiA9IGZhbHNlO1xyXG5ASW5wdXQoKSBjYXJkVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5ASW5wdXQoKSBjb250ZW50VGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5ASW5wdXQoKSBub0RvY3VtZW50U2VsZWN0ZWRUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbkBJbnB1dCgpIG5vRG9jdW1lbnRMaXN0VGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5ASW5wdXQoKSBpbmR2aXN1YWxpemFkbzogYm9vbGVhbiA9IGZhbHNlO1xyXG5ASW5wdXQoKSBidG5UZWxhQ2hlaWE6IGJvb2xlYW4gPSBmYWxzZTtcclxua2V5VmlzdWFsaXphZG86IHN0cmluZyA9ICdpbmR2aXN1YWxpemFkbyc7IFxyXG5cclxudG9kYXlEYXRlKCk6IHN0cmluZyB7XHJcbiAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gIHJldHVybiB0b2RheS50b0xvY2FsZURhdGVTdHJpbmcoJ3B0LUJSJywgeyBkYXk6ICcyLWRpZ2l0JywgbW9udGg6ICcyLWRpZ2l0JywgeWVhcjogJ251bWVyaWMnIH0pO1xyXG59XHJcbi8vICNlbmRyZWdpb25cclxuXHJcbi8vICNyZWdpb24gT3V0cHV0c1xyXG5AT3V0cHV0KCkgb25TY3JvbGxIYW5kbGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuQE91dHB1dCgpIG9uU2VsZWN0RmlsZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbi8vICNlbmRyZWdpb25cclxuXHJcbnRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpOiBhbnkge1xyXG4gIHJldHVybiBpdGVtLmlkYXJxdWl2bzsgXHJcbn1cclxuXHJcbmlzVmlzdWFsaXphZG8ob3B0aW9uOiBhbnkpOiBib29sZWFuIHtcclxuICByZXR1cm4gb3B0aW9uW3RoaXMua2V5VmlzdWFsaXphZG9dIHx8IGZhbHNlO1xyXG59XHJcblxyXG52aXN1YWxpemFyUHJldmlldyhhcnF1aXZvOiBhbnkpOiB2b2lkIHtcclxuICBhcnF1aXZvW3RoaXMua2V5VmlzdWFsaXphZG9dID0gdHJ1ZTtcclxuXHJcbiAgdGhpcy5hcnF1aXZvUHJldmlldy5zZXQoYXJxdWl2byk7XHJcbiAgdGhpcy5vblNlbGVjdEZpbGUuZW1pdChhcnF1aXZvKTtcclxuICBcclxufVxyXG5cclxuYWx0ZXJuYXJUZWxhQ2hlaWEoKSB7XHJcbiAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmdWxsc2NyZWVuRGl2Jyk7XHJcbiAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Z1bGxzY3JlZW5CdG4nKTtcclxuXHJcbiAgLy8gVmVyaWZpY2Egc2Ugb3MgZWxlbWVudG9zIGV4aXN0ZW1cclxuICBpZiAoZWxlbWVudCAmJiBidXR0b24pIHtcclxuICAgIGlmICghZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnQpIHtcclxuICAgICAgLy8gRXhwYW5kaXIgcGFyYSB0ZWxhIGNoZWlhXHJcbiAgICAgIGlmIChlbGVtZW50LnJlcXVlc3RGdWxsc2NyZWVuKSB7XHJcbiAgICAgICAgZWxlbWVudC5yZXF1ZXN0RnVsbHNjcmVlbigpO1xyXG4gICAgICB9IGVsc2UgaWYgKChlbGVtZW50IGFzIGFueSkubW96UmVxdWVzdEZ1bGxTY3JlZW4pIHsgLy8gUGFyYSBGaXJlZm94XHJcbiAgICAgICAgKGVsZW1lbnQgYXMgYW55KS5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpO1xyXG4gICAgICB9IGVsc2UgaWYgKChlbGVtZW50IGFzIGFueSkud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4pIHsgLy8gUGFyYSBDaHJvbWUsIFNhZmFyaSBlIE9wZXJhXHJcbiAgICAgICAgKGVsZW1lbnQgYXMgYW55KS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbigpO1xyXG4gICAgICB9IGVsc2UgaWYgKChlbGVtZW50IGFzIGFueSkubXNSZXF1ZXN0RnVsbHNjcmVlbikgeyAvLyBQYXJhIElFL0VkZ2VcclxuICAgICAgICAoZWxlbWVudCBhcyBhbnkpLm1zUmVxdWVzdEZ1bGxzY3JlZW4oKTtcclxuICAgICAgfVxyXG4gICAgICBidXR0b24udGV4dENvbnRlbnQgPSAnY2xvc2VfZnVsbHNjcmVlbic7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBTYWlyIGRhIHRlbGEgY2hlaWFcclxuICAgICAgaWYgKGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTtcclxuICAgICAgfSBlbHNlIGlmICgoZG9jdW1lbnQgYXMgYW55KS5tb3pDYW5jZWxGdWxsU2NyZWVuKSB7IC8vIFBhcmEgRmlyZWZveFxyXG4gICAgICAgIChkb2N1bWVudCBhcyBhbnkpLm1vekNhbmNlbEZ1bGxTY3JlZW4oKTtcclxuICAgICAgfSBlbHNlIGlmICgoZG9jdW1lbnQgYXMgYW55KS53ZWJraXRFeGl0RnVsbHNjcmVlbikgeyAvLyBQYXJhIENocm9tZSwgU2FmYXJpIGUgT3BlcmFcclxuICAgICAgICAoZG9jdW1lbnQgYXMgYW55KS53ZWJraXRFeGl0RnVsbHNjcmVlbigpO1xyXG4gICAgICB9IGVsc2UgaWYgKChkb2N1bWVudCBhcyBhbnkpLm1zRXhpdEZ1bGxzY3JlZW4pIHsgLy8gUGFyYSBJRS9FZGdlXHJcbiAgICAgICAgKGRvY3VtZW50IGFzIGFueSkubXNFeGl0RnVsbHNjcmVlbigpO1xyXG4gICAgICB9XHJcbiAgICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9ICdvcGVuX2luX2Z1bGwnO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxubmdPbkluaXQoKTogdm9pZCB7XHJcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZnVsbHNjcmVlbmNoYW5nZScsICgpID0+IHtcclxuICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmdWxsc2NyZWVuQnRuJyk7XHJcbiAgICBcclxuICAgIGlmIChidXR0b24pIHtcclxuICAgICAgaWYgKCFkb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudCkge1xyXG4gICAgICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9ICdvcGVuX2luX2Z1bGwnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9ICdjbG9zZV9mdWxsc2NyZWVuJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5zY3JvbGxIYW5kbGVyKCRldmVudDogRXZlbnQpIHtcclxuICBjb25zdCBlbGVtZW50ID0gJGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgLy9zZSBvIGVzY3JvbGwgY2hlZ2FyIGF0w6kgbyBmaW5hbFxyXG4gIGlmIChlbGVtZW50LnNjcm9sbEhlaWdodCAtIGVsZW1lbnQuc2Nyb2xsVG9wID09PSBlbGVtZW50LmNsaWVudEhlaWdodCkge1xyXG4gICAgLy8gdGhpcy5idXNjYXJQcm94aW1vc0RvY3VtZW50b3MoKTtcclxuICAgIHRoaXMub25TY3JvbGxIYW5kbGVyLmVtaXQoJGV2ZW50KTtcclxuICB9XHJcbn1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gbWQ6ZmxleC1yb3cgZ2FwLTIgbXQtMyBjdXN0b20tbWF4LWhlaWdodFwiIHN0eWxlPVwiaGVpZ2h0OiAxMDAlO1wiPlxyXG4gIDwhLS0gTGlzdGEgZGUgZG9jdW1lbnRvcyAtLT5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImNhcmQtcGVyZmlsIG92ZXJmbG93LXgtaGlkZGVuIGNvbC0xMiBtZDpjb2wtNCBsZzpjb2wtM1wiXHJcbiAgICAoc2Nyb2xsKT1cInNjcm9sbEhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICdvdmVyZmxvdy15LXNjcm9sbCc6IGRhdGFTb3VyY2UoKS5sZW5ndGggPiAwLFxyXG4gICAgICAnb3ZlcmZsb3cteS1oaWRkZW4nOiBkYXRhU291cmNlKCkubGVuZ3RoID09PSAwXHJcbiAgICB9XCJcclxuICAgIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlOyBoZWlnaHQ6IDEwMCU7IG1pbi1oZWlnaHQ6IDE1cmVtO1wiXHJcbiAgPlxyXG4gICAgPGRpdiAqbmdJZj1cImRhdGFTb3VyY2UoKS5sZW5ndGggPiAwOyBlbHNlIGVtcHR5RG9jdW1lbnRMaXN0XCIgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgPCEtLSBMaXN0YSBkZSBjYXJkcyAtLT5cclxuICAgICAgPGRpdlxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZGF0YVNvdXJjZSgpOyB0cmFja0J5OiB0cmFja0J5Rm5cIlxyXG4gICAgICAgIGNsYXNzPVwiY2FyZC1ub3JtYWwgb3V0bGluZS1ub25lIGJvcmRlci1yb3VuZC14bCB3LWZ1bGwgcC0yIG0tMSBncmlkIHAtZmx1aWQgZmxleCBmbGV4LXJvdyBmbGV4LW5vd3JhcCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgKGNsaWNrKT1cInZpc3VhbGl6YXJQcmV2aWV3KG9wdGlvbilcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICdjYXJkLW5hb1Zpc3VhbGl6YWRvJzogIWlzVmlzdWFsaXphZG8ob3B0aW9uKSxcclxuICAgICdjYXJkLXNlbGVjdGVkJzogb3B0aW9uID09PSBhcnF1aXZvUHJldmlldygpLFxyXG4gICAgJ2NhcmQtbm9ybWFsJzogb3B0aW9uICE9PSBhcnF1aXZvUHJldmlldygpLFxyXG4gICB9XCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtZ3Jvdy0xIG1sLTIgZmxleC1jb2x1bW4gZ2FwLTEgbS0wIHAtMCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1vdmVyZmxvdy1lbGxpcHNpcyBcIiBzdHlsZT1cIm1heC13aWR0aDogMTAwJTtcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYXJkVGVtcGxhdGU7IGVsc2UgZGVmYXVsdFRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgXHJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYXJkVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBvcHRpb24gfVwiXHJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRlbXBsYXRlPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29tbW9uLXN0eWxlIGRlZmF1bHQtY2FyZFwiPlxyXG4gICAgICAgICAgICA8aDEgY2xhc3M9XCJmb250LWJvbGQgdGV4dC1iYXNlIHAtMCBtLTBcIj5CZW0tdmluZG8hPC9oMT5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtIG10LTJcIj5cclxuICAgICAgICAgICAgICBLdi1maWxlLXByZXZpZXcgYWd1YXJkYW5kbyB1bSB0ZW1wbGF0ZS4uLlxyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtc20gcC0wIG0tMFwiPkRhdGE6IHt7IHRvZGF5RGF0ZSgpIH19PC9wPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI2VtcHR5RG9jdW1lbnRMaXN0PlxyXG4gICAgICBAaWYoIW5vRG9jdW1lbnRMaXN0VGVtcGxhdGUpIHtcclxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHRleHQtZ3JheS02MDAgbXQtNCBtLTNcIiBzdHlsZT1cImhlaWdodDogMTAwJVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCIgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBpbmJveCA8L3NwYW4+XHJcbiAgICAgICAgICA8cD5OZW5odW0gZG9jdW1lbnRvIGRpc3BvbsOtdmVsLjwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH0gQGVsc2Uge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgbXQtNCBtLTNcIiBzdHlsZT1cImhlaWdodDogMTAwJVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub0RvY3VtZW50TGlzdFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDwhLS0gQ29udGFkb3IgZGUgZG9jdW1lbnRvcyAtIEZpeG8gbmEgcGFydGUgaW5mZXJpb3IgLS0+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwic3RpY2t5LWNvdW50ZXIgZmxleCBmbGV4LXJvdyBmbGV4LTEgcHgtMiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHAtMlwiXHJcbiAgICAgIHN0eWxlPVwicG9zaXRpb246IHN0aWNreTsgYm90dG9tOiAtMTBweDsgYmFja2dyb3VuZC1jb2xvcjogd2hpdGVcIlxyXG4gICAgPlxyXG4gICAgICA8c3Bhbj57eyB0b3RhbEl0ZW5zQ2FycmVnYWRvKCkgfX0gZGUge3sgdG90YWxSZWNvcmRzIH19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gVmlzdWFsaXphZG9yIC0tPlxyXG48ZGl2IGlkPVwiZnVsbHNjcmVlbkRpdlwiIGNsYXNzPVwiY2FyZC1wZXJmaWwgY29sLTEyIG1kOmNvbC04IGxnOmNvbC05XCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7IGhlaWdodDogMTAwJTsgb3ZlcmZsb3cteTogYXV0bztcIj5cclxuICBAaWYoYnRuVGVsYUNoZWlhKVxyXG4gIHtcclxuICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj48L2Rpdj5cclxuICAgICAgPHNwYW4gaWQ9XCJmdWxsc2NyZWVuQnRuXCIgKGNsaWNrKT1cImFsdGVybmFyVGVsYUNoZWlhKClcIiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgcC0yIHRleHQteGwgY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICBvcGVuX2luX2Z1bGxcclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgfVxyXG4gIEBpZih2aXN1YWxpemFkb3JEb2N1bWVudG9zKSB7XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXJxdWl2bygpOyBlbHNlIG5vRG9jdW1lbnRTZWxlY3RlZFwiPlxyXG4gICAgICBAaWYoaXNMb2FkaW5nKSB7XHJcbiAgICAgIDxuZ3gtbG9hZGluZ1xyXG4gICAgICAgIFtzaG93XT1cImlzTG9hZGluZ1wiXHJcbiAgICAgICAgW2NvbmZpZ109XCJ7IGJhY2tkcm9wQm9yZGVyUmFkaXVzOiAnM3B4JywgZnVsbFNjcmVlbkJhY2tkcm9wOiBmYWxzZSB9XCJcclxuICAgICAgPjwvbmd4LWxvYWRpbmc+XHJcbiAgICAgIH1cclxuICAgICAgPGt2LWZpbGUtdmlld2VyLW5vdm9cclxuICAgICAgKm5nSWY9XCJleHRlbmNhb0RvY3VtZW50byAhPT0gJ2VrcCdcIlxyXG4gICAgICAgIFthcnF1aXZvXT1cImFycXVpdm8oKSFcIlxyXG4gICAgICAgIFt0eXBlXT1cInR5cGUoKSFcIlxyXG4gICAgICAgIFtibG9iXT1cImJsb2IoKSFcIlxyXG4gICAgICAgIFt3aWR0aF09XCInMTAwJSdcIiBcclxuICAgICAgICBbaGVpZ2h0XT1cIicxMDAlJ1wiXHJcbiAgICAgICAgY2xhc3M9XCJmaWxlLXZpZXdlclwiXHJcbiAgICAgICAgc3R5bGU9XCJtYXgtaGVpZ2h0OiAxMDAlO1wiXHJcbiAgICAgID5cclxuICAgICAgPC9rdi1maWxlLXZpZXdlci1ub3ZvPlxyXG5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGlkPVwiaHRtbC1jb250ZW50XCJcclxuICAgICAgICBbaW5uZXJIVE1MXT1cImVrcENvbnRlbnQoKVwiXHJcbiAgICAgICAgKm5nSWY9XCJleHRlbmNhb0RvY3VtZW50byA9PT0gJ2VrcCdcIlxyXG4gICAgICAgIGNsYXNzPVwiZWtwLWNvbnRlbnRcIlxyXG4gICAgICAgIHN0eWxlPVwib3ZlcmZsb3cteTogYXV0bzsgbWF4LWhlaWdodDogMTAwJTtcIlxyXG4gICAgICA+PC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICB9IEBlbHNlIHtcclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhcnF1aXZvUHJldmlldygpOyBlbHNlIG5vRG9jdW1lbnRTZWxlY3RlZFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgIGNvbnRlbnRUZW1wbGF0ZTtcclxuICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBhcnF1aXZvUHJldmlldygpIH1cclxuICAgICAgICBcIlxyXG4gICAgICAgIHN0eWxlPVwib3ZlcmZsb3cteTogYXV0bzsgbWF4LWhlaWdodDogMTAwJTtcIlxyXG4gICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICB9XHJcbiAgPG5nLXRlbXBsYXRlICNub0RvY3VtZW50U2VsZWN0ZWQ+XHJcbiAgICBAaWYoIW5vRG9jdW1lbnRTZWxlY3RlZFRlbXBsYXRlKSB7XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwibm8tZG9jdW1lbnQtbWVzc2FnZSBmbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcclxuICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7IG92ZXJmbG93LXk6IGF1dG87XCJcclxuICAgID5cclxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWNlbnRlciB0ZXh0LWdyYXktNTAwXCI+XHJcbiAgICAgICAgU2VsZWNpb25lIHVtIGFycXVpdm8gcGFyYSB2aXN1YWxpemHDp8Ojb1xyXG4gICAgICA8L3A+XHJcbiAgICAgIDxpbWdcclxuICAgICAgICBbc3JjXT1cIlxyXG4gICAgICAgICAgJ2h0dHBzOi8vd29yay1hc3NldHMua2Vldm8uY29tLmJyL2ltZy9EaWdpdGFsX3BlcnNvbmFsX2ZpbGVzLXBhbmFfMy5wbmcnXHJcbiAgICAgICAgXCJcclxuICAgICAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IDUwJTsgbWFyZ2luLXRvcDogMnJlbTtcIlxyXG4gICAgICAgIGFsdD1cIlwiXHJcbiAgICAgIC8+XHJcbiAgICA8L2Rpdj5cclxuICAgIH0gQGVsc2Uge1xyXG4gICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIm5vRG9jdW1lbnRTZWxlY3RlZFRlbXBsYXRlXCJcclxuICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgIH1cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L2Rpdj5cclxuXHJcbjwvZGl2PlxyXG4iXX0=
@@ -9756,11 +9756,11 @@ class KvContentViewerComponent {
9756
9756
  }
9757
9757
  }
9758
9758
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvContentViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9759
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvContentViewerComponent, selector: "kv-content-viewer", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: false, transformFunction: null }, arquivo: { classPropertyName: "arquivo", publicName: "arquivo", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, blob: { classPropertyName: "blob", publicName: "blob", isSignal: true, isRequired: false, transformFunction: null }, ekpContent: { classPropertyName: "ekpContent", publicName: "ekpContent", isSignal: true, isRequired: false, transformFunction: null }, extencaoDocumento: { classPropertyName: "extencaoDocumento", publicName: "extencaoDocumento", isSignal: false, isRequired: false, transformFunction: null }, totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: false, isRequired: false, transformFunction: null }, visualizadorDocumentos: { classPropertyName: "visualizadorDocumentos", publicName: "visualizadorDocumentos", isSignal: false, isRequired: false, transformFunction: null }, cardTemplate: { classPropertyName: "cardTemplate", publicName: "cardTemplate", isSignal: false, isRequired: false, transformFunction: null }, contentTemplate: { classPropertyName: "contentTemplate", publicName: "contentTemplate", isSignal: false, isRequired: false, transformFunction: null }, noDocumentSelectedTemplate: { classPropertyName: "noDocumentSelectedTemplate", publicName: "noDocumentSelectedTemplate", isSignal: false, isRequired: false, transformFunction: null }, noDocumentListTemplate: { classPropertyName: "noDocumentListTemplate", publicName: "noDocumentListTemplate", isSignal: false, isRequired: false, transformFunction: null }, indvisualizado: { classPropertyName: "indvisualizado", publicName: "indvisualizado", isSignal: false, isRequired: false, transformFunction: null }, btnTelaCheia: { classPropertyName: "btnTelaCheia", publicName: "btnTelaCheia", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { onScrollHandler: "onScrollHandler", onSelectFile: "onSelectFile" }, ngImport: i0, template: "<div class=\"flex flex-column md:flex-row gap-2 mt-3 custom-max-height\" style=\"height: 100%;\">\r\n <!-- Lista de documentos -->\r\n <div\r\n class=\"card-perfil overflow-x-hidden col-12 md:col-4 lg:col-3\"\r\n (scroll)=\"scrollHandler($event)\"\r\n [ngClass]=\"{\r\n 'overflow-y-scroll': dataSource().length > 0,\r\n 'overflow-y-hidden': dataSource().length === 0\r\n }\"\r\n style=\"position: relative; height: 100%; min-height: 15rem;\"\r\n >\r\n <div *ngIf=\"dataSource().length > 0; else emptyDocumentList\" class=\"col-12\">\r\n <!-- Lista de cards -->\r\n <div\r\n *ngFor=\"let option of dataSource(); trackBy: trackByFn\"\r\n class=\"card-normal outline-none border-round-xl w-full p-2 m-1 grid p-fluid flex flex-row flex-nowrap align-items-center justify-content-center cursor-pointer\"\r\n (click)=\"visualizarPreview(option)\"\r\n [ngClass]=\"{\r\n 'card-naoVisualizado': !isVisualizado(option),\r\n 'card-selected': option === arquivoPreview(),\r\n 'card-normal': option !== arquivoPreview(),\r\n }\"\r\n >\r\n <div class=\"flex flex-grow-1 ml-2 flex-column gap-1 m-0 p-0 overflow-hidden text-overflow-ellipsis \" style=\"max-width: 100%;\">\r\n <ng-container *ngIf=\"cardTemplate; else defaultTemplate\">\r\n <ng-container \r\n *ngTemplateOutlet=\"cardTemplate; context: { $implicit: option }\"\r\n ></ng-container>\r\n </ng-container>\r\n </div>\r\n <ng-template #defaultTemplate>\r\n <div class=\"card-common-style default-card\">\r\n <h1 class=\"font-bold text-base p-0 m-0\">Bem-vindo!</h1>\r\n <p class=\"text-sm mt-2\">\r\n Kv-file-preview aguardando um template...\r\n </p>\r\n <p class=\"font-bold text-sm p-0 m-0\">Data: {{ todayDate() }}</p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <ng-template #emptyDocumentList>\r\n @if(!noDocumentListTemplate) {\r\n <div class=\"text-center text-gray-600 mt-4 m-3\" style=\"height: 100%\">\r\n <div class=\" flex align-items-center gap-1\">\r\n <span class=\"material-symbols-outlined\"> inbox </span>\r\n <p>Nenhum documento dispon\u00EDvel.</p>\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"text-center mt-4 m-3\" style=\"height: 100%\">\r\n <ng-container *ngTemplateOutlet=\"noDocumentListTemplate\"></ng-container>\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n <!-- Contador de documentos - Fixo na parte inferior -->\r\n <div\r\n class=\"sticky-counter flex flex-row flex-1 px-2 justify-content-center p-2\"\r\n style=\"position: sticky; bottom: 0; background-color: white\"\r\n >\r\n <span>{{ totalItensCarregado() }} de {{ totalRecords }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Visualizador -->\r\n <div id=\"fullscreenDiv\" class=\"card-perfil col-12 md:col-8 lg:col-9\" style=\"position: relative; height: 100%;\">\r\n @if(btnTelaCheia)\r\n {\r\n <div class=\"grid\">\r\n <div class=\"col\"></div>\r\n <span id=\"fullscreenBtn\" (click)=\"alternarTelaCheia()\" class=\"material-symbols-outlined p-2 text-xl cursor-pointer\">\r\n open_in_full\r\n </span>\r\n </div>\r\n }\r\n @if(visualizadorDocumentos) {\r\n <ng-container *ngIf=\"arquivo(); else noDocumentSelected\">\r\n @if(isLoading) {\r\n <ngx-loading\r\n [show]=\"isLoading\"\r\n [config]=\"{ backdropBorderRadius: '3px', fullScreenBackdrop: false }\"\r\n ></ngx-loading>\r\n }\r\n <kv-file-viewer-novo\r\n *ngIf=\"extencaoDocumento !== 'ekp'\"\r\n [arquivo]=\"arquivo()!\"\r\n [type]=\"type()!\"\r\n [blob]=\"blob()!\"\r\n [width]=\"'100%'\" \r\n [height]=\"'100%'\"\r\n class=\"file-viewer\"\r\n >\r\n </kv-file-viewer-novo>\r\n \r\n <div\r\n id=\"html-content\"\r\n [innerHTML]=\"ekpContent()\"\r\n *ngIf=\"extencaoDocumento === 'ekp'\"\r\n class=\"ekp-content\"\r\n ></div>\r\n </ng-container>\r\n } @else {\r\n <ng-container *ngIf=\"arquivoPreview(); else noDocumentSelected\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n contentTemplate;\r\n context: { $implicit: arquivoPreview() }\r\n \"\r\n ></ng-container>\r\n </ng-container>\r\n }\r\n <ng-template #noDocumentSelected>\r\n @if(!noDocumentSelectedTemplate) {\r\n <div\r\n class=\"no-document-message flex flex-column align-items-center justify-content-center\"\r\n style=\"height: 100%\"\r\n >\r\n <p class=\"text-center text-gray-500\">\r\n Selecione um arquivo para visualiza\u00E7\u00E3o\r\n </p>\r\n <img\r\n [src]=\"\r\n 'https://work-assets.keevo.com.br/img/Digital_personal_files-pana_3.png'\r\n \"\r\n style=\"max-height: 50%; margin-top: 2rem;\"\r\n alt=\"\"\r\n />\r\n </div>\r\n } @else {\r\n <ng-container\r\n *ngTemplateOutlet=\"noDocumentSelectedTemplate\"\r\n ></ng-container>\r\n }\r\n </ng-template>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.farol-statuspublicacao{margin-right:.5rem;width:.35rem;border-radius:1rem;-webkit-border-radius:1rem;-moz-border-radius:1rem;-ms-border-radius:1rem;-o-border-radius:1rem}:host ::ng-deep .p-sidebar{border-radius:5px;position:absolute;height:var(--sidebar-height)}:host ::ng-deep .p-sidebar .p-sidebar-content{overflow:auto;border:1px solid #e5e7eb;border-radius:5px;margin-top:1rem}.card-perfil{border:1.5px solid #CBD5E1;background:#fff;border-radius:6px;max-height:100%}:host ::ng-deep .p-fieldset .p-fieldset-content{padding-bottom:0}:host ::ng-deep .p-sidebar .p-sidebar-close{display:none}.card-normal{border:1.5px solid #CBD5E1}.card-naoVisualizado{border-left:4px solid #e6671f!important}.parent-container{height:100%;display:flex;flex-direction:column}.file-viewer{margin:auto}.ekp-content{min-height:20rem;padding:1rem;overflow-y:auto;border-radius:5px}ngx-loading{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1000}.card{transition:all .3s ease;border:1px solid transparent}.card-normal:hover{border:1px solid #a9a9a9;box-shadow:0 4px 8px #0000001a}.card-selected{background-color:#f0f0f0;border:1px solid #c0c0c0;box-shadow:0 6px 12px #00000026;transform:scale(1.02)}.loading-spinner{display:flex;align-items:center;justify-content:center;height:100%;font-size:1.5rem;color:#666}#html-content{width:100%;height:100%;overflow-y:auto}:host ::ng-deep .list-card-button .kv-button{width:22px;height:22px}:host ::ng-deep .list-card-button .kv-button .material-symbols-outlined.only-icon.icon-normal[_ngcontent-ng-c4083184952]{font-size:1rem}.download-icon{font-size:20px;cursor:pointer;transition:transform .3s ease,color .3s ease}.download-icon:hover{color:#0f6cbd;transform:scale(1.2)}\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"] }, { kind: "component", type: KvFileViewerNovoComponent, selector: "kv-file-viewer-novo", inputs: ["arquivo", "type", "blob", "width", "height"] }, { kind: "component", type: i1$5.NgxLoadingComponent, selector: "ngx-loading", inputs: ["show", "config", "template"] }] }); }
9759
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvContentViewerComponent, selector: "kv-content-viewer", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: false, transformFunction: null }, arquivo: { classPropertyName: "arquivo", publicName: "arquivo", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, blob: { classPropertyName: "blob", publicName: "blob", isSignal: true, isRequired: false, transformFunction: null }, ekpContent: { classPropertyName: "ekpContent", publicName: "ekpContent", isSignal: true, isRequired: false, transformFunction: null }, extencaoDocumento: { classPropertyName: "extencaoDocumento", publicName: "extencaoDocumento", isSignal: false, isRequired: false, transformFunction: null }, totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: false, isRequired: false, transformFunction: null }, visualizadorDocumentos: { classPropertyName: "visualizadorDocumentos", publicName: "visualizadorDocumentos", isSignal: false, isRequired: false, transformFunction: null }, cardTemplate: { classPropertyName: "cardTemplate", publicName: "cardTemplate", isSignal: false, isRequired: false, transformFunction: null }, contentTemplate: { classPropertyName: "contentTemplate", publicName: "contentTemplate", isSignal: false, isRequired: false, transformFunction: null }, noDocumentSelectedTemplate: { classPropertyName: "noDocumentSelectedTemplate", publicName: "noDocumentSelectedTemplate", isSignal: false, isRequired: false, transformFunction: null }, noDocumentListTemplate: { classPropertyName: "noDocumentListTemplate", publicName: "noDocumentListTemplate", isSignal: false, isRequired: false, transformFunction: null }, indvisualizado: { classPropertyName: "indvisualizado", publicName: "indvisualizado", isSignal: false, isRequired: false, transformFunction: null }, btnTelaCheia: { classPropertyName: "btnTelaCheia", publicName: "btnTelaCheia", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { onScrollHandler: "onScrollHandler", onSelectFile: "onSelectFile" }, ngImport: i0, template: "<div class=\"flex flex-column md:flex-row gap-2 mt-3 custom-max-height\" style=\"height: 100%;\">\r\n <!-- Lista de documentos -->\r\n <div\r\n class=\"card-perfil overflow-x-hidden col-12 md:col-4 lg:col-3\"\r\n (scroll)=\"scrollHandler($event)\"\r\n [ngClass]=\"{\r\n 'overflow-y-scroll': dataSource().length > 0,\r\n 'overflow-y-hidden': dataSource().length === 0\r\n }\"\r\n style=\"position: relative; height: 100%; min-height: 15rem;\"\r\n >\r\n <div *ngIf=\"dataSource().length > 0; else emptyDocumentList\" class=\"col-12\">\r\n <!-- Lista de cards -->\r\n <div\r\n *ngFor=\"let option of dataSource(); trackBy: trackByFn\"\r\n class=\"card-normal outline-none border-round-xl w-full p-2 m-1 grid p-fluid flex flex-row flex-nowrap align-items-center justify-content-center cursor-pointer\"\r\n (click)=\"visualizarPreview(option)\"\r\n [ngClass]=\"{\r\n 'card-naoVisualizado': !isVisualizado(option),\r\n 'card-selected': option === arquivoPreview(),\r\n 'card-normal': option !== arquivoPreview(),\r\n }\"\r\n >\r\n <div class=\"flex flex-grow-1 ml-2 flex-column gap-1 m-0 p-0 overflow-hidden text-overflow-ellipsis \" style=\"max-width: 100%;\">\r\n <ng-container *ngIf=\"cardTemplate; else defaultTemplate\">\r\n <ng-container \r\n *ngTemplateOutlet=\"cardTemplate; context: { $implicit: option }\"\r\n ></ng-container>\r\n </ng-container>\r\n </div>\r\n <ng-template #defaultTemplate>\r\n <div class=\"card-common-style default-card\">\r\n <h1 class=\"font-bold text-base p-0 m-0\">Bem-vindo!</h1>\r\n <p class=\"text-sm mt-2\">\r\n Kv-file-preview aguardando um template...\r\n </p>\r\n <p class=\"font-bold text-sm p-0 m-0\">Data: {{ todayDate() }}</p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <ng-template #emptyDocumentList>\r\n @if(!noDocumentListTemplate) {\r\n <div class=\"text-center text-gray-600 mt-4 m-3\" style=\"height: 100%\">\r\n <div class=\" flex align-items-center gap-1\">\r\n <span class=\"material-symbols-outlined\"> inbox </span>\r\n <p>Nenhum documento dispon\u00EDvel.</p>\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"text-center mt-4 m-3\" style=\"height: 100%\">\r\n <ng-container *ngTemplateOutlet=\"noDocumentListTemplate\"></ng-container>\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n <!-- Contador de documentos - Fixo na parte inferior -->\r\n <div\r\n class=\"sticky-counter flex flex-row flex-1 px-2 justify-content-center p-2\"\r\n style=\"position: sticky; bottom: -10px; background-color: white\"\r\n >\r\n <span>{{ totalItensCarregado() }} de {{ totalRecords }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Visualizador -->\r\n<div id=\"fullscreenDiv\" class=\"card-perfil col-12 md:col-8 lg:col-9\" style=\"position: relative; height: 100%; overflow-y: auto;\">\r\n @if(btnTelaCheia)\r\n {\r\n <div class=\"grid\">\r\n <div class=\"col\"></div>\r\n <span id=\"fullscreenBtn\" (click)=\"alternarTelaCheia()\" class=\"material-symbols-outlined p-2 text-xl cursor-pointer\">\r\n open_in_full\r\n </span>\r\n </div>\r\n }\r\n @if(visualizadorDocumentos) {\r\n <ng-container *ngIf=\"arquivo(); else noDocumentSelected\">\r\n @if(isLoading) {\r\n <ngx-loading\r\n [show]=\"isLoading\"\r\n [config]=\"{ backdropBorderRadius: '3px', fullScreenBackdrop: false }\"\r\n ></ngx-loading>\r\n }\r\n <kv-file-viewer-novo\r\n *ngIf=\"extencaoDocumento !== 'ekp'\"\r\n [arquivo]=\"arquivo()!\"\r\n [type]=\"type()!\"\r\n [blob]=\"blob()!\"\r\n [width]=\"'100%'\" \r\n [height]=\"'100%'\"\r\n class=\"file-viewer\"\r\n style=\"max-height: 100%;\"\r\n >\r\n </kv-file-viewer-novo>\r\n\r\n <div\r\n id=\"html-content\"\r\n [innerHTML]=\"ekpContent()\"\r\n *ngIf=\"extencaoDocumento === 'ekp'\"\r\n class=\"ekp-content\"\r\n style=\"overflow-y: auto; max-height: 100%;\"\r\n ></div>\r\n </ng-container>\r\n } @else {\r\n <ng-container *ngIf=\"arquivoPreview(); else noDocumentSelected\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n contentTemplate;\r\n context: { $implicit: arquivoPreview() }\r\n \"\r\n style=\"overflow-y: auto; max-height: 100%;\"\r\n ></ng-container>\r\n </ng-container>\r\n }\r\n <ng-template #noDocumentSelected>\r\n @if(!noDocumentSelectedTemplate) {\r\n <div\r\n class=\"no-document-message flex flex-column align-items-center justify-content-center\"\r\n style=\"height: 100%; overflow-y: auto;\"\r\n >\r\n <p class=\"text-center text-gray-500\">\r\n Selecione um arquivo para visualiza\u00E7\u00E3o\r\n </p>\r\n <img\r\n [src]=\"\r\n 'https://work-assets.keevo.com.br/img/Digital_personal_files-pana_3.png'\r\n \"\r\n style=\"max-height: 50%; margin-top: 2rem;\"\r\n alt=\"\"\r\n />\r\n </div>\r\n } @else {\r\n <ng-container\r\n *ngTemplateOutlet=\"noDocumentSelectedTemplate\"\r\n ></ng-container>\r\n }\r\n </ng-template>\r\n</div>\r\n\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.farol-statuspublicacao{margin-right:.5rem;width:.35rem;border-radius:1rem;-webkit-border-radius:1rem;-moz-border-radius:1rem;-ms-border-radius:1rem;-o-border-radius:1rem}:host ::ng-deep .p-sidebar{border-radius:5px;position:absolute;height:var(--sidebar-height)}:host ::ng-deep .p-sidebar .p-sidebar-content{overflow:auto;border:1px solid #e5e7eb;border-radius:5px;margin-top:1rem}.card-perfil{border:1.5px solid #CBD5E1;background:#fff;border-radius:6px;max-height:100%}:host ::ng-deep .p-fieldset .p-fieldset-content{padding-bottom:0}:host ::ng-deep .p-sidebar .p-sidebar-close{display:none}.card-normal{border:1.5px solid #CBD5E1}.card-naoVisualizado{border-left:4px solid #e6671f!important}.parent-container{height:100%;display:flex;flex-direction:column}.file-viewer{margin:auto}.ekp-content{min-height:20rem;padding:1rem;overflow-y:auto;border-radius:5px}ngx-loading{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1000}.card{transition:all .3s ease;border:1px solid transparent}.card-normal:hover{border:1px solid #a9a9a9;box-shadow:0 4px 8px #0000001a}.card-selected{background-color:#f0f0f0;border:1px solid #c0c0c0;box-shadow:0 6px 12px #00000026;transform:scale(1.02)}.loading-spinner{display:flex;align-items:center;justify-content:center;height:100%;font-size:1.5rem;color:#666}#html-content{width:100%;height:100%;overflow-y:auto}:host ::ng-deep .list-card-button .kv-button{width:22px;height:22px}:host ::ng-deep .list-card-button .kv-button .material-symbols-outlined.only-icon.icon-normal[_ngcontent-ng-c4083184952]{font-size:1rem}.download-icon{font-size:20px;cursor:pointer;transition:transform .3s ease,color .3s ease}.download-icon:hover{color:#0f6cbd;transform:scale(1.2)}\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"] }, { kind: "component", type: KvFileViewerNovoComponent, selector: "kv-file-viewer-novo", inputs: ["arquivo", "type", "blob", "width", "height"] }, { kind: "component", type: i1$5.NgxLoadingComponent, selector: "ngx-loading", inputs: ["show", "config", "template"] }] }); }
9760
9760
  }
9761
9761
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvContentViewerComponent, decorators: [{
9762
9762
  type: Component,
9763
- args: [{ selector: 'kv-content-viewer', template: "<div class=\"flex flex-column md:flex-row gap-2 mt-3 custom-max-height\" style=\"height: 100%;\">\r\n <!-- Lista de documentos -->\r\n <div\r\n class=\"card-perfil overflow-x-hidden col-12 md:col-4 lg:col-3\"\r\n (scroll)=\"scrollHandler($event)\"\r\n [ngClass]=\"{\r\n 'overflow-y-scroll': dataSource().length > 0,\r\n 'overflow-y-hidden': dataSource().length === 0\r\n }\"\r\n style=\"position: relative; height: 100%; min-height: 15rem;\"\r\n >\r\n <div *ngIf=\"dataSource().length > 0; else emptyDocumentList\" class=\"col-12\">\r\n <!-- Lista de cards -->\r\n <div\r\n *ngFor=\"let option of dataSource(); trackBy: trackByFn\"\r\n class=\"card-normal outline-none border-round-xl w-full p-2 m-1 grid p-fluid flex flex-row flex-nowrap align-items-center justify-content-center cursor-pointer\"\r\n (click)=\"visualizarPreview(option)\"\r\n [ngClass]=\"{\r\n 'card-naoVisualizado': !isVisualizado(option),\r\n 'card-selected': option === arquivoPreview(),\r\n 'card-normal': option !== arquivoPreview(),\r\n }\"\r\n >\r\n <div class=\"flex flex-grow-1 ml-2 flex-column gap-1 m-0 p-0 overflow-hidden text-overflow-ellipsis \" style=\"max-width: 100%;\">\r\n <ng-container *ngIf=\"cardTemplate; else defaultTemplate\">\r\n <ng-container \r\n *ngTemplateOutlet=\"cardTemplate; context: { $implicit: option }\"\r\n ></ng-container>\r\n </ng-container>\r\n </div>\r\n <ng-template #defaultTemplate>\r\n <div class=\"card-common-style default-card\">\r\n <h1 class=\"font-bold text-base p-0 m-0\">Bem-vindo!</h1>\r\n <p class=\"text-sm mt-2\">\r\n Kv-file-preview aguardando um template...\r\n </p>\r\n <p class=\"font-bold text-sm p-0 m-0\">Data: {{ todayDate() }}</p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <ng-template #emptyDocumentList>\r\n @if(!noDocumentListTemplate) {\r\n <div class=\"text-center text-gray-600 mt-4 m-3\" style=\"height: 100%\">\r\n <div class=\" flex align-items-center gap-1\">\r\n <span class=\"material-symbols-outlined\"> inbox </span>\r\n <p>Nenhum documento dispon\u00EDvel.</p>\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"text-center mt-4 m-3\" style=\"height: 100%\">\r\n <ng-container *ngTemplateOutlet=\"noDocumentListTemplate\"></ng-container>\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n <!-- Contador de documentos - Fixo na parte inferior -->\r\n <div\r\n class=\"sticky-counter flex flex-row flex-1 px-2 justify-content-center p-2\"\r\n style=\"position: sticky; bottom: 0; background-color: white\"\r\n >\r\n <span>{{ totalItensCarregado() }} de {{ totalRecords }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Visualizador -->\r\n <div id=\"fullscreenDiv\" class=\"card-perfil col-12 md:col-8 lg:col-9\" style=\"position: relative; height: 100%;\">\r\n @if(btnTelaCheia)\r\n {\r\n <div class=\"grid\">\r\n <div class=\"col\"></div>\r\n <span id=\"fullscreenBtn\" (click)=\"alternarTelaCheia()\" class=\"material-symbols-outlined p-2 text-xl cursor-pointer\">\r\n open_in_full\r\n </span>\r\n </div>\r\n }\r\n @if(visualizadorDocumentos) {\r\n <ng-container *ngIf=\"arquivo(); else noDocumentSelected\">\r\n @if(isLoading) {\r\n <ngx-loading\r\n [show]=\"isLoading\"\r\n [config]=\"{ backdropBorderRadius: '3px', fullScreenBackdrop: false }\"\r\n ></ngx-loading>\r\n }\r\n <kv-file-viewer-novo\r\n *ngIf=\"extencaoDocumento !== 'ekp'\"\r\n [arquivo]=\"arquivo()!\"\r\n [type]=\"type()!\"\r\n [blob]=\"blob()!\"\r\n [width]=\"'100%'\" \r\n [height]=\"'100%'\"\r\n class=\"file-viewer\"\r\n >\r\n </kv-file-viewer-novo>\r\n \r\n <div\r\n id=\"html-content\"\r\n [innerHTML]=\"ekpContent()\"\r\n *ngIf=\"extencaoDocumento === 'ekp'\"\r\n class=\"ekp-content\"\r\n ></div>\r\n </ng-container>\r\n } @else {\r\n <ng-container *ngIf=\"arquivoPreview(); else noDocumentSelected\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n contentTemplate;\r\n context: { $implicit: arquivoPreview() }\r\n \"\r\n ></ng-container>\r\n </ng-container>\r\n }\r\n <ng-template #noDocumentSelected>\r\n @if(!noDocumentSelectedTemplate) {\r\n <div\r\n class=\"no-document-message flex flex-column align-items-center justify-content-center\"\r\n style=\"height: 100%\"\r\n >\r\n <p class=\"text-center text-gray-500\">\r\n Selecione um arquivo para visualiza\u00E7\u00E3o\r\n </p>\r\n <img\r\n [src]=\"\r\n 'https://work-assets.keevo.com.br/img/Digital_personal_files-pana_3.png'\r\n \"\r\n style=\"max-height: 50%; margin-top: 2rem;\"\r\n alt=\"\"\r\n />\r\n </div>\r\n } @else {\r\n <ng-container\r\n *ngTemplateOutlet=\"noDocumentSelectedTemplate\"\r\n ></ng-container>\r\n }\r\n </ng-template>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.farol-statuspublicacao{margin-right:.5rem;width:.35rem;border-radius:1rem;-webkit-border-radius:1rem;-moz-border-radius:1rem;-ms-border-radius:1rem;-o-border-radius:1rem}:host ::ng-deep .p-sidebar{border-radius:5px;position:absolute;height:var(--sidebar-height)}:host ::ng-deep .p-sidebar .p-sidebar-content{overflow:auto;border:1px solid #e5e7eb;border-radius:5px;margin-top:1rem}.card-perfil{border:1.5px solid #CBD5E1;background:#fff;border-radius:6px;max-height:100%}:host ::ng-deep .p-fieldset .p-fieldset-content{padding-bottom:0}:host ::ng-deep .p-sidebar .p-sidebar-close{display:none}.card-normal{border:1.5px solid #CBD5E1}.card-naoVisualizado{border-left:4px solid #e6671f!important}.parent-container{height:100%;display:flex;flex-direction:column}.file-viewer{margin:auto}.ekp-content{min-height:20rem;padding:1rem;overflow-y:auto;border-radius:5px}ngx-loading{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1000}.card{transition:all .3s ease;border:1px solid transparent}.card-normal:hover{border:1px solid #a9a9a9;box-shadow:0 4px 8px #0000001a}.card-selected{background-color:#f0f0f0;border:1px solid #c0c0c0;box-shadow:0 6px 12px #00000026;transform:scale(1.02)}.loading-spinner{display:flex;align-items:center;justify-content:center;height:100%;font-size:1.5rem;color:#666}#html-content{width:100%;height:100%;overflow-y:auto}:host ::ng-deep .list-card-button .kv-button{width:22px;height:22px}:host ::ng-deep .list-card-button .kv-button .material-symbols-outlined.only-icon.icon-normal[_ngcontent-ng-c4083184952]{font-size:1rem}.download-icon{font-size:20px;cursor:pointer;transition:transform .3s ease,color .3s ease}.download-icon:hover{color:#0f6cbd;transform:scale(1.2)}\n"] }]
9763
+ args: [{ selector: 'kv-content-viewer', template: "<div class=\"flex flex-column md:flex-row gap-2 mt-3 custom-max-height\" style=\"height: 100%;\">\r\n <!-- Lista de documentos -->\r\n <div\r\n class=\"card-perfil overflow-x-hidden col-12 md:col-4 lg:col-3\"\r\n (scroll)=\"scrollHandler($event)\"\r\n [ngClass]=\"{\r\n 'overflow-y-scroll': dataSource().length > 0,\r\n 'overflow-y-hidden': dataSource().length === 0\r\n }\"\r\n style=\"position: relative; height: 100%; min-height: 15rem;\"\r\n >\r\n <div *ngIf=\"dataSource().length > 0; else emptyDocumentList\" class=\"col-12\">\r\n <!-- Lista de cards -->\r\n <div\r\n *ngFor=\"let option of dataSource(); trackBy: trackByFn\"\r\n class=\"card-normal outline-none border-round-xl w-full p-2 m-1 grid p-fluid flex flex-row flex-nowrap align-items-center justify-content-center cursor-pointer\"\r\n (click)=\"visualizarPreview(option)\"\r\n [ngClass]=\"{\r\n 'card-naoVisualizado': !isVisualizado(option),\r\n 'card-selected': option === arquivoPreview(),\r\n 'card-normal': option !== arquivoPreview(),\r\n }\"\r\n >\r\n <div class=\"flex flex-grow-1 ml-2 flex-column gap-1 m-0 p-0 overflow-hidden text-overflow-ellipsis \" style=\"max-width: 100%;\">\r\n <ng-container *ngIf=\"cardTemplate; else defaultTemplate\">\r\n <ng-container \r\n *ngTemplateOutlet=\"cardTemplate; context: { $implicit: option }\"\r\n ></ng-container>\r\n </ng-container>\r\n </div>\r\n <ng-template #defaultTemplate>\r\n <div class=\"card-common-style default-card\">\r\n <h1 class=\"font-bold text-base p-0 m-0\">Bem-vindo!</h1>\r\n <p class=\"text-sm mt-2\">\r\n Kv-file-preview aguardando um template...\r\n </p>\r\n <p class=\"font-bold text-sm p-0 m-0\">Data: {{ todayDate() }}</p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <ng-template #emptyDocumentList>\r\n @if(!noDocumentListTemplate) {\r\n <div class=\"text-center text-gray-600 mt-4 m-3\" style=\"height: 100%\">\r\n <div class=\" flex align-items-center gap-1\">\r\n <span class=\"material-symbols-outlined\"> inbox </span>\r\n <p>Nenhum documento dispon\u00EDvel.</p>\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"text-center mt-4 m-3\" style=\"height: 100%\">\r\n <ng-container *ngTemplateOutlet=\"noDocumentListTemplate\"></ng-container>\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n <!-- Contador de documentos - Fixo na parte inferior -->\r\n <div\r\n class=\"sticky-counter flex flex-row flex-1 px-2 justify-content-center p-2\"\r\n style=\"position: sticky; bottom: -10px; background-color: white\"\r\n >\r\n <span>{{ totalItensCarregado() }} de {{ totalRecords }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Visualizador -->\r\n<div id=\"fullscreenDiv\" class=\"card-perfil col-12 md:col-8 lg:col-9\" style=\"position: relative; height: 100%; overflow-y: auto;\">\r\n @if(btnTelaCheia)\r\n {\r\n <div class=\"grid\">\r\n <div class=\"col\"></div>\r\n <span id=\"fullscreenBtn\" (click)=\"alternarTelaCheia()\" class=\"material-symbols-outlined p-2 text-xl cursor-pointer\">\r\n open_in_full\r\n </span>\r\n </div>\r\n }\r\n @if(visualizadorDocumentos) {\r\n <ng-container *ngIf=\"arquivo(); else noDocumentSelected\">\r\n @if(isLoading) {\r\n <ngx-loading\r\n [show]=\"isLoading\"\r\n [config]=\"{ backdropBorderRadius: '3px', fullScreenBackdrop: false }\"\r\n ></ngx-loading>\r\n }\r\n <kv-file-viewer-novo\r\n *ngIf=\"extencaoDocumento !== 'ekp'\"\r\n [arquivo]=\"arquivo()!\"\r\n [type]=\"type()!\"\r\n [blob]=\"blob()!\"\r\n [width]=\"'100%'\" \r\n [height]=\"'100%'\"\r\n class=\"file-viewer\"\r\n style=\"max-height: 100%;\"\r\n >\r\n </kv-file-viewer-novo>\r\n\r\n <div\r\n id=\"html-content\"\r\n [innerHTML]=\"ekpContent()\"\r\n *ngIf=\"extencaoDocumento === 'ekp'\"\r\n class=\"ekp-content\"\r\n style=\"overflow-y: auto; max-height: 100%;\"\r\n ></div>\r\n </ng-container>\r\n } @else {\r\n <ng-container *ngIf=\"arquivoPreview(); else noDocumentSelected\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n contentTemplate;\r\n context: { $implicit: arquivoPreview() }\r\n \"\r\n style=\"overflow-y: auto; max-height: 100%;\"\r\n ></ng-container>\r\n </ng-container>\r\n }\r\n <ng-template #noDocumentSelected>\r\n @if(!noDocumentSelectedTemplate) {\r\n <div\r\n class=\"no-document-message flex flex-column align-items-center justify-content-center\"\r\n style=\"height: 100%; overflow-y: auto;\"\r\n >\r\n <p class=\"text-center text-gray-500\">\r\n Selecione um arquivo para visualiza\u00E7\u00E3o\r\n </p>\r\n <img\r\n [src]=\"\r\n 'https://work-assets.keevo.com.br/img/Digital_personal_files-pana_3.png'\r\n \"\r\n style=\"max-height: 50%; margin-top: 2rem;\"\r\n alt=\"\"\r\n />\r\n </div>\r\n } @else {\r\n <ng-container\r\n *ngTemplateOutlet=\"noDocumentSelectedTemplate\"\r\n ></ng-container>\r\n }\r\n </ng-template>\r\n</div>\r\n\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.farol-statuspublicacao{margin-right:.5rem;width:.35rem;border-radius:1rem;-webkit-border-radius:1rem;-moz-border-radius:1rem;-ms-border-radius:1rem;-o-border-radius:1rem}:host ::ng-deep .p-sidebar{border-radius:5px;position:absolute;height:var(--sidebar-height)}:host ::ng-deep .p-sidebar .p-sidebar-content{overflow:auto;border:1px solid #e5e7eb;border-radius:5px;margin-top:1rem}.card-perfil{border:1.5px solid #CBD5E1;background:#fff;border-radius:6px;max-height:100%}:host ::ng-deep .p-fieldset .p-fieldset-content{padding-bottom:0}:host ::ng-deep .p-sidebar .p-sidebar-close{display:none}.card-normal{border:1.5px solid #CBD5E1}.card-naoVisualizado{border-left:4px solid #e6671f!important}.parent-container{height:100%;display:flex;flex-direction:column}.file-viewer{margin:auto}.ekp-content{min-height:20rem;padding:1rem;overflow-y:auto;border-radius:5px}ngx-loading{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1000}.card{transition:all .3s ease;border:1px solid transparent}.card-normal:hover{border:1px solid #a9a9a9;box-shadow:0 4px 8px #0000001a}.card-selected{background-color:#f0f0f0;border:1px solid #c0c0c0;box-shadow:0 6px 12px #00000026;transform:scale(1.02)}.loading-spinner{display:flex;align-items:center;justify-content:center;height:100%;font-size:1.5rem;color:#666}#html-content{width:100%;height:100%;overflow-y:auto}:host ::ng-deep .list-card-button .kv-button{width:22px;height:22px}:host ::ng-deep .list-card-button .kv-button .material-symbols-outlined.only-icon.icon-normal[_ngcontent-ng-c4083184952]{font-size:1rem}.download-icon{font-size:20px;cursor:pointer;transition:transform .3s ease,color .3s ease}.download-icon:hover{color:#0f6cbd;transform:scale(1.2)}\n"] }]
9764
9764
  }], propDecorators: { extencaoDocumento: [{
9765
9765
  type: Input
9766
9766
  }], totalRecords: [{