lib-firas-digi 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,13 +1,17 @@
1
- import { Component, Input, ViewChild, } from '@angular/core';
2
- import { NgxExtendedPdfViewerModule, pdfDefaultOptions, } from 'ngx-extended-pdf-viewer';
1
+ import { Component, ElementRef, Input, ViewChild, } from '@angular/core';
2
+ import { NgxExtendedPdfViewerComponent, NgxExtendedPdfViewerModule, pdfDefaultOptions, } from 'ngx-extended-pdf-viewer';
3
3
  import { PDFDocument } from 'pdf-lib';
4
4
  import { FormsModule, ReactiveFormsModule } from '@angular/forms';
5
5
  import { CommonModule, NgIf } from '@angular/common';
6
6
  import { PdfSignatureComponent } from '../pdf-signature/pdf-signature.component';
7
+ import { HttpClientModule } from '@angular/common/http';
7
8
  import * as i0 from "@angular/core";
8
- import * as i1 from "ngx-extended-pdf-viewer";
9
- import * as i2 from "@angular/common";
9
+ import * as i1 from "@angular/common/http";
10
+ import * as i2 from "ngx-extended-pdf-viewer";
11
+ import * as i3 from "@angular/common";
10
12
  export class PdfInfoComponent {
13
+ http;
14
+ pdfViewer;
11
15
  signatureImg;
12
16
  floatingSignature;
13
17
  pdfSrc = '';
@@ -21,12 +25,43 @@ export class PdfInfoComponent {
21
25
  zoom = 100;
22
26
  showDialog = false;
23
27
  currentPdfBytes;
24
- constructor() {
28
+ constructor(http) {
29
+ this.http = http;
25
30
  pdfDefaultOptions.textLayerMode = 1;
26
31
  }
32
+ pdfViewerWrapper;
27
33
  ngAfterViewInit() {
28
- // ViewChild references are now available after view initialization
29
- // Access them here if needed
34
+ const observer = new MutationObserver(() => {
35
+ const saveButton = this.pdfViewerWrapper.nativeElement.querySelector('[title="Download"]');
36
+ if (saveButton && !saveButton.dataset['hooked']) {
37
+ saveButton.dataset['hooked'] = 'true';
38
+ saveButton.addEventListener('click', (event) => {
39
+ event.preventDefault();
40
+ this.uploadPdf();
41
+ });
42
+ }
43
+ });
44
+ observer.observe(this.pdfViewerWrapper.nativeElement, { childList: true, subtree: true });
45
+ }
46
+ iframeUrl = 'https://pedit.coretech-mena.com/pdf-info?callback=https://cts-be.coretech-mena.com/api/v1/FileManager/Upload';
47
+ // iframeUrl = 'https://http://localhost:4200/pdf-info?callback=https://cts-be.coretech-mena.com/api/v1/FileManager/Upload';
48
+ uploadPdf() {
49
+ const uploadUrl = this.iframeUrl.split('?')[1]?.split('=')[1];
50
+ if (!uploadUrl) {
51
+ console.error('لم يتم العثور على رابط الرفع!');
52
+ return;
53
+ }
54
+ fetch(this.pdfSrc)
55
+ .then(res => res.blob())
56
+ .then(blob => {
57
+ const formData = new FormData();
58
+ formData.append('file', blob, 'myfile.pdf');
59
+ this.http.post(uploadUrl, formData)
60
+ .subscribe({
61
+ next: () => console.log('upload'),
62
+ error: (err) => console.error(' Error ', err)
63
+ });
64
+ });
30
65
  }
31
66
  async onFileSelected(event) {
32
67
  const input = event.target;
@@ -212,8 +247,8 @@ export class PdfInfoComponent {
212
247
  finalizeSignature() {
213
248
  this.signMode = false;
214
249
  }
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"] }] });
250
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PdfInfoComponent, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Component });
251
+ 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: "pdfViewer", first: true, predicate: NgxExtendedPdfViewerComponent, descendants: true }, { propertyName: "signatureImg", first: true, predicate: ["signatureImg"], descendants: true }, { propertyName: "floatingSignature", first: true, predicate: ["floatingSignature"], descendants: true }, { propertyName: "pdfViewerWrapper", first: true, predicate: ["pdfViewerWrapper"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div>\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 <div #pdfViewerWrapper>\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 [showDownloadButton]=\"true\"\r\n (click)=\"onPdfClick($event)\">\r\n</ngx-extended-pdf-viewer>\r\n</div>\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: i2.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: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PdfSignatureComponent, selector: "app-pdf-signature", outputs: ["closed"] }, { kind: "ngmodule", type: HttpClientModule }] });
217
252
  }
218
253
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PdfInfoComponent, decorators: [{
219
254
  type: Component,
@@ -223,9 +258,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
223
258
  ReactiveFormsModule,
224
259
  CommonModule,
225
260
  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: [{
261
+ PdfSignatureComponent,
262
+ HttpClientModule
263
+ ], template: "<div>\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 <div #pdfViewerWrapper>\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 [showDownloadButton]=\"true\"\r\n (click)=\"onPdfClick($event)\">\r\n</ngx-extended-pdf-viewer>\r\n</div>\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"] }]
264
+ }], ctorParameters: () => [{ type: i1.HttpClient }], propDecorators: { pdfViewer: [{
265
+ type: ViewChild,
266
+ args: [NgxExtendedPdfViewerComponent]
267
+ }], signatureImg: [{
229
268
  type: ViewChild,
230
269
  args: ['signatureImg', { static: false }]
231
270
  }], floatingSignature: [{
@@ -233,5 +272,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
233
272
  args: ['floatingSignature', { static: false }]
234
273
  }], pdfSrc: [{
235
274
  type: Input
275
+ }], pdfViewerWrapper: [{
276
+ type: ViewChild,
277
+ args: ['pdfViewerWrapper', { read: ElementRef }]
236
278
  }] } });
