keevo-components 2.0.88 → 2.0.89
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.
- package/esm2022/lib/api/services/pdf.service.mjs +48 -0
- package/esm2022/lib/components/kv-inputs/kv-editor/components/kv-report-modal/kv-report-modal.component.mjs +40 -0
- package/esm2022/lib/components/kv-inputs/kv-editor/kv-editor.component.mjs +229 -43
- package/esm2022/lib/components/kv-inputs/kv-inputs.module.mjs +28 -4
- package/esm2022/lib/components/kv-inputs/kv-tree-multi-select/kv-tree-multi-select.component.mjs +3 -3
- package/esm2022/lib/components/kv-tags/kv-tags.component.mjs +2 -2
- package/fesm2022/keevo-components.mjs +518 -238
- package/fesm2022/keevo-components.mjs.map +1 -1
- package/lib/api/services/pdf.service.d.ts +7 -0
- package/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.d.ts +1 -1
- package/lib/components/kv-inputs/kv-editor/components/kv-report-modal/kv-report-modal.component.d.ts +14 -0
- package/lib/components/kv-inputs/kv-editor/kv-editor.component.d.ts +46 -9
- package/lib/components/kv-inputs/kv-inputs.module.d.ts +7 -1
- package/lib/components/kv-table/kv-table.component.d.ts +1 -1
- package/lib/components/kv-table-edit/kv-table-edit.component.d.ts +1 -1
- package/lib/components/kv-table-expandable/kv-table-expandable.component.d.ts +1 -1
- package/lib/components/kv-tag/kv-tag.component.d.ts +1 -1
- package/package.json +5 -3
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// pdf.service.ts (VERSÃO FINAL - com html2canvas)
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import jsPDF from 'jspdf';
|
|
4
|
+
import html2canvas from 'html2canvas';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class PdfService {
|
|
7
|
+
constructor() { }
|
|
8
|
+
async gerarPdfBlobPorElementoId(elementId) {
|
|
9
|
+
const element = document.getElementById(elementId);
|
|
10
|
+
if (!element) {
|
|
11
|
+
throw new Error(`Elemento com id "${elementId}" para renderização do PDF não foi encontrado.`);
|
|
12
|
+
}
|
|
13
|
+
const canvas = await html2canvas(element, {
|
|
14
|
+
scale: 2, // Boa relação entre qualidade e performance
|
|
15
|
+
useCORS: true,
|
|
16
|
+
});
|
|
17
|
+
const imgData = canvas.toDataURL('image/png');
|
|
18
|
+
const pdf = new jsPDF({
|
|
19
|
+
orientation: 'p',
|
|
20
|
+
unit: 'mm',
|
|
21
|
+
format: 'a4'
|
|
22
|
+
});
|
|
23
|
+
const pdfWidth = pdf.internal.pageSize.getWidth();
|
|
24
|
+
const pdfPageHeight = pdf.internal.pageSize.getHeight();
|
|
25
|
+
const imgProps = pdf.getImageProperties(imgData);
|
|
26
|
+
const imgHeight = (imgProps.height * pdfWidth) / imgProps.width;
|
|
27
|
+
let heightLeft = imgHeight;
|
|
28
|
+
let position = 0;
|
|
29
|
+
pdf.addImage(imgData, 'PNG', 0, position, pdfWidth, imgHeight);
|
|
30
|
+
heightLeft -= pdfPageHeight;
|
|
31
|
+
while (heightLeft > 0) {
|
|
32
|
+
position -= pdfPageHeight;
|
|
33
|
+
pdf.addPage();
|
|
34
|
+
pdf.addImage(imgData, 'PNG', 0, position, pdfWidth, imgHeight);
|
|
35
|
+
heightLeft -= pdfPageHeight;
|
|
36
|
+
}
|
|
37
|
+
return pdf.output('blob');
|
|
38
|
+
}
|
|
39
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: PdfService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
40
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: PdfService, providedIn: 'root' }); }
|
|
41
|
+
}
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: PdfService, decorators: [{
|
|
43
|
+
type: Injectable,
|
|
44
|
+
args: [{
|
|
45
|
+
providedIn: 'root'
|
|
46
|
+
}]
|
|
47
|
+
}], ctorParameters: () => [] });
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvYXBpL3NlcnZpY2VzL3BkZi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtEQUFrRDtBQUVsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLFdBQVcsTUFBTSxhQUFhLENBQUM7O0FBS3RDLE1BQU0sT0FBTyxVQUFVO0lBRW5CLGdCQUFnQixDQUFDO0lBRVYsS0FBSyxDQUFDLHlCQUF5QixDQUFDLFNBQWlCO1FBRXBELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsU0FBUyxnREFBZ0QsQ0FBQyxDQUFDO1FBQ25HLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxPQUFPLEVBQUU7WUFDdEMsS0FBSyxFQUFFLENBQUMsRUFBRSw0Q0FBNEM7WUFDdEQsT0FBTyxFQUFFLElBQUk7U0FDaEIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU5QyxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQztZQUNsQixXQUFXLEVBQUUsR0FBRztZQUNoQixJQUFJLEVBQUUsSUFBSTtZQUNWLE1BQU0sRUFBRSxJQUFJO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEQsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDeEQsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pELE1BQU0sU0FBUyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBRWhFLElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFFakIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQy9ELFVBQVUsSUFBSSxhQUFhLENBQUM7UUFFNUIsT0FBTyxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEIsUUFBUSxJQUFJLGFBQWEsQ0FBQztZQUMxQixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDZCxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDL0QsVUFBVSxJQUFJLGFBQWEsQ0FBQztRQUNoQyxDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlCLENBQUM7OEdBM0NRLFVBQVU7a0hBQVYsVUFBVSxjQUZQLE1BQU07OzJGQUVULFVBQVU7a0JBSHRCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gcGRmLnNlcnZpY2UudHMgKFZFUlPDg08gRklOQUwgLSBjb20gaHRtbDJjYW52YXMpXHJcblxyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBqc1BERiBmcm9tICdqc3BkZic7XHJcbmltcG9ydCBodG1sMmNhbnZhcyBmcm9tICdodG1sMmNhbnZhcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFBkZlNlcnZpY2Uge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdlcmFyUGRmQmxvYlBvckVsZW1lbnRvSWQoZWxlbWVudElkOiBzdHJpbmcpOiBQcm9taXNlPEJsb2I+IHtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcclxuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbGVtZW50byBjb20gaWQgXCIke2VsZW1lbnRJZH1cIiBwYXJhIHJlbmRlcml6YcOnw6NvIGRvIFBERiBuw6NvIGZvaSBlbmNvbnRyYWRvLmApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY2FudmFzID0gYXdhaXQgaHRtbDJjYW52YXMoZWxlbWVudCwge1xyXG4gICAgICAgICAgICBzY2FsZTogMiwgLy8gQm9hIHJlbGHDp8OjbyBlbnRyZSBxdWFsaWRhZGUgZSBwZXJmb3JtYW5jZVxyXG4gICAgICAgICAgICB1c2VDT1JTOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBpbWdEYXRhID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBkZiA9IG5ldyBqc1BERih7XHJcbiAgICAgICAgICAgIG9yaWVudGF0aW9uOiAncCcsXHJcbiAgICAgICAgICAgIHVuaXQ6ICdtbScsXHJcbiAgICAgICAgICAgIGZvcm1hdDogJ2E0J1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBwZGZXaWR0aCA9IHBkZi5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRXaWR0aCgpO1xyXG4gICAgICAgIGNvbnN0IHBkZlBhZ2VIZWlnaHQgPSBwZGYuaW50ZXJuYWwucGFnZVNpemUuZ2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgY29uc3QgaW1nUHJvcHMgPSBwZGYuZ2V0SW1hZ2VQcm9wZXJ0aWVzKGltZ0RhdGEpO1xyXG4gICAgICAgIGNvbnN0IGltZ0hlaWdodCA9IChpbWdQcm9wcy5oZWlnaHQgKiBwZGZXaWR0aCkgLyBpbWdQcm9wcy53aWR0aDtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgaGVpZ2h0TGVmdCA9IGltZ0hlaWdodDtcclxuICAgICAgICBsZXQgcG9zaXRpb24gPSAwO1xyXG5cclxuICAgICAgICBwZGYuYWRkSW1hZ2UoaW1nRGF0YSwgJ1BORycsIDAsIHBvc2l0aW9uLCBwZGZXaWR0aCwgaW1nSGVpZ2h0KTtcclxuICAgICAgICBoZWlnaHRMZWZ0IC09IHBkZlBhZ2VIZWlnaHQ7XHJcblxyXG4gICAgICAgIHdoaWxlIChoZWlnaHRMZWZ0ID4gMCkge1xyXG4gICAgICAgICAgICBwb3NpdGlvbiAtPSBwZGZQYWdlSGVpZ2h0O1xyXG4gICAgICAgICAgICBwZGYuYWRkUGFnZSgpO1xyXG4gICAgICAgICAgICBwZGYuYWRkSW1hZ2UoaW1nRGF0YSwgJ1BORycsIDAsIHBvc2l0aW9uLCBwZGZXaWR0aCwgaW1nSGVpZ2h0KTtcclxuICAgICAgICAgICAgaGVpZ2h0TGVmdCAtPSBwZGZQYWdlSGVpZ2h0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHBkZi5vdXRwdXQoJ2Jsb2InKTtcclxuICAgIH1cclxufSJdfQ==
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Component, inject } from '@angular/core';
|
|
2
|
+
import { DomSanitizer } from '@angular/platform-browser';
|
|
3
|
+
import { DynamicDialogConfig } from 'primeng/dynamicdialog';
|
|
4
|
+
import { CommonModule } from '@angular/common';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class KvReportModalComponent {
|
|
7
|
+
constructor() {
|
|
8
|
+
// Injeções
|
|
9
|
+
this.dynamicDialogConfig = inject(DynamicDialogConfig);
|
|
10
|
+
this.sanitizer = inject(DomSanitizer);
|
|
11
|
+
// A única URL que precisamos
|
|
12
|
+
this.pdfUrl = null;
|
|
13
|
+
this.objectUrl = null;
|
|
14
|
+
}
|
|
15
|
+
ngOnInit() {
|
|
16
|
+
// 1. Recebe o Blob PRONTO vindo do componente pai
|
|
17
|
+
const pdfBlob = this.dynamicDialogConfig.data?.pdfBlob;
|
|
18
|
+
if (pdfBlob) {
|
|
19
|
+
// 2. Cria a URL segura para o iframe
|
|
20
|
+
this.objectUrl = URL.createObjectURL(pdfBlob);
|
|
21
|
+
this.pdfUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.objectUrl);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
console.error("O modal do relatório foi aberto sem um Blob de PDF.");
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// Limpa a memória quando o modal é fechado
|
|
28
|
+
ngOnDestroy() {
|
|
29
|
+
if (this.objectUrl) {
|
|
30
|
+
URL.revokeObjectURL(this.objectUrl);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvReportModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
34
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvReportModalComponent, isStandalone: true, selector: "kv-report-modal", ngImport: i0, template: "@if (pdfUrl) {\r\n<div class=\"h-full w-full overflow-hidden\">\r\n <iframe\r\n [src]=\"pdfUrl\"\r\n class=\"w-full h-full\"\r\n style=\"border: none\"\r\n title=\"Pr\u00E9-visualiza\u00E7\u00E3o do Relat\u00F3rio\"\r\n >\r\n </iframe>\r\n</div>\r\n} @else {\r\n<div class=\"w-full h-full flex items-center justify-center bg-gray-200\">\r\n <div class=\"text-center text-red-600\">\r\n <p class=\"font-bold\">Erro!</p>\r\n <p>N\u00E3o foi poss\u00EDvel carregar o arquivo do relat\u00F3rio.</p>\r\n </div>\r\n</div>\r\n}\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
|
|
35
|
+
}
|
|
36
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvReportModalComponent, decorators: [{
|
|
37
|
+
type: Component,
|
|
38
|
+
args: [{ selector: 'kv-report-modal', standalone: true, imports: [CommonModule], template: "@if (pdfUrl) {\r\n<div class=\"h-full w-full overflow-hidden\">\r\n <iframe\r\n [src]=\"pdfUrl\"\r\n class=\"w-full h-full\"\r\n style=\"border: none\"\r\n title=\"Pr\u00E9-visualiza\u00E7\u00E3o do Relat\u00F3rio\"\r\n >\r\n </iframe>\r\n</div>\r\n} @else {\r\n<div class=\"w-full h-full flex items-center justify-center bg-gray-200\">\r\n <div class=\"text-center text-red-600\">\r\n <p class=\"font-bold\">Erro!</p>\r\n <p>N\u00E3o foi poss\u00EDvel carregar o arquivo do relat\u00F3rio.</p>\r\n </div>\r\n</div>\r\n}\r\n" }]
|
|
39
|
+
}] });
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtcmVwb3J0LW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWlucHV0cy9rdi1lZGl0b3IvY29tcG9uZW50cy9rdi1yZXBvcnQtbW9kYWwva3YtcmVwb3J0LW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWlucHV0cy9rdi1lZGl0b3IvY29tcG9uZW50cy9rdi1yZXBvcnQtbW9kYWwva3YtcmVwb3J0LW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFtQixNQUFNLDJCQUEyQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFTL0MsTUFBTSxPQUFPLHNCQUFzQjtJQVBuQztRQVFFLFdBQVc7UUFDWCx3QkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNsRCxjQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRWpDLDZCQUE2QjtRQUM3QixXQUFNLEdBQTJCLElBQUksQ0FBQztRQUM5QixjQUFTLEdBQWtCLElBQUksQ0FBQztLQXFCekM7SUFuQkMsUUFBUTtRQUNOLGtEQUFrRDtRQUNsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQztRQUV2RCxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1oscUNBQXFDO1lBQ3JDLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlFLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7SUFDSCxDQUFDO0lBRUQsMkNBQTJDO0lBQzNDLFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQzs4R0EzQlUsc0JBQXNCO2tHQUF0QixzQkFBc0IsMkVDWm5DLHFpQkFrQkEseUREVlksWUFBWTs7MkZBSVgsc0JBQXNCO2tCQVBsQyxTQUFTOytCQUNFLGlCQUFpQixjQUNmLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVSZXNvdXJjZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAna3YtcmVwb3J0LW1vZGFsJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9rdi1yZXBvcnQtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2t2LXJlcG9ydC1tb2RhbC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBLdlJlcG9ydE1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIC8vIEluamXDp8O1ZXNcclxuICBkeW5hbWljRGlhbG9nQ29uZmlnID0gaW5qZWN0KER5bmFtaWNEaWFsb2dDb25maWcpO1xyXG4gIHNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xyXG5cclxuICAvLyBBIMO6bmljYSBVUkwgcXVlIHByZWNpc2Ftb3NcclxuICBwZGZVcmw6IFNhZmVSZXNvdXJjZVVybCB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgb2JqZWN0VXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvLyAxLiBSZWNlYmUgbyBCbG9iIFBST05UTyB2aW5kbyBkbyBjb21wb25lbnRlIHBhaVxyXG4gICAgY29uc3QgcGRmQmxvYiA9IHRoaXMuZHluYW1pY0RpYWxvZ0NvbmZpZy5kYXRhPy5wZGZCbG9iO1xyXG5cclxuICAgIGlmIChwZGZCbG9iKSB7XHJcbiAgICAgIC8vIDIuIENyaWEgYSBVUkwgc2VndXJhIHBhcmEgbyBpZnJhbWVcclxuICAgICAgdGhpcy5vYmplY3RVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHBkZkJsb2IpO1xyXG4gICAgICB0aGlzLnBkZlVybCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh0aGlzLm9iamVjdFVybCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiTyBtb2RhbCBkbyByZWxhdMOzcmlvIGZvaSBhYmVydG8gc2VtIHVtIEJsb2IgZGUgUERGLlwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIExpbXBhIGEgbWVtw7NyaWEgcXVhbmRvIG8gbW9kYWwgw6kgZmVjaGFkb1xyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMub2JqZWN0VXJsKSB7XHJcbiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodGhpcy5vYmplY3RVcmwpO1xyXG4gICAgfVxyXG4gIH1cclxufSIsIkBpZiAocGRmVXJsKSB7XHJcbjxkaXYgY2xhc3M9XCJoLWZ1bGwgdy1mdWxsIG92ZXJmbG93LWhpZGRlblwiPlxyXG4gIDxpZnJhbWVcclxuICAgIFtzcmNdPVwicGRmVXJsXCJcclxuICAgIGNsYXNzPVwidy1mdWxsIGgtZnVsbFwiXHJcbiAgICBzdHlsZT1cImJvcmRlcjogbm9uZVwiXHJcbiAgICB0aXRsZT1cIlByw6ktdmlzdWFsaXphw6fDo28gZG8gUmVsYXTDs3Jpb1wiXHJcbiAgPlxyXG4gIDwvaWZyYW1lPlxyXG48L2Rpdj5cclxufSBAZWxzZSB7XHJcbjxkaXYgY2xhc3M9XCJ3LWZ1bGwgaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLWdyYXktMjAwXCI+XHJcbiAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHRleHQtcmVkLTYwMFwiPlxyXG4gICAgPHAgY2xhc3M9XCJmb250LWJvbGRcIj5FcnJvITwvcD5cclxuICAgIDxwPk7Do28gZm9pIHBvc3PDrXZlbCBjYXJyZWdhciBvIGFycXVpdm8gZG8gcmVsYXTDs3Jpby48L3A+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG59XHJcbiJdfQ==
|