lib-firas-digi 0.0.1

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/README.md ADDED
@@ -0,0 +1,24 @@
1
+ # LibFirasDigi
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.1.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project lib-firas-digi` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project lib-firas-digi`.
8
+ > Note: Don't forget to add `--project lib-firas-digi` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build lib-firas-digi` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+
14
+ ## Publishing
15
+
16
+ After building your library with `ng build lib-firas-digi`, go to the dist folder `cd dist/lib-firas-digi` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test lib-firas-digi` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
+
22
+ ## Further help
23
+
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
@@ -0,0 +1,19 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class LibFirasDigiComponent {
4
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibFirasDigiComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: LibFirasDigiComponent, isStandalone: true, selector: "lib-lib-firas-digi", ngImport: i0, template: `
6
+ <p>
7
+ lib-firas-digi works!
8
+ </p>
9
+ `, isInline: true, styles: [""] });
10
+ }
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibFirasDigiComponent, decorators: [{
12
+ type: Component,
13
+ args: [{ selector: 'lib-lib-firas-digi', standalone: true, imports: [], template: `
14
+ <p>
15
+ lib-firas-digi works!
16
+ </p>
17
+ ` }]
18
+ }] });
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLWZpcmFzLWRpZ2kuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbGliLWZpcmFzLWRpZ2kvc3JjL2xpYi9saWItZmlyYXMtZGlnaS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFhMUMsTUFBTSxPQUFPLHFCQUFxQjt3R0FBckIscUJBQXFCOzRGQUFyQixxQkFBcUIsOEVBUHRCOzs7O0dBSVQ7OzRGQUdVLHFCQUFxQjtrQkFYakMsU0FBUzsrQkFDRSxvQkFBb0IsY0FDbEIsSUFBSSxXQUNQLEVBQUUsWUFDRDs7OztHQUlUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1saWItZmlyYXMtZGlnaScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPHA+XHJcbiAgICAgIGxpYi1maXJhcy1kaWdpIHdvcmtzIVxyXG4gICAgPC9wPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBgYFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTGliRmlyYXNEaWdpQ29tcG9uZW50IHtcclxuXHJcbn1cclxuIl19
@@ -0,0 +1,14 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class LibFirasDigiService {
4
+ constructor() { }
5
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibFirasDigiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibFirasDigiService, providedIn: 'root' });
7
+ }
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibFirasDigiService, decorators: [{
9
+ type: Injectable,
10
+ args: [{
11
+ providedIn: 'root'
12
+ }]
13
+ }], ctorParameters: () => [] });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLWZpcmFzLWRpZ2kuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi1maXJhcy1kaWdpL3NyYy9saWIvbGliLWZpcmFzLWRpZ2kuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sbUJBQW1CO0lBRTlCLGdCQUFnQixDQUFDO3dHQUZOLG1CQUFtQjs0R0FBbkIsbUJBQW1CLGNBRmxCLE1BQU07OzRGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaWJGaXJhc0RpZ2lTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxufVxyXG4iXX0=
@@ -0,0 +1,39 @@
1
+ import { NgFor } from '@angular/common';
2
+ import { Component } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/router";
5
+ export class PdfExplorerComponent {
6
+ router;
7
+ pdfFiles = [
8
+ { name: 'Sample PDF 1', src: 'assets/pdfs/sample1.pdf' },
9
+ { name: 'User Guide', src: 'assets/pdfs/user-guide.pdf' },
10
+ { name: 'Project Report', src: 'assets/pdfs/project-report.pdf' },
11
+ { name: 'Project Report', src: 'assets/pdfs/project-report.pdf' },
12
+ { name: 'Project Report', src: 'assets/pdfs/project-report.pdf' },
13
+ ];
14
+ constructor(router) {
15
+ this.router = router;
16
+ }
17
+ openPdf(pdf) {
18
+ // Navigate to pdf-info page and pass file src
19
+ this.router.navigate(['/pdf-info'], { state: { pdfSrc: pdf.src } });
20
+ }
21
+ onFileUpload(event) {
22
+ const file = event.target.files[0];
23
+ console.log(file);
24
+ if (file && file.type === 'application/pdf') {
25
+ const fileURL = URL.createObjectURL(file);
26
+ this.router.navigate(['/pdf-info'], { state: { pdfSrc: fileURL } });
27
+ }
28
+ else {
29
+ alert('Please upload a valid PDF file.');
30
+ }
31
+ }
32
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PdfExplorerComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
33
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: PdfExplorerComponent, isStandalone: true, selector: "app-pdf-explorer", ngImport: i0, template: "<div style=\"display: flex;\r\nflex-direction: column; gap: 10px; align-items: start; margin-top: 20px;\">\r\n <div style=\"display: flex; flex-direction: row; align-items: baseline; gap: 15px; border: 1px solid #3e3e3e3e; min-width: 100%; padding-inline: 10px;\">\r\n <h1 class=\"text-2xl font-bold mb-4\">PDF Explorer</h1>\r\n <span class=\"mb-4\">(Click on a PDF file to view its details.)</span>\r\n </div>\r\n <div class=\"max-w-md mx-auto mt-8 p-4\">\r\n <h2 class=\"text-xl font-bold mb-4\">PDF Files</h2>\r\n <input type=\"file\" name=\"\" id=\"\" (change)=\"onFileUpload($event)\" />\r\n <ul class=\"border border-gray-200 rounded-lg divide-y divide-gray-200\">\r\n <li *ngFor=\"let pdf of pdfFiles\" class=\"px-4 py-3 hover:bg-gray-100 cursor-pointer\" style=\"cursor: pointer; padding-inline: 4px;\" (click)=\"openPdf(pdf)\">\r\n {{ pdf.name }}\r\n </li>\r\n </ul>\r\n </div>\r\n</div>", styles: [""], dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
34
+ }
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PdfExplorerComponent, decorators: [{
36
+ type: Component,
37
+ args: [{ selector: 'app-pdf-explorer', standalone: true, imports: [NgFor], template: "<div style=\"display: flex;\r\nflex-direction: column; gap: 10px; align-items: start; margin-top: 20px;\">\r\n <div style=\"display: flex; flex-direction: row; align-items: baseline; gap: 15px; border: 1px solid #3e3e3e3e; min-width: 100%; padding-inline: 10px;\">\r\n <h1 class=\"text-2xl font-bold mb-4\">PDF Explorer</h1>\r\n <span class=\"mb-4\">(Click on a PDF file to view its details.)</span>\r\n </div>\r\n <div class=\"max-w-md mx-auto mt-8 p-4\">\r\n <h2 class=\"text-xl font-bold mb-4\">PDF Files</h2>\r\n <input type=\"file\" name=\"\" id=\"\" (change)=\"onFileUpload($event)\" />\r\n <ul class=\"border border-gray-200 rounded-lg divide-y divide-gray-200\">\r\n <li *ngFor=\"let pdf of pdfFiles\" class=\"px-4 py-3 hover:bg-gray-100 cursor-pointer\" style=\"cursor: pointer; padding-inline: 4px;\" (click)=\"openPdf(pdf)\">\r\n {{ pdf.name }}\r\n </li>\r\n </ul>\r\n </div>\r\n</div>" }]
38
+ }], ctorParameters: () => [{ type: i1.Router }] });
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLWV4cGxvcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi1maXJhcy1kaWdpL3NyYy9saWIvcGRmLWV4cGxvcmVyL3BkZi1leHBsb3Jlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItZmlyYXMtZGlnaS9zcmMvbGliL3BkZi1leHBsb3Jlci9wZGYtZXhwbG9yZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7OztBQVVsRCxNQUFNLE9BQU8sb0JBQW9CO0lBVVg7SUFUcEIsUUFBUSxHQUFHO1FBQ1QsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSx5QkFBeUIsRUFBRTtRQUN4RCxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLDRCQUE0QixFQUFFO1FBQ3pELEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxnQ0FBZ0MsRUFBRTtRQUNqRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsZ0NBQWdDLEVBQUU7UUFDakUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLGdDQUFnQyxFQUFFO0tBRWxFLENBQUM7SUFFRixZQUFvQixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUFJLENBQUM7SUFFdkMsT0FBTyxDQUFDLEdBQWtDO1FBQ3hDLDhDQUE4QztRQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFVO1FBQ3JCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbEIsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxpQkFBaUIsRUFBRSxDQUFDO1lBQzVDLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEUsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBRUgsQ0FBQzt3R0E1QlUsb0JBQW9COzRGQUFwQixvQkFBb0IsNEVDWGpDLG04QkFlTSwwREROTSxLQUFLOzs0RkFFSixvQkFBb0I7a0JBUGhDLFNBQVM7K0JBQ0Usa0JBQWtCLGNBR2hCLElBQUksV0FDUCxDQUFDLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nRm9yIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcGRmLWV4cGxvcmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BkZi1leHBsb3Jlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BkZi1leHBsb3Jlci5jb21wb25lbnQuY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtOZ0Zvcl1cbn0pXG5leHBvcnQgY2xhc3MgUGRmRXhwbG9yZXJDb21wb25lbnQge1xuICBwZGZGaWxlcyA9IFtcbiAgICB7IG5hbWU6ICdTYW1wbGUgUERGIDEnLCBzcmM6ICdhc3NldHMvcGRmcy9zYW1wbGUxLnBkZicgfSxcbiAgICB7IG5hbWU6ICdVc2VyIEd1aWRlJywgc3JjOiAnYXNzZXRzL3BkZnMvdXNlci1ndWlkZS5wZGYnIH0sXG4gICAgeyBuYW1lOiAnUHJvamVjdCBSZXBvcnQnLCBzcmM6ICdhc3NldHMvcGRmcy9wcm9qZWN0LXJlcG9ydC5wZGYnIH0sXG4gICAgeyBuYW1lOiAnUHJvamVjdCBSZXBvcnQnLCBzcmM6ICdhc3NldHMvcGRmcy9wcm9qZWN0LXJlcG9ydC5wZGYnIH0sXG4gICAgeyBuYW1lOiAnUHJvamVjdCBSZXBvcnQnLCBzcmM6ICdhc3NldHMvcGRmcy9wcm9qZWN0LXJlcG9ydC5wZGYnIH0sXG5cbiAgXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyKSB7IH1cblxuICBvcGVuUGRmKHBkZjogeyBuYW1lOiBzdHJpbmc7IHNyYzogc3RyaW5nIH0pIHtcbiAgICAvLyBOYXZpZ2F0ZSB0byBwZGYtaW5mbyBwYWdlIGFuZCBwYXNzIGZpbGUgc3JjXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcGRmLWluZm8nXSwgeyBzdGF0ZTogeyBwZGZTcmM6IHBkZi5zcmMgfSB9KTtcbiAgfVxuXG4gIG9uRmlsZVVwbG9hZChldmVudDogYW55KSB7XG4gICAgY29uc3QgZmlsZSA9IGV2ZW50LnRhcmdldC5maWxlc1swXTtcbiAgICBjb25zb2xlLmxvZyhmaWxlKTtcblxuICAgIGlmIChmaWxlICYmIGZpbGUudHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3BkZicpIHtcbiAgICAgIGNvbnN0IGZpbGVVUkwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcGRmLWluZm8nXSwgeyBzdGF0ZTogeyBwZGZTcmM6IGZpbGVVUkwgfSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWxlcnQoJ1BsZWFzZSB1cGxvYWQgYSB2YWxpZCBQREYgZmlsZS4nKTtcbiAgICB9XG5cbiAgfVxufVxuIiwiPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7XHJcbmZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogMTBweDsgYWxpZ24taXRlbXM6IHN0YXJ0OyBtYXJnaW4tdG9wOiAyMHB4O1wiPlxyXG4gICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IHJvdzsgYWxpZ24taXRlbXM6IGJhc2VsaW5lOyBnYXA6IDE1cHg7IGJvcmRlcjogMXB4IHNvbGlkICMzZTNlM2UzZTsgbWluLXdpZHRoOiAxMDAlOyBwYWRkaW5nLWlubGluZTogMTBweDtcIj5cclxuICAgICAgPGgxIGNsYXNzPVwidGV4dC0yeGwgZm9udC1ib2xkIG1iLTRcIj5QREYgRXhwbG9yZXI8L2gxPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cIm1iLTRcIj4oQ2xpY2sgb24gYSBQREYgZmlsZSB0byB2aWV3IGl0cyBkZXRhaWxzLik8L3NwYW4+XHJcbiAgIDwvZGl2PlxyXG4gICA8ZGl2IGNsYXNzPVwibWF4LXctbWQgbXgtYXV0byBtdC04IHAtNFwiPlxyXG4gICAgICA8aDIgY2xhc3M9XCJ0ZXh0LXhsIGZvbnQtYm9sZCBtYi00XCI+UERGIEZpbGVzPC9oMj5cclxuICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgbmFtZT1cIlwiIGlkPVwiXCIgKGNoYW5nZSk9XCJvbkZpbGVVcGxvYWQoJGV2ZW50KVwiIC8+XHJcbiAgICAgIDx1bCBjbGFzcz1cImJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZC1sZyBkaXZpZGUteSBkaXZpZGUtZ3JheS0yMDBcIj5cclxuICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBwZGYgb2YgcGRmRmlsZXNcIiBjbGFzcz1cInB4LTQgcHktMyBob3ZlcjpiZy1ncmF5LTEwMCBjdXJzb3ItcG9pbnRlclwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyOyBwYWRkaW5nLWlubGluZTogNHB4O1wiIChjbGljayk9XCJvcGVuUGRmKHBkZilcIj5cclxuICAgICAgICAgICAge3sgcGRmLm5hbWUgfX1cclxuICAgICAgICAgPC9saT5cclxuICAgICAgPC91bD5cclxuICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
@@ -0,0 +1,237 @@
1
+ import { Component, Input, ViewChild, } from '@angular/core';
2
+ import { NgxExtendedPdfViewerModule, pdfDefaultOptions, } from 'ngx-extended-pdf-viewer';
3
+ import { PDFDocument } from 'pdf-lib';
4
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
5
+ import { CommonModule, NgIf } from '@angular/common';
6
+ import { PdfSignatureComponent } from '../pdf-signature/pdf-signature.component';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "ngx-extended-pdf-viewer";
9
+ import * as i2 from "@angular/common";
10
+ export class PdfInfoComponent {
11
+ signatureImg;
12
+ floatingSignature;
13
+ pdfSrc = '';
14
+ imageDataURL = '';
15
+ pdfBlocked = true;
16
+ sidebarOpen = true;
17
+ signMode = false;
18
+ showSignature = true;
19
+ signatureLoaded = false;
20
+ signatures = [];
21
+ zoom = 100;
22
+ showDialog = false;
23
+ currentPdfBytes;
24
+ constructor() {
25
+ pdfDefaultOptions.textLayerMode = 1;
26
+ }
27
+ ngAfterViewInit() {
28
+ // ViewChild references are now available after view initialization
29
+ // Access them here if needed
30
+ }
31
+ async onFileSelected(event) {
32
+ const input = event.target;
33
+ if (!input.files || input.files.length === 0)
34
+ return;
35
+ const file = input.files[0];
36
+ const arrayBuffer = await file.arrayBuffer();
37
+ this.currentPdfBytes = new Uint8Array(arrayBuffer);
38
+ this.pdfSrc = URL.createObjectURL(file);
39
+ }
40
+ addSignature() {
41
+ this.showDialog = true;
42
+ }
43
+ onDialogClosed(event) {
44
+ this.showDialog = false;
45
+ if (event.confirmed && event.image) {
46
+ this.imageDataURL = event.image;
47
+ this.signMode = true;
48
+ }
49
+ }
50
+ onPdfClick(event) {
51
+ const target = event.target;
52
+ if (target.closest('.signature-box'))
53
+ return;
54
+ if (!this.signMode || !this.imageDataURL)
55
+ return;
56
+ const pageEl = event.target.closest('.page');
57
+ if (!pageEl)
58
+ return;
59
+ const pageNumber = Number(pageEl.dataset['pageNumber']);
60
+ const pageRect = pageEl.getBoundingClientRect();
61
+ const transform = getComputedStyle(pageEl).transform;
62
+ const scale = transform && transform !== 'none'
63
+ ? new DOMMatrixReadOnly(transform).a
64
+ : 1;
65
+ const domX = event.clientX - pageRect.left;
66
+ const domY = event.clientY - pageRect.top;
67
+ const width = (pageRect.width / scale) * 0.15;
68
+ const height = width * 0.35;
69
+ const sig = { pageNumber, domX, domY, width, height };
70
+ this.signatures.push(sig);
71
+ this.createDraggableSignatureBox(sig);
72
+ this.signMode = false;
73
+ }
74
+ createDraggableSignatureBox(sig) {
75
+ const pageEl = document.querySelector(`.pdfViewer .page[data-page-number="${sig.pageNumber}"]`);
76
+ if (!pageEl)
77
+ return;
78
+ pageEl.style.position = 'relative';
79
+ const box = document.createElement('div');
80
+ box.className = 'signature-box';
81
+ box.style.position = 'absolute';
82
+ box.style.left = `${sig.domX}px`;
83
+ box.style.top = `${sig.domY}px`;
84
+ box.style.width = `${sig.width}px`;
85
+ box.style.height = `${sig.height}px`;
86
+ box.style.zIndex = '9999';
87
+ box.style.border = '2px dashed #1976d2';
88
+ box.style.background = 'rgba(25, 118, 210, 0.05)';
89
+ const img = document.createElement('img');
90
+ img.src = this.imageDataURL;
91
+ img.style.width = '100%';
92
+ img.style.height = '100%';
93
+ img.style.pointerEvents = 'none';
94
+ const handle = document.createElement('div');
95
+ handle.classList.add('resize-handle');
96
+ handle.style.position = 'absolute';
97
+ handle.style.right = '-7px';
98
+ handle.style.bottom = '-7px';
99
+ handle.style.width = '18px';
100
+ handle.style.height = '18px';
101
+ handle.style.backgroundColor = 'rgba(25, 118, 210, 0.2)';
102
+ handle.style.border = '2px solid rgba(25, 118, 210, 0.9)';
103
+ handle.style.borderRadius = '4px';
104
+ handle.style.cursor = 'se-resize';
105
+ handle.style.zIndex = '10000';
106
+ handle.textContent = '+';
107
+ box.appendChild(img);
108
+ box.appendChild(handle);
109
+ pageEl.appendChild(box);
110
+ this.makeDraggable(box, pageEl, sig);
111
+ this.makeResizable(box, sig);
112
+ }
113
+ makeDraggable(box, container, sig) {
114
+ let startX = 0;
115
+ let startY = 0;
116
+ let origX = 0;
117
+ let origY = 0;
118
+ box.addEventListener('pointerdown', (e) => {
119
+ if (e.target.classList.contains('resize-handle'))
120
+ return;
121
+ e.preventDefault();
122
+ e.stopPropagation();
123
+ box.setPointerCapture(e.pointerId);
124
+ startX = e.clientX;
125
+ startY = e.clientY;
126
+ origX = box.offsetLeft;
127
+ origY = box.offsetTop;
128
+ const scale = this.getPdfScale(container);
129
+ const move = (ev) => {
130
+ const dx = (ev.clientX - startX) / scale;
131
+ const dy = (ev.clientY - startY) / scale;
132
+ box.style.left = origX + dx + 'px';
133
+ box.style.top = origY + dy + 'px';
134
+ sig.domX = origX + dx;
135
+ sig.domY = origY + dy;
136
+ };
137
+ const up = () => {
138
+ box.releasePointerCapture(e.pointerId);
139
+ document.removeEventListener('pointermove', move);
140
+ document.removeEventListener('pointerup', up);
141
+ };
142
+ document.addEventListener('pointermove', move);
143
+ document.addEventListener('pointerup', up);
144
+ });
145
+ }
146
+ makeResizable(box, sig) {
147
+ const handle = box.querySelector('.resize-handle');
148
+ if (!handle)
149
+ return;
150
+ handle.addEventListener('pointerdown', (e) => {
151
+ e.preventDefault();
152
+ e.stopPropagation();
153
+ handle.setPointerCapture(e.pointerId);
154
+ const startX = e.clientX;
155
+ const startWidth = sig.width;
156
+ const move = (ev) => {
157
+ const dx = ev.clientX - startX;
158
+ const newWidth = Math.max(60, startWidth + dx);
159
+ const newHeight = newWidth * 0.35;
160
+ sig.width = newWidth;
161
+ sig.height = newHeight;
162
+ box.style.width = newWidth + 'px';
163
+ box.style.height = newHeight + 'px';
164
+ };
165
+ const up = () => {
166
+ handle.releasePointerCapture(e.pointerId);
167
+ document.removeEventListener('pointermove', move);
168
+ document.removeEventListener('pointerup', up);
169
+ };
170
+ document.addEventListener('pointermove', move);
171
+ document.addEventListener('pointerup', up);
172
+ });
173
+ }
174
+ getPdfScale(pageEl) {
175
+ const transform = getComputedStyle(pageEl).transform;
176
+ return transform && transform !== 'none'
177
+ ? new DOMMatrixReadOnly(transform).a
178
+ : 1;
179
+ }
180
+ async addAllSignaturesToPdf() {
181
+ if (!this.signatures.length || !this.imageDataURL)
182
+ return;
183
+ const existingPdfBytes = await fetch(this.pdfSrc).then(res => res.arrayBuffer());
184
+ const pdfDoc = await PDFDocument.load(existingPdfBytes);
185
+ const pages = pdfDoc.getPages();
186
+ const base64Data = this.imageDataURL.split(',')[1];
187
+ const imageBytes = Uint8Array.from(atob(base64Data), c => c.charCodeAt(0));
188
+ const pngImage = await pdfDoc.embedPng(imageBytes);
189
+ for (const sig of this.signatures) {
190
+ const page = pages[sig.pageNumber - 1];
191
+ if (!page)
192
+ continue;
193
+ const pageEl = document.querySelector(`.pdfViewer .page[data-page-number="${sig.pageNumber}"]`);
194
+ const pageRect = pageEl.getBoundingClientRect();
195
+ const scale = pageRect.width / page.getWidth();
196
+ const pdfX = sig.domX / scale;
197
+ const pdfY = page.getHeight() - sig.domY / scale - sig.height / scale;
198
+ const pdfW = sig.width / scale;
199
+ const pdfH = sig.height / scale;
200
+ page.drawImage(pngImage, {
201
+ x: pdfX,
202
+ y: pdfY,
203
+ width: pdfW,
204
+ height: pdfH
205
+ });
206
+ }
207
+ const pdfBytes = await pdfDoc.save();
208
+ const pdfBytesNormal = new Uint8Array(pdfBytes);
209
+ const blob = new Blob([pdfBytesNormal], { type: 'application/pdf' });
210
+ this.pdfSrc = URL.createObjectURL(blob);
211
+ }
212
+ finalizeSignature() {
213
+ this.signMode = false;
214
+ }
215
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PdfInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
216
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: PdfInfoComponent, isStandalone: true, selector: "app-pdf-info", inputs: { pdfSrc: "pdfSrc" }, viewQueries: [{ propertyName: "signatureImg", first: true, predicate: ["signatureImg"], descendants: true }, { propertyName: "floatingSignature", first: true, predicate: ["floatingSignature"], descendants: true }], ngImport: i0, template: "<div>\r\n <img #signatureImg [src]=\"imageDataURL || ''\" style=\"display: none; position: absolute; visibility: hidden; width: 0; height: 0;\" />\r\n <img #floatingSignature [src]=\"imageDataURL || ''\" style=\"display: none; position: absolute; visibility: hidden; width: 0; height: 0;\" />\r\n \r\n <!-- <button *ngIf=\"pdfSrc\" (click)=\"showCoordinates()\">Show Coordinates</button> -->\r\n <button *ngIf=\"pdfSrc\" (click)=\"addSignature()\">Add Signature</button>\r\n <button *ngIf=\"pdfSrc\" (click)=\"addAllSignaturesToPdf()\">Save Signature</button>\r\n <input type=\"file\" (change)=\"onFileSelected($event)\" accept=\"application/pdf\" />\r\n\r\n <div class=\"popup-backdrop\" *ngIf=\"showDialog\">\r\n <app-pdf-signature\r\n class=\"popup-content\"\r\n (click)=\"$event.stopPropagation()\"\r\n (closed)=\"onDialogClosed($event)\">\r\n </app-pdf-signature>\r\n </div>\r\n\r\n <div class=\"container\" [hidden]=\"!pdfSrc\">\r\n <div class=\"content\">\r\n <ngx-extended-pdf-viewer\r\n [src]=\"pdfSrc\"\r\n [textLayer]=\"false\"\r\n [page]=\"0\"\r\n [(zoom)]=\"zoom\"\r\n [showHandToolButton]=\"true\"\r\n [showOpenFileButton]=\"false\"\r\n [enableDragAndDrop]=\"false\"\r\n (click)=\"onPdfClick($event)\">\r\n</ngx-extended-pdf-viewer>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".container,.content{position:relative}.signature-box{position:absolute;border:2px dashed #1976d2;cursor:move;box-sizing:border-box;background:#1976d20d;z-index:9999}.signature-box img{width:100%;height:100%;pointer-events:none}.resize-handle{position:absolute;width:18px;height:18px;right:-9px;bottom:-9px;background:#1976d233;border:2px solid rgba(25,118,210,.9);border-radius:4px;display:flex;align-items:center;justify-content:center;font-weight:700;cursor:se-resize;-webkit-user-select:none;user-select:none;z-index:10000}.popup-backdrop{position:fixed;inset:0;background:#00000080;display:flex;justify-content:center;align-items:center;z-index:1000}.popup-content{background:#fff;border-radius:8px;width:520px;max-width:95%;max-height:90vh;overflow:hidden;box-shadow:0 10px 40px #0000004d}\n"], dependencies: [{ kind: "ngmodule", type: NgxExtendedPdfViewerModule }, { kind: "component", type: i1.NgxExtendedPdfViewerComponent, selector: "ngx-extended-pdf-viewer", inputs: ["customFindbarInputArea", "customToolbar", "customFindbar", "customFindbarButtons", "customPdfViewer", "customSecondaryToolbar", "customSidebar", "customThumbnail", "customFreeFloatingBar", "showFreeFloatingBar", "enableDragAndDrop", "forceUsingLegacyES5", "formData", "disableForms", "pageViewMode", "scrollMode", "authorization", "httpHeaders", "contextMenuAllowed", "enablePrint", "enablePrintAutoRotate", "forceFullReloadOfJavaScriptCode", "showTextEditor", "showStampEditor", "showCommentEditor", "showDrawEditor", "showHighlightEditor", "showSignatureEditor", "logLevel", "minifiedJSLibraries", "printResolution", "rotation", "src", "base64Src", "minHeight", "height", "backgroundColor", "pdfBackgroundColor", "filenameForDownload", "ignoreKeyboard", "ignoreKeys", "acceptKeys", "imageResourcesPath", "localeFolderPath", "language", "listenToURL", "nameddest", "password", "replaceBrowserPrint", "useInlineScripts", "showUnverifiedSignatures", "startTabindex", "showSidebarButton", "sidebarVisible", "activeSidebarView", "findbarVisible", "propertiesDialogVisible", "showFindButton", "showFindHighlightAll", "showFindMatchCase", "showFindMultiple", "showFindRegexp", "showFindEntireWord", "showFindMatchDiacritics", "showFindResultsCount", "showFindMessages", "showMovePageButton", "showPagingButtons", "showFirstAndLastPageButtons", "showPreviousAndNextPageButtons", "showPageNumber", "showPageLabel", "showZoomButtons", "showZoomDropdown", "showPresentationModeButton", "showOpenFileButton", "showPrintButton", "showDownloadButton", "theme", "showToolbar", "showSecondaryToolbarButton", "showSinglePageModeButton", "showVerticalScrollButton", "showHorizontalScrollButton", "showWrappedScrollButton", "showInfiniteScrollButton", "showBookModeButton", "showRotateButton", "showRotateCwButton", "showRotateCcwButton", "handTool", "showHandToolButton", "showSpreadButton", "showPropertiesButton", "showBorders", "spread", "showScrollingButtons", "page", "pageLabel", "textLayer", "zoom", "zoomLevels", "maxZoom", "minZoom", "mobileFriendlyZoom"], outputs: ["annotationEditorEvent", "formDataChange", "pageViewModeChange", "progress", "srcChange", "scrollModeChange", "afterPrint", "beforePrint", "currentZoomFactor", "rotationChange", "annotationLayerRendered", "annotationEditorLayerRendered", "xfaLayerRendered", "outlineLoaded", "attachmentsloaded", "layersloaded", "sidebarVisibleChange", "activeSidebarViewChange", "findbarVisibleChange", "propertiesDialogVisibleChange", "handToolChange", "spreadChange", "thumbnailDrawn", "pageChange", "pageLabelChange", "pagesLoaded", "pageRender", "pageRendered", "pdfDownloaded", "pdfLoaded", "pdfLoadingStarts", "pdfLoadingFailed", "textLayerRendered", "annotationEditorModeChanged", "updateFindMatchesCount", "updateFindState", "zoomChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PdfSignatureComponent, selector: "app-pdf-signature", outputs: ["closed"] }] });
217
+ }
218
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PdfInfoComponent, decorators: [{
219
+ type: Component,
220
+ args: [{ selector: 'app-pdf-info', standalone: true, imports: [
221
+ NgxExtendedPdfViewerModule,
222
+ FormsModule,
223
+ ReactiveFormsModule,
224
+ CommonModule,
225
+ NgIf,
226
+ PdfSignatureComponent
227
+ ], template: "<div>\r\n <img #signatureImg [src]=\"imageDataURL || ''\" style=\"display: none; position: absolute; visibility: hidden; width: 0; height: 0;\" />\r\n <img #floatingSignature [src]=\"imageDataURL || ''\" style=\"display: none; position: absolute; visibility: hidden; width: 0; height: 0;\" />\r\n \r\n <!-- <button *ngIf=\"pdfSrc\" (click)=\"showCoordinates()\">Show Coordinates</button> -->\r\n <button *ngIf=\"pdfSrc\" (click)=\"addSignature()\">Add Signature</button>\r\n <button *ngIf=\"pdfSrc\" (click)=\"addAllSignaturesToPdf()\">Save Signature</button>\r\n <input type=\"file\" (change)=\"onFileSelected($event)\" accept=\"application/pdf\" />\r\n\r\n <div class=\"popup-backdrop\" *ngIf=\"showDialog\">\r\n <app-pdf-signature\r\n class=\"popup-content\"\r\n (click)=\"$event.stopPropagation()\"\r\n (closed)=\"onDialogClosed($event)\">\r\n </app-pdf-signature>\r\n </div>\r\n\r\n <div class=\"container\" [hidden]=\"!pdfSrc\">\r\n <div class=\"content\">\r\n <ngx-extended-pdf-viewer\r\n [src]=\"pdfSrc\"\r\n [textLayer]=\"false\"\r\n [page]=\"0\"\r\n [(zoom)]=\"zoom\"\r\n [showHandToolButton]=\"true\"\r\n [showOpenFileButton]=\"false\"\r\n [enableDragAndDrop]=\"false\"\r\n (click)=\"onPdfClick($event)\">\r\n</ngx-extended-pdf-viewer>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".container,.content{position:relative}.signature-box{position:absolute;border:2px dashed #1976d2;cursor:move;box-sizing:border-box;background:#1976d20d;z-index:9999}.signature-box img{width:100%;height:100%;pointer-events:none}.resize-handle{position:absolute;width:18px;height:18px;right:-9px;bottom:-9px;background:#1976d233;border:2px solid rgba(25,118,210,.9);border-radius:4px;display:flex;align-items:center;justify-content:center;font-weight:700;cursor:se-resize;-webkit-user-select:none;user-select:none;z-index:10000}.popup-backdrop{position:fixed;inset:0;background:#00000080;display:flex;justify-content:center;align-items:center;z-index:1000}.popup-content{background:#fff;border-radius:8px;width:520px;max-width:95%;max-height:90vh;overflow:hidden;box-shadow:0 10px 40px #0000004d}\n"] }]
228
+ }], ctorParameters: () => [], propDecorators: { signatureImg: [{
229
+ type: ViewChild,
230
+ args: ['signatureImg', { static: false }]
231
+ }], floatingSignature: [{
232
+ type: ViewChild,
233
+ args: ['floatingSignature', { static: false }]
234
+ }], pdfSrc: [{
235
+ type: Input
236
+ }] } });
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLWluZm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGliLWZpcmFzLWRpZ2kvc3JjL2xpYi9wZGYtaW5mby9wZGYtaW5mby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItZmlyYXMtZGlnaS9zcmMvbGliL3BkZi1pbmZvL3BkZi1pbmZvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsMEJBQTBCLEVBRTFCLGlCQUFpQixHQUNsQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7QUFnQmpGLE1BQU0sT0FBTyxnQkFBZ0I7SUFFM0IsWUFBWSxDQUFnQztJQUc1QyxpQkFBaUIsQ0FBZ0M7SUFFeEMsTUFBTSxHQUFXLEVBQUUsQ0FBQztJQUM3QixZQUFZLEdBQVcsRUFBRSxDQUFDO0lBRTFCLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDbEIsV0FBVyxHQUFZLElBQUksQ0FBQztJQUM1QixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLGFBQWEsR0FBWSxJQUFJLENBQUM7SUFDOUIsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUV4QixVQUFVLEdBQWdCLEVBQUUsQ0FBQztJQUM3QixJQUFJLEdBQVEsR0FBRyxDQUFDO0lBQ2hCLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIs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QkFDbkIsWUFBWSxtSUFFWixxQkFBcUI7OzRGQUdaLGdCQUFnQjtrQkFkNUIsU0FBUzsrQkFDRSxjQUFjLGNBR1osSUFBSSxXQUNQO3dCQUNQLDBCQUEwQjt3QkFDMUIsV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLFlBQVk7d0JBQ1osSUFBSTt3QkFDSixxQkFBcUI7cUJBQ3RCO3dEQUlELFlBQVk7c0JBRFgsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUk1QyxpQkFBaUI7c0JBRGhCLFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUd4QyxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBWaWV3Q2hpbGQsXG4gIEFmdGVyVmlld0luaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgTmd4RXh0ZW5kZWRQZGZWaWV3ZXJNb2R1bGUsXG4gIFRleHRMYXllclJlbmRlcmVkRXZlbnQsXG4gIHBkZkRlZmF1bHRPcHRpb25zLFxufSBmcm9tICduZ3gtZXh0ZW5kZWQtcGRmLXZpZXdlcic7XG5pbXBvcnQgeyBQREZEb2N1bWVudCB9IGZyb20gJ3BkZi1saWInO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUGRmU2lnbmF0dXJlQ29tcG9uZW50IH0gZnJvbSAnLi4vcGRmLXNpZ25hdHVyZS9wZGYtc2lnbmF0dXJlLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1wZGYtaW5mbycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wZGYtaW5mby5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BkZi1pbmZvLmNvbXBvbmVudC5jc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE5neEV4dGVuZGVkUGRmVmlld2VyTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE5nSWYsXG4gICAgUGRmU2lnbmF0dXJlQ29tcG9uZW50XG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFBkZkluZm9Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgnc2lnbmF0dXJlSW1nJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHNpZ25hdHVyZUltZz86IEVsZW1lbnRSZWY8SFRNTEltYWdlRWxlbWVudD47XG5cbiAgQFZpZXdDaGlsZCgnZmxvYXRpbmdTaWduYXR1cmUnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgZmxvYXRpbmdTaWduYXR1cmU/OiBFbGVtZW50UmVmPEhUTUxJbWFnZUVsZW1lbnQ+O1xuXG4gIEBJbnB1dCgpIHBkZlNyYzogc3RyaW5nID0gJyc7XG4gIGltYWdlRGF0YVVSTDogc3RyaW5nID0gJyc7XG5cbiAgcGRmQmxvY2tlZCA9IHRydWU7XG4gIHNpZGViYXJPcGVuOiBib29sZWFuID0gdHJ1ZTtcbiAgc2lnbk1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd1NpZ25hdHVyZTogYm9vbGVhbiA9IHRydWU7XG4gIHNpZ25hdHVyZUxvYWRlZCA9IGZhbHNlO1xuXG4gIHNpZ25hdHVyZXM6IFNpZ25hdHVyZVtdID0gW107XG4gIHpvb206IGFueSA9IDEwMDtcbiAgc2hvd0RpYWxvZyA9IGZhbHNlO1xuICBjdXJyZW50UGRmQnl0ZXMhOiBVaW50OEFycmF5O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHBkZkRlZmF1bHRPcHRpb25zLnRleHRMYXllck1vZGUgPSAxO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vIFZpZXdDaGlsZCByZWZlcmVuY2VzIGFyZSBub3cgYXZhaWxhYmxlIGFmdGVyIHZpZXcgaW5pdGlhbGl6YXRpb25cbiAgICAvLyBBY2Nlc3MgdGhlbSBoZXJlIGlmIG5lZWRlZFxuICB9XG5cbiAgYXN5bmMgb25GaWxlU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAoIWlucHV0LmZpbGVzIHx8IGlucHV0LmZpbGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZmlsZSA9IGlucHV0LmZpbGVzWzBdO1xuICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgZmlsZS5hcnJheUJ1ZmZlcigpO1xuICAgIHRoaXMuY3VycmVudFBkZkJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpO1xuXG4gICAgdGhpcy5wZGZTcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xuICB9XG5cbiAgYWRkU2lnbmF0dXJlKCkge1xuICAgIHRoaXMuc2hvd0RpYWxvZyA9IHRydWU7XG4gIH1cblxuICBvbkRpYWxvZ0Nsb3NlZChldmVudDogeyBjb25maXJtZWQ6IGJvb2xlYW47IGltYWdlPzogc3RyaW5nIH0pIHtcbiAgICB0aGlzLnNob3dEaWFsb2cgPSBmYWxzZTtcbiAgICBpZiAoZXZlbnQuY29uZmlybWVkICYmIGV2ZW50LmltYWdlKSB7XG4gICAgICB0aGlzLmltYWdlRGF0YVVSTCA9IGV2ZW50LmltYWdlO1xuICAgICAgdGhpcy5zaWduTW9kZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgb25QZGZDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZih0YXJnZXQuY2xvc2VzdCgnLnNpZ25hdHVyZS1ib3gnKSkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5zaWduTW9kZSB8fCAhdGhpcy5pbWFnZURhdGFVUkwpIHJldHVybjtcblxuICAgIGNvbnN0IHBhZ2VFbCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJy5wYWdlJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKCFwYWdlRWwpIHJldHVybjtcblxuICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSBOdW1iZXIocGFnZUVsLmRhdGFzZXRbJ3BhZ2VOdW1iZXInXSk7XG4gICAgY29uc3QgcGFnZVJlY3QgPSBwYWdlRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBnZXRDb21wdXRlZFN0eWxlKHBhZ2VFbCkudHJhbnNmb3JtO1xuICAgIGNvbnN0IHNjYWxlID0gdHJhbnNmb3JtICYmIHRyYW5zZm9ybSAhPT0gJ25vbmUnXG4gICAgICA/IG5ldyBET01NYXRyaXhSZWFkT25seSh0cmFuc2Zvcm0pLmFcbiAgICAgIDogMTtcblxuICAgIGNvbnN0IGRvbVggPSBldmVudC5jbGllbnRYIC0gcGFnZVJlY3QubGVmdDtcbiAgICBjb25zdCBkb21ZID0gZXZlbnQuY2xpZW50WSAtIHBhZ2VSZWN0LnRvcDtcblxuICAgIGNvbnN0IHdpZHRoID0gKHBhZ2VSZWN0LndpZHRoIC8gc2NhbGUpICogMC4xNTtcbiAgICBjb25zdCBoZWlnaHQgPSB3aWR0aCAqIDAuMzU7XG5cbiAgICBjb25zdCBzaWc6IFNpZ25hdHVyZSA9IHsgcGFnZU51bWJlciwgZG9tWCwgZG9tWSwgd2lkdGgsIGhlaWdodCB9O1xuXG4gICAgdGhpcy5zaWduYXR1cmVzLnB1c2goc2lnKTtcbiAgICB0aGlzLmNyZWF0ZURyYWdnYWJsZVNpZ25hdHVyZUJveChzaWcpO1xuXG4gICAgdGhpcy5zaWduTW9kZSA9IGZhbHNlO1xuICB9XG5cbiAgY3JlYXRlRHJhZ2dhYmxlU2lnbmF0dXJlQm94KHNpZzogU2lnbmF0dXJlKSB7XG4gICAgY29uc3QgcGFnZUVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgIGAucGRmVmlld2VyIC5wYWdlW2RhdGEtcGFnZS1udW1iZXI9XCIke3NpZy5wYWdlTnVtYmVyfVwiXWBcbiAgICApIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgaWYgKCFwYWdlRWwpIHJldHVybjtcblxuICAgIHBhZ2VFbC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG5cbiAgICBjb25zdCBib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBib3guY2xhc3NOYW1lID0gJ3NpZ25hdHVyZS1ib3gnO1xuICAgIGJveC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgYm94LnN0eWxlLmxlZnQgPSBgJHtzaWcuZG9tWH1weGA7XG4gICAgYm94LnN0eWxlLnRvcCA9IGAke3NpZy5kb21ZfXB4YDtcbiAgICBib3guc3R5bGUud2lkdGggPSBgJHtzaWcud2lkdGh9cHhgO1xuICAgIGJveC5zdHlsZS5oZWlnaHQgPSBgJHtzaWcuaGVpZ2h0fXB4YDtcbiAgICBib3guc3R5bGUuekluZGV4ID0gJzk5OTknO1xuICAgIGJveC5zdHlsZS5ib3JkZXIgPSAnMnB4IGRhc2hlZCAjMTk3NmQyJztcbiAgICBib3guc3R5bGUuYmFja2dyb3VuZCA9ICdyZ2JhKDI1LCAxMTgsIDIxMCwgMC4wNSknO1xuXG4gICAgY29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgaW1nLnNyYyA9IHRoaXMuaW1hZ2VEYXRhVVJMO1xuICAgIGltZy5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gJzEwMCUnO1xuICAgIGltZy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuXG4gICAgY29uc3QgaGFuZGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgaGFuZGxlLmNsYXNzTGlzdC5hZGQoJ3Jlc2l6ZS1oYW5kbGUnKTtcbiAgICBoYW5kbGUuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGhhbmRsZS5zdHlsZS5yaWdodCA9ICctN3B4JztcbiAgICBoYW5kbGUuc3R5bGUuYm90dG9tID0gJy03cHgnO1xuICAgIGhhbmRsZS5zdHlsZS53aWR0aCA9ICcxOHB4JztcbiAgICBoYW5kbGUuc3R5bGUuaGVpZ2h0ID0gJzE4cHgnO1xuICAgIGhhbmRsZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAncmdiYSgyNSwgMTE4LCAyMTAsIDAuMiknO1xuICAgIGhhbmRsZS5zdHlsZS5ib3JkZXIgPSAnMnB4IHNvbGlkIHJnYmEoMjUsIDExOCwgMjEwLCAwLjkpJztcbiAgICBoYW5kbGUuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzRweCc7XG4gICAgaGFuZGxlLnN0eWxlLmN1cnNvciA9ICdzZS1yZXNpemUnO1xuICAgIGhhbmRsZS5zdHlsZS56SW5kZXggPSAnMTAwMDAnO1xuICAgIGhhbmRsZS50ZXh0Q29udGVudCA9ICcrJztcblxuICAgIGJveC5hcHBlbmRDaGlsZChpbWcpO1xuICAgIGJveC5hcHBlbmRDaGlsZChoYW5kbGUpO1xuICAgIHBhZ2VFbC5hcHBlbmRDaGlsZChib3gpO1xuXG4gICAgdGhpcy5tYWtlRHJhZ2dhYmxlKGJveCwgcGFnZUVsLCBzaWcpO1xuICAgIHRoaXMubWFrZVJlc2l6YWJsZShib3gsIHNpZyk7XG4gIH1cblxuICBtYWtlRHJhZ2dhYmxlKGJveDogSFRNTEVsZW1lbnQsIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIHNpZzogU2lnbmF0dXJlKSB7XG4gICAgbGV0IHN0YXJ0WCA9IDA7XG4gICAgbGV0IHN0YXJ0WSA9IDA7XG4gICAgbGV0IG9yaWdYID0gMDtcbiAgICBsZXQgb3JpZ1kgPSAwO1xuXG4gICAgYm94LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgKGU6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgaWYgKChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmNvbnRhaW5zKCdyZXNpemUtaGFuZGxlJykpIHJldHVybjtcblxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgYm94LnNldFBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTtcblxuICAgICAgc3RhcnRYID0gZS5jbGllbnRYO1xuICAgICAgc3RhcnRZID0gZS5jbGllbnRZO1xuICAgICAgb3JpZ1ggPSBib3gub2Zmc2V0TGVmdDtcbiAgICAgIG9yaWdZID0gYm94Lm9mZnNldFRvcDtcblxuICAgICAgY29uc3Qgc2NhbGUgPSB0aGlzLmdldFBkZlNjYWxlKGNvbnRhaW5lcik7XG5cbiAgICAgIGNvbnN0IG1vdmUgPSAoZXY6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBkeCA9IChldi5jbGllbnRYIC0gc3RhcnRYKSAvIHNjYWxlO1xuICAgICAgICBjb25zdCBkeSA9IChldi5jbGllbnRZIC0gc3RhcnRZKSAvIHNjYWxlO1xuXG4gICAgICAgIGJveC5zdHlsZS5sZWZ0ID0gb3JpZ1ggKyBkeCArICdweCc7XG4gICAgICAgIGJveC5zdHlsZS50b3AgPSBvcmlnWSArIGR5ICsgJ3B4JztcblxuICAgICAgICBzaWcuZG9tWCA9IG9yaWdYICsgZHg7XG4gICAgICAgIHNpZy5kb21ZID0gb3JpZ1kgKyBkeTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHVwID0gKCkgPT4ge1xuICAgICAgICBib3gucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBtb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdXApO1xuICAgICAgfTtcblxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBtb3ZlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHVwKTtcbiAgICB9KTtcbiAgfVxuXG4gIG1ha2VSZXNpemFibGUoYm94OiBIVE1MRWxlbWVudCwgc2lnOiBTaWduYXR1cmUpIHtcbiAgICBjb25zdCBoYW5kbGUgPSBib3gucXVlcnlTZWxlY3RvcignLnJlc2l6ZS1oYW5kbGUnKSBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAoIWhhbmRsZSkgcmV0dXJuO1xuXG4gICAgaGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgKGU6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgaGFuZGxlLnNldFBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTtcblxuICAgICAgY29uc3Qgc3RhcnRYID0gZS5jbGllbnRYO1xuICAgICAgY29uc3Qgc3RhcnRXaWR0aCA9IHNpZy53aWR0aDtcblxuICAgICAgY29uc3QgbW92ZSA9IChldjogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGR4ID0gZXYuY2xpZW50WCAtIHN0YXJ0WDtcbiAgICAgICAgY29uc3QgbmV3V2lkdGggPSBNYXRoLm1heCg2MCwgc3RhcnRXaWR0aCArIGR4KTtcbiAgICAgICAgY29uc3QgbmV3SGVpZ2h0ID0gbmV3V2lkdGggKiAwLjM1O1xuXG4gICAgICAgIHNpZy53aWR0aCA9IG5ld1dpZHRoO1xuICAgICAgICBzaWcuaGVpZ2h0ID0gbmV3SGVpZ2h0O1xuXG4gICAgICAgIGJveC5zdHlsZS53aWR0aCA9IG5ld1dpZHRoICsgJ3B4JztcbiAgICAgICAgYm94LnN0eWxlLmhlaWdodCA9IG5ld0hlaWdodCArICdweCc7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB1cCA9ICgpID0+IHtcbiAgICAgICAgaGFuZGxlLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgbW92ZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHVwKTtcbiAgICAgIH07XG5cbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgbW92ZSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCB1cCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRQZGZTY2FsZShwYWdlRWw6IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBnZXRDb21wdXRlZFN0eWxlKHBhZ2VFbCkudHJhbnNmb3JtO1xuICAgIHJldHVybiB0cmFuc2Zvcm0gJiYgdHJhbnNmb3JtICE9PSAnbm9uZSdcbiAgICAgID8gbmV3IERPTU1hdHJpeFJlYWRPbmx5KHRyYW5zZm9ybSkuYVxuICAgICAgOiAxO1xuICB9XG5cbiAgYXN5bmMgYWRkQWxsU2lnbmF0dXJlc1RvUGRmKCkge1xuICAgIGlmICghdGhpcy5zaWduYXR1cmVzLmxlbmd0aCB8fCAhdGhpcy5pbWFnZURhdGFVUkwpIHJldHVybjtcblxuICAgIGNvbnN0IGV4aXN0aW5nUGRmQnl0ZXMgPSBhd2FpdCBmZXRjaCh0aGlzLnBkZlNyYykudGhlbihyZXMgPT4gcmVzLmFycmF5QnVmZmVyKCkpO1xuICAgIGNvbnN0IHBkZkRvYyA9IGF3YWl0IFBERkRvY3VtZW50LmxvYWQoZXhpc3RpbmdQZGZCeXRlcyk7XG4gICAgY29uc3QgcGFnZXMgPSBwZGZEb2MuZ2V0UGFnZXMoKTtcblxuICAgIGNvbnN0IGJhc2U2NERhdGEgPSB0aGlzLmltYWdlRGF0YVVSTC5zcGxpdCgnLCcpWzFdO1xuICAgIGNvbnN0IGltYWdlQnl0ZXMgPSBVaW50OEFycmF5LmZyb20oYXRvYihiYXNlNjREYXRhKSwgYyA9PiBjLmNoYXJDb2RlQXQoMCkpO1xuICAgIGNvbnN0IHBuZ0ltYWdlID0gYXdhaXQgcGRmRG9jLmVtYmVkUG5nKGltYWdlQnl0ZXMpO1xuXG4gICAgZm9yIChjb25zdCBzaWcgb2YgdGhpcy5zaWduYXR1cmVzKSB7XG4gICAgICBjb25zdCBwYWdlID0gcGFnZXNbc2lnLnBhZ2VOdW1iZXIgLSAxXTtcbiAgICAgIGlmICghcGFnZSkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IHBhZ2VFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGAucGRmVmlld2VyIC5wYWdlW2RhdGEtcGFnZS1udW1iZXI9XCIke3NpZy5wYWdlTnVtYmVyfVwiXWBcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCBwYWdlUmVjdCA9IHBhZ2VFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgY29uc3Qgc2NhbGUgPSBwYWdlUmVjdC53aWR0aCAvIHBhZ2UuZ2V0V2lkdGgoKTtcblxuICAgICAgY29uc3QgcGRmWCA9IHNpZy5kb21YIC8gc2NhbGU7XG4gICAgICBjb25zdCBwZGZZID0gcGFnZS5nZXRIZWlnaHQoKSAtIHNpZy5kb21ZIC8gc2NhbGUgLSBzaWcuaGVpZ2h0IC8gc2NhbGU7XG4gICAgICBjb25zdCBwZGZXID0gc2lnLndpZHRoIC8gc2NhbGU7XG4gICAgICBjb25zdCBwZGZIID0gc2lnLmhlaWdodCAvIHNjYWxlO1xuXG4gICAgICBwYWdlLmRyYXdJbWFnZShwbmdJbWFnZSwge1xuICAgICAgICB4OiBwZGZYLFxuICAgICAgICB5OiBwZGZZLFxuICAgICAgICB3aWR0aDogcGRmVyxcbiAgICAgICAgaGVpZ2h0OiBwZGZIXG4gICAgICB9KTtcbiAgICB9XG5cbmNvbnN0IHBkZkJ5dGVzID0gYXdhaXQgcGRmRG9jLnNhdmUoKTtcblxuY29uc3QgcGRmQnl0ZXNOb3JtYWwgPSBuZXcgVWludDhBcnJheShwZGZCeXRlcyk7XG5cbmNvbnN0IGJsb2IgPSBuZXcgQmxvYihbcGRmQnl0ZXNOb3JtYWxdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9wZGYnIH0pO1xudGhpcy5wZGZTcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXG5cbiAgfVxuXG4gIGZpbmFsaXplU2lnbmF0dXJlKCkge1xuICAgIHRoaXMuc2lnbk1vZGUgPSBmYWxzZTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgU2lnbmF0dXJlIHtcbiAgcGFnZU51bWJlcjogbnVtYmVyO1xuICBkb21YOiBudW1iZXI7XG4gIGRvbVk6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG4iLCI8ZGl2PlxyXG4gIDxpbWcgI3NpZ25hdHVyZUltZyBbc3JjXT1cImltYWdlRGF0YVVSTCB8fCAnJ1wiIHN0eWxlPVwiZGlzcGxheTogbm9uZTsgcG9zaXRpb246IGFic29sdXRlOyB2aXNpYmlsaXR5OiBoaWRkZW47IHdpZHRoOiAwOyBoZWlnaHQ6IDA7XCIgLz5cclxuICA8aW1nICNmbG9hdGluZ1NpZ25hdHVyZSBbc3JjXT1cImltYWdlRGF0YVVSTCB8fCAnJ1wiIHN0eWxlPVwiZGlzcGxheTogbm9uZTsgcG9zaXRpb246IGFic29sdXRlOyB2aXNpYmlsaXR5OiBoaWRkZW47IHdpZHRoOiAwOyBoZWlnaHQ6IDA7XCIgLz5cclxuICBcclxuICA8IS0tIDxidXR0b24gKm5nSWY9XCJwZGZTcmNcIiAoY2xpY2spPVwic2hvd0Nvb3JkaW5hdGVzKClcIj5TaG93IENvb3JkaW5hdGVzPC9idXR0b24+IC0tPlxyXG4gIDxidXR0b24gKm5nSWY9XCJwZGZTcmNcIiAoY2xpY2spPVwiYWRkU2lnbmF0dXJlKClcIj5BZGQgU2lnbmF0dXJlPC9idXR0b24+XHJcbiAgPGJ1dHRvbiAqbmdJZj1cInBkZlNyY1wiIChjbGljayk9XCJhZGRBbGxTaWduYXR1cmVzVG9QZGYoKVwiPlNhdmUgU2lnbmF0dXJlPC9idXR0b24+XHJcbiAgPGlucHV0IHR5cGU9XCJmaWxlXCIgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3RlZCgkZXZlbnQpXCIgYWNjZXB0PVwiYXBwbGljYXRpb24vcGRmXCIgLz5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInBvcHVwLWJhY2tkcm9wXCIgKm5nSWY9XCJzaG93RGlhbG9nXCI+XHJcbiAgICA8YXBwLXBkZi1zaWduYXR1cmVcclxuICAgICAgY2xhc3M9XCJwb3B1cC1jb250ZW50XCJcclxuICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgIChjbG9zZWQpPVwib25EaWFsb2dDbG9zZWQoJGV2ZW50KVwiPlxyXG4gICAgPC9hcHAtcGRmLXNpZ25hdHVyZT5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiIFtoaWRkZW5dPVwiIXBkZlNyY1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cclxuICAgICAgPG5neC1leHRlbmRlZC1wZGYtdmlld2VyXHJcbiAgW3NyY109XCJwZGZTcmNcIlxyXG4gIFt0ZXh0TGF5ZXJdPVwiZmFsc2VcIlxyXG4gIFtwYWdlXT1cIjBcIlxyXG4gIFsoem9vbSldPVwiem9vbVwiXHJcbiAgW3Nob3dIYW5kVG9vbEJ1dHRvbl09XCJ0cnVlXCJcclxuICBbc2hvd09wZW5GaWxlQnV0dG9uXT1cImZhbHNlXCJcclxuICBbZW5hYmxlRHJhZ0FuZERyb3BdPVwiZmFsc2VcIlxyXG4gIChjbGljayk9XCJvblBkZkNsaWNrKCRldmVudClcIj5cclxuPC9uZ3gtZXh0ZW5kZWQtcGRmLXZpZXdlcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
@@ -0,0 +1,114 @@
1
+ import { Component, ViewChild, ViewEncapsulation } from '@angular/core';
2
+ import SignaturePad from 'signature_pad';
3
+ import { EventEmitter, Output } from '@angular/core';
4
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
5
+ // import { RouterModule } from '@angular/router';
6
+ import { CommonModule, NgIf } from '@angular/common';
7
+ import * as i0 from "@angular/core";
8
+ export class PdfSignatureComponent {
9
+ signaturePad;
10
+ activeTab = 'upload';
11
+ canvas;
12
+ closed = new EventEmitter();
13
+ selectedFile;
14
+ previewUrl = null;
15
+ fileName = '';
16
+ isImage = false;
17
+ ngAfterViewInit() {
18
+ if (this.activeTab === 'draw' && this.canvas) {
19
+ this.initSignaturePad();
20
+ }
21
+ }
22
+ initSignaturePad() {
23
+ if (!this.canvas)
24
+ return;
25
+ this.signaturePad = new SignaturePad(this.canvas.nativeElement, {
26
+ minWidth: 1,
27
+ penColor: 'black',
28
+ });
29
+ }
30
+ setActiveTab(tab) {
31
+ this.activeTab = tab;
32
+ if (tab === 'draw') {
33
+ setTimeout(() => {
34
+ this.initSignaturePad();
35
+ });
36
+ }
37
+ }
38
+ saveSignature() {
39
+ let base64 = null;
40
+ if (this.signaturePad && !this.signaturePad.isEmpty()) {
41
+ base64 = this.signaturePad.toDataURL();
42
+ }
43
+ if (this.previewUrl) {
44
+ base64 = this.previewUrl;
45
+ }
46
+ if (!base64) {
47
+ return;
48
+ }
49
+ this.closed.emit({ confirmed: true, image: base64 });
50
+ }
51
+ clear() {
52
+ this.signaturePad.clear();
53
+ }
54
+ onDragOver(event) {
55
+ event.preventDefault();
56
+ event.stopPropagation();
57
+ }
58
+ onDragLeave(event) {
59
+ event.preventDefault();
60
+ event.stopPropagation();
61
+ }
62
+ onDrop(event) {
63
+ event.preventDefault();
64
+ event.stopPropagation();
65
+ if (event.dataTransfer && event.dataTransfer.files.length > 0) {
66
+ this.handleFile(event.dataTransfer.files[0]);
67
+ }
68
+ }
69
+ onFileSelected(event) {
70
+ const file = event.target.files[0];
71
+ if (file) {
72
+ this.handleFile(file);
73
+ }
74
+ }
75
+ handleFile(file) {
76
+ this.selectedFile = file;
77
+ this.fileName = file.name;
78
+ this.isImage = file.type.startsWith('image/');
79
+ const reader = new FileReader();
80
+ reader.onload = () => {
81
+ this.previewUrl = reader.result;
82
+ };
83
+ reader.readAsDataURL(file);
84
+ }
85
+ uploadFile() {
86
+ if (!this.selectedFile)
87
+ return;
88
+ const formData = new FormData();
89
+ formData.append('file', this.selectedFile);
90
+ }
91
+ close(confirmed = false) {
92
+ this.closed.emit({ confirmed });
93
+ }
94
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PdfSignatureComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
95
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: PdfSignatureComponent, isStandalone: true, selector: "app-pdf-signature", outputs: { closed: "closed" }, viewQueries: [{ propertyName: "canvas", first: true, predicate: ["canvas"], descendants: true }], ngImport: i0, template: "<div class=\"dialog-wrapper\" style=\"background: white;\">\r\n\r\n <div class=\"tabs-header flex\">\r\n <button type=\"button\" [class.active]=\"activeTab === 'upload'\" (click)=\"setActiveTab('upload')\" class=\"tab-btn\">\r\n UPLOAD\r\n </button>\r\n <button type=\"button\" [class.active]=\"activeTab === 'draw'\" (click)=\"setActiveTab('draw')\" class=\"tab-btn\">\r\n DRAW\r\n </button>\r\n\r\n </div>\r\n\r\n <div *ngIf=\"activeTab === 'upload'\" class=\"tab-content\">\r\n <div class=\"drop-zone px-2\" [class.with-image]=\"previewUrl\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onDrop($event)\"\r\n (click)=\"$event.stopPropagation()\">\r\n <span>Drag and drop here</span>\r\n <ng-container *ngIf=\"previewUrl\">\r\n <img *ngIf=\"isImage\" [src]=\"previewUrl\" class=\"preview-img\" />\r\n <p *ngIf=\"!isImage\">{{ fileName }}</p>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!previewUrl\">\r\n <input type=\"file\" (change)=\"onFileSelected($event)\" class=\"input_files\"/>\r\n </ng-container>\r\n </div>\r\n\r\n <div *ngIf=\"activeTab === 'draw'\" class=\"tab-content\">\r\n <div class=\"signature-container\">\r\n <canvas #canvas width=\"450\" height=\"150\" style=\"width: 99%; border: 1px solid #ccc;\"></canvas>\r\n </div>\r\n <button type=\"button\" (click)=\"clear()\" mat-flat-button color=\"primary\">\r\n X\r\n </button>\r\n </div>\r\n\r\n <div class=\"dialog-footer mx-2\">\r\n <div class=\"buttons-row\">\r\n <div class=\"buttons-row\">\r\n <button type=\"button\" class=\"btn btn-cancel\" (click)=\"close(false)\">\r\n Close\r\n </button>\r\n\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"saveSignature()\">\r\n SIGN\r\n </button>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n", styles: [".signature-container{background:#fff}canvas{background:transparent!important}.dialog-wrapper{display:flex;flex-direction:column;height:100%;min-height:100%}.tabs-container{flex:1 1 auto;overflow-y:auto}.dialog-footer{padding:10px 10px 10px 30px;border-top:1px solid #ddd;display:flex;justify-content:flex-end;position:sticky;bottom:0}.buttons-row{display:flex;justify-content:space-between;width:30%;gap:10px}.drop-zone{width:98%;height:200px;border:2px dashed #888;border-radius:10px;text-align:center;position:relative;overflow:hidden;display:flex;align-items:center;justify-content:center;padding:4px}.drop-zone.with-image{border:2px solid #888}.drop-zone.dragover{background:#e0f3ff;border-color:#2196f3}.preview-img{width:100%;height:100%;object-fit:contain}.footer{display:flex;justify-content:space-between;border-top:1px solid #ddd;padding:10px}.preview{width:100%;margin-top:10px}.signature-container canvas{width:100%}.input_files{padding-right:120px!important}.tabs-header{display:flex;border-bottom:1px solid #ccc;margin-bottom:8px}.tab-btn{padding:8px 16px;border:none;background:none;cursor:pointer}.tab-btn.active{border-bottom:2px solid #1976d2;font-weight:700}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type:
96
+ // RouterModule,
97
+ ReactiveFormsModule }], encapsulation: i0.ViewEncapsulation.None });
98
+ }
99
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PdfSignatureComponent, decorators: [{
100
+ type: Component,
101
+ args: [{ selector: 'app-pdf-signature', imports: [
102
+ NgIf,
103
+ CommonModule,
104
+ FormsModule,
105
+ // RouterModule,
106
+ ReactiveFormsModule,
107
+ ], standalone: true, encapsulation: ViewEncapsulation.None, template: "<div class=\"dialog-wrapper\" style=\"background: white;\">\r\n\r\n <div class=\"tabs-header flex\">\r\n <button type=\"button\" [class.active]=\"activeTab === 'upload'\" (click)=\"setActiveTab('upload')\" class=\"tab-btn\">\r\n UPLOAD\r\n </button>\r\n <button type=\"button\" [class.active]=\"activeTab === 'draw'\" (click)=\"setActiveTab('draw')\" class=\"tab-btn\">\r\n DRAW\r\n </button>\r\n\r\n </div>\r\n\r\n <div *ngIf=\"activeTab === 'upload'\" class=\"tab-content\">\r\n <div class=\"drop-zone px-2\" [class.with-image]=\"previewUrl\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onDrop($event)\"\r\n (click)=\"$event.stopPropagation()\">\r\n <span>Drag and drop here</span>\r\n <ng-container *ngIf=\"previewUrl\">\r\n <img *ngIf=\"isImage\" [src]=\"previewUrl\" class=\"preview-img\" />\r\n <p *ngIf=\"!isImage\">{{ fileName }}</p>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!previewUrl\">\r\n <input type=\"file\" (change)=\"onFileSelected($event)\" class=\"input_files\"/>\r\n </ng-container>\r\n </div>\r\n\r\n <div *ngIf=\"activeTab === 'draw'\" class=\"tab-content\">\r\n <div class=\"signature-container\">\r\n <canvas #canvas width=\"450\" height=\"150\" style=\"width: 99%; border: 1px solid #ccc;\"></canvas>\r\n </div>\r\n <button type=\"button\" (click)=\"clear()\" mat-flat-button color=\"primary\">\r\n X\r\n </button>\r\n </div>\r\n\r\n <div class=\"dialog-footer mx-2\">\r\n <div class=\"buttons-row\">\r\n <div class=\"buttons-row\">\r\n <button type=\"button\" class=\"btn btn-cancel\" (click)=\"close(false)\">\r\n Close\r\n </button>\r\n\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"saveSignature()\">\r\n SIGN\r\n </button>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n", styles: [".signature-container{background:#fff}canvas{background:transparent!important}.dialog-wrapper{display:flex;flex-direction:column;height:100%;min-height:100%}.tabs-container{flex:1 1 auto;overflow-y:auto}.dialog-footer{padding:10px 10px 10px 30px;border-top:1px solid #ddd;display:flex;justify-content:flex-end;position:sticky;bottom:0}.buttons-row{display:flex;justify-content:space-between;width:30%;gap:10px}.drop-zone{width:98%;height:200px;border:2px dashed #888;border-radius:10px;text-align:center;position:relative;overflow:hidden;display:flex;align-items:center;justify-content:center;padding:4px}.drop-zone.with-image{border:2px solid #888}.drop-zone.dragover{background:#e0f3ff;border-color:#2196f3}.preview-img{width:100%;height:100%;object-fit:contain}.footer{display:flex;justify-content:space-between;border-top:1px solid #ddd;padding:10px}.preview{width:100%;margin-top:10px}.signature-container canvas{width:100%}.input_files{padding-right:120px!important}.tabs-header{display:flex;border-bottom:1px solid #ccc;margin-bottom:8px}.tab-btn{padding:8px 16px;border:none;background:none;cursor:pointer}.tab-btn.active{border-bottom:2px solid #1976d2;font-weight:700}\n"] }]
108
+ }], propDecorators: { canvas: [{
109
+ type: ViewChild,
110
+ args: ['canvas', { static: false }]
111
+ }], closed: [{
112
+ type: Output
113
+ }] } });
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLXNpZ25hdHVyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItZmlyYXMtZGlnaS9zcmMvbGliL3BkZi1zaWduYXR1cmUvcGRmLXNpZ25hdHVyZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItZmlyYXMtZGlnaS9zcmMvbGliL3BkZi1zaWduYXR1cmUvcGRmLXNpZ25hdHVyZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFNBQVMsRUFBaUIsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxZQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRyxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxrREFBa0Q7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFnQnJELE1BQU0sT0FBTyxxQkFBcUI7SUFFaEMsWUFBWSxDQUFnQjtJQUM1QixTQUFTLEdBQXNCLFFBQVEsQ0FBQztJQUNBLE1BQU0sQ0FBaUM7SUFDckUsTUFBTSxHQUFHLElBQUksWUFBWSxFQUEwQyxDQUFDO0lBRTlFLFlBQVksQ0FBZTtJQUMzQixVQUFVLEdBQWdDLElBQUksQ0FBQztJQUMvQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ2QsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUVoQixlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFDRCxn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Q0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUNELFVBQVU7UUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVk7WUFBRSxPQUFPO1FBRS9CLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDaEMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDRCxLQUFLLENBQUMsWUFBcUIsS0FBSztRQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDbEMsQ0FBQzt3R0FwR1UscUJBQXFCOzRGQUFyQixxQkFBcUIsOE1DckJsQyxnN0RBcURBLHF0Q0QzQ0ksSUFBSSw0RkFDSixZQUFZLDhCQUNaLFdBQVc7Z0JBQ1gsZ0JBQWdCO2dCQUNoQixtQkFBbUI7OzRGQU9WLHFCQUFxQjtrQkFmakMsU0FBUzsrQkFDRSxtQkFBbUIsV0FDcEI7d0JBRVAsSUFBSTt3QkFDSixZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsZ0JBQWdCO3dCQUNoQixtQkFBbUI7cUJBQ3BCLGNBR1csSUFBSSxpQkFDRCxpQkFBaUIsQ0FBQyxJQUFJOzhCQU1HLE1BQU07c0JBQTdDLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDNUIsTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIEFmdGVyVmlld0luaXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBTaWduYXR1cmVQYWQgZnJvbSAnc2lnbmF0dXJlX3BhZCc7XHJcbmltcG9ydCB7ICBFdmVudEVtaXR0ZXIsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuLy8gaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtcGRmLXNpZ25hdHVyZScsXHJcbiAgaW1wb3J0czogW1xyXG5cclxuICAgIE5nSWYsXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIC8vIFJvdXRlck1vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGRmLXNpZ25hdHVyZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3BkZi1zaWduYXR1cmUuY29tcG9uZW50LnNjc3MnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGRmU2lnbmF0dXJlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcblxyXG4gIHNpZ25hdHVyZVBhZCE6IFNpZ25hdHVyZVBhZDtcclxuICBhY3RpdmVUYWI6ICd1cGxvYWQnIHwgJ2RyYXcnID0gJ3VwbG9hZCc7XHJcbiAgQFZpZXdDaGlsZCgnY2FudmFzJywgeyBzdGF0aWM6IGZhbHNlIH0pIGNhbnZhcyE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xyXG4gIEBPdXRwdXQoKSBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgY29uZmlybWVkOiBib29sZWFuLCBpbWFnZT86IHN0cmluZyB9PigpO1xyXG5cclxuICBzZWxlY3RlZEZpbGUhOiBGaWxlIHwgbnVsbDtcclxuICBwcmV2aWV3VXJsOiBzdHJpbmcgfCBBcnJheUJ1ZmZlciB8IG51bGwgPSBudWxsO1xyXG4gIGZpbGVOYW1lID0gJyc7XHJcbiAgaXNJbWFnZSA9IGZhbHNlO1xyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBpZiAodGhpcy5hY3RpdmVUYWIgPT09ICdkcmF3JyAmJiB0aGlzLmNhbnZhcykge1xyXG4gICAgICB0aGlzLmluaXRTaWduYXR1cmVQYWQoKTtcclxuICAgIH1cclxuICB9XHJcbiAgaW5pdFNpZ25hdHVyZVBhZCgpIHtcclxuICAgIGlmICghdGhpcy5jYW52YXMpIHJldHVybjtcclxuICAgIHRoaXMuc2lnbmF0dXJlUGFkID0gbmV3IFNpZ25hdHVyZVBhZCh0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LCB7XHJcbiAgICAgIG1pbldpZHRoOiAxLFxyXG4gICAgICBwZW5Db2xvcjogJ2JsYWNrJyxcclxuICAgIH0pO1xyXG4gIH1cclxuICBzZXRBY3RpdmVUYWIodGFiOiAndXBsb2FkJyB8ICdkcmF3Jykge1xyXG4gICAgdGhpcy5hY3RpdmVUYWIgPSB0YWI7XHJcblxyXG4gICAgaWYgKHRhYiA9PT0gJ2RyYXcnKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaW5pdFNpZ25hdHVyZVBhZCgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNhdmVTaWduYXR1cmUoKSB7XHJcbiAgICBsZXQgYmFzZTY0OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGhpcy5zaWduYXR1cmVQYWQgJiYgIXRoaXMuc2lnbmF0dXJlUGFkLmlzRW1wdHkoKSkge1xyXG4gICAgICBiYXNlNjQgPSB0aGlzLnNpZ25hdHVyZVBhZC50b0RhdGFVUkwoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnByZXZpZXdVcmwpIHtcclxuICAgICAgYmFzZTY0ID0gdGhpcy5wcmV2aWV3VXJsIGFzIHN0cmluZztcclxuICAgIH1cclxuICAgIGlmICghYmFzZTY0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsb3NlZC5lbWl0KHsgY29uZmlybWVkOiB0cnVlLCBpbWFnZTogYmFzZTY0IH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIGNsZWFyKCkge1xyXG4gICAgdGhpcy5zaWduYXR1cmVQYWQuY2xlYXIoKTtcclxuICB9XHJcblxyXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgb25EcmFnTGVhdmUoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgb25Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyICYmIGV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRmlsZShldmVudC5kYXRhVHJhbnNmZXIuZmlsZXNbMF0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25GaWxlU2VsZWN0ZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgZmlsZSA9IGV2ZW50LnRhcmdldC5maWxlc1swXTtcclxuICAgIGlmIChmaWxlKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRmlsZShmaWxlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUZpbGUoZmlsZTogRmlsZSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpbGUgPSBmaWxlO1xyXG4gICAgdGhpcy5maWxlTmFtZSA9IGZpbGUubmFtZTtcclxuICAgIHRoaXMuaXNJbWFnZSA9IGZpbGUudHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKTtcclxuXHJcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgdGhpcy5wcmV2aWV3VXJsID0gcmVhZGVyLnJlc3VsdDtcclxuICAgIH07XHJcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICB9XHJcbiAgdXBsb2FkRmlsZSgpIHtcclxuICAgIGlmICghdGhpcy5zZWxlY3RlZEZpbGUpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgdGhpcy5zZWxlY3RlZEZpbGUpO1xyXG4gIH1cclxuICBjbG9zZShjb25maXJtZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgdGhpcy5jbG9zZWQuZW1pdCh7IGNvbmZpcm1lZCB9KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImRpYWxvZy13cmFwcGVyXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiB3aGl0ZTtcIj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInRhYnMtaGVhZGVyIGZsZXhcIj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlVGFiID09PSAndXBsb2FkJ1wiIChjbGljayk9XCJzZXRBY3RpdmVUYWIoJ3VwbG9hZCcpXCIgY2xhc3M9XCJ0YWItYnRuXCI+XHJcbiAgICAgIFVQTE9BRFxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVRhYiA9PT0gJ2RyYXcnXCIgKGNsaWNrKT1cInNldEFjdGl2ZVRhYignZHJhdycpXCIgY2xhc3M9XCJ0YWItYnRuXCI+XHJcbiAgICAgIERSQVdcclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cImFjdGl2ZVRhYiA9PT0gJ3VwbG9hZCdcIiBjbGFzcz1cInRhYi1jb250ZW50XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZHJvcC16b25lIHB4LTJcIiBbY2xhc3Mud2l0aC1pbWFnZV09XCJwcmV2aWV3VXJsXCJcclxuICAgICAgICAgKGRyYWdvdmVyKT1cIm9uRHJhZ092ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgIChkcmFnbGVhdmUpPVwib25EcmFnTGVhdmUoJGV2ZW50KVwiXHJcbiAgICAgICAgIChkcm9wKT1cIm9uRHJvcCgkZXZlbnQpXCJcclxuICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICA8c3Bhbj5EcmFnIGFuZCBkcm9wIGhlcmU8L3NwYW4+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcmV2aWV3VXJsXCI+XHJcbiAgICAgICAgPGltZyAqbmdJZj1cImlzSW1hZ2VcIiBbc3JjXT1cInByZXZpZXdVcmxcIiBjbGFzcz1cInByZXZpZXctaW1nXCIgLz5cclxuICAgICAgICA8cCAqbmdJZj1cIiFpc0ltYWdlXCI+e3sgZmlsZU5hbWUgfX08L3A+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFwcmV2aWV3VXJsXCI+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIChjaGFuZ2UpPVwib25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiIGNsYXNzPVwiaW5wdXRfZmlsZXNcIi8+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cImFjdGl2ZVRhYiA9PT0gJ2RyYXcnXCIgY2xhc3M9XCJ0YWItY29udGVudFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNpZ25hdHVyZS1jb250YWluZXJcIj5cclxuICAgICAgPGNhbnZhcyAjY2FudmFzIHdpZHRoPVwiNDUwXCIgaGVpZ2h0PVwiMTUwXCIgc3R5bGU9XCJ3aWR0aDogOTklOyBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1wiPjwvY2FudmFzPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2xlYXIoKVwiIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgWFxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJkaWFsb2ctZm9vdGVyIG14LTJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJidXR0b25zLXJvd1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9ucy1yb3dcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tY2FuY2VsXCIgKGNsaWNrKT1cImNsb3NlKGZhbHNlKVwiPlxyXG4gICAgICAgICAgQ2xvc2VcclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwic2F2ZVNpZ25hdHVyZSgpXCI+XHJcbiAgICAgICAgICBTSUdOXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLWZpcmFzLWRpZ2kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9saWItZmlyYXMtZGlnaS9zcmMvbGliLWZpcmFzLWRpZ2kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,9 @@
1
+ /*
2
+ * Public API Surface of lib-firas-digi
3
+ */
4
+ export * from './lib/lib-firas-digi.service';
5
+ export * from './lib/lib-firas-digi.component';
6
+ export * from './lib/pdf-info/pdf-info.component';
7
+ export * from './lib/pdf-signature/pdf-signature.component';
8
+ export * from './lib/pdf-explorer/pdf-explorer.component';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2xpYi1maXJhcy1kaWdpL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLDJDQUEyQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIGxpYi1maXJhcy1kaWdpXHJcbiAqL1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbGliLWZpcmFzLWRpZ2kuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2xpYi1maXJhcy1kaWdpLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BkZi1pbmZvL3BkZi1pbmZvLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BkZi1zaWduYXR1cmUvcGRmLXNpZ25hdHVyZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9wZGYtZXhwbG9yZXIvcGRmLWV4cGxvcmVyLmNvbXBvbmVudCc7XHJcbiJdfQ==