237
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLWluZm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGliLWZpcmFzLWRpZ2kvc3JjL2xpYi9wZGYtaW5mby9wZGYtaW5mby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItZmlyYXMtZGlnaS9zcmMvbGliL3BkZi1pbmZvL3BkZi1pbmZvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsMEJBQTBCLEVBRTFCLGlCQUFpQixHQUNsQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7QUFnQmpGLE1BQU0sT0FBTyxnQkFBZ0I7SUFFM0IsWUFBWSxDQUFnQztJQUc1QyxpQkFBaUIsQ0FBZ0M7SUFFeEMsTUFBTSxHQUFXLEVBQUUsQ0FBQztJQUM3QixZQUFZLEdBQVcsRUFBRSxDQUFDO0lBRTFCLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDbEIsV0FBVyxHQUFZLElBQUksQ0FBQztJQUM1QixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLGFBQWEsR0FBWSxJQUFJLENBQUM7SUFDOUIsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUV4QixVQUFVLEdBQWdCLEVBQUUsQ0FBQztJQUM3QixJQUFJLEdBQVEsR0FBRyxDQUFDO0lBQ2hCLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIs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QkFDbkIsWUFBWSxtSUFFWixxQkFBcUI7OzRGQUdaLGdCQUFnQjtrQkFkNUIsU0FBUzsrQkFDRSxjQUFjLGNBR1osSUFBSSxXQUNQO3dCQUNQLDBCQUEwQjt3QkFDMUIsV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLFlBQVk7d0JBQ1osSUFBSTt3QkFDSixxQkFBcUI7cUJBQ3RCO3dEQUlELFlBQVk7c0JBRFgsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUk1QyxpQkFBaUI7c0JBRGhCLFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUd4QyxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBWaWV3Q2hpbGQsXG4gIEFmdGVyVmlld0luaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgTmd4RXh0ZW5kZWRQZGZWaWV3ZXJNb2R1bGUsXG4gIFRleHRMYXllclJlbmRlcmVkRXZlbnQsXG4gIHBkZkRlZmF1bHRPcHRpb25zLFxufSBmcm9tICduZ3gtZXh0ZW5kZWQtcGRmLXZpZXdlcic7XG5pbXBvcnQgeyBQREZEb2N1bWVudCB9IGZyb20gJ3BkZi1saWInO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUGRmU2lnbmF0dXJlQ29tcG9uZW50IH0gZnJvbSAnLi4vcGRmLXNpZ25hdHVyZS9wZGYtc2lnbmF0dXJlLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1wZGYtaW5mbycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wZGYtaW5mby5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BkZi1pbmZvLmNvbXBvbmVudC5jc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE5neEV4dGVuZGVkUGRmVmlld2VyTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE5nSWYsXG4gICAgUGRmU2lnbmF0dXJlQ29tcG9uZW50XG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFBkZkluZm9Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgnc2lnbmF0dXJlSW1nJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHNpZ25hdHVyZUltZz86IEVsZW1lbnRSZWY8SFRNTEltYWdlRWxlbWVudD47XG5cbiAgQFZpZXdDaGlsZCgnZmxvYXRpbmdTaWduYXR1cmUnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgZmxvYXRpbmdTaWduYXR1cmU/OiBFbGVtZW50UmVmPEhUTUxJbWFnZUVsZW1lbnQ+O1xuXG4gIEBJbnB1dCgpIHBkZlNyYzogc3RyaW5nID0gJyc7XG4gIGltYWdlRGF0YVVSTDogc3RyaW5nID0gJyc7XG5cbiAgcGRmQmxvY2tlZCA9IHRydWU7XG4gIHNpZGViYXJPcGVuOiBib29sZWFuID0gdHJ1ZTtcbiAgc2lnbk1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd1NpZ25hdHVyZTogYm9vbGVhbiA9IHRydWU7XG4gIHNpZ25hdHVyZUxvYWRlZCA9IGZhbHNlO1xuXG4gIHNpZ25hdHVyZXM6IFNpZ25hdHVyZVtdID0gW107XG4gIHpvb206IGFueSA9IDEwMDtcbiAgc2hvd0RpYWxvZyA9IGZhbHNlO1xuICBjdXJyZW50UGRmQnl0ZXMhOiBVaW50OEFycmF5O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHBkZkRlZmF1bHRPcHRpb25zLnRleHRMYXllck1vZGUgPSAxO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vIFZpZXdDaGlsZCByZWZlcmVuY2VzIGFyZSBub3cgYXZhaWxhYmxlIGFmdGVyIHZpZXcgaW5pdGlhbGl6YXRpb25cbiAgICAvLyBBY2Nlc3MgdGhlbSBoZXJlIGlmIG5lZWRlZFxuICB9XG5cbiAgYXN5bmMgb25GaWxlU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAoIWlucHV0LmZpbGVzIHx8IGlucHV0LmZpbGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZmlsZSA9IGlucHV0LmZpbGVzWzBdO1xuICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgZmlsZS5hcnJheUJ1ZmZlcigpO1xuICAgIHRoaXMuY3VycmVudFBkZkJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpO1xuXG4gICAgdGhpcy5wZGZTcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xuICB9XG5cbiAgYWRkU2lnbmF0dXJlKCkge1xuICAgIHRoaXMuc2hvd0RpYWxvZyA9IHRydWU7XG4gIH1cblxuICBvbkRpYWxvZ0Nsb3NlZChldmVudDogeyBjb25maXJtZWQ6IGJvb2xlYW47IGltYWdlPzogc3RyaW5nIH0pIHtcbiAgICB0aGlzLnNob3dEaWFsb2cgPSBmYWxzZTtcbiAgICBpZiAoZXZlbnQuY29uZmlybWVkICYmIGV2ZW50LmltYWdlKSB7XG4gICAgICB0aGlzLmltYWdlRGF0YVVSTCA9IGV2ZW50LmltYWdlO1xuICAgICAgdGhpcy5zaWduTW9kZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgb25QZGZDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZih0YXJnZXQuY2xvc2VzdCgnLnNpZ25hdHVyZS1ib3gnKSkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5zaWduTW9kZSB8fCAhdGhpcy5pbWFnZURhdGFVUkwpIHJldHVybjtcblxuICAgIGNvbnN0IHBhZ2VFbCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJy5wYWdlJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKCFwYWdlRWwpIHJldHVybjtcblxuICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSBOdW1iZXIocGFnZUVsLmRhdGFzZXRbJ3BhZ2VOdW1iZXInXSk7XG4gICAgY29uc3QgcGFnZVJlY3QgPSBwYWdlRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBnZXRDb21wdXRlZFN0eWxlKHBhZ2VFbCkudHJhbnNmb3JtO1xuICAgIGNvbnN0IHNjYWxlID0gdHJhbnNmb3JtICYmIHRyYW5zZm9ybSAhPT0gJ25vbmUnXG4gICAgICA/IG5ldyBET01NYXRyaXhSZWFkT25seSh0cmFuc2Zvcm0pLmFcbiAgICAgIDogMTtcblxuICAgIGNvbnN0IGRvbVggPSBldmVudC5jbGllbnRYIC0gcGFnZVJlY3QubGVmdDtcbiAgICBjb25zdCBkb21ZID0gZXZlbnQuY2xpZW50WSAtIHBhZ2VSZWN0LnRvcDtcblxuICAgIGNvbnN0IHdpZHRoID0gKHBhZ2VSZWN0LndpZHRoIC8gc2NhbGUpICogMC4xNTtcbiAgICBjb25zdCBoZWlnaHQgPSB3aWR0aCAqIDAuMzU7XG5cbiAgICBjb25zdCBzaWc6IFNpZ25hdHVyZSA9IHsgcGFnZU51bWJlciwgZG9tWCwgZG9tWSwgd2lkdGgsIGhlaWdodCB9O1xuXG4gICAgdGhpcy5zaWduYXR1cmVzLnB1c2goc2lnKTtcbiAgICB0aGlzLmNyZWF0ZURyYWdnYWJsZVNpZ25hdHVyZUJveChzaWcpO1xuXG4gICAgdGhpcy5zaWduTW9kZSA9IGZhbHNlO1xuICB9XG5cbiAgY3JlYXRlRHJhZ2dhYmxlU2lnbmF0dXJlQm94KHNpZzogU2lnbmF0dXJlKSB7XG4gICAgY29uc3QgcGFnZUVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgIGAucGRmVmlld2VyIC5wYWdlW2RhdGEtcGFnZS1udW1iZXI9XCIke3NpZy5wYWdlTnVtYmVyfVwiXWBcbiAgICApIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgaWYgKCFwYWdlRWwpIHJldHVybjtcblxuICAgIHBhZ2VFbC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG5cbiAgICBjb25zdCBib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBib3guY2xhc3NOYW1lID0gJ3NpZ25hdHVyZS1ib3gnO1xuICAgIGJveC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgYm94LnN0eWxlLmxlZnQgPSBgJHtzaWcuZG9tWH1weGA7XG4gICAgYm94LnN0eWxlLnRvcCA9IGAke3NpZy5kb21ZfXB4YDtcbiAgICBib3guc3R5bGUud2lkdGggPSBgJHtzaWcud2lkdGh9cHhgO1xuICAgIGJveC5zdHlsZS5oZWlnaHQgPSBgJHtzaWcuaGVpZ2h0fXB4YDtcbiAgICBib3guc3R5bGUuekluZGV4ID0gJzk5OTknO1xuICAgIGJveC5zdHlsZS5ib3JkZXIgPSAnMnB4IGRhc2hlZCAjMTk3NmQyJztcbiAgICBib3guc3R5bGUuYmFja2dyb3VuZCA9ICdyZ2JhKDI1LCAxMTgsIDIxMCwgMC4wNSknO1xuXG4gICAgY29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgaW1nLnNyYyA9IHRoaXMuaW1hZ2VEYXRhVVJMO1xuICAgIGltZy5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gJzEwMCUnO1xuICAgIGltZy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuXG4gICAgY29uc3QgaGFuZGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgaGFuZGxlLmNsYXNzTGlzdC5hZGQoJ3Jlc2l6ZS1oYW5kbGUnKTtcbiAgICBoYW5kbGUuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGhhbmRsZS5zdHlsZS5yaWdodCA9ICctN3B4JztcbiAgICBoYW5kbGUuc3R5bGUuYm90dG9tID0gJy03cHgnO1xuICAgIGhhbmRsZS5zdHlsZS53aWR0aCA9ICcxOHB4JztcbiAgICBoYW5kbGUuc3R5bGUuaGVpZ2h0ID0gJzE4cHgnO1xuICAgIGhhbmRsZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAncmdiYSgyNSwgMTE4LCAyMTAsIDAuMiknO1xuICAgIGhhbmRsZS5zdHlsZS5ib3JkZXIgPSAnMnB4IHNvbGlkIHJnYmEoMjUsIDExOCwgMjEwLCAwLjkpJztcbiAgICBoYW5kbGUuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzRweCc7XG4gICAgaGFuZGxlLnN0eWxlLmN1cnNvciA9ICdzZS1yZXNpemUnO1xuICAgIGhhbmRsZS5zdHlsZS56SW5kZXggPSAnMTAwMDAnO1xuICAgIGhhbmRsZS50ZXh0Q29udGVudCA9ICcrJztcblxuICAgIGJveC5hcHBlbmRDaGlsZChpbWcpO1xuICAgIGJveC5hcHBlbmRDaGlsZChoYW5kbGUpO1xuICAgIHBhZ2VFbC5hcHBlbmRDaGlsZChib3gpO1xuXG4gICAgdGhpcy5tYWtlRHJhZ2dhYmxlKGJveCwgcGFnZUVsLCBzaWcpO1xuICAgIHRoaXMubWFrZVJlc2l6YWJsZShib3gsIHNpZyk7XG4gIH1cblxuICBtYWtlRHJhZ2dhYmxlKGJveDogSFRNTEVsZW1lbnQsIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIHNpZzogU2lnbmF0dXJlKSB7XG4gICAgbGV0IHN0YXJ0WCA9IDA7XG4gICAgbGV0IHN0YXJ0WSA9IDA7XG4gICAgbGV0IG9yaWdYID0gMDtcbiAgICBsZXQgb3JpZ1kgPSAwO1xuXG4gICAgYm94LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgKGU6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgaWYgKChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmNvbnRhaW5zKCdyZXNpemUtaGFuZGxlJykpIHJldHVybjtcblxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgYm94LnNldFBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTtcblxuICAgICAgc3RhcnRYID0gZS5jbGllbnRYO1xuICAgICAgc3RhcnRZID0gZS5jbGllbnRZO1xuICAgICAgb3JpZ1ggPSBib3gub2Zmc2V0TGVmdDtcbiAgICAgIG9yaWdZID0gYm94Lm9mZnNldFRvcDtcblxuICAgICAgY29uc3Qgc2NhbGUgPSB0aGlzLmdldFBkZlNjYWxlKGNvbnRhaW5lcik7XG5cbiAgICAgIGNvbnN0IG1vdmUgPSAoZXY6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBkeCA9IChldi5jbGllbnRYIC0gc3RhcnRYKSAvIHNjYWxlO1xuICAgICAgICBjb25zdCBkeSA9IChldi5jbGllbnRZIC0gc3RhcnRZKSAvIHNjYWxlO1xuXG4gICAgICAgIGJveC5zdHlsZS5sZWZ0ID0gb3JpZ1ggKyBkeCArICdweCc7XG4gICAgICAgIGJveC5zdHlsZS50b3AgPSBvcmlnWSArIGR5ICsgJ3B4JztcblxuICAgICAgICBzaWcuZG9tWCA9IG9yaWdYICsgZHg7XG4gICAgICAgIHNpZy5kb21ZID0gb3JpZ1kgKyBkeTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHVwID0gKCkgPT4ge1xuICAgICAgICBib3gucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBtb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdXApO1xuICAgICAgfTtcblxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBtb3ZlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHVwKTtcbiAgICB9KTtcbiAgfVxuXG4gIG1ha2VSZXNpemFibGUoYm94OiBIVE1MRWxlbWVudCwgc2lnOiBTaWduYXR1cmUpIHtcbiAgICBjb25zdCBoYW5kbGUgPSBib3gucXVlcnlTZWxlY3RvcignLnJlc2l6ZS1oYW5kbGUnKSBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAoIWhhbmRsZSkgcmV0dXJuO1xuXG4gICAgaGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgKGU6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgaGFuZGxlLnNldFBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTtcblxuICAgICAgY29uc3Qgc3RhcnRYID0gZS5jbGllbnRYO1xuICAgICAgY29uc3Qgc3RhcnRXaWR0aCA9IHNpZy53aWR0aDtcblxuICAgICAgY29uc3QgbW92ZSA9IChldjogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGR4ID0gZXYuY2xpZW50WCAtIHN0YXJ0WDtcbiAgICAgICAgY29uc3QgbmV3V2lkdGggPSBNYXRoLm1heCg2MCwgc3RhcnRXaWR0aCArIGR4KTtcbiAgICAgICAgY29uc3QgbmV3SGVpZ2h0ID0gbmV3V2lkdGggKiAwLjM1O1xuXG4gICAgICAgIHNpZy53aWR0aCA9IG5ld1dpZHRoO1xuICAgICAgICBzaWcuaGVpZ2h0ID0gbmV3SGVpZ2h0O1xuXG4gICAgICAgIGJveC5zdHlsZS53aWR0aCA9IG5ld1dpZHRoICsgJ3B4JztcbiAgICAgICAgYm94LnN0eWxlLmhlaWdodCA9IG5ld0hlaWdodCArICdweCc7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB1cCA9ICgpID0+IHtcbiAgICAgICAgaGFuZGxlLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgbW92ZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHVwKTtcbiAgICAgIH07XG5cbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgbW92ZSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCB1cCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRQZGZTY2FsZShwYWdlRWw6IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBnZXRDb21wdXRlZFN0eWxlKHBhZ2VFbCkudHJhbnNmb3JtO1xuICAgIHJldHVybiB0cmFuc2Zvcm0gJiYgdHJhbnNmb3JtICE9PSAnbm9uZSdcbiAgICAgID8gbmV3IERPTU1hdHJpeFJlYWRPbmx5KHRyYW5zZm9ybSkuYVxuICAgICAgOiAxO1xuICB9XG5cbiAgYXN5bmMgYWRkQWxsU2lnbmF0dXJlc1RvUGRmKCkge1xuICAgIGlmICghdGhpcy5zaWduYXR1cmVzLmxlbmd0aCB8fCAhdGhpcy5pbWFnZURhdGFVUkwpIHJldHVybjtcblxuICAgIGNvbnN0IGV4aXN0aW5nUGRmQnl0ZXMgPSBhd2FpdCBmZXRjaCh0aGlzLnBkZlNyYykudGhlbihyZXMgPT4gcmVzLmFycmF5QnVmZmVyKCkpO1xuICAgIGNvbnN0IHBkZkRvYyA9IGF3YWl0IFBERkRvY3VtZW50LmxvYWQoZXhpc3RpbmdQZGZCeXRlcyk7XG4gICAgY29uc3QgcGFnZXMgPSBwZGZEb2MuZ2V0UGFnZXMoKTtcblxuICAgIGNvbnN0IGJhc2U2NERhdGEgPSB0aGlzLmltYWdlRGF0YVVSTC5zcGxpdCgnLCcpWzFdO1xuICAgIGNvbnN0IGltYWdlQnl0ZXMgPSBVaW50OEFycmF5LmZyb20oYXRvYihiYXNlNjREYXRhKSwgYyA9PiBjLmNoYXJDb2RlQXQoMCkpO1xuICAgIGNvbnN0IHBuZ0ltYWdlID0gYXdhaXQgcGRmRG9jLmVtYmVkUG5nKGltYWdlQnl0ZXMpO1xuXG4gICAgZm9yIChjb25zdCBzaWcgb2YgdGhpcy5zaWduYXR1cmVzKSB7XG4gICAgICBjb25zdCBwYWdlID0gcGFnZXNbc2lnLnBhZ2VOdW1iZXIgLSAxXTtcbiAgICAgIGlmICghcGFnZSkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IHBhZ2VFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGAucGRmVmlld2VyIC5wYWdlW2RhdGEtcGFnZS1udW1iZXI9XCIke3NpZy5wYWdlTnVtYmVyfVwiXWBcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCBwYWdlUmVjdCA9IHBhZ2VFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgY29uc3Qgc2NhbGUgPSBwYWdlUmVjdC53aWR0aCAvIHBhZ2UuZ2V0V2lkdGgoKTtcblxuICAgICAgY29uc3QgcGRmWCA9IHNpZy5kb21YIC8gc2NhbGU7XG4gICAgICBjb25zdCBwZGZZID0gcGFnZS5nZXRIZWlnaHQoKSAtIHNpZy5kb21ZIC8gc2NhbGUgLSBzaWcuaGVpZ2h0IC8gc2NhbGU7XG4gICAgICBjb25zdCBwZGZXID0gc2lnLndpZHRoIC8gc2NhbGU7XG4gICAgICBjb25zdCBwZGZIID0gc2lnLmhlaWdodCAvIHNjYWxlO1xuXG4gICAgICBwYWdlLmRyYXdJbWFnZShwbmdJbWFnZSwge1xuICAgICAgICB4OiBwZGZYLFxuICAgICAgICB5OiBwZGZZLFxuICAgICAgICB3aWR0aDogcGRmVyxcbiAgICAgICAgaGVpZ2h0OiBwZGZIXG4gICAgICB9KTtcbiAgICB9XG5cbmNvbnN0IHBkZkJ5dGVzID0gYXdhaXQgcGRmRG9jLnNhdmUoKTtcblxuY29uc3QgcGRmQnl0ZXNOb3JtYWwgPSBuZXcgVWludDhBcnJheShwZGZCeXRlcyk7XG5cbmNvbnN0IGJsb2IgPSBuZXcgQmxvYihbcGRmQnl0ZXNOb3JtYWxdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9wZGYnIH0pO1xudGhpcy5wZGZTcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXG5cbiAgfVxuXG4gIGZpbmFsaXplU2lnbmF0dXJlKCkge1xuICAgIHRoaXMuc2lnbk1vZGUgPSBmYWxzZTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgU2lnbmF0dXJlIHtcbiAgcGFnZU51bWJlcjogbnVtYmVyO1xuICBkb21YOiBudW1iZXI7XG4gIGRvbVk6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG4iLCI8ZGl2PlxyXG4gIDxpbWcgI3NpZ25hdHVyZUltZyBbc3JjXT1cImltYWdlRGF0YVVSTCB8fCAnJ1wiIHN0eWxlPVwiZGlzcGxheTogbm9uZTsgcG9zaXRpb246IGFic29sdXRlOyB2aXNpYmlsaXR5OiBoaWRkZW47IHdpZHRoOiAwOyBoZWlnaHQ6IDA7XCIgLz5cclxuICA8aW1nICNmbG9hdGluZ1NpZ25hdHVyZSBbc3JjXT1cImltYWdlRGF0YVVSTCB8fCAnJ1wiIHN0eWxlPVwiZGlzcGxheTogbm9uZTsgcG9zaXRpb246IGFic29sdXRlOyB2aXNpYmlsaXR5OiBoaWRkZW47IHdpZHRoOiAwOyBoZWlnaHQ6IDA7XCIgLz5cclxuICBcclxuICA8IS0tIDxidXR0b24gKm5nSWY9XCJwZGZTcmNcIiAoY2xpY2spPVwic2hvd0Nvb3JkaW5hdGVzKClcIj5TaG93IENvb3JkaW5hdGVzPC9idXR0b24+IC0tPlxyXG4gIDxidXR0b24gKm5nSWY9XCJwZGZTcmNcIiAoY2xpY2spPVwiYWRkU2lnbmF0dXJlKClcIj5BZGQgU2lnbmF0dXJlPC9idXR0b24+XHJcbiAgPGJ1dHRvbiAqbmdJZj1cInBkZlNyY1wiIChjbGljayk9XCJhZGRBbGxTaWduYXR1cmVzVG9QZGYoKVwiPlNhdmUgU2lnbmF0dXJlPC9idXR0b24+XHJcbiAgPGlucHV0IHR5cGU9XCJmaWxlXCIgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3RlZCgkZXZlbnQpXCIgYWNjZXB0PVwiYXBwbGljYXRpb24vcGRmXCIgLz5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInBvcHVwLWJhY2tkcm9wXCIgKm5nSWY9XCJzaG93RGlhbG9nXCI+XHJcbiAgICA8YXBwLXBkZi1zaWduYXR1cmVcclxuICAgICAgY2xhc3M9XCJwb3B1cC1jb250ZW50XCJcclxuICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgIChjbG9zZWQpPVwib25EaWFsb2dDbG9zZWQoJGV2ZW50KVwiPlxyXG4gICAgPC9hcHAtcGRmLXNpZ25hdHVyZT5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiIFtoaWRkZW5dPVwiIXBkZlNyY1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cclxuICAgICAgPG5neC1leHRlbmRlZC1wZGYtdmlld2VyXHJcbiAgW3NyY109XCJwZGZTcmNcIlxyXG4gIFt0ZXh0TGF5ZXJdPVwiZmFsc2VcIlxyXG4gIFtwYWdlXT1cIjBcIlxyXG4gIFsoem9vbSldPVwiem9vbVwiXHJcbiAgW3Nob3dIYW5kVG9vbEJ1dHRvbl09XCJ0cnVlXCJcclxuICBbc2hvd09wZW5GaWxlQnV0dG9uXT1cImZhbHNlXCJcclxuICBbZW5hYmxlRHJhZ0FuZERyb3BdPVwiZmFsc2VcIlxyXG4gIChjbGljayk9XCJvblBkZkNsaWNrKCRldmVudClcIj5cclxuPC9uZ3gtZXh0ZW5kZWQtcGRmLXZpZXdlcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
279
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLWluZm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGliLWZpcmFzLWRpZ2kvc3JjL2xpYi9wZGYtaW5mby9wZGYtaW5mby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItZmlyYXMtZGlnaS9zcmMvbGliL3BkZi1pbmZvL3BkZi1pbmZvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFDTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLDZCQUE2QixFQUM3QiwwQkFBMEIsRUFFMUIsaUJBQWlCLEdBQ2xCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZ0JBQWdCLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7QUFnQnBFLE1BQU0sT0FBTyxnQkFBZ0I7SUFzQlA7SUFyQnNCLFNBQVMsQ0FBaUM7SUFFcEYsWUFBWSxDQUFnQztJQUc1QyxpQkFBaUIsQ0FBZ0M7SUFFeEMsTUFBTSxHQUFXLEVBQUUsQ0FBQztJQUM3QixZQUFZLEdBQVcsRUFBRSxDQUFDO0lBRTFCLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDbEIsV0FBVyxHQUFZLElBQUksQ0FBQztJQUM1QixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLGFBQWEsR0FBWSxJQUFJLENBQUM7SUFDOUIsZUFBZSxHQUFHLEtB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LE1BQU07c0JBQWQsS0FBSztnQkFrQmdELGdCQUFnQjtzQkFBcEUsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgTmd4RXh0ZW5kZWRQZGZWaWV3ZXJDb21wb25lbnQsXG4gIE5neEV4dGVuZGVkUGRmVmlld2VyTW9kdWxlLFxuICBUZXh0TGF5ZXJSZW5kZXJlZEV2ZW50LFxuICBwZGZEZWZhdWx0T3B0aW9ucyxcbn0gZnJvbSAnbmd4LWV4dGVuZGVkLXBkZi12aWV3ZXInO1xuaW1wb3J0IHsgUERGRG9jdW1lbnQgfSBmcm9tICdwZGYtbGliJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFBkZlNpZ25hdHVyZUNvbXBvbmVudCB9IGZyb20gJy4uL3BkZi1zaWduYXR1cmUvcGRmLXNpZ25hdHVyZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSHR0cENsaWVudE1vZHVsZSwgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1wZGYtaW5mbycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wZGYtaW5mby5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BkZi1pbmZvLmNvbXBvbmVudC5jc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE5neEV4dGVuZGVkUGRmVmlld2VyTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE5nSWYsXG4gICAgUGRmU2lnbmF0dXJlQ29tcG9uZW50LFxuICAgIEh0dHBDbGllbnRNb2R1bGVcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUGRmSW5mb0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXR7XG4gIEBWaWV3Q2hpbGQoTmd4RXh0ZW5kZWRQZGZWaWV3ZXJDb21wb25lbnQpIHBkZlZpZXdlciE6IE5neEV4dGVuZGVkUGRmVmlld2VyQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdzaWduYXR1cmVJbWcnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgc2lnbmF0dXJlSW1nPzogRWxlbWVudFJlZjxIVE1MSW1hZ2VFbGVtZW50PjtcblxuICBAVmlld0NoaWxkKCdmbG9hdGluZ1NpZ25hdHVyZScsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBmbG9hdGluZ1NpZ25hdHVyZT86IEVsZW1lbnRSZWY8SFRNTEltYWdlRWxlbWVudD47XG5cbiAgQElucHV0KCkgcGRmU3JjOiBzdHJpbmcgPSAnJztcbiAgaW1hZ2VEYXRhVVJMOiBzdHJpbmcgPSAnJztcblxuICBwZGZCbG9ja2VkID0gdHJ1ZTtcbiAgc2lkZWJhck9wZW46IGJvb2xlYW4gPSB0cnVlO1xuICBzaWduTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93U2lnbmF0dXJlOiBib29sZWFuID0gdHJ1ZTtcbiAgc2lnbmF0dXJlTG9hZGVkID0gZmFsc2U7XG5cbiAgc2lnbmF0dXJlczogU2lnbmF0dXJlW10gPSBbXTtcbiAgem9vbTogYW55ID0gMTAwO1xuICBzaG93RGlhbG9nID0gZmFsc2U7XG4gIGN1cnJlbnRQZGZCeXRlcyE6IFVpbnQ4QXJyYXk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7XG4gICAgcGRmRGVmYXVsdE9wdGlvbnMudGV4dExheWVyTW9kZSA9IDE7XG4gIH1cblxuICAgQFZpZXdDaGlsZCgncGRmVmlld2VyV3JhcHBlcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBwZGZWaWV3ZXJXcmFwcGVyITogRWxlbWVudFJlZjtcblxubmdBZnRlclZpZXdJbml0KCkge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgY29uc3Qgc2F2ZUJ1dHRvbiA9IHRoaXMucGRmVmlld2VyV3JhcHBlci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0aXRsZT1cIkRvd25sb2FkXCJdJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBpZiAoc2F2ZUJ1dHRvbiAmJiAhc2F2ZUJ1dHRvbi5kYXRhc2V0Wydob29rZWQnXSkge1xuICAgICAgICBzYXZlQnV0dG9uLmRhdGFzZXRbJ2hvb2tlZCddID0gJ3RydWUnO1xuICAgICAgICBzYXZlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB0aGlzLnVwbG9hZFBkZigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIG9ic2VydmVyLm9ic2VydmUodGhpcy5wZGZWaWV3ZXJXcmFwcGVyLm5hdGl2ZUVsZW1lbnQsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pO1xuICB9XG4gaWZyYW1lVXJsID0gJ2h0dHBzOi8vcGVkaXQuY29yZXRlY2gtbWVuYS5jb20vcGRmLWluZm8/Y2FsbGJhY2s9aHR0cHM6Ly9jdHMtYmUuY29yZXRlY2gtbWVuYS5jb20vYXBpL3YxL0ZpbGVNYW5hZ2VyL1VwbG9hZCc7XG4vLyAgaWZyYW1lVXJsID0gJ2h0dHBzOi8vaHR0cDovL2xvY2FsaG9zdDo0MjAwL3BkZi1pbmZvP2NhbGxiYWNrPWh0dHBzOi8vY3RzLWJlLmNvcmV0ZWNoLW1lbmEuY29tL2FwaS92MS9GaWxlTWFuYWdlci9VcGxvYWQnO1xuXG5cbiAgdXBsb2FkUGRmKCkge1xuICAgIGNvbnN0IHVwbG9hZFVybCA9IHRoaXMuaWZyYW1lVXJsLnNwbGl0KCc/JylbMV0/LnNwbGl0KCc9JylbMV07XG4gICAgaWYgKCF1cGxvYWRVcmwpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ9mE2YUg2YrYqtmFINin2YTYudir2YjYsSDYudmE2Ykg2LHYp9io2Lcg2KfZhNix2YHYuSEnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmZXRjaCh0aGlzLnBkZlNyYylcbiAgICAgIC50aGVuKHJlcyA9PiByZXMuYmxvYigpKVxuICAgICAgLnRoZW4oYmxvYiA9PiB7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGJsb2IsICdteWZpbGUucGRmJyk7XG5cbiAgICAgICAgdGhpcy5odHRwLnBvc3QodXBsb2FkVXJsLCBmb3JtRGF0YSlcbiAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6ICgpID0+IGNvbnNvbGUubG9nKCd1cGxvYWQnKSxcbiAgICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IGNvbnNvbGUuZXJyb3IoJyBFcnJvciAgJywgZXJyKVxuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cbiAgYXN5bmMgb25GaWxlU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAoIWlucHV0LmZpbGVzIHx8IGlucHV0LmZpbGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZmlsZSA9IGlucHV0LmZpbGVzWzBdO1xuICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgZmlsZS5hcnJheUJ1ZmZlcigpO1xuICAgIHRoaXMuY3VycmVudFBkZkJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpO1xuXG4gICAgdGhpcy5wZGZTcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xuICB9XG5cbiAgYWRkU2lnbmF0dXJlKCkge1xuICAgIHRoaXMuc2hvd0RpYWxvZyA9IHRydWU7XG4gIH1cblxuICBvbkRpYWxvZ0Nsb3NlZChldmVudDogeyBjb25maXJtZWQ6IGJvb2xlYW47IGltYWdlPzogc3RyaW5nIH0pIHtcbiAgICB0aGlzLnNob3dEaWFsb2cgPSBmYWxzZTtcbiAgICBpZiAoZXZlbnQuY29uZmlybWVkICYmIGV2ZW50LmltYWdlKSB7XG4gICAgICB0aGlzLmltYWdlRGF0YVVSTCA9IGV2ZW50LmltYWdlO1xuICAgICAgdGhpcy5zaWduTW9kZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgb25QZGZDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZih0YXJnZXQuY2xvc2VzdCgnLnNpZ25hdHVyZS1ib3gnKSkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5zaWduTW9kZSB8fCAhdGhpcy5pbWFnZURhdGFVUkwpIHJldHVybjtcblxuICAgIGNvbnN0IHBhZ2VFbCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJy5wYWdlJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKCFwYWdlRWwpIHJldHVybjtcblxuICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSBOdW1iZXIocGFnZUVsLmRhdGFzZXRbJ3BhZ2VOdW1iZXInXSk7XG4gICAgY29uc3QgcGFnZVJlY3QgPSBwYWdlRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBnZXRDb21wdXRlZFN0eWxlKHBhZ2VFbCkudHJhbnNmb3JtO1xuICAgIGNvbnN0IHNjYWxlID0gdHJhbnNmb3JtICYmIHRyYW5zZm9ybSAhPT0gJ25vbmUnXG4gICAgICA/IG5ldyBET01NYXRyaXhSZWFkT25seSh0cmFuc2Zvcm0pLmFcbiAgICAgIDogMTtcblxuICAgIGNvbnN0IGRvbVggPSBldmVudC5jbGllbnRYIC0gcGFnZVJlY3QubGVmdDtcbiAgICBjb25zdCBkb21ZID0gZXZlbnQuY2xpZW50WSAtIHBhZ2VSZWN0LnRvcDtcblxuICAgIGNvbnN0IHdpZHRoID0gKHBhZ2VSZWN0LndpZHRoIC8gc2NhbGUpICogMC4xNTtcbiAgICBjb25zdCBoZWlnaHQgPSB3aWR0aCAqIDAuMzU7XG5cbiAgICBjb25zdCBzaWc6IFNpZ25hdHVyZSA9IHsgcGFnZU51bWJlciwgZG9tWCwgZG9tWSwgd2lkdGgsIGhlaWdodCB9O1xuXG4gICAgdGhpcy5zaWduYXR1cmVzLnB1c2goc2lnKTtcbiAgICB0aGlzLmNyZWF0ZURyYWdnYWJsZVNpZ25hdHVyZUJveChzaWcpO1xuXG4gICAgdGhpcy5zaWduTW9kZSA9IGZhbHNlO1xuICB9XG5cbiAgY3JlYXRlRHJhZ2dhYmxlU2lnbmF0dXJlQm94KHNpZzogU2lnbmF0dXJlKSB7XG4gICAgY29uc3QgcGFnZUVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgIGAucGRmVmlld2VyIC5wYWdlW2RhdGEtcGFnZS1udW1iZXI9XCIke3NpZy5wYWdlTnVtYmVyfVwiXWBcbiAgICApIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgaWYgKCFwYWdlRWwpIHJldHVybjtcblxuICAgIHBhZ2VFbC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG5cbiAgICBjb25zdCBib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBib3guY2xhc3NOYW1lID0gJ3NpZ25hdHVyZS1ib3gnO1xuICAgIGJveC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgYm94LnN0eWxlLmxlZnQgPSBgJHtzaWcuZG9tWH1weGA7XG4gICAgYm94LnN0eWxlLnRvcCA9IGAke3NpZy5kb21ZfXB4YDtcbiAgICBib3guc3R5bGUud2lkdGggPSBgJHtzaWcud2lkdGh9cHhgO1xuICAgIGJveC5zdHlsZS5oZWlnaHQgPSBgJHtzaWcuaGVpZ2h0fXB4YDtcbiAgICBib3guc3R5bGUuekluZGV4ID0gJzk5OTknO1xuICAgIGJveC5zdHlsZS5ib3JkZXIgPSAnMnB4IGRhc2hlZCAjMTk3NmQyJztcbiAgICBib3guc3R5bGUuYmFja2dyb3VuZCA9ICdyZ2JhKDI1LCAxMTgsIDIxMCwgMC4wNSknO1xuXG4gICAgY29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgaW1nLnNyYyA9IHRoaXMuaW1hZ2VEYXRhVVJMO1xuICAgIGltZy5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gJzEwMCUnO1xuICAgIGltZy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuXG4gICAgY29uc3QgaGFuZGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgaGFuZGxlLmNsYXNzTGlzdC5hZGQoJ3Jlc2l6ZS1oYW5kbGUnKTtcbiAgICBoYW5kbGUuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGhhbmRsZS5zdHlsZS5yaWdodCA9ICctN3B4JztcbiAgICBoYW5kbGUuc3R5bGUuYm90dG9tID0gJy03cHgnO1xuICAgIGhhbmRsZS5zdHlsZS53aWR0aCA9ICcxOHB4JztcbiAgICBoYW5kbGUuc3R5bGUuaGVpZ2h0ID0gJzE4cHgnO1xuICAgIGhhbmRsZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAncmdiYSgyNSwgMTE4LCAyMTAsIDAuMiknO1xuICAgIGhhbmRsZS5zdHlsZS5ib3JkZXIgPSAnMnB4IHNvbGlkIHJnYmEoMjUsIDExOCwgMjEwLCAwLjkpJztcbiAgICBoYW5kbGUuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzRweCc7XG4gICAgaGFuZGxlLnN0eWxlLmN1cnNvciA9ICdzZS1yZXNpemUnO1xuICAgIGhhbmRsZS5zdHlsZS56SW5kZXggPSAnMTAwMDAnO1xuICAgIGhhbmRsZS50ZXh0Q29udGVudCA9ICcrJztcblxuICAgIGJveC5hcHBlbmRDaGlsZChpbWcpO1xuICAgIGJveC5hcHBlbmRDaGlsZChoYW5kbGUpO1xuICAgIHBhZ2VFbC5hcHBlbmRDaGlsZChib3gpO1xuXG4gICAgdGhpcy5tYWtlRHJhZ2dhYmxlKGJveCwgcGFnZUVsLCBzaWcpO1xuICAgIHRoaXMubWFrZVJlc2l6YWJsZShib3gsIHNpZyk7XG4gIH1cblxuICBtYWtlRHJhZ2dhYmxlKGJveDogSFRNTEVsZW1lbnQsIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIHNpZzogU2lnbmF0dXJlKSB7XG4gICAgbGV0IHN0YXJ0WCA9IDA7XG4gICAgbGV0IHN0YXJ0WSA9IDA7XG4gICAgbGV0IG9yaWdYID0gMDtcbiAgICBsZXQgb3JpZ1kgPSAwO1xuXG4gICAgYm94LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgKGU6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgaWYgKChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmNvbnRhaW5zKCdyZXNpemUtaGFuZGxlJykpIHJldHVybjtcblxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgYm94LnNldFBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTtcblxuICAgICAgc3RhcnRYID0gZS5jbGllbnRYO1xuICAgICAgc3RhcnRZID0gZS5jbGllbnRZO1xuICAgICAgb3JpZ1ggPSBib3gub2Zmc2V0TGVmdDtcbiAgICAgIG9yaWdZID0gYm94Lm9mZnNldFRvcDtcblxuICAgICAgY29uc3Qgc2NhbGUgPSB0aGlzLmdldFBkZlNjYWxlKGNvbnRhaW5lcik7XG5cbiAgICAgIGNvbnN0IG1vdmUgPSAoZXY6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBkeCA9IChldi5jbGllbnRYIC0gc3RhcnRYKSAvIHNjYWxlO1xuICAgICAgICBjb25zdCBkeSA9IChldi5jbGllbnRZIC0gc3RhcnRZKSAvIHNjYWxlO1xuXG4gICAgICAgIGJveC5zdHlsZS5sZWZ0ID0gb3JpZ1ggKyBkeCArICdweCc7XG4gICAgICAgIGJveC5zdHlsZS50b3AgPSBvcmlnWSArIGR5ICsgJ3B4JztcblxuICAgICAgICBzaWcuZG9tWCA9IG9yaWdYICsgZHg7XG4gICAgICAgIHNpZy5kb21ZID0gb3JpZ1kgKyBkeTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHVwID0gKCkgPT4ge1xuICAgICAgICBib3gucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBtb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdXApO1xuICAgICAgfTtcblxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBtb3ZlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHVwKTtcbiAgICB9KTtcbiAgfVxuXG4gIG1ha2VSZXNpemFibGUoYm94OiBIVE1MRWxlbWVudCwgc2lnOiBTaWduYXR1cmUpIHtcbiAgICBjb25zdCBoYW5kbGUgPSBib3gucXVlcnlTZWxlY3RvcignLnJlc2l6ZS1oYW5kbGUnKSBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAoIWhhbmRsZSkgcmV0dXJuO1xuXG4gICAgaGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgKGU6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgaGFuZGxlLnNldFBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTtcblxuICAgICAgY29uc3Qgc3RhcnRYID0gZS5jbGllbnRYO1xuICAgICAgY29uc3Qgc3RhcnRXaWR0aCA9IHNpZy53aWR0aDtcblxuICAgICAgY29uc3QgbW92ZSA9IChldjogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGR4ID0gZXYuY2xpZW50WCAtIHN0YXJ0WDtcbiAgICAgICAgY29uc3QgbmV3V2lkdGggPSBNYXRoLm1heCg2MCwgc3RhcnRXaWR0aCArIGR4KTtcbiAgICAgICAgY29uc3QgbmV3SGVpZ2h0ID0gbmV3V2lkdGggKiAwLjM1O1xuXG4gICAgICAgIHNpZy53aWR0aCA9IG5ld1dpZHRoO1xuICAgICAgICBzaWcuaGVpZ2h0ID0gbmV3SGVpZ2h0O1xuXG4gICAgICAgIGJveC5zdHlsZS53aWR0aCA9IG5ld1dpZHRoICsgJ3B4JztcbiAgICAgICAgYm94LnN0eWxlLmhlaWdodCA9IG5ld0hlaWdodCArICdweCc7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB1cCA9ICgpID0+IHtcbiAgICAgICAgaGFuZGxlLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgbW92ZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHVwKTtcbiAgICAgIH07XG5cbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgbW92ZSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCB1cCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRQZGZTY2FsZShwYWdlRWw6IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBnZXRDb21wdXRlZFN0eWxlKHBhZ2VFbCkudHJhbnNmb3JtO1xuICAgIHJldHVybiB0cmFuc2Zvcm0gJiYgdHJhbnNmb3JtICE9PSAnbm9uZSdcbiAgICAgID8gbmV3IERPTU1hdHJpeFJlYWRPbmx5KHRyYW5zZm9ybSkuYVxuICAgICAgOiAxO1xuICB9XG5cbiAgYXN5bmMgYWRkQWxsU2lnbmF0dXJlc1RvUGRmKCkge1xuICAgIGlmICghdGhpcy5zaWduYXR1cmVzLmxlbmd0aCB8fCAhdGhpcy5pbWFnZURhdGFVUkwpIHJldHVybjtcblxuICAgIGNvbnN0IGV4aXN0aW5nUGRmQnl0ZXMgPSBhd2FpdCBmZXRjaCh0aGlzLnBkZlNyYykudGhlbihyZXMgPT4gcmVzLmFycmF5QnVmZmVyKCkpO1xuICAgIGNvbnN0IHBkZkRvYyA9IGF3YWl0IFBERkRvY3VtZW50LmxvYWQoZXhpc3RpbmdQZGZCeXRlcyk7XG4gICAgY29uc3QgcGFnZXMgPSBwZGZEb2MuZ2V0UGFnZXMoKTtcblxuICAgIGNvbnN0IGJhc2U2NERhdGEgPSB0aGlzLmltYWdlRGF0YVVSTC5zcGxpdCgnLCcpWzFdO1xuICAgIGNvbnN0IGltYWdlQnl0ZXMgPSBVaW50OEFycmF5LmZyb20oYXRvYihiYXNlNjREYXRhKSwgYyA9PiBjLmNoYXJDb2RlQXQoMCkpO1xuICAgIGNvbnN0IHBuZ0ltYWdlID0gYXdhaXQgcGRmRG9jLmVtYmVkUG5nKGltYWdlQnl0ZXMpO1xuXG4gICAgZm9yIChjb25zdCBzaWcgb2YgdGhpcy5zaWduYXR1cmVzKSB7XG4gICAgICBjb25zdCBwYWdlID0gcGFnZXNbc2lnLnBhZ2VOdW1iZXIgLSAxXTtcbiAgICAgIGlmICghcGFnZSkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IHBhZ2VFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGAucGRmVmlld2VyIC5wYWdlW2RhdGEtcGFnZS1udW1iZXI9XCIke3NpZy5wYWdlTnVtYmVyfVwiXWBcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCBwYWdlUmVjdCA9IHBhZ2VFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgY29uc3Qgc2NhbGUgPSBwYWdlUmVjdC53aWR0aCAvIHBhZ2UuZ2V0V2lkdGgoKTtcblxuICAgICAgY29uc3QgcGRmWCA9IHNpZy5kb21YIC8gc2NhbGU7XG4gICAgICBjb25zdCBwZGZZID0gcGFnZS5nZXRIZWlnaHQoKSAtIHNpZy5kb21ZIC8gc2NhbGUgLSBzaWcuaGVpZ2h0IC8gc2NhbGU7XG4gICAgICBjb25zdCBwZGZXID0gc2lnLndpZHRoIC8gc2NhbGU7XG4gICAgICBjb25zdCBwZGZIID0gc2lnLmhlaWdodCAvIHNjYWxlO1xuXG4gICAgICBwYWdlLmRyYXdJbWFnZShwbmdJbWFnZSwge1xuICAgICAgICB4OiBwZGZYLFxuICAgICAgICB5OiBwZGZZLFxuICAgICAgICB3aWR0aDogcGRmVyxcbiAgICAgICAgaGVpZ2h0OiBwZGZIXG4gICAgICB9KTtcbiAgICB9XG5cbmNvbnN0IHBkZkJ5dGVzID0gYXdhaXQgcGRmRG9jLnNhdmUoKTtcblxuY29uc3QgcGRmQnl0ZXNOb3JtYWwgPSBuZXcgVWludDhBcnJheShwZGZCeXRlcyk7XG5cbmNvbnN0IGJsb2IgPSBuZXcgQmxvYihbcGRmQnl0ZXNOb3JtYWxdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9wZGYnIH0pO1xudGhpcy5wZGZTcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXG5cbiAgfVxuXG4gIGZpbmFsaXplU2lnbmF0dXJlKCkge1xuICAgIHRoaXMuc2lnbk1vZGUgPSBmYWxzZTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgU2lnbmF0dXJlIHtcbiAgcGFnZU51bWJlcjogbnVtYmVyO1xuICBkb21YOiBudW1iZXI7XG4gIGRvbVk6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG4iLCI8ZGl2PlxyXG4gIDwhLS0gPGJ1dHRvbiAqbmdJZj1cInBkZlNyY1wiIChjbGljayk9XCJzaG93Q29vcmRpbmF0ZXMoKVwiPlNob3cgQ29vcmRpbmF0ZXM8L2J1dHRvbj4gLS0+XHJcbiAgPGJ1dHRvbiAqbmdJZj1cInBkZlNyY1wiIChjbGljayk9XCJhZGRTaWduYXR1cmUoKVwiPkFkZCBTaWduYXR1cmU8L2J1dHRvbj5cclxuICA8YnV0dG9uICpuZ0lmPVwicGRmU3JjXCIgKGNsaWNrKT1cImFkZEFsbFNpZ25hdHVyZXNUb1BkZigpXCI+U2F2ZSBTaWduYXR1cmU8L2J1dHRvbj5cclxuICA8aW5wdXQgdHlwZT1cImZpbGVcIiAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdGVkKCRldmVudClcIiBhY2NlcHQ9XCJhcHBsaWNhdGlvbi9wZGZcIiAvPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwicG9wdXAtYmFja2Ryb3BcIiAqbmdJZj1cInNob3dEaWFsb2dcIj5cclxuICAgIDxhcHAtcGRmLXNpZ25hdHVyZVxyXG4gICAgICBjbGFzcz1cInBvcHVwLWNvbnRlbnRcIlxyXG4gICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgKGNsb3NlZCk9XCJvbkRpYWxvZ0Nsb3NlZCgkZXZlbnQpXCI+XHJcbiAgICA8L2FwcC1wZGYtc2lnbmF0dXJlPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgW2hpZGRlbl09XCIhcGRmU3JjXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxyXG4gPGRpdiAjcGRmVmlld2VyV3JhcHBlcj5cclxuICAgICAgPG5neC1leHRlbmRlZC1wZGYtdmlld2VyXHJcbiAgW3NyY109XCJwZGZTcmNcIlxyXG4gIFt0ZXh0TGF5ZXJdPVwiZmFsc2VcIlxyXG4gIFtwYWdlXT1cIjBcIlxyXG4gIFsoem9vbSldPVwiem9vbVwiXHJcbiAgW3Nob3dIYW5kVG9vbEJ1dHRvbl09XCJ0cnVlXCJcclxuICBbc2hvd09wZW5GaWxlQnV0dG9uXT1cImZhbHNlXCJcclxuICBbZW5hYmxlRHJhZ0FuZERyb3BdPVwiZmFsc2VcIlxyXG4gICBbc2hvd0Rvd25sb2FkQnV0dG9uXT1cInRydWVcIlxyXG4gIChjbGljayk9XCJvblBkZkNsaWNrKCRldmVudClcIj5cclxuPC9uZ3gtZXh0ZW5kZWQtcGRmLXZpZXdlcj5cclxuPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -1,12 +1,14 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Component, EventEmitter, Output, ViewChild, ViewEncapsulation, Input } from '@angular/core';
3
- import * as i1 from 'ngx-extended-pdf-viewer';
4
- import { pdfDefaultOptions, NgxExtendedPdfViewerModule } from 'ngx-extended-pdf-viewer';
2
+ import { Injectable, Component, EventEmitter, Output, ViewChild, ViewEncapsulation, ElementRef, Input } from '@angular/core';
3
+ import * as i2 from 'ngx-extended-pdf-viewer';
4
+ import { pdfDefaultOptions, NgxExtendedPdfViewerModule, NgxExtendedPdfViewerComponent } from 'ngx-extended-pdf-viewer';
5
5
  import { PDFDocument } from 'pdf-lib';
6
6
  import { FormsModule, ReactiveFormsModule } from '@angular/forms';
7
- import * as i2 from '@angular/common';
7
+ import * as i3 from '@angular/common';
8
8
  import { NgIf, CommonModule, NgFor } from '@angular/common';
9
9
  import SignaturePad from 'signature_pad';
10
+ import * as i1 from '@angular/common/http';
11
+ import { HttpClientModule } from '@angular/common/http';
10
12
  import * as i1$1 from '@angular/router';
11
13
 
12
14
  class LibFirasDigiService {
@@ -146,6 +148,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
146
148
  }] } });
147
149
 
148
150
  class PdfInfoComponent {
151
+ http;
152
+ pdfViewer;
149
153
  signatureImg;
150
154
  floatingSignature;
151
155
  pdfSrc = '';
@@ -159,12 +163,43 @@ class PdfInfoComponent {
159
163
  zoom = 100;
160
164
  showDialog = false;
161
165
  currentPdfBytes;
162
- constructor() {
166
+ constructor(http) {
167
+ this.http = http;
163
168
  pdfDefaultOptions.textLayerMode = 1;
164
169
  }
170
+ pdfViewerWrapper;
165
171
  ngAfterViewInit() {
166
- // ViewChild references are now available after view initialization
167
- // Access them here if needed
172
+ const observer = new MutationObserver(() => {
173
+ const saveButton = this.pdfViewerWrapper.nativeElement.querySelector('[title="Download"]');
174
+ if (saveButton && !saveButton.dataset['hooked']) {
175
+ saveButton.dataset['hooked'] = 'true';
176
+ saveButton.addEventListener('click', (event) => {
177
+ event.preventDefault();
178
+ this.uploadPdf();
179
+ });
180
+ }
181
+ });
182
+ observer.observe(this.pdfViewerWrapper.nativeElement, { childList: true, subtree: true });
183
+ }
184
+ iframeUrl = 'https://pedit.coretech-mena.com/pdf-info?callback=https://cts-be.coretech-mena.com/api/v1/FileManager/Upload';
185
+ // iframeUrl = 'https://http://localhost:4200/pdf-info?callback=https://cts-be.coretech-mena.com/api/v1/FileManager/Upload';
186
+ uploadPdf() {
187
+ const uploadUrl = this.iframeUrl.split('?')[1]?.split('=')[1];
188
+ if (!uploadUrl) {
189
+ console.error('لم يتم العثور على رابط الرفع!');
190
+ return;
191
+ }
192
+ fetch(this.pdfSrc)
193
+ .then(res => res.blob())
194
+ .then(blob => {
195
+ const formData = new FormData();
196
+ formData.append('file', blob, 'myfile.pdf');
197
+ this.http.post(uploadUrl, formData)
198
+ .subscribe({
199
+ next: () => console.log('upload'),
200
+ error: (err) => console.error(' Error ', err)
201
+ });
202
+ });
168
203
  }
169
204
  async onFileSelected(event) {
170
205
  const input = event.target;
@@ -350,8 +385,8 @@ class PdfInfoComponent {
350
385
  finalizeSignature() {
351
386
  this.signMode = false;
352
387
  }
353
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PdfInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
354
- 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"] }] });
388
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PdfInfoComponent, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Component });
389
+ 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: "pdfViewer", first: true, predicate: NgxExtendedPdfViewerComponent, descendants: true }, { propertyName: "signatureImg", first: true, predicate: ["signatureImg"], descendants: true }, { propertyName: "floatingSignature", first: true, predicate: ["floatingSignature"], descendants: true }, { propertyName: "pdfViewerWrapper", first: true, predicate: ["pdfViewerWrapper"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div>\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 <div #pdfViewerWrapper>\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 [showDownloadButton]=\"true\"\r\n (click)=\"onPdfClick($event)\">\r\n</ngx-extended-pdf-viewer>\r\n</div>\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: i2.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: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PdfSignatureComponent, selector: "app-pdf-signature", outputs: ["closed"] }, { kind: "ngmodule", type: HttpClientModule }] });
355
390
  }
356
391
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PdfInfoComponent, decorators: [{
357
392
  type: Component,
@@ -361,9 +396,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
361
396
  ReactiveFormsModule,
362
397
  CommonModule,
363
398
  NgIf,
364
- PdfSignatureComponent
365
- ], 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"] }]
366
- }], ctorParameters: () => [], propDecorators: { signatureImg: [{
399
+ PdfSignatureComponent,
400
+ HttpClientModule
401
+ ], template: "<div>\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 <div #pdfViewerWrapper>\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 [showDownloadButton]=\"true\"\r\n (click)=\"onPdfClick($event)\">\r\n</ngx-extended-pdf-viewer>\r\n</div>\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"] }]
402
+ }], ctorParameters: () => [{ type: i1.HttpClient }], propDecorators: { pdfViewer: [{
403
+ type: ViewChild,
404
+ args: [NgxExtendedPdfViewerComponent]
405
+ }], signatureImg: [{
367
406
  type: ViewChild,
368
407
  args: ['signatureImg', { static: false }]
369
408
  }], floatingSignature: [{
@@ -371,6 +410,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
371
410
  args: ['floatingSignature', { static: false }]
372
411
  }], pdfSrc: [{
373
412
  type: Input
413
+ }], pdfViewerWrapper: [{
414
+ type: ViewChild,
415
+ args: ['pdfViewerWrapper', { read: ElementRef }]
374
416
  }] } });
375
417
 
376
418
  class PdfExplorerComponent {
@@ -1 +1 @@
1
- {"version":3,"file":"lib-firas-digi.mjs","sources":["../../../projects/lib-firas-digi/src/lib/lib-firas-digi.service.ts","../../../projects/lib-firas-digi/src/lib/lib-firas-digi.component.ts","../../../projects/lib-firas-digi/src/lib/pdf-signature/pdf-signature.component.ts","../../../projects/lib-firas-digi/src/lib/pdf-signature/pdf-signature.component.html","../../../projects/lib-firas-digi/src/lib/pdf-info/pdf-info.component.ts","../../../projects/lib-firas-digi/src/lib/pdf-info/pdf-info.component.html","../../../projects/lib-firas-digi/src/lib/pdf-explorer/pdf-explorer.component.ts","../../../projects/lib-firas-digi/src/lib/pdf-explorer/pdf-explorer.component.html","../../../projects/lib-firas-digi/src/public-api.ts","../../../projects/lib-firas-digi/src/lib-firas-digi.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LibFirasDigiService {\r\n\r\n constructor() { }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-lib-firas-digi',\r\n standalone: true,\r\n imports: [],\r\n template: `\r\n <p>\r\n lib-firas-digi works!\r\n </p>\r\n `,\r\n styles: ``\r\n})\r\nexport class LibFirasDigiComponent {\r\n\r\n}\r\n","import { Component, ElementRef, ViewChild, AfterViewInit, ViewEncapsulation } from '@angular/core';\r\nimport SignaturePad from 'signature_pad';\r\nimport { EventEmitter, Output } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\n// import { RouterModule } from '@angular/router';\r\nimport { CommonModule, NgIf } from '@angular/common';\r\n@Component({\r\n selector: 'app-pdf-signature',\r\n imports: [\r\n\r\n NgIf,\r\n CommonModule,\r\n FormsModule,\r\n // RouterModule,\r\n ReactiveFormsModule,\r\n ],\r\n templateUrl: './pdf-signature.component.html',\r\n styleUrl: './pdf-signature.component.scss',\r\n standalone: true,\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class PdfSignatureComponent implements AfterViewInit {\r\n\r\n signaturePad!: SignaturePad;\r\n activeTab: 'upload' | 'draw' = 'upload';\r\n @ViewChild('canvas', { static: false }) canvas!: ElementRef<HTMLCanvasElement>;\r\n @Output() closed = new EventEmitter<{ confirmed: boolean, image?: string }>();\r\n\r\n selectedFile!: File | null;\r\n previewUrl: string | ArrayBuffer | null = null;\r\n fileName = '';\r\n isImage = false;\r\n\r\n ngAfterViewInit() {\r\n if (this.activeTab === 'draw' && this.canvas) {\r\n this.initSignaturePad();\r\n }\r\n }\r\n initSignaturePad() {\r\n if (!this.canvas) return;\r\n this.signaturePad = new SignaturePad(this.canvas.nativeElement, {\r\n minWidth: 1,\r\n penColor: 'black',\r\n });\r\n }\r\n setActiveTab(tab: 'upload' | 'draw') {\r\n this.activeTab = tab;\r\n\r\n if (tab === 'draw') {\r\n setTimeout(() => {\r\n this.initSignaturePad();\r\n });\r\n }\r\n }\r\n\r\n saveSignature() {\r\n let base64: string | null = null;\r\n\r\n if (this.signaturePad && !this.signaturePad.isEmpty()) {\r\n base64 = this.signaturePad.toDataURL();\r\n }\r\n if (this.previewUrl) {\r\n base64 = this.previewUrl as string;\r\n }\r\n if (!base64) {\r\n return;\r\n }\r\n\r\n this.closed.emit({ confirmed: true, image: base64 });\r\n }\r\n\r\n\r\n clear() {\r\n this.signaturePad.clear();\r\n }\r\n\r\n onDragOver(event: DragEvent) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n onDragLeave(event: DragEvent) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n onDrop(event: DragEvent) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.dataTransfer && event.dataTransfer.files.length > 0) {\r\n this.handleFile(event.dataTransfer.files[0]);\r\n }\r\n }\r\n\r\n onFileSelected(event: any) {\r\n const file = event.target.files[0];\r\n if (file) {\r\n this.handleFile(file);\r\n }\r\n }\r\n\r\n handleFile(file: File) {\r\n this.selectedFile = file;\r\n this.fileName = file.name;\r\n this.isImage = file.type.startsWith('image/');\r\n\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n this.previewUrl = reader.result;\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n uploadFile() {\r\n if (!this.selectedFile) return;\r\n\r\n const formData = new FormData();\r\n formData.append('file', this.selectedFile);\r\n }\r\n close(confirmed: boolean = false) {\r\n this.closed.emit({ confirmed });\r\n }\r\n}\r\n","<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","import {\n Component,\n ElementRef,\n Input,\n ViewChild,\n AfterViewInit,\n} from '@angular/core';\nimport {\n NgxExtendedPdfViewerModule,\n TextLayerRenderedEvent,\n pdfDefaultOptions,\n} from 'ngx-extended-pdf-viewer';\nimport { PDFDocument } from 'pdf-lib';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule, NgIf } from '@angular/common';\nimport { PdfSignatureComponent } from '../pdf-signature/pdf-signature.component';\n\n@Component({\n selector: 'app-pdf-info',\n templateUrl: './pdf-info.component.html',\n styleUrls: ['./pdf-info.component.css'],\n standalone: true,\n imports: [\n NgxExtendedPdfViewerModule,\n FormsModule,\n ReactiveFormsModule,\n CommonModule,\n NgIf,\n PdfSignatureComponent\n ],\n})\nexport class PdfInfoComponent implements AfterViewInit {\n @ViewChild('signatureImg', { static: false })\n signatureImg?: ElementRef<HTMLImageElement>;\n\n @ViewChild('floatingSignature', { static: false })\n floatingSignature?: ElementRef<HTMLImageElement>;\n\n @Input() pdfSrc: string = '';\n imageDataURL: string = '';\n\n pdfBlocked = true;\n sidebarOpen: boolean = true;\n signMode: boolean = false;\n showSignature: boolean = true;\n signatureLoaded = false;\n\n signatures: Signature[] = [];\n zoom: any = 100;\n showDialog = false;\n currentPdfBytes!: Uint8Array;\n\n constructor() {\n pdfDefaultOptions.textLayerMode = 1;\n }\n\n ngAfterViewInit(): void {\n // ViewChild references are now available after view initialization\n // Access them here if needed\n }\n\n async onFileSelected(event: Event) {\n const input = event.target as HTMLInputElement;\n if (!input.files || input.files.length === 0) return;\n\n const file = input.files[0];\n const arrayBuffer = await file.arrayBuffer();\n this.currentPdfBytes = new Uint8Array(arrayBuffer);\n\n this.pdfSrc = URL.createObjectURL(file);\n }\n\n addSignature() {\n this.showDialog = true;\n }\n\n onDialogClosed(event: { confirmed: boolean; image?: string }) {\n this.showDialog = false;\n if (event.confirmed && event.image) {\n this.imageDataURL = event.image;\n this.signMode = true;\n }\n }\n\n onPdfClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n if(target.closest('.signature-box')) return;\n if (!this.signMode || !this.imageDataURL) return;\n\n const pageEl = (event.target as HTMLElement).closest('.page') as HTMLElement;\n if (!pageEl) return;\n\n const pageNumber = Number(pageEl.dataset['pageNumber']);\n const pageRect = pageEl.getBoundingClientRect();\n\n const transform = getComputedStyle(pageEl).transform;\n const scale = transform && transform !== 'none'\n ? new DOMMatrixReadOnly(transform).a\n : 1;\n\n const domX = event.clientX - pageRect.left;\n const domY = event.clientY - pageRect.top;\n\n const width = (pageRect.width / scale) * 0.15;\n const height = width * 0.35;\n\n const sig: Signature = { pageNumber, domX, domY, width, height };\n\n this.signatures.push(sig);\n this.createDraggableSignatureBox(sig);\n\n this.signMode = false;\n }\n\n createDraggableSignatureBox(sig: Signature) {\n const pageEl = document.querySelector(\n `.pdfViewer .page[data-page-number=\"${sig.pageNumber}\"]`\n ) as HTMLElement;\n\n if (!pageEl) return;\n\n pageEl.style.position = 'relative';\n\n const box = document.createElement('div');\n box.className = 'signature-box';\n box.style.position = 'absolute';\n box.style.left = `${sig.domX}px`;\n box.style.top = `${sig.domY}px`;\n box.style.width = `${sig.width}px`;\n box.style.height = `${sig.height}px`;\n box.style.zIndex = '9999';\n box.style.border = '2px dashed #1976d2';\n box.style.background = 'rgba(25, 118, 210, 0.05)';\n\n const img = document.createElement('img');\n img.src = this.imageDataURL;\n img.style.width = '100%';\n img.style.height = '100%';\n img.style.pointerEvents = 'none';\n\n const handle = document.createElement('div');\n handle.classList.add('resize-handle');\n handle.style.position = 'absolute';\n handle.style.right = '-7px';\n handle.style.bottom = '-7px';\n handle.style.width = '18px';\n handle.style.height = '18px';\n handle.style.backgroundColor = 'rgba(25, 118, 210, 0.2)';\n handle.style.border = '2px solid rgba(25, 118, 210, 0.9)';\n handle.style.borderRadius = '4px';\n handle.style.cursor = 'se-resize';\n handle.style.zIndex = '10000';\n handle.textContent = '+';\n\n box.appendChild(img);\n box.appendChild(handle);\n pageEl.appendChild(box);\n\n this.makeDraggable(box, pageEl, sig);\n this.makeResizable(box, sig);\n }\n\n makeDraggable(box: HTMLElement, container: HTMLElement, sig: Signature) {\n let startX = 0;\n let startY = 0;\n let origX = 0;\n let origY = 0;\n\n box.addEventListener('pointerdown', (e: PointerEvent) => {\n if ((e.target as HTMLElement).classList.contains('resize-handle')) return;\n\n e.preventDefault();\n e.stopPropagation();\n\n box.setPointerCapture(e.pointerId);\n\n startX = e.clientX;\n startY = e.clientY;\n origX = box.offsetLeft;\n origY = box.offsetTop;\n\n const scale = this.getPdfScale(container);\n\n const move = (ev: PointerEvent) => {\n const dx = (ev.clientX - startX) / scale;\n const dy = (ev.clientY - startY) / scale;\n\n box.style.left = origX + dx + 'px';\n box.style.top = origY + dy + 'px';\n\n sig.domX = origX + dx;\n sig.domY = origY + dy;\n };\n\n const up = () => {\n box.releasePointerCapture(e.pointerId);\n document.removeEventListener('pointermove', move);\n document.removeEventListener('pointerup', up);\n };\n\n document.addEventListener('pointermove', move);\n document.addEventListener('pointerup', up);\n });\n }\n\n makeResizable(box: HTMLElement, sig: Signature) {\n const handle = box.querySelector('.resize-handle') as HTMLElement;\n if (!handle) return;\n\n handle.addEventListener('pointerdown', (e: PointerEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n handle.setPointerCapture(e.pointerId);\n\n const startX = e.clientX;\n const startWidth = sig.width;\n\n const move = (ev: PointerEvent) => {\n const dx = ev.clientX - startX;\n const newWidth = Math.max(60, startWidth + dx);\n const newHeight = newWidth * 0.35;\n\n sig.width = newWidth;\n sig.height = newHeight;\n\n box.style.width = newWidth + 'px';\n box.style.height = newHeight + 'px';\n };\n\n const up = () => {\n handle.releasePointerCapture(e.pointerId);\n document.removeEventListener('pointermove', move);\n document.removeEventListener('pointerup', up);\n };\n\n document.addEventListener('pointermove', move);\n document.addEventListener('pointerup', up);\n });\n }\n\n getPdfScale(pageEl: HTMLElement): number {\n const transform = getComputedStyle(pageEl).transform;\n return transform && transform !== 'none'\n ? new DOMMatrixReadOnly(transform).a\n : 1;\n }\n\n async addAllSignaturesToPdf() {\n if (!this.signatures.length || !this.imageDataURL) return;\n\n const existingPdfBytes = await fetch(this.pdfSrc).then(res => res.arrayBuffer());\n const pdfDoc = await PDFDocument.load(existingPdfBytes);\n const pages = pdfDoc.getPages();\n\n const base64Data = this.imageDataURL.split(',')[1];\n const imageBytes = Uint8Array.from(atob(base64Data), c => c.charCodeAt(0));\n const pngImage = await pdfDoc.embedPng(imageBytes);\n\n for (const sig of this.signatures) {\n const page = pages[sig.pageNumber - 1];\n if (!page) continue;\n\n const pageEl = document.querySelector(\n `.pdfViewer .page[data-page-number=\"${sig.pageNumber}\"]`\n ) as HTMLElement;\n const pageRect = pageEl.getBoundingClientRect();\n\n const scale = pageRect.width / page.getWidth();\n\n const pdfX = sig.domX / scale;\n const pdfY = page.getHeight() - sig.domY / scale - sig.height / scale;\n const pdfW = sig.width / scale;\n const pdfH = sig.height / scale;\n\n page.drawImage(pngImage, {\n x: pdfX,\n y: pdfY,\n width: pdfW,\n height: pdfH\n });\n }\n\nconst pdfBytes = await pdfDoc.save();\n\nconst pdfBytesNormal = new Uint8Array(pdfBytes);\n\nconst blob = new Blob([pdfBytesNormal], { type: 'application/pdf' });\nthis.pdfSrc = URL.createObjectURL(blob);\n\n\n }\n\n finalizeSignature() {\n this.signMode = false;\n }\n}\n\ninterface Signature {\n pageNumber: number;\n domX: number;\n domY: number;\n width: number;\n height: number;\n}\n","<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","import { NgFor } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'app-pdf-explorer',\n templateUrl: './pdf-explorer.component.html',\n styleUrls: ['./pdf-explorer.component.css'],\n standalone: true,\n imports: [NgFor]\n})\nexport class PdfExplorerComponent {\n pdfFiles = [\n { name: 'Sample PDF 1', src: 'assets/pdfs/sample1.pdf' },\n { name: 'User Guide', src: 'assets/pdfs/user-guide.pdf' },\n { name: 'Project Report', src: 'assets/pdfs/project-report.pdf' },\n { name: 'Project Report', src: 'assets/pdfs/project-report.pdf' },\n { name: 'Project Report', src: 'assets/pdfs/project-report.pdf' },\n\n ];\n\n constructor(private router: Router) { }\n\n openPdf(pdf: { name: string; src: string }) {\n // Navigate to pdf-info page and pass file src\n this.router.navigate(['/pdf-info'], { state: { pdfSrc: pdf.src } });\n }\n\n onFileUpload(event: any) {\n const file = event.target.files[0];\n console.log(file);\n\n if (file && file.type === 'application/pdf') {\n const fileURL = URL.createObjectURL(file);\n this.router.navigate(['/pdf-info'], { state: { pdfSrc: fileURL } });\n } else {\n alert('Please upload a valid PDF file.');\n }\n\n }\n}\n","<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>","/*\r\n * Public API Surface of lib-firas-digi\r\n */\r\n\r\nexport * from './lib/lib-firas-digi.service';\r\nexport * from './lib/lib-firas-digi.component';\r\nexport * from './lib/pdf-info/pdf-info.component';\r\nexport * from './lib/pdf-signature/pdf-signature.component';\r\nexport * from './lib/pdf-explorer/pdf-explorer.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
1
+ {"version":3,"file":"lib-firas-digi.mjs","sources":["../../../projects/lib-firas-digi/src/lib/lib-firas-digi.service.ts","../../../projects/lib-firas-digi/src/lib/lib-firas-digi.component.ts","../../../projects/lib-firas-digi/src/lib/pdf-signature/pdf-signature.component.ts","../../../projects/lib-firas-digi/src/lib/pdf-signature/pdf-signature.component.html","../../../projects/lib-firas-digi/src/lib/pdf-info/pdf-info.component.ts","../../../projects/lib-firas-digi/src/lib/pdf-info/pdf-info.component.html","../../../projects/lib-firas-digi/src/lib/pdf-explorer/pdf-explorer.component.ts","../../../projects/lib-firas-digi/src/lib/pdf-explorer/pdf-explorer.component.html","../../../projects/lib-firas-digi/src/public-api.ts","../../../projects/lib-firas-digi/src/lib-firas-digi.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LibFirasDigiService {\r\n\r\n constructor() { }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-lib-firas-digi',\r\n standalone: true,\r\n imports: [],\r\n template: `\r\n <p>\r\n lib-firas-digi works!\r\n </p>\r\n `,\r\n styles: ``\r\n})\r\nexport class LibFirasDigiComponent {\r\n\r\n}\r\n","import { Component, ElementRef, ViewChild, AfterViewInit, ViewEncapsulation } from '@angular/core';\r\nimport SignaturePad from 'signature_pad';\r\nimport { EventEmitter, Output } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\n// import { RouterModule } from '@angular/router';\r\nimport { CommonModule, NgIf } from '@angular/common';\r\n@Component({\r\n selector: 'app-pdf-signature',\r\n imports: [\r\n\r\n NgIf,\r\n CommonModule,\r\n FormsModule,\r\n // RouterModule,\r\n ReactiveFormsModule,\r\n ],\r\n templateUrl: './pdf-signature.component.html',\r\n styleUrl: './pdf-signature.component.scss',\r\n standalone: true,\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class PdfSignatureComponent implements AfterViewInit {\r\n\r\n signaturePad!: SignaturePad;\r\n activeTab: 'upload' | 'draw' = 'upload';\r\n @ViewChild('canvas', { static: false }) canvas!: ElementRef<HTMLCanvasElement>;\r\n @Output() closed = new EventEmitter<{ confirmed: boolean, image?: string }>();\r\n\r\n selectedFile!: File | null;\r\n previewUrl: string | ArrayBuffer | null = null;\r\n fileName = '';\r\n isImage = false;\r\n\r\n ngAfterViewInit() {\r\n if (this.activeTab === 'draw' && this.canvas) {\r\n this.initSignaturePad();\r\n }\r\n }\r\n initSignaturePad() {\r\n if (!this.canvas) return;\r\n this.signaturePad = new SignaturePad(this.canvas.nativeElement, {\r\n minWidth: 1,\r\n penColor: 'black',\r\n });\r\n }\r\n setActiveTab(tab: 'upload' | 'draw') {\r\n this.activeTab = tab;\r\n\r\n if (tab === 'draw') {\r\n setTimeout(() => {\r\n this.initSignaturePad();\r\n });\r\n }\r\n }\r\n\r\n saveSignature() {\r\n let base64: string | null = null;\r\n\r\n if (this.signaturePad && !this.signaturePad.isEmpty()) {\r\n base64 = this.signaturePad.toDataURL();\r\n }\r\n if (this.previewUrl) {\r\n base64 = this.previewUrl as string;\r\n }\r\n if (!base64) {\r\n return;\r\n }\r\n\r\n this.closed.emit({ confirmed: true, image: base64 });\r\n }\r\n\r\n\r\n clear() {\r\n this.signaturePad.clear();\r\n }\r\n\r\n onDragOver(event: DragEvent) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n onDragLeave(event: DragEvent) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n onDrop(event: DragEvent) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.dataTransfer && event.dataTransfer.files.length > 0) {\r\n this.handleFile(event.dataTransfer.files[0]);\r\n }\r\n }\r\n\r\n onFileSelected(event: any) {\r\n const file = event.target.files[0];\r\n if (file) {\r\n this.handleFile(file);\r\n }\r\n }\r\n\r\n handleFile(file: File) {\r\n this.selectedFile = file;\r\n this.fileName = file.name;\r\n this.isImage = file.type.startsWith('image/');\r\n\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n this.previewUrl = reader.result;\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n uploadFile() {\r\n if (!this.selectedFile) return;\r\n\r\n const formData = new FormData();\r\n formData.append('file', this.selectedFile);\r\n }\r\n close(confirmed: boolean = false) {\r\n this.closed.emit({ confirmed });\r\n }\r\n}\r\n","<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","import {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n ViewChild,\n} from '@angular/core';\nimport {\n NgxExtendedPdfViewerComponent,\n NgxExtendedPdfViewerModule,\n TextLayerRenderedEvent,\n pdfDefaultOptions,\n} from 'ngx-extended-pdf-viewer';\nimport { PDFDocument } from 'pdf-lib';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule, NgIf } from '@angular/common';\nimport { PdfSignatureComponent } from '../pdf-signature/pdf-signature.component';\nimport { HttpClientModule, HttpClient } from '@angular/common/http';\n@Component({\n selector: 'app-pdf-info',\n templateUrl: './pdf-info.component.html',\n styleUrls: ['./pdf-info.component.css'],\n standalone: true,\n imports: [\n NgxExtendedPdfViewerModule,\n FormsModule,\n ReactiveFormsModule,\n CommonModule,\n NgIf,\n PdfSignatureComponent,\n HttpClientModule\n ],\n})\nexport class PdfInfoComponent implements AfterViewInit{\n @ViewChild(NgxExtendedPdfViewerComponent) pdfViewer!: NgxExtendedPdfViewerComponent;\n @ViewChild('signatureImg', { static: false })\n signatureImg?: ElementRef<HTMLImageElement>;\n\n @ViewChild('floatingSignature', { static: false })\n floatingSignature?: ElementRef<HTMLImageElement>;\n\n @Input() pdfSrc: string = '';\n imageDataURL: string = '';\n\n pdfBlocked = true;\n sidebarOpen: boolean = true;\n signMode: boolean = false;\n showSignature: boolean = true;\n signatureLoaded = false;\n\n signatures: Signature[] = [];\n zoom: any = 100;\n showDialog = false;\n currentPdfBytes!: Uint8Array;\n\n constructor(private http: HttpClient) {\n pdfDefaultOptions.textLayerMode = 1;\n }\n\n @ViewChild('pdfViewerWrapper', { read: ElementRef }) pdfViewerWrapper!: ElementRef;\n\nngAfterViewInit() {\n const observer = new MutationObserver(() => {\n const saveButton = this.pdfViewerWrapper.nativeElement.querySelector('[title=\"Download\"]') as HTMLElement;\n if (saveButton && !saveButton.dataset['hooked']) {\n saveButton.dataset['hooked'] = 'true';\n saveButton.addEventListener('click', (event) => {\n event.preventDefault();\n this.uploadPdf();\n });\n }\n });\n\n observer.observe(this.pdfViewerWrapper.nativeElement, { childList: true, subtree: true });\n }\n iframeUrl = 'https://pedit.coretech-mena.com/pdf-info?callback=https://cts-be.coretech-mena.com/api/v1/FileManager/Upload';\n// iframeUrl = 'https://http://localhost:4200/pdf-info?callback=https://cts-be.coretech-mena.com/api/v1/FileManager/Upload';\n\n\n uploadPdf() {\n const uploadUrl = this.iframeUrl.split('?')[1]?.split('=')[1];\n if (!uploadUrl) {\n console.error('لم يتم العثور على رابط الرفع!');\n return;\n }\n\n fetch(this.pdfSrc)\n .then(res => res.blob())\n .then(blob => {\n const formData = new FormData();\n formData.append('file', blob, 'myfile.pdf');\n\n this.http.post(uploadUrl, formData)\n .subscribe({\n next: () => console.log('upload'),\n error: (err: any) => console.error(' Error ', err)\n });\n });\n }\n async onFileSelected(event: Event) {\n const input = event.target as HTMLInputElement;\n if (!input.files || input.files.length === 0) return;\n\n const file = input.files[0];\n const arrayBuffer = await file.arrayBuffer();\n this.currentPdfBytes = new Uint8Array(arrayBuffer);\n\n this.pdfSrc = URL.createObjectURL(file);\n }\n\n addSignature() {\n this.showDialog = true;\n }\n\n onDialogClosed(event: { confirmed: boolean; image?: string }) {\n this.showDialog = false;\n if (event.confirmed && event.image) {\n this.imageDataURL = event.image;\n this.signMode = true;\n }\n }\n\n onPdfClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n if(target.closest('.signature-box')) return;\n if (!this.signMode || !this.imageDataURL) return;\n\n const pageEl = (event.target as HTMLElement).closest('.page') as HTMLElement;\n if (!pageEl) return;\n\n const pageNumber = Number(pageEl.dataset['pageNumber']);\n const pageRect = pageEl.getBoundingClientRect();\n\n const transform = getComputedStyle(pageEl).transform;\n const scale = transform && transform !== 'none'\n ? new DOMMatrixReadOnly(transform).a\n : 1;\n\n const domX = event.clientX - pageRect.left;\n const domY = event.clientY - pageRect.top;\n\n const width = (pageRect.width / scale) * 0.15;\n const height = width * 0.35;\n\n const sig: Signature = { pageNumber, domX, domY, width, height };\n\n this.signatures.push(sig);\n this.createDraggableSignatureBox(sig);\n\n this.signMode = false;\n }\n\n createDraggableSignatureBox(sig: Signature) {\n const pageEl = document.querySelector(\n `.pdfViewer .page[data-page-number=\"${sig.pageNumber}\"]`\n ) as HTMLElement;\n\n if (!pageEl) return;\n\n pageEl.style.position = 'relative';\n\n const box = document.createElement('div');\n box.className = 'signature-box';\n box.style.position = 'absolute';\n box.style.left = `${sig.domX}px`;\n box.style.top = `${sig.domY}px`;\n box.style.width = `${sig.width}px`;\n box.style.height = `${sig.height}px`;\n box.style.zIndex = '9999';\n box.style.border = '2px dashed #1976d2';\n box.style.background = 'rgba(25, 118, 210, 0.05)';\n\n const img = document.createElement('img');\n img.src = this.imageDataURL;\n img.style.width = '100%';\n img.style.height = '100%';\n img.style.pointerEvents = 'none';\n\n const handle = document.createElement('div');\n handle.classList.add('resize-handle');\n handle.style.position = 'absolute';\n handle.style.right = '-7px';\n handle.style.bottom = '-7px';\n handle.style.width = '18px';\n handle.style.height = '18px';\n handle.style.backgroundColor = 'rgba(25, 118, 210, 0.2)';\n handle.style.border = '2px solid rgba(25, 118, 210, 0.9)';\n handle.style.borderRadius = '4px';\n handle.style.cursor = 'se-resize';\n handle.style.zIndex = '10000';\n handle.textContent = '+';\n\n box.appendChild(img);\n box.appendChild(handle);\n pageEl.appendChild(box);\n\n this.makeDraggable(box, pageEl, sig);\n this.makeResizable(box, sig);\n }\n\n makeDraggable(box: HTMLElement, container: HTMLElement, sig: Signature) {\n let startX = 0;\n let startY = 0;\n let origX = 0;\n let origY = 0;\n\n box.addEventListener('pointerdown', (e: PointerEvent) => {\n if ((e.target as HTMLElement).classList.contains('resize-handle')) return;\n\n e.preventDefault();\n e.stopPropagation();\n\n box.setPointerCapture(e.pointerId);\n\n startX = e.clientX;\n startY = e.clientY;\n origX = box.offsetLeft;\n origY = box.offsetTop;\n\n const scale = this.getPdfScale(container);\n\n const move = (ev: PointerEvent) => {\n const dx = (ev.clientX - startX) / scale;\n const dy = (ev.clientY - startY) / scale;\n\n box.style.left = origX + dx + 'px';\n box.style.top = origY + dy + 'px';\n\n sig.domX = origX + dx;\n sig.domY = origY + dy;\n };\n\n const up = () => {\n box.releasePointerCapture(e.pointerId);\n document.removeEventListener('pointermove', move);\n document.removeEventListener('pointerup', up);\n };\n\n document.addEventListener('pointermove', move);\n document.addEventListener('pointerup', up);\n });\n }\n\n makeResizable(box: HTMLElement, sig: Signature) {\n const handle = box.querySelector('.resize-handle') as HTMLElement;\n if (!handle) return;\n\n handle.addEventListener('pointerdown', (e: PointerEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n handle.setPointerCapture(e.pointerId);\n\n const startX = e.clientX;\n const startWidth = sig.width;\n\n const move = (ev: PointerEvent) => {\n const dx = ev.clientX - startX;\n const newWidth = Math.max(60, startWidth + dx);\n const newHeight = newWidth * 0.35;\n\n sig.width = newWidth;\n sig.height = newHeight;\n\n box.style.width = newWidth + 'px';\n box.style.height = newHeight + 'px';\n };\n\n const up = () => {\n handle.releasePointerCapture(e.pointerId);\n document.removeEventListener('pointermove', move);\n document.removeEventListener('pointerup', up);\n };\n\n document.addEventListener('pointermove', move);\n document.addEventListener('pointerup', up);\n });\n }\n\n getPdfScale(pageEl: HTMLElement): number {\n const transform = getComputedStyle(pageEl).transform;\n return transform && transform !== 'none'\n ? new DOMMatrixReadOnly(transform).a\n : 1;\n }\n\n async addAllSignaturesToPdf() {\n if (!this.signatures.length || !this.imageDataURL) return;\n\n const existingPdfBytes = await fetch(this.pdfSrc).then(res => res.arrayBuffer());\n const pdfDoc = await PDFDocument.load(existingPdfBytes);\n const pages = pdfDoc.getPages();\n\n const base64Data = this.imageDataURL.split(',')[1];\n const imageBytes = Uint8Array.from(atob(base64Data), c => c.charCodeAt(0));\n const pngImage = await pdfDoc.embedPng(imageBytes);\n\n for (const sig of this.signatures) {\n const page = pages[sig.pageNumber - 1];\n if (!page) continue;\n\n const pageEl = document.querySelector(\n `.pdfViewer .page[data-page-number=\"${sig.pageNumber}\"]`\n ) as HTMLElement;\n const pageRect = pageEl.getBoundingClientRect();\n\n const scale = pageRect.width / page.getWidth();\n\n const pdfX = sig.domX / scale;\n const pdfY = page.getHeight() - sig.domY / scale - sig.height / scale;\n const pdfW = sig.width / scale;\n const pdfH = sig.height / scale;\n\n page.drawImage(pngImage, {\n x: pdfX,\n y: pdfY,\n width: pdfW,\n height: pdfH\n });\n }\n\nconst pdfBytes = await pdfDoc.save();\n\nconst pdfBytesNormal = new Uint8Array(pdfBytes);\n\nconst blob = new Blob([pdfBytesNormal], { type: 'application/pdf' });\nthis.pdfSrc = URL.createObjectURL(blob);\n\n\n }\n\n finalizeSignature() {\n this.signMode = false;\n }\n}\n\ninterface Signature {\n pageNumber: number;\n domX: number;\n domY: number;\n width: number;\n height: number;\n}\n","<div>\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 <div #pdfViewerWrapper>\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 [showDownloadButton]=\"true\"\r\n (click)=\"onPdfClick($event)\">\r\n</ngx-extended-pdf-viewer>\r\n</div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { NgFor } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'app-pdf-explorer',\n templateUrl: './pdf-explorer.component.html',\n styleUrls: ['./pdf-explorer.component.css'],\n standalone: true,\n imports: [NgFor]\n})\nexport class PdfExplorerComponent {\n pdfFiles = [\n { name: 'Sample PDF 1', src: 'assets/pdfs/sample1.pdf' },\n { name: 'User Guide', src: 'assets/pdfs/user-guide.pdf' },\n { name: 'Project Report', src: 'assets/pdfs/project-report.pdf' },\n { name: 'Project Report', src: 'assets/pdfs/project-report.pdf' },\n { name: 'Project Report', src: 'assets/pdfs/project-report.pdf' },\n\n ];\n\n constructor(private router: Router) { }\n\n openPdf(pdf: { name: string; src: string }) {\n // Navigate to pdf-info page and pass file src\n this.router.navigate(['/pdf-info'], { state: { pdfSrc: pdf.src } });\n }\n\n onFileUpload(event: any) {\n const file = event.target.files[0];\n console.log(file);\n\n if (file && file.type === 'application/pdf') {\n const fileURL = URL.createObjectURL(file);\n this.router.navigate(['/pdf-info'], { state: { pdfSrc: fileURL } });\n } else {\n alert('Please upload a valid PDF file.');\n }\n\n }\n}\n","<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>","/*\r\n * Public API Surface of lib-firas-digi\r\n */\r\n\r\nexport * from './lib/lib-firas-digi.service';\r\nexport * from './lib/lib-firas-digi.component';\r\nexport * from './lib/pdf-info/pdf-info.component';\r\nexport * from './lib/pdf-signature/pdf-signature.component';\r\nexport * from './lib/pdf-explorer/pdf-explorer.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
@@ -1,6 +1,10 @@
1
- import { ElementRef, AfterViewInit } from '@angular/core';
1
+ import { AfterViewInit, ElementRef } from '@angular/core';
2
+ import { NgxExtendedPdfViewerComponent } from 'ngx-extended-pdf-viewer';
3
+ import { HttpClient } from '@angular/common/http';
2
4
  import * as i0 from "@angular/core";
3
5
  export declare class PdfInfoComponent implements AfterViewInit {
6
+ private http;
7
+ pdfViewer: NgxExtendedPdfViewerComponent;
4
8
  signatureImg?: ElementRef<HTMLImageElement>;
5
9
  floatingSignature?: ElementRef<HTMLImageElement>;
6
10
  pdfSrc: string;
@@ -14,8 +18,11 @@ export declare class PdfInfoComponent implements AfterViewInit {
14
18
  zoom: any;
15
19
  showDialog: boolean;
16
20
  currentPdfBytes: Uint8Array;
17
- constructor();
21
+ constructor(http: HttpClient);
22
+ pdfViewerWrapper: ElementRef;
18
23
  ngAfterViewInit(): void;
24
+ iframeUrl: string;
25
+ uploadPdf(): void;
19
26
  onFileSelected(event: Event): Promise<void>;
20
27
  addSignature(): void;
21
28
  onDialogClosed(event: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lib-firas-digi",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^18.1.0",
6
6
  "@angular/core": "^18.1.0"
@@ -22,4 +22,4 @@
22
22
  "default": "./fesm2022/lib-firas-digi.mjs"
23
23
  }
24
24
  }
25
- }
25
+ }