@dealpos-npm/ng-dealpos-library 4.4.13 → 4.4.15

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.
@@ -69,6 +69,12 @@ export declare class UppyComponent implements OnDestroy {
69
69
  */
70
70
  formatFileSize(bytes: number, decimalPoints?: number): string;
71
71
  ngOnDestroy(): void;
72
+ emitFileUpload(f: File): void;
73
+ emitFileUploadComplete(f: File): void;
74
+ emitMultipleFilesUploaded(data: {
75
+ file: Blob | File;
76
+ id: string;
77
+ }[]): void;
72
78
  static ɵfac: i0.ɵɵFactoryDeclaration<UppyComponent, never>;
73
79
  static ɵcmp: i0.ɵɵComponentDeclaration<UppyComponent, "POS-uppy", never, { "sampleUrl": { "alias": "sampleUrl"; "required": false; }; "subtitle": { "alias": "subtitle"; "required": false; }; "showSample": { "alias": "showSample"; "required": false; }; "clear": { "alias": "clear"; "required": false; "isSignal": true; }; "uppyCoreConfiguration": { "alias": "uppyCoreConfiguration"; "required": false; "isSignal": true; }; "dashboardPropsConfiguration": { "alias": "dashboardPropsConfiguration"; "required": false; "isSignal": true; }; }, { "fileUploaded": "fileUploaded"; "fileUploadComplete": "fileUploadComplete"; "fileRemoved": "fileRemoved"; "onParser": "onParser"; "multipleFilesUploaded": "multipleFilesUploaded"; }, never, never, true, never>;
74
80
  }
@@ -58,11 +58,20 @@ export class UppyComponent {
58
58
  allowedFileTypes: ['.csv'],
59
59
  maxTotalFileSize: 1000000,
60
60
  },
61
- }).use(Compressor, {
61
+ onBeforeFileAdded: (currentFile, files) => {
62
+ const modifiedFile = {
63
+ ...currentFile,
64
+ name: currentFile.name?.replace(/ /g, '_'),
65
+ };
66
+ return modifiedFile;
67
+ },
68
+ })
69
+ .use(Compressor, {
62
70
  mimeType: 'image/jpeg',
63
71
  convertSize: Infinity,
64
72
  convertTypes: ['image/png'],
65
- }).use(ImageEditor);
73
+ })
74
+ .use(ImageEditor);
66
75
  this.dashboardProps = {
67
76
  hideUploadButton: true,
68
77
  height: 350,
@@ -76,7 +85,7 @@ export class UppyComponent {
76
85
  const file = uppyFiles[0]?.data;
77
86
  this.showSample = false;
78
87
  this.showSubtitle = false;
79
- this.fileUploaded.emit(file);
88
+ this.emitFileUpload(file);
80
89
  this.file.set(uppyFiles[0].data);
81
90
  Papa.parse(file, {
82
91
  skipEmptyLines: 'greedy',
@@ -112,8 +121,8 @@ export class UppyComponent {
112
121
  const file = uppyFiles.successful[0]?.data;
113
122
  this.showSample = false;
114
123
  this.showSubtitle = false;
115
- this.fileUploadComplete.emit(file);
116
- this.multipleFilesUploaded.emit(multipleFiles);
124
+ this.emitFileUploadComplete(file);
125
+ this.emitMultipleFilesUploaded(multipleFiles);
117
126
  this.onResetUppy();
118
127
  this.file.set(file);
119
128
  this.multipleFiles.set(multipleFiles);
@@ -173,8 +182,8 @@ export class UppyComponent {
173
182
  });
174
183
  });
175
184
  this.file.set(this.multipleFiles()[0].file);
176
- this.fileUploadComplete.emit(this.file());
177
- this.multipleFilesUploaded.emit(this.multipleFiles());
185
+ this.emitFileUploadComplete(this.file());
186
+ this.emitMultipleFilesUploaded(this.multipleFiles());
178
187
  }
179
188
  onResetUppy() {
180
189
  if (this.clear()) {
@@ -199,6 +208,27 @@ export class UppyComponent {
199
208
  this.file.set(null);
200
209
  this.multipleFiles.set([]);
201
210
  }
211
+ emitFileUpload(f) {
212
+ const renamedFile = new File([f], f.name.replace(/ /g, '_'), {
213
+ type: f.type,
214
+ });
215
+ this.fileUploaded.emit(renamedFile);
216
+ }
217
+ emitFileUploadComplete(f) {
218
+ const renamedFile = new File([f], f.name.replace(/ /g, '_'), {
219
+ type: f.type,
220
+ });
221
+ this.fileUploadComplete.emit(renamedFile);
222
+ }
223
+ emitMultipleFilesUploaded(data) {
224
+ const renamedData = data.map((d) => ({
225
+ file: new File([d.file], d.file.name.replace(/ /g, '_'), {
226
+ type: d.file.type,
227
+ }),
228
+ id: d.id,
229
+ }));
230
+ this.multipleFilesUploaded.emit(renamedData);
231
+ }
202
232
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: UppyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
203
233
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: UppyComponent, isStandalone: true, selector: "POS-uppy", inputs: { sampleUrl: { classPropertyName: "sampleUrl", publicName: "sampleUrl", isSignal: false, isRequired: false, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: false, isRequired: false, transformFunction: null }, showSample: { classPropertyName: "showSample", publicName: "showSample", isSignal: false, isRequired: false, transformFunction: null }, clear: { classPropertyName: "clear", publicName: "clear", isSignal: true, isRequired: false, transformFunction: null }, uppyCoreConfiguration: { classPropertyName: "uppyCoreConfiguration", publicName: "uppyCoreConfiguration", isSignal: true, isRequired: false, transformFunction: null }, dashboardPropsConfiguration: { classPropertyName: "dashboardPropsConfiguration", publicName: "dashboardPropsConfiguration", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { fileUploaded: "fileUploaded", fileUploadComplete: "fileUploadComplete", fileRemoved: "fileRemoved", onParser: "onParser", multipleFilesUploaded: "multipleFilesUploaded" }, ngImport: i0, template: "<div class=\"position-relative\">\r\n <uppy-dashboard [uppy]=\"uppy\" [props]=\"dashboardProps\"> </uppy-dashboard>\r\n <small *ngIf=\"subtitle && showSubtitle\" class=\"subtitle position-absolute\">{{subtitle}}</small>\r\n <a *ngIf=\"sampleUrl && showSample\" class=\"sample position-absolute\" [class.top-58]=\"subtitle\" role=\"button\"\r\n [href]=\"sampleUrl\">\r\n <i class=\"fa-solid fa-download ms-3\"></i> Download Template\r\n </a>\r\n\r\n @if (file() && file()?.type === 'text/csv') {\r\n <div class=\"alert alert-warning d-flex flex-column gap-2\" style=\"margin: 1rem 0 0 0;\" role=\"alert\">\r\n <h4 class=\"alert-heading\">CSV File Content Summary</h4>\r\n <hr>\r\n <p class=\"fs-6 m-0\">{{rowSummary().rowCount}} rows found <ng-container *ngIf=\"rowSummary().rowEmpty > 0\">-\r\n {{rowSummary().rowEmpty}} empty in the CSV you uploaded</ng-container></p>\r\n </div>\r\n\r\n }\r\n</div>", styles: ["::ng-deep .uppy-Dashboard-AddFiles-info{display:none!important}::ng-deep .uppy-Dashboard-AddFiles-list{flex:none;flex-direction:row;flex-wrap:wrap;justify-content:center;max-width:600px;margin-top:15px;padding-top:0;overflow-y:visible}.sample,.subtitle{top:56%;width:100%;text-align:center}.top-58{top:61%}\n"], dependencies: [{ kind: "ngmodule", type: UppyAngularDashboardModule }, { kind: "component", type: i1.DashboardComponent, selector: "uppy-dashboard", inputs: ["uppy", "props"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
204
234
  }
@@ -222,4 +252,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
222
252
  }], multipleFilesUploaded: [{
223
253
  type: Output
224
254
  }] } });
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBweS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZWFscG9zLW5wbS9uZy1kZWFscG9zLWxpYnJhcnkvY29tcG9uZW50cy91cHB5LWZpbGUtdXBsb2FkL3NyYy91cHB5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RlYWxwb3MtbnBtL25nLWRlYWxwb3MtbGlicmFyeS9jb21wb25lbnRzL3VwcHktZmlsZS11cGxvYWQvc3JjL3VwcHkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssRUFFTCxNQUFNLEVBQ04sTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxVQUFVLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNsQyxPQUFPLCtCQUErQixDQUFDO0FBQ3ZDLE9BQU8sb0NBQW9DLENBQUM7QUFDNUMsT0FBTyx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLFdBQVcsTUFBTSxvQkFBb0IsQ0FBQztBQUs3QyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7Ozs7QUFTN0IsTUFBTSxPQUFPLGFBQWE7YUErQlQsVUFBSyxHQUFHO1FBQ3JCLE9BQU87UUFDUCxJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0os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TTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLHFCQUFxQjtzQkFBOUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIGVmZmVjdCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgaW5qZWN0LFxyXG4gIGlucHV0LFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPdXRwdXQsXHJcbiAgc2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb252ZXJ0Q3N2U2VydmljZSB9IGZyb20gJ0BkZWFscG9zLW5wbS9uZy1kZWFscG9zLWxpYnJhcnkvc2VydmljZXMvY3N2LXBhcnNlcic7XHJcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnQGRlYWxwb3MtbnBtL25nLWRlYWxwb3MtbGlicmFyeS9zZXJ2aWNlcy9odHRwJztcclxuaW1wb3J0IHsgVXBweUFuZ3VsYXJEYXNoYm9hcmRNb2R1bGUgfSBmcm9tICdAdXBweS9hbmd1bGFyJztcclxuaW1wb3J0IENvbXByZXNzb3IgZnJvbSAnQHVwcHkvY29tcHJlc3Nvcic7XHJcbmltcG9ydCB7IFVwcHkgfSBmcm9tICdAdXBweS9jb3JlJztcclxuaW1wb3J0ICdAdXBweS9jb3JlL2Rpc3Qvc3R5bGUubWluLmNzcyc7XHJcbmltcG9ydCAnQHVwcHkvZGFzaGJvYXJkL2Rpc3Qvc3R5bGUubWluLmNzcyc7XHJcbmltcG9ydCAnQHVwcHkvaW1hZ2UtZWRpdG9yL2Rpc3Qvc3R5bGUubWluLmNzcyc7XHJcbmltcG9ydCBJbWFnZUVkaXRvciBmcm9tICdAdXBweS9pbWFnZS1lZGl0b3InO1xyXG5pbXBvcnQgVHJhbnNsb2FkaXQsIHtcclxuICBDT01QQU5JT05fQUxMT1dFRF9IT1NUUyxcclxuICBDT01QQU5JT05fVVJMLFxyXG59IGZyb20gJ0B1cHB5L3RyYW5zbG9hZGl0JztcclxuaW1wb3J0IFBhcGEgZnJvbSAncGFwYXBhcnNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnUE9TLXVwcHknLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1VwcHlBbmd1bGFyRGFzaGJvYXJkTW9kdWxlLCBDb21tb25Nb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91cHB5LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vdXBweS5jb21wb25lbnQuc2NzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVcHB5Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBzYW1wbGVVcmw6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIHN1YnRpdGxlOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKVxyXG4gIHNob3dTYW1wbGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIC8qKlxyXG4gICAqIEZvciBtYW51YWxseSByZXNldHRpbmcgVXBweSBhZnRlciBhIHN1Y2Nlc3NmdWwgdXBsb2FkXHJcbiAgICovXHJcbiAgY2xlYXIgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgc2hvd1N1YnRpdGxlOiBib29sZWFuID0gdHJ1ZTtcclxuICB1cHB5Q29yZUNvbmZpZ3VyYXRpb24gPSBpbnB1dDxhbnk+KCk7XHJcbiAgZGFzaGJvYXJkUHJvcHNDb25maWd1cmF0aW9uID0gaW5wdXQ8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBmaWxlVXBsb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEJsb2IgfCBGaWxlPigpO1xyXG4gIEBPdXRwdXQoKSBmaWxlVXBsb2FkQ29tcGxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPEJsb2IgfCBGaWxlPigpO1xyXG4gIEBPdXRwdXQoKSBmaWxlUmVtb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBvblBhcnNlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBtdWx0aXBsZUZpbGVzVXBsb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFxyXG4gICAgeyBmaWxlOiBCbG9iIHwgRmlsZTsgaWQ6IHN0cmluZyB9W11cclxuICA+KCk7XHJcblxyXG4gIGh0dHAgPSBpbmplY3QoSHR0cFNlcnZpY2UpO1xyXG4gIGNzdlBhcnNlciA9IGluamVjdChDb252ZXJ0Q3N2U2VydmljZSk7XHJcblxyXG4gIHJvd1N1bW1hcnkgPSBzaWduYWw8eyByb3dDb3VudDogbnVtYmVyOyByb3dFbXB0eTogbnVtYmVyIH0+KHtcclxuICAgIHJvd0NvdW50OiAwLFxyXG4gICAgcm93RW1wdHk6IDAsXHJcbiAgfSk7XHJcblxyXG4gIGZpbGUgPSBzaWduYWw8RmlsZSB8IG51bGw+KG51bGwpO1xyXG4gIG11bHRpcGxlRmlsZXMgPSBzaWduYWw8eyBmaWxlOiBCbG9iIHwgRmlsZTsgaWQ6IHN0cmluZyB9W10+KFtdKTtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgc2l6ZXMgPSBbXHJcbiAgICAnQnl0ZXMnLFxyXG4gICAgJ0tCJyxcclxuICAgICdNQicsXHJcbiAgICAnR0InLFxyXG4gICAgJ1RCJyxcclxuICAgICdQQicsXHJcbiAgICAnRUInLFxyXG4gICAgJ1pCJyxcclxuICAgICdZQicsXHJcbiAgXSBhcyBjb25zdDtcclxuICBwcml2YXRlIHN0YXRpYyBraWxvYnl0ZSA9IDEwMjQ7XHJcblxyXG4gIHVwcHk6IFVwcHkgPSBuZXcgVXBweSh7XHJcbiAgICBkZWJ1ZzogdHJ1ZSxcclxuICAgIGF1dG9Qcm9jZWVkOiB0cnVlLFxyXG4gICAgYWxsb3dNdWx0aXBsZVVwbG9hZEJhdGNoZXM6IGZhbHNlLFxyXG4gICAgcmVzdHJpY3Rpb25zOiB7XHJcbiAgICAgIGFsbG93ZWRGaWxlVHlwZXM6IFsnLmNzdiddLFxyXG4gICAgICBtYXhUb3RhbEZpbGVTaXplOiAxMDAwMDAwLFxyXG4gICAgfSxcclxuICB9KS51c2UoQ29tcHJlc3Nvciwge1xyXG4gICAgbWltZVR5cGU6ICdpbWFnZS9qcGVnJyxcclxuICAgIGNvbnZlcnRTaXplOiBJbmZpbml0eSxcclxuICAgIGNvbnZlcnRUeXBlczogWydpbWFnZS9wbmcnXSxcclxuICB9KS51c2UoSW1hZ2VFZGl0b3IpO1xyXG5cclxuICBkYXNoYm9hcmRQcm9wcyA9IHtcclxuICAgIGhpZGVVcGxvYWRCdXR0b246IHRydWUsXHJcbiAgICBoZWlnaHQ6IDM1MCxcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnVwcHkuc2V0T3B0aW9ucyh7IC4uLnRoaXMudXBweUNvcmVDb25maWd1cmF0aW9uKCkgfSkpO1xyXG4gICAgZWZmZWN0KFxyXG4gICAgICAoKSA9PlxyXG4gICAgICAodGhpcy5kYXNoYm9hcmRQcm9wcyA9IHtcclxuICAgICAgICAuLi50aGlzLmRhc2hib2FyZFByb3BzLFxyXG4gICAgICAgIC4uLnRoaXMuZGFzaGJvYXJkUHJvcHNDb25maWd1cmF0aW9uKCksXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudXBweS5vbigndXBsb2FkJywgKF8sIHVwcHlGaWxlcykgPT4ge1xyXG4gICAgICBjb25zdCBmaWxlID0gdXBweUZpbGVzWzBdPy5kYXRhIGFzIEZpbGU7XHJcbiAgICAgIHRoaXMuc2hvd1NhbXBsZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNob3dTdWJ0aXRsZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZpbGVVcGxvYWRlZC5lbWl0KGZpbGUpO1xyXG4gICAgICB0aGlzLmZpbGUuc2V0KHVwcHlGaWxlc1swXS5kYXRhIGFzIEZpbGUpO1xyXG5cclxuICAgICAgUGFwYS5wYXJzZShmaWxlLCB7XHJcbiAgICAgICAgc2tpcEVtcHR5TGluZXM6ICdncmVlZHknLFxyXG4gICAgICAgIGhlYWRlcjogdHJ1ZSxcclxuICAgICAgICBiZWZvcmVGaXJzdENodW5rOiAoX2NodW5rKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCB3aXRoT3V0SGVhZGVyID0gX2NodW5rLnNwbGl0KC9cXHI/XFxuLykuc2xpY2UoMSk7XHJcbiAgICAgICAgICBpZiAod2l0aE91dEhlYWRlclt3aXRoT3V0SGVhZGVyLmxlbmd0aCAtIDFdID09PSAnJylcclxuICAgICAgICAgICAgd2l0aE91dEhlYWRlci5wb3AoKTtcclxuICAgICAgICAgIHRoaXMucm93U3VtbWFyeS51cGRhdGUoKHJlcykgPT4gKHtcclxuICAgICAgICAgICAgLi4ucmVzLFxyXG4gICAgICAgICAgICByb3dDb3VudDogd2l0aE91dEhlYWRlci5sZW5ndGgsXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICB3aXRoT3V0SGVhZGVyLmZvckVhY2goKHJvdykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBlbXB0eVJvdyA9IHJvdy5zcGxpdCgnLCcpLmV2ZXJ5KChyb3cpID0+IHJvdyA9PT0gJycpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVtcHR5Um93KVxyXG4gICAgICAgICAgICAgIHRoaXMucm93U3VtbWFyeS51cGRhdGUoKHJlcykgPT4gKHtcclxuICAgICAgICAgICAgICAgIC4uLnJlcyxcclxuICAgICAgICAgICAgICAgIHJvd0VtcHR5OiByZXMucm93RW1wdHkgKyAxLFxyXG4gICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIF9jaHVuazsgLy8gUmV0dXJuIHRoZSBvcmlnaW5hbCBjaHVuayB0byBjb250aW51ZSBwYXJzaW5nXHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcihlcnJvciwgZmlsZSkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0VSUk9SJywgZXJyb3IsIGZpbGUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcGxldGU6IChyZXN1bHRzLCBfZmlsZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vblBhcnNlci5lbWl0KHJlc3VsdHMuZGF0YSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnVwcHkub24oJ2NvbXBsZXRlJywgKHVwcHlGaWxlcykgPT4ge1xyXG4gICAgICBjb25zdCBtdWx0aXBsZUZpbGVzID1cclxuICAgICAgICB1cHB5RmlsZXMuc3VjY2Vzc2Z1bD8ubWFwKChkKSA9PiAoeyBmaWxlOiBkLmRhdGEsIGlkOiBkLmlkIH0pKSA/PyBbXTtcclxuICAgICAgY29uc3QgZmlsZSA9IHVwcHlGaWxlcy5zdWNjZXNzZnVsIVswXT8uZGF0YTtcclxuICAgICAgdGhpcy5zaG93U2FtcGxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2hvd1N1YnRpdGxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZmlsZVVwbG9hZENvbXBsZXRlLmVtaXQoZmlsZSk7XHJcbiAgICAgIHRoaXMubXVsdGlwbGVGaWxlc1VwbG9hZGVkLmVtaXQobXVsdGlwbGVGaWxlcyk7XHJcbiAgICAgIHRoaXMub25SZXNldFVwcHkoKTtcclxuICAgICAgdGhpcy5maWxlLnNldChmaWxlIGFzIEZpbGUpO1xyXG4gICAgICB0aGlzLm11bHRpcGxlRmlsZXMuc2V0KG11bHRpcGxlRmlsZXMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy51cHB5Lm9uKCd0cmFuc2xvYWRpdDp1cGxvYWQnLCAoeCwgeSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyh4LCB5KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy51cHB5Lm9uKCd0cmFuc2xvYWRpdDpyZXN1bHQnLCAoc3RlcE5hbWUsIHJlc3VsdCkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhzdGVwTmFtZSwgcmVzdWx0KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudXBweS5vbignZmlsZS1yZW1vdmVkJywgKGYpID0+IHtcclxuICAgICAgdGhpcy5zaG93U2FtcGxlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zaG93U3VidGl0bGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLmZpbGUuc2V0KG51bGwpO1xyXG4gICAgICBjb25zdCBjdXJyZW50RmlsZXMgPSB0aGlzLm11bHRpcGxlRmlsZXMoKTtcclxuICAgICAgY29uc3QgdXBkYXRlZEZpbGVzID0gY3VycmVudEZpbGVzLmZpbHRlcigocikgPT4gci5pZCAhPSBmLmlkKTtcclxuICAgICAgdGhpcy5tdWx0aXBsZUZpbGVzLnNldCh1cGRhdGVkRmlsZXMpO1xyXG4gICAgICB0aGlzLmZpbGVSZW1vdmVkLmVtaXQoZi5pZCk7XHJcbiAgICAgIHRoaXMucm93U3VtbWFyeS5zZXQoeyByb3dDb3VudDogMCwgcm93RW1wdHk6IDAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm9uRmlsZUVkaXRlZCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB1cCBldmVudCBsaXN0ZW5lcnMgZm9yIHRoZSBVcHB5IGZpbGUgZWRpdG9yIGV2ZW50cy5cclxuICAgKiBcclxuICAgKiAtIExpc3RlbnMgZm9yIHRoZSBgZmlsZS1lZGl0b3I6Y29tcGxldGVgIGV2ZW50LCB0cmlnZ2VyZWQgd2hlbiB0aGUgZmlsZSBlZGl0b3IgZmluaXNoZXMgZWRpdGluZyBhIGZpbGUuXHJcbiAgICogICBDYWxscyB0aGUgYGhhbmRsaW5nRWRpdGVkSW1hZ2VgIG1ldGhvZCB0byBwcm9jZXNzIHRoZSBlZGl0ZWQgZmlsZS5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgb25GaWxlRWRpdGVkKCkge1xyXG4gICAgaWYgKHRoaXMuY2xlYXIoKSA9PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnVwcHkub24oJ2ZpbGUtZWRpdG9yOnN0YXJ0JywgKHJlc3VsdDogeyBkYXRhOiBCbG9iIH0pID0+IHtcclxuICAgICAgICAvLyBkbyBub3RoaW5nXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy51cHB5Lm9uKCdmaWxlLWVkaXRvcjpjb21wbGV0ZScsIChyZXN1bHQ6IHsgZGF0YTogQmxvYiwgaWQ6IHN0cmluZyB9KSA9PiB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGluZ0VkaXRlZEltYWdlKHJlc3VsdCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy51cHB5Lm9uKCdmaWxlLWVkaXRvcjpjYW5jZWwnLCAocmVzdWx0OiB7IGRhdGE6IEJsb2IgfSkgPT4ge1xyXG4gICAgICAgIC8vIGRvIG5vdGhpbmdcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSBgbXVsdGlwbGVGaWxlc2Agc3RhdGUgYnkgcmVwbGFjaW5nIHRoZSBmaWxlIHdpdGggdGhlIG1hdGNoaW5nIElEXHJcbiAgICogd2l0aCB0aGUgbmV3IGVkaXRlZCBpbWFnZSBkYXRhLiBTZXRzIHRoZSBmaXJzdCBmaWxlIGluIHRoZSB1cGRhdGVkIGxpc3QgYXMgdGhlXHJcbiAgICogY3VycmVudCBmaWxlIGFuZCBlbWl0cyB0aGUgZm9sbG93aW5nIGV2ZW50czpcclxuICAgKiAtIGBmaWxlVXBsb2FkQ29tcGxldGVgOiBFbWl0cyB0aGUgdXBkYXRlZCBmaWxlIGFzIGEgYEZpbGVgIG9iamVjdC5cclxuICAgKiAtIGBtdWx0aXBsZUZpbGVzVXBsb2FkZWRgOiBFbWl0cyB0aGUgdXBkYXRlZCBsaXN0IG9mIGZpbGVzLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFuZGxpbmdFZGl0ZWRJbWFnZShyZXN1bHQ6IHsgZGF0YTogQmxvYiwgaWQ6IHN0cmluZyB9KSB7XHJcbiAgICB0aGlzLm11bHRpcGxlRmlsZXMudXBkYXRlKChyZXMpID0+IHtcclxuICAgICAgcmV0dXJuIHJlcy5tYXAoKHIpID0+IHtcclxuICAgICAgICBpZiAoci5pZCA9PT0gcmVzdWx0LmlkKSB7XHJcbiAgICAgICAgICByZXR1cm4geyAuLi5yLCBmaWxlOiByZXN1bHQuZGF0YSB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcjtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZmlsZS5zZXQodGhpcy5tdWx0aXBsZUZpbGVzKClbMF0uZmlsZSBhcyBGaWxlKTtcclxuXHJcbiAgICB0aGlzLmZpbGVVcGxvYWRDb21wbGV0ZS5lbWl0KHRoaXMuZmlsZSgpIGFzIEZpbGUpO1xyXG4gICAgdGhpcy5tdWx0aXBsZUZpbGVzVXBsb2FkZWQuZW1pdCh0aGlzLm11bHRpcGxlRmlsZXMoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uUmVzZXRVcHB5KCkge1xyXG4gICAgaWYgKHRoaXMuY2xlYXIoKSkge1xyXG4gICAgICB0aGlzLnVwcHkuY2xlYXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnZlcnRzIGEgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzIGludG8gYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcuXHJcbiAgICogQHBhcmFtIGJ5dGVzIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gY29udmVydC5cclxuICAgKiBAcGFyYW0gZGVjaW1hbFBvaW50cyBUaGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIHRvIGRpc3BsYXkuIERlZmF1bHRzIHRvIDIuXHJcbiAgICogQHJldHVybnMgQSBzdHJpbmcgaW4gdGhlIGZvcm0gb2YgXCJYLlhYIFt1bml0XVwiIHdoZXJlIFggaXMgdGhlIG51bWVyaWNhbCB2YWx1ZSBhbmQgdW5pdCBpcyB0aGUgYXBwcm9wcmlhdGUgdW5pdCBvZiBtZWFzdXJlbWVudCAoQnl0ZXMsIEtCLCBNQiwgR0IsIGV0Yy4pLlxyXG4gICAqL1xyXG4gIGZvcm1hdEZpbGVTaXplKGJ5dGVzOiBudW1iZXIsIGRlY2ltYWxQb2ludHMgPSAyKTogc3RyaW5nIHtcclxuICAgIGlmIChieXRlcyA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gYDAgYnl0ZXNgO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGkgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKFVwcHlDb21wb25lbnQua2lsb2J5dGUpKTtcclxuICAgIGNvbnN0IHNpemUgPSBieXRlcyAvIE1hdGgucG93KFVwcHlDb21wb25lbnQua2lsb2J5dGUsIGkpO1xyXG4gICAgcmV0dXJuIGAke3NpemUudG9GaXhlZChkZWNpbWFsUG9pbnRzKX0gJHtVcHB5Q29tcG9uZW50LnNpemVzW2ldfWA7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgdGhpcy5maWxlLnNldChudWxsKTtcclxuICAgICAgdGhpcy5tdWx0aXBsZUZpbGVzLnNldChbXSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgPHVwcHktZGFzaGJvYXJkIFt1cHB5XT1cInVwcHlcIiBbcHJvcHNdPVwiZGFzaGJvYXJkUHJvcHNcIj4gPC91cHB5LWRhc2hib2FyZD5cclxuICAgIDxzbWFsbCAqbmdJZj1cInN1YnRpdGxlICYmIHNob3dTdWJ0aXRsZVwiIGNsYXNzPVwic3VidGl0bGUgcG9zaXRpb24tYWJzb2x1dGVcIj57e3N1YnRpdGxlfX08L3NtYWxsPlxyXG4gICAgPGEgKm5nSWY9XCJzYW1wbGVVcmwgJiYgc2hvd1NhbXBsZVwiIGNsYXNzPVwic2FtcGxlIHBvc2l0aW9uLWFic29sdXRlXCIgW2NsYXNzLnRvcC01OF09XCJzdWJ0aXRsZVwiIHJvbGU9XCJidXR0b25cIlxyXG4gICAgICAgIFtocmVmXT1cInNhbXBsZVVybFwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtZG93bmxvYWQgbXMtM1wiPjwvaT4gRG93bmxvYWQgVGVtcGxhdGVcclxuICAgIDwvYT5cclxuXHJcbiAgICBAaWYgKGZpbGUoKSAmJiBmaWxlKCk/LnR5cGUgPT09ICd0ZXh0L2NzdicpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nIGQtZmxleCBmbGV4LWNvbHVtbiBnYXAtMlwiIHN0eWxlPVwibWFyZ2luOiAxcmVtIDAgMCAwO1wiIHJvbGU9XCJhbGVydFwiPlxyXG4gICAgICAgIDxoNCBjbGFzcz1cImFsZXJ0LWhlYWRpbmdcIj5DU1YgRmlsZSBDb250ZW50IFN1bW1hcnk8L2g0PlxyXG4gICAgICAgIDxocj5cclxuICAgICAgICA8cCBjbGFzcz1cImZzLTYgbS0wXCI+e3tyb3dTdW1tYXJ5KCkucm93Q291bnR9fSByb3dzIGZvdW5kIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3dTdW1tYXJ5KCkucm93RW1wdHkgPiAwXCI+LVxyXG4gICAgICAgICAgICAgICAge3tyb3dTdW1tYXJ5KCkucm93RW1wdHl9fSBlbXB0eSBpbiB0aGUgQ1NWIHlvdSB1cGxvYWRlZDwvbmctY29udGFpbmVyPjwvcD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIH1cclxuPC9kaXY+Il19
255
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBweS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZWFscG9zLW5wbS9uZy1kZWFscG9zLWxpYnJhcnkvY29tcG9uZW50cy91cHB5LWZpbGUtdXBsb2FkL3NyYy91cHB5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RlYWxwb3MtbnBtL25nLWRlYWxwb3MtbGlicmFyeS9jb21wb25lbnRzL3VwcHktZmlsZS11cGxvYWQvc3JjL3VwcHkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssRUFFTCxNQUFNLEVBQ04sTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxVQUFVLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNsQyxPQUFPLCtCQUErQixDQUFDO0FBQ3ZDLE9BQU8sb0NBQW9DLENBQUM7QUFDNUMsT0FBTyx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLFdBQVcsTUFBTSxvQkFBb0IsQ0FBQztBQUs3QyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7Ozs7QUFTN0IsTUFBTSxPQUFPLGFBQWE7YUErQlQsVUFBSyxHQUFHO1FBQ3JCLE9BQU87UUFDUCxJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0os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QUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRU4sVUFBVTtzQkFEVCxLQUFLO2dCQVNJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBlZmZlY3QsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIGluamVjdCxcclxuICBpbnB1dCxcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT3V0cHV0LFxyXG4gIHNpZ25hbCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udmVydENzdlNlcnZpY2UgfSBmcm9tICdAZGVhbHBvcy1ucG0vbmctZGVhbHBvcy1saWJyYXJ5L3NlcnZpY2VzL2Nzdi1wYXJzZXInO1xyXG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJ0BkZWFscG9zLW5wbS9uZy1kZWFscG9zLWxpYnJhcnkvc2VydmljZXMvaHR0cCc7XHJcbmltcG9ydCB7IFVwcHlBbmd1bGFyRGFzaGJvYXJkTW9kdWxlIH0gZnJvbSAnQHVwcHkvYW5ndWxhcic7XHJcbmltcG9ydCBDb21wcmVzc29yIGZyb20gJ0B1cHB5L2NvbXByZXNzb3InO1xyXG5pbXBvcnQgeyBVcHB5IH0gZnJvbSAnQHVwcHkvY29yZSc7XHJcbmltcG9ydCAnQHVwcHkvY29yZS9kaXN0L3N0eWxlLm1pbi5jc3MnO1xyXG5pbXBvcnQgJ0B1cHB5L2Rhc2hib2FyZC9kaXN0L3N0eWxlLm1pbi5jc3MnO1xyXG5pbXBvcnQgJ0B1cHB5L2ltYWdlLWVkaXRvci9kaXN0L3N0eWxlLm1pbi5jc3MnO1xyXG5pbXBvcnQgSW1hZ2VFZGl0b3IgZnJvbSAnQHVwcHkvaW1hZ2UtZWRpdG9yJztcclxuaW1wb3J0IFRyYW5zbG9hZGl0LCB7XHJcbiAgQ09NUEFOSU9OX0FMTE9XRURfSE9TVFMsXHJcbiAgQ09NUEFOSU9OX1VSTCxcclxufSBmcm9tICdAdXBweS90cmFuc2xvYWRpdCc7XHJcbmltcG9ydCBQYXBhIGZyb20gJ3BhcGFwYXJzZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ1BPUy11cHB5JyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtVcHB5QW5ndWxhckRhc2hib2FyZE1vZHVsZSwgQ29tbW9uTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdXBweS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3VwcHkuY29tcG9uZW50LnNjc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXBweUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgc2FtcGxlVXJsOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBzdWJ0aXRsZTogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KClcclxuICBzaG93U2FtcGxlOiBib29sZWFuID0gdHJ1ZTtcclxuICAvKipcclxuICAgKiBGb3IgbWFudWFsbHkgcmVzZXR0aW5nIFVwcHkgYWZ0ZXIgYSBzdWNjZXNzZnVsIHVwbG9hZFxyXG4gICAqL1xyXG4gIGNsZWFyID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHNob3dTdWJ0aXRsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgdXBweUNvcmVDb25maWd1cmF0aW9uID0gaW5wdXQ8YW55PigpO1xyXG4gIGRhc2hib2FyZFByb3BzQ29uZmlndXJhdGlvbiA9IGlucHV0PGFueT4oKTtcclxuICBAT3V0cHV0KCkgZmlsZVVwbG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxCbG9iIHwgRmlsZT4oKTtcclxuICBAT3V0cHV0KCkgZmlsZVVwbG9hZENvbXBsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxCbG9iIHwgRmlsZT4oKTtcclxuICBAT3V0cHV0KCkgZmlsZVJlbW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgb25QYXJzZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgbXVsdGlwbGVGaWxlc1VwbG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxcclxuICAgIHsgZmlsZTogQmxvYiB8IEZpbGU7IGlkOiBzdHJpbmcgfVtdXHJcbiAgPigpO1xyXG5cclxuICBodHRwID0gaW5qZWN0KEh0dHBTZXJ2aWNlKTtcclxuICBjc3ZQYXJzZXIgPSBpbmplY3QoQ29udmVydENzdlNlcnZpY2UpO1xyXG5cclxuICByb3dTdW1tYXJ5ID0gc2lnbmFsPHsgcm93Q291bnQ6IG51bWJlcjsgcm93RW1wdHk6IG51bWJlciB9Pih7XHJcbiAgICByb3dDb3VudDogMCxcclxuICAgIHJvd0VtcHR5OiAwLFxyXG4gIH0pO1xyXG5cclxuICBmaWxlID0gc2lnbmFsPEZpbGUgfCBudWxsPihudWxsKTtcclxuICBtdWx0aXBsZUZpbGVzID0gc2lnbmFsPHsgZmlsZTogQmxvYiB8IEZpbGU7IGlkOiBzdHJpbmcgfVtdPihbXSk7XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHNpemVzID0gW1xyXG4gICAgJ0J5dGVzJyxcclxuICAgICdLQicsXHJcbiAgICAnTUInLFxyXG4gICAgJ0dCJyxcclxuICAgICdUQicsXHJcbiAgICAnUEInLFxyXG4gICAgJ0VCJyxcclxuICAgICdaQicsXHJcbiAgICAnWUInLFxyXG4gIF0gYXMgY29uc3Q7XHJcbiAgcHJpdmF0ZSBzdGF0aWMga2lsb2J5dGUgPSAxMDI0O1xyXG5cclxuICB1cHB5OiBVcHB5ID0gbmV3IFVwcHkoe1xyXG4gICAgZGVidWc6IHRydWUsXHJcbiAgICBhdXRvUHJvY2VlZDogdHJ1ZSxcclxuICAgIGFsbG93TXVsdGlwbGVVcGxvYWRCYXRjaGVzOiBmYWxzZSxcclxuICAgIHJlc3RyaWN0aW9uczoge1xyXG4gICAgICBhbGxvd2VkRmlsZVR5cGVzOiBbJy5jc3YnXSxcclxuICAgICAgbWF4VG90YWxGaWxlU2l6ZTogMTAwMDAwMCxcclxuICAgIH0sXHJcbiAgICBvbkJlZm9yZUZpbGVBZGRlZDogKGN1cnJlbnRGaWxlLCBmaWxlcykgPT4ge1xyXG4gICAgICBjb25zdCBtb2RpZmllZEZpbGUgPSB7XHJcbiAgICAgICAgLi4uY3VycmVudEZpbGUsXHJcbiAgICAgICAgbmFtZTogY3VycmVudEZpbGUubmFtZT8ucmVwbGFjZSgvIC9nLCAnXycpLFxyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gbW9kaWZpZWRGaWxlO1xyXG4gICAgfSxcclxuICB9KVxyXG4gICAgLnVzZShDb21wcmVzc29yLCB7XHJcbiAgICAgIG1pbWVUeXBlOiAnaW1hZ2UvanBlZycsXHJcbiAgICAgIGNvbnZlcnRTaXplOiBJbmZpbml0eSxcclxuICAgICAgY29udmVydFR5cGVzOiBbJ2ltYWdlL3BuZyddLFxyXG4gICAgfSlcclxuICAgIC51c2UoSW1hZ2VFZGl0b3IpO1xyXG5cclxuICBkYXNoYm9hcmRQcm9wcyA9IHtcclxuICAgIGhpZGVVcGxvYWRCdXR0b246IHRydWUsXHJcbiAgICBoZWlnaHQ6IDM1MCxcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnVwcHkuc2V0T3B0aW9ucyh7IC4uLnRoaXMudXBweUNvcmVDb25maWd1cmF0aW9uKCkgfSkpO1xyXG4gICAgZWZmZWN0KFxyXG4gICAgICAoKSA9PlxyXG4gICAgICAgICh0aGlzLmRhc2hib2FyZFByb3BzID0ge1xyXG4gICAgICAgICAgLi4udGhpcy5kYXNoYm9hcmRQcm9wcyxcclxuICAgICAgICAgIC4uLnRoaXMuZGFzaGJvYXJkUHJvcHNDb25maWd1cmF0aW9uKCksXHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy51cHB5Lm9uKCd1cGxvYWQnLCAoXywgdXBweUZpbGVzKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpbGUgPSB1cHB5RmlsZXNbMF0/LmRhdGEgYXMgRmlsZTtcclxuICAgICAgdGhpcy5zaG93U2FtcGxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2hvd1N1YnRpdGxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZW1pdEZpbGVVcGxvYWQoZmlsZSk7XHJcbiAgICAgIHRoaXMuZmlsZS5zZXQodXBweUZpbGVzWzBdLmRhdGEgYXMgRmlsZSk7XHJcblxyXG4gICAgICBQYXBhLnBhcnNlKGZpbGUsIHtcclxuICAgICAgICBza2lwRW1wdHlMaW5lczogJ2dyZWVkeScsXHJcbiAgICAgICAgaGVhZGVyOiB0cnVlLFxyXG4gICAgICAgIGJlZm9yZUZpcnN0Q2h1bms6IChfY2h1bmspID0+IHtcclxuICAgICAgICAgIGNvbnN0IHdpdGhPdXRIZWFkZXIgPSBfY2h1bmsuc3BsaXQoL1xccj9cXG4vKS5zbGljZSgxKTtcclxuICAgICAgICAgIGlmICh3aXRoT3V0SGVhZGVyW3dpdGhPdXRIZWFkZXIubGVuZ3RoIC0gMV0gPT09ICcnKVxyXG4gICAgICAgICAgICB3aXRoT3V0SGVhZGVyLnBvcCgpO1xyXG4gICAgICAgICAgdGhpcy5yb3dTdW1tYXJ5LnVwZGF0ZSgocmVzKSA9PiAoe1xyXG4gICAgICAgICAgICAuLi5yZXMsXHJcbiAgICAgICAgICAgIHJvd0NvdW50OiB3aXRoT3V0SGVhZGVyLmxlbmd0aCxcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICAgIHdpdGhPdXRIZWFkZXIuZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVtcHR5Um93ID0gcm93LnNwbGl0KCcsJykuZXZlcnkoKHJvdykgPT4gcm93ID09PSAnJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZW1wdHlSb3cpXHJcbiAgICAgICAgICAgICAgdGhpcy5yb3dTdW1tYXJ5LnVwZGF0ZSgocmVzKSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgLi4ucmVzLFxyXG4gICAgICAgICAgICAgICAgcm93RW1wdHk6IHJlcy5yb3dFbXB0eSArIDEsXHJcbiAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gX2NodW5rOyAvLyBSZXR1cm4gdGhlIG9yaWdpbmFsIGNodW5rIHRvIGNvbnRpbnVlIHBhcnNpbmdcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yKGVycm9yLCBmaWxlKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnRVJST1InLCBlcnJvciwgZmlsZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKHJlc3VsdHMsIF9maWxlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9uUGFyc2VyLmVtaXQocmVzdWx0cy5kYXRhKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudXBweS5vbignY29tcGxldGUnLCAodXBweUZpbGVzKSA9PiB7XHJcbiAgICAgIGNvbnN0IG11bHRpcGxlRmlsZXMgPVxyXG4gICAgICAgIHVwcHlGaWxlcy5zdWNjZXNzZnVsPy5tYXAoKGQpID0+ICh7IGZpbGU6IGQuZGF0YSwgaWQ6IGQuaWQgfSkpID8/IFtdO1xyXG4gICAgICBjb25zdCBmaWxlID0gdXBweUZpbGVzLnN1Y2Nlc3NmdWwhWzBdPy5kYXRhO1xyXG4gICAgICB0aGlzLnNob3dTYW1wbGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zaG93U3VidGl0bGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5lbWl0RmlsZVVwbG9hZENvbXBsZXRlKGZpbGUgYXMgRmlsZSk7XHJcbiAgICAgIHRoaXMuZW1pdE11bHRpcGxlRmlsZXNVcGxvYWRlZChtdWx0aXBsZUZpbGVzKTtcclxuICAgICAgdGhpcy5vblJlc2V0VXBweSgpO1xyXG4gICAgICB0aGlzLmZpbGUuc2V0KGZpbGUgYXMgRmlsZSk7XHJcbiAgICAgIHRoaXMubXVsdGlwbGVGaWxlcy5zZXQobXVsdGlwbGVGaWxlcyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnVwcHkub24oJ3RyYW5zbG9hZGl0OnVwbG9hZCcsICh4LCB5KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKHgsIHkpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnVwcHkub24oJ3RyYW5zbG9hZGl0OnJlc3VsdCcsIChzdGVwTmFtZSwgcmVzdWx0KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKHN0ZXBOYW1lLCByZXN1bHQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy51cHB5Lm9uKCdmaWxlLXJlbW92ZWQnLCAoZikgPT4ge1xyXG4gICAgICB0aGlzLnNob3dTYW1wbGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNob3dTdWJ0aXRsZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuZmlsZS5zZXQobnVsbCk7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRGaWxlcyA9IHRoaXMubXVsdGlwbGVGaWxlcygpO1xyXG4gICAgICBjb25zdCB1cGRhdGVkRmlsZXMgPSBjdXJyZW50RmlsZXMuZmlsdGVyKChyKSA9PiByLmlkICE9IGYuaWQpO1xyXG4gICAgICB0aGlzLm11bHRpcGxlRmlsZXMuc2V0KHVwZGF0ZWRGaWxlcyk7XHJcbiAgICAgIHRoaXMuZmlsZVJlbW92ZWQuZW1pdChmLmlkKTtcclxuICAgICAgdGhpcy5yb3dTdW1tYXJ5LnNldCh7IHJvd0NvdW50OiAwLCByb3dFbXB0eTogMCB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMub25GaWxlRWRpdGVkKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHVwIGV2ZW50IGxpc3RlbmVycyBmb3IgdGhlIFVwcHkgZmlsZSBlZGl0b3IgZXZlbnRzLlxyXG4gICAqXHJcbiAgICogLSBMaXN0ZW5zIGZvciB0aGUgYGZpbGUtZWRpdG9yOmNvbXBsZXRlYCBldmVudCwgdHJpZ2dlcmVkIHdoZW4gdGhlIGZpbGUgZWRpdG9yIGZpbmlzaGVzIGVkaXRpbmcgYSBmaWxlLlxyXG4gICAqICAgQ2FsbHMgdGhlIGBoYW5kbGluZ0VkaXRlZEltYWdlYCBtZXRob2QgdG8gcHJvY2VzcyB0aGUgZWRpdGVkIGZpbGUuXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIG9uRmlsZUVkaXRlZCgpIHtcclxuICAgIGlmICh0aGlzLmNsZWFyKCkgPT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy51cHB5Lm9uKCdmaWxlLWVkaXRvcjpzdGFydCcsIChyZXN1bHQ6IHsgZGF0YTogQmxvYiB9KSA9PiB7XHJcbiAgICAgICAgLy8gZG8gbm90aGluZ1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMudXBweS5vbihcclxuICAgICAgICAnZmlsZS1lZGl0b3I6Y29tcGxldGUnLFxyXG4gICAgICAgIChyZXN1bHQ6IHsgZGF0YTogQmxvYjsgaWQ6IHN0cmluZyB9KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsaW5nRWRpdGVkSW1hZ2UocmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLnVwcHkub24oJ2ZpbGUtZWRpdG9yOmNhbmNlbCcsIChyZXN1bHQ6IHsgZGF0YTogQmxvYiB9KSA9PiB7XHJcbiAgICAgICAgLy8gZG8gbm90aGluZ1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIGBtdWx0aXBsZUZpbGVzYCBzdGF0ZSBieSByZXBsYWNpbmcgdGhlIGZpbGUgd2l0aCB0aGUgbWF0Y2hpbmcgSURcclxuICAgKiB3aXRoIHRoZSBuZXcgZWRpdGVkIGltYWdlIGRhdGEuIFNldHMgdGhlIGZpcnN0IGZpbGUgaW4gdGhlIHVwZGF0ZWQgbGlzdCBhcyB0aGVcclxuICAgKiBjdXJyZW50IGZpbGUgYW5kIGVtaXRzIHRoZSBmb2xsb3dpbmcgZXZlbnRzOlxyXG4gICAqIC0gYGZpbGVVcGxvYWRDb21wbGV0ZWA6IEVtaXRzIHRoZSB1cGRhdGVkIGZpbGUgYXMgYSBgRmlsZWAgb2JqZWN0LlxyXG4gICAqIC0gYG11bHRpcGxlRmlsZXNVcGxvYWRlZGA6IEVtaXRzIHRoZSB1cGRhdGVkIGxpc3Qgb2YgZmlsZXMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBoYW5kbGluZ0VkaXRlZEltYWdlKHJlc3VsdDogeyBkYXRhOiBCbG9iOyBpZDogc3RyaW5nIH0pIHtcclxuICAgIHRoaXMubXVsdGlwbGVGaWxlcy51cGRhdGUoKHJlcykgPT4ge1xyXG4gICAgICByZXR1cm4gcmVzLm1hcCgocikgPT4ge1xyXG4gICAgICAgIGlmIChyLmlkID09PSByZXN1bHQuaWQpIHtcclxuICAgICAgICAgIHJldHVybiB7IC4uLnIsIGZpbGU6IHJlc3VsdC5kYXRhIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5maWxlLnNldCh0aGlzLm11bHRpcGxlRmlsZXMoKVswXS5maWxlIGFzIEZpbGUpO1xyXG5cclxuICAgIHRoaXMuZW1pdEZpbGVVcGxvYWRDb21wbGV0ZSh0aGlzLmZpbGUoKSBhcyBGaWxlKTtcclxuICAgIHRoaXMuZW1pdE11bHRpcGxlRmlsZXNVcGxvYWRlZCh0aGlzLm11bHRpcGxlRmlsZXMoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uUmVzZXRVcHB5KCkge1xyXG4gICAgaWYgKHRoaXMuY2xlYXIoKSkge1xyXG4gICAgICB0aGlzLnVwcHkuY2xlYXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnZlcnRzIGEgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzIGludG8gYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcuXHJcbiAgICogQHBhcmFtIGJ5dGVzIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gY29udmVydC5cclxuICAgKiBAcGFyYW0gZGVjaW1hbFBvaW50cyBUaGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIHRvIGRpc3BsYXkuIERlZmF1bHRzIHRvIDIuXHJcbiAgICogQHJldHVybnMgQSBzdHJpbmcgaW4gdGhlIGZvcm0gb2YgXCJYLlhYIFt1bml0XVwiIHdoZXJlIFggaXMgdGhlIG51bWVyaWNhbCB2YWx1ZSBhbmQgdW5pdCBpcyB0aGUgYXBwcm9wcmlhdGUgdW5pdCBvZiBtZWFzdXJlbWVudCAoQnl0ZXMsIEtCLCBNQiwgR0IsIGV0Yy4pLlxyXG4gICAqL1xyXG4gIGZvcm1hdEZpbGVTaXplKGJ5dGVzOiBudW1iZXIsIGRlY2ltYWxQb2ludHMgPSAyKTogc3RyaW5nIHtcclxuICAgIGlmIChieXRlcyA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gYDAgYnl0ZXNgO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGkgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKFVwcHlDb21wb25lbnQua2lsb2J5dGUpKTtcclxuICAgIGNvbnN0IHNpemUgPSBieXRlcyAvIE1hdGgucG93KFVwcHlDb21wb25lbnQua2lsb2J5dGUsIGkpO1xyXG4gICAgcmV0dXJuIGAke3NpemUudG9GaXhlZChkZWNpbWFsUG9pbnRzKX0gJHtVcHB5Q29tcG9uZW50LnNpemVzW2ldfWA7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsZS5zZXQobnVsbCk7XHJcbiAgICB0aGlzLm11bHRpcGxlRmlsZXMuc2V0KFtdKTtcclxuICB9XHJcblxyXG4gIGVtaXRGaWxlVXBsb2FkKGY6IEZpbGUpIHtcclxuICAgIGNvbnN0IHJlbmFtZWRGaWxlID0gbmV3IEZpbGUoW2ZdLCBmLm5hbWUucmVwbGFjZSgvIC9nLCAnXycpLCB7XHJcbiAgICAgIHR5cGU6IGYudHlwZSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5maWxlVXBsb2FkZWQuZW1pdChyZW5hbWVkRmlsZSk7XHJcbiAgfVxyXG5cclxuICBlbWl0RmlsZVVwbG9hZENvbXBsZXRlKGY6IEZpbGUpIHtcclxuICAgIGNvbnN0IHJlbmFtZWRGaWxlID0gbmV3IEZpbGUoW2ZdLCBmLm5hbWUucmVwbGFjZSgvIC9nLCAnXycpLCB7XHJcbiAgICAgIHR5cGU6IGYudHlwZSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5maWxlVXBsb2FkQ29tcGxldGUuZW1pdChyZW5hbWVkRmlsZSk7XHJcbiAgfVxyXG4gIGVtaXRNdWx0aXBsZUZpbGVzVXBsb2FkZWQoZGF0YTogeyBmaWxlOiBCbG9iIHwgRmlsZTsgaWQ6IHN0cmluZyB9W10pIHtcclxuICAgIGNvbnN0IHJlbmFtZWREYXRhID0gZGF0YS5tYXAoKGQpID0+ICh7XHJcbiAgICAgIGZpbGU6IG5ldyBGaWxlKFtkLmZpbGVdLCAoZC5maWxlIGFzIEZpbGUpLm5hbWUucmVwbGFjZSgvIC9nLCAnXycpLCB7XHJcbiAgICAgICAgdHlwZTogZC5maWxlLnR5cGUsXHJcbiAgICAgIH0pLFxyXG4gICAgICBpZDogZC5pZCxcclxuICAgIH0pKTtcclxuICAgIHRoaXMubXVsdGlwbGVGaWxlc1VwbG9hZGVkLmVtaXQocmVuYW1lZERhdGEpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgIDx1cHB5LWRhc2hib2FyZCBbdXBweV09XCJ1cHB5XCIgW3Byb3BzXT1cImRhc2hib2FyZFByb3BzXCI+IDwvdXBweS1kYXNoYm9hcmQ+XHJcbiAgICA8c21hbGwgKm5nSWY9XCJzdWJ0aXRsZSAmJiBzaG93U3VidGl0bGVcIiBjbGFzcz1cInN1YnRpdGxlIHBvc2l0aW9uLWFic29sdXRlXCI+e3tzdWJ0aXRsZX19PC9zbWFsbD5cclxuICAgIDxhICpuZ0lmPVwic2FtcGxlVXJsICYmIHNob3dTYW1wbGVcIiBjbGFzcz1cInNhbXBsZSBwb3NpdGlvbi1hYnNvbHV0ZVwiIFtjbGFzcy50b3AtNThdPVwic3VidGl0bGVcIiByb2xlPVwiYnV0dG9uXCJcclxuICAgICAgICBbaHJlZl09XCJzYW1wbGVVcmxcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWRvd25sb2FkIG1zLTNcIj48L2k+IERvd25sb2FkIFRlbXBsYXRlXHJcbiAgICA8L2E+XHJcblxyXG4gICAgQGlmIChmaWxlKCkgJiYgZmlsZSgpPy50eXBlID09PSAndGV4dC9jc3YnKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZyBkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTJcIiBzdHlsZT1cIm1hcmdpbjogMXJlbSAwIDAgMDtcIiByb2xlPVwiYWxlcnRcIj5cclxuICAgICAgICA8aDQgY2xhc3M9XCJhbGVydC1oZWFkaW5nXCI+Q1NWIEZpbGUgQ29udGVudCBTdW1tYXJ5PC9oND5cclxuICAgICAgICA8aHI+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJmcy02IG0tMFwiPnt7cm93U3VtbWFyeSgpLnJvd0NvdW50fX0gcm93cyBmb3VuZCA8bmctY29udGFpbmVyICpuZ0lmPVwicm93U3VtbWFyeSgpLnJvd0VtcHR5ID4gMFwiPi1cclxuICAgICAgICAgICAgICAgIHt7cm93U3VtbWFyeSgpLnJvd0VtcHR5fX0gZW1wdHkgaW4gdGhlIENTViB5b3UgdXBsb2FkZWQ8L25nLWNvbnRhaW5lcj48L3A+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICB9XHJcbjwvZGl2PiJdfQ==
@@ -59,11 +59,20 @@ class UppyComponent {
59
59
  allowedFileTypes: ['.csv'],
60
60
  maxTotalFileSize: 1000000,
61
61
  },
62
- }).use(Compressor, {
62
+ onBeforeFileAdded: (currentFile, files) => {
63
+ const modifiedFile = {
64
+ ...currentFile,
65
+ name: currentFile.name?.replace(/ /g, '_'),
66
+ };
67
+ return modifiedFile;
68
+ },
69
+ })
70
+ .use(Compressor, {
63
71
  mimeType: 'image/jpeg',
64
72
  convertSize: Infinity,
65
73
  convertTypes: ['image/png'],
66
- }).use(ImageEditor);
74
+ })
75
+ .use(ImageEditor);
67
76
  this.dashboardProps = {
68
77
  hideUploadButton: true,
69
78
  height: 350,
@@ -77,7 +86,7 @@ class UppyComponent {
77
86
  const file = uppyFiles[0]?.data;
78
87
  this.showSample = false;
79
88
  this.showSubtitle = false;
80
- this.fileUploaded.emit(file);
89
+ this.emitFileUpload(file);
81
90
  this.file.set(uppyFiles[0].data);
82
91
  Papa.parse(file, {
83
92
  skipEmptyLines: 'greedy',
@@ -113,8 +122,8 @@ class UppyComponent {
113
122
  const file = uppyFiles.successful[0]?.data;
114
123
  this.showSample = false;
115
124
  this.showSubtitle = false;
116
- this.fileUploadComplete.emit(file);
117
- this.multipleFilesUploaded.emit(multipleFiles);
125
+ this.emitFileUploadComplete(file);
126
+ this.emitMultipleFilesUploaded(multipleFiles);
118
127
  this.onResetUppy();
119
128
  this.file.set(file);
120
129
  this.multipleFiles.set(multipleFiles);
@@ -174,8 +183,8 @@ class UppyComponent {
174
183
  });
175
184
  });
176
185
  this.file.set(this.multipleFiles()[0].file);
177
- this.fileUploadComplete.emit(this.file());
178
- this.multipleFilesUploaded.emit(this.multipleFiles());
186
+ this.emitFileUploadComplete(this.file());
187
+ this.emitMultipleFilesUploaded(this.multipleFiles());
179
188
  }
180
189
  onResetUppy() {
181
190
  if (this.clear()) {
@@ -200,6 +209,27 @@ class UppyComponent {
200
209
  this.file.set(null);
201
210
  this.multipleFiles.set([]);
202
211
  }
212
+ emitFileUpload(f) {
213
+ const renamedFile = new File([f], f.name.replace(/ /g, '_'), {
214
+ type: f.type,
215
+ });
216
+ this.fileUploaded.emit(renamedFile);
217
+ }
218
+ emitFileUploadComplete(f) {
219
+ const renamedFile = new File([f], f.name.replace(/ /g, '_'), {
220
+ type: f.type,
221
+ });
222
+ this.fileUploadComplete.emit(renamedFile);
223
+ }
224
+ emitMultipleFilesUploaded(data) {
225
+ const renamedData = data.map((d) => ({
226
+ file: new File([d.file], d.file.name.replace(/ /g, '_'), {
227
+ type: d.file.type,
228
+ }),
229
+ id: d.id,
230
+ }));
231
+ this.multipleFilesUploaded.emit(renamedData);
232
+ }
203
233
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: UppyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
204
234
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: UppyComponent, isStandalone: true, selector: "POS-uppy", inputs: { sampleUrl: { classPropertyName: "sampleUrl", publicName: "sampleUrl", isSignal: false, isRequired: false, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: false, isRequired: false, transformFunction: null }, showSample: { classPropertyName: "showSample", publicName: "showSample", isSignal: false, isRequired: false, transformFunction: null }, clear: { classPropertyName: "clear", publicName: "clear", isSignal: true, isRequired: false, transformFunction: null }, uppyCoreConfiguration: { classPropertyName: "uppyCoreConfiguration", publicName: "uppyCoreConfiguration", isSignal: true, isRequired: false, transformFunction: null }, dashboardPropsConfiguration: { classPropertyName: "dashboardPropsConfiguration", publicName: "dashboardPropsConfiguration", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { fileUploaded: "fileUploaded", fileUploadComplete: "fileUploadComplete", fileRemoved: "fileRemoved", onParser: "onParser", multipleFilesUploaded: "multipleFilesUploaded" }, ngImport: i0, template: "<div class=\"position-relative\">\r\n <uppy-dashboard [uppy]=\"uppy\" [props]=\"dashboardProps\"> </uppy-dashboard>\r\n <small *ngIf=\"subtitle && showSubtitle\" class=\"subtitle position-absolute\">{{subtitle}}</small>\r\n <a *ngIf=\"sampleUrl && showSample\" class=\"sample position-absolute\" [class.top-58]=\"subtitle\" role=\"button\"\r\n [href]=\"sampleUrl\">\r\n <i class=\"fa-solid fa-download ms-3\"></i> Download Template\r\n </a>\r\n\r\n @if (file() && file()?.type === 'text/csv') {\r\n <div class=\"alert alert-warning d-flex flex-column gap-2\" style=\"margin: 1rem 0 0 0;\" role=\"alert\">\r\n <h4 class=\"alert-heading\">CSV File Content Summary</h4>\r\n <hr>\r\n <p class=\"fs-6 m-0\">{{rowSummary().rowCount}} rows found <ng-container *ngIf=\"rowSummary().rowEmpty > 0\">-\r\n {{rowSummary().rowEmpty}} empty in the CSV you uploaded</ng-container></p>\r\n </div>\r\n\r\n }\r\n</div>", styles: ["::ng-deep .uppy-Dashboard-AddFiles-info{display:none!important}::ng-deep .uppy-Dashboard-AddFiles-list{flex:none;flex-direction:row;flex-wrap:wrap;justify-content:center;max-width:600px;margin-top:15px;padding-top:0;overflow-y:visible}.sample,.subtitle{top:56%;width:100%;text-align:center}.top-58{top:61%}\n"], dependencies: [{ kind: "ngmodule", type: UppyAngularDashboardModule }, { kind: "component", type: i1.DashboardComponent, selector: "uppy-dashboard", inputs: ["uppy", "props"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
205
235
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dealpos-npm-ng-dealpos-library-components-uppy-file-upload.mjs","sources":["../../../projects/dealpos-npm/ng-dealpos-library/components/uppy-file-upload/src/uppy.component.ts","../../../projects/dealpos-npm/ng-dealpos-library/components/uppy-file-upload/src/uppy.component.html","../../../projects/dealpos-npm/ng-dealpos-library/components/uppy-file-upload/dealpos-npm-ng-dealpos-library-components-uppy-file-upload.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n effect,\r\n EventEmitter,\r\n inject,\r\n input,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n signal,\r\n} from '@angular/core';\r\nimport { ConvertCsvService } from '@dealpos-npm/ng-dealpos-library/services/csv-parser';\r\nimport { HttpService } from '@dealpos-npm/ng-dealpos-library/services/http';\r\nimport { UppyAngularDashboardModule } from '@uppy/angular';\r\nimport Compressor from '@uppy/compressor';\r\nimport { Uppy } from '@uppy/core';\r\nimport '@uppy/core/dist/style.min.css';\r\nimport '@uppy/dashboard/dist/style.min.css';\r\nimport '@uppy/image-editor/dist/style.min.css';\r\nimport ImageEditor from '@uppy/image-editor';\r\nimport Transloadit, {\r\n COMPANION_ALLOWED_HOSTS,\r\n COMPANION_URL,\r\n} from '@uppy/transloadit';\r\nimport Papa from 'papaparse';\r\n\r\n@Component({\r\n selector: 'POS-uppy',\r\n standalone: true,\r\n imports: [UppyAngularDashboardModule, CommonModule],\r\n templateUrl: './uppy.component.html',\r\n styleUrl: './uppy.component.scss',\r\n})\r\nexport class UppyComponent implements OnDestroy {\r\n @Input() sampleUrl: string = '';\r\n @Input() subtitle: string = '';\r\n @Input()\r\n showSample: boolean = true;\r\n /**\r\n * For manually resetting Uppy after a successful upload\r\n */\r\n clear = input<boolean>(false);\r\n showSubtitle: boolean = true;\r\n uppyCoreConfiguration = input<any>();\r\n dashboardPropsConfiguration = input<any>();\r\n @Output() fileUploaded = new EventEmitter<Blob | File>();\r\n @Output() fileUploadComplete = new EventEmitter<Blob | File>();\r\n @Output() fileRemoved = new EventEmitter<string>();\r\n @Output() onParser = new EventEmitter<any>();\r\n @Output() multipleFilesUploaded = new EventEmitter<\r\n { file: Blob | File; id: string }[]\r\n >();\r\n\r\n http = inject(HttpService);\r\n csvParser = inject(ConvertCsvService);\r\n\r\n rowSummary = signal<{ rowCount: number; rowEmpty: number }>({\r\n rowCount: 0,\r\n rowEmpty: 0,\r\n });\r\n\r\n file = signal<File | null>(null);\r\n multipleFiles = signal<{ file: Blob | File; id: string }[]>([]);\r\n\r\n private static sizes = [\r\n 'Bytes',\r\n 'KB',\r\n 'MB',\r\n 'GB',\r\n 'TB',\r\n 'PB',\r\n 'EB',\r\n 'ZB',\r\n 'YB',\r\n ] as const;\r\n private static kilobyte = 1024;\r\n\r\n uppy: Uppy = new Uppy({\r\n debug: true,\r\n autoProceed: true,\r\n allowMultipleUploadBatches: false,\r\n restrictions: {\r\n allowedFileTypes: ['.csv'],\r\n maxTotalFileSize: 1000000,\r\n },\r\n }).use(Compressor, {\r\n mimeType: 'image/jpeg',\r\n convertSize: Infinity,\r\n convertTypes: ['image/png'],\r\n }).use(ImageEditor);\r\n\r\n dashboardProps = {\r\n hideUploadButton: true,\r\n height: 350,\r\n };\r\n\r\n constructor() {\r\n effect(() => this.uppy.setOptions({ ...this.uppyCoreConfiguration() }));\r\n effect(\r\n () =>\r\n (this.dashboardProps = {\r\n ...this.dashboardProps,\r\n ...this.dashboardPropsConfiguration(),\r\n })\r\n );\r\n\r\n this.uppy.on('upload', (_, uppyFiles) => {\r\n const file = uppyFiles[0]?.data as File;\r\n this.showSample = false;\r\n this.showSubtitle = false;\r\n this.fileUploaded.emit(file);\r\n this.file.set(uppyFiles[0].data as File);\r\n\r\n Papa.parse(file, {\r\n skipEmptyLines: 'greedy',\r\n header: true,\r\n beforeFirstChunk: (_chunk) => {\r\n const withOutHeader = _chunk.split(/\\r?\\n/).slice(1);\r\n if (withOutHeader[withOutHeader.length - 1] === '')\r\n withOutHeader.pop();\r\n this.rowSummary.update((res) => ({\r\n ...res,\r\n rowCount: withOutHeader.length,\r\n }));\r\n withOutHeader.forEach((row) => {\r\n const emptyRow = row.split(',').every((row) => row === '');\r\n\r\n if (emptyRow)\r\n this.rowSummary.update((res) => ({\r\n ...res,\r\n rowEmpty: res.rowEmpty + 1,\r\n }));\r\n });\r\n return _chunk; // Return the original chunk to continue parsing\r\n },\r\n error(error, file) {\r\n console.log('ERROR', error, file);\r\n },\r\n complete: (results, _file) => {\r\n this.onParser.emit(results.data);\r\n },\r\n });\r\n });\r\n\r\n this.uppy.on('complete', (uppyFiles) => {\r\n const multipleFiles =\r\n uppyFiles.successful?.map((d) => ({ file: d.data, id: d.id })) ?? [];\r\n const file = uppyFiles.successful![0]?.data;\r\n this.showSample = false;\r\n this.showSubtitle = false;\r\n this.fileUploadComplete.emit(file);\r\n this.multipleFilesUploaded.emit(multipleFiles);\r\n this.onResetUppy();\r\n this.file.set(file as File);\r\n this.multipleFiles.set(multipleFiles);\r\n });\r\n\r\n this.uppy.on('transloadit:upload', (x, y) => {\r\n console.log(x, y);\r\n });\r\n this.uppy.on('transloadit:result', (stepName, result) => {\r\n console.log(stepName, result);\r\n });\r\n\r\n this.uppy.on('file-removed', (f) => {\r\n this.showSample = true;\r\n this.showSubtitle = true;\r\n this.file.set(null);\r\n const currentFiles = this.multipleFiles();\r\n const updatedFiles = currentFiles.filter((r) => r.id != f.id);\r\n this.multipleFiles.set(updatedFiles);\r\n this.fileRemoved.emit(f.id);\r\n this.rowSummary.set({ rowCount: 0, rowEmpty: 0 });\r\n });\r\n\r\n this.onFileEdited();\r\n }\r\n\r\n /**\r\n * Sets up event listeners for the Uppy file editor events.\r\n * \r\n * - Listens for the `file-editor:complete` event, triggered when the file editor finishes editing a file.\r\n * Calls the `handlingEditedImage` method to process the edited file.\r\n * @private\r\n */\r\n private onFileEdited() {\r\n if (this.clear() == false) {\r\n this.uppy.on('file-editor:start', (result: { data: Blob }) => {\r\n // do nothing\r\n });\r\n\r\n this.uppy.on('file-editor:complete', (result: { data: Blob, id: string }) => {\r\n this.handlingEditedImage(result);\r\n });\r\n\r\n this.uppy.on('file-editor:cancel', (result: { data: Blob }) => {\r\n // do nothing\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Updates the `multipleFiles` state by replacing the file with the matching ID\r\n * with the new edited image data. Sets the first file in the updated list as the\r\n * current file and emits the following events:\r\n * - `fileUploadComplete`: Emits the updated file as a `File` object.\r\n * - `multipleFilesUploaded`: Emits the updated list of files.\r\n */\r\n private handlingEditedImage(result: { data: Blob, id: string }) {\r\n this.multipleFiles.update((res) => {\r\n return res.map((r) => {\r\n if (r.id === result.id) {\r\n return { ...r, file: result.data };\r\n }\r\n return r;\r\n });\r\n });\r\n this.file.set(this.multipleFiles()[0].file as File);\r\n\r\n this.fileUploadComplete.emit(this.file() as File);\r\n this.multipleFilesUploaded.emit(this.multipleFiles());\r\n }\r\n\r\n private onResetUppy() {\r\n if (this.clear()) {\r\n this.uppy.clear();\r\n }\r\n }\r\n\r\n /**\r\n * Converts a given number of bytes into a human-readable string.\r\n * @param bytes The number of bytes to convert.\r\n * @param decimalPoints The number of decimal places to display. Defaults to 2.\r\n * @returns A string in the form of \"X.XX [unit]\" where X is the numerical value and unit is the appropriate unit of measurement (Bytes, KB, MB, GB, etc.).\r\n */\r\n formatFileSize(bytes: number, decimalPoints = 2): string {\r\n if (bytes === 0) {\r\n return `0 bytes`;\r\n }\r\n\r\n const i = Math.floor(Math.log(bytes) / Math.log(UppyComponent.kilobyte));\r\n const size = bytes / Math.pow(UppyComponent.kilobyte, i);\r\n return `${size.toFixed(decimalPoints)} ${UppyComponent.sizes[i]}`;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.file.set(null);\r\n this.multipleFiles.set([]);\r\n }\r\n}\r\n","<div class=\"position-relative\">\r\n <uppy-dashboard [uppy]=\"uppy\" [props]=\"dashboardProps\"> </uppy-dashboard>\r\n <small *ngIf=\"subtitle && showSubtitle\" class=\"subtitle position-absolute\">{{subtitle}}</small>\r\n <a *ngIf=\"sampleUrl && showSample\" class=\"sample position-absolute\" [class.top-58]=\"subtitle\" role=\"button\"\r\n [href]=\"sampleUrl\">\r\n <i class=\"fa-solid fa-download ms-3\"></i> Download Template\r\n </a>\r\n\r\n @if (file() && file()?.type === 'text/csv') {\r\n <div class=\"alert alert-warning d-flex flex-column gap-2\" style=\"margin: 1rem 0 0 0;\" role=\"alert\">\r\n <h4 class=\"alert-heading\">CSV File Content Summary</h4>\r\n <hr>\r\n <p class=\"fs-6 m-0\">{{rowSummary().rowCount}} rows found <ng-container *ngIf=\"rowSummary().rowEmpty > 0\">-\r\n {{rowSummary().rowEmpty}} empty in the CSV you uploaded</ng-container></p>\r\n </div>\r\n\r\n }\r\n</div>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;MAkCa,aAAa,CAAA;AA+BT,IAAA,SAAA,IAAA,CAAA,KAAK,GAAG;QACrB,OAAO;QACP,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;AACI,KAVU,CAUT,EAAA;aACI,IAAQ,CAAA,QAAA,GAAG,IAAH,CAAQ,EAAA;AAqB/B,IAAA,WAAA,GAAA;QA9DS,IAAS,CAAA,SAAA,GAAW,EAAE,CAAC;QACvB,IAAQ,CAAA,QAAA,GAAW,EAAE,CAAC;QAE/B,IAAU,CAAA,UAAA,GAAY,IAAI,CAAC;AAC3B;;AAEG;AACH,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;QAC9B,IAAY,CAAA,YAAA,GAAY,IAAI,CAAC;QAC7B,IAAqB,CAAA,qBAAA,GAAG,KAAK,EAAO,CAAC;QACrC,IAA2B,CAAA,2BAAA,GAAG,KAAK,EAAO,CAAC;AACjC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAe,CAAC;AAC/C,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAe,CAAC;AACrD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU,CAAC;AACzC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAO,CAAC;AACnC,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAE/C,CAAC;AAEJ,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAC3B,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAEtC,IAAU,CAAA,UAAA,GAAG,MAAM,CAAyC;AAC1D,YAAA,QAAQ,EAAE,CAAC;AACX,YAAA,QAAQ,EAAE,CAAC;AACZ,SAAA,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAc,IAAI,CAAC,CAAC;AACjC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAsC,EAAE,CAAC,CAAC;QAehE,IAAI,CAAA,IAAA,GAAS,IAAI,IAAI,CAAC;AACpB,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,0BAA0B,EAAE,KAAK;AACjC,YAAA,YAAY,EAAE;gBACZ,gBAAgB,EAAE,CAAC,MAAM,CAAC;AAC1B,gBAAA,gBAAgB,EAAE,OAAO;AAC1B,aAAA;AACF,SAAA,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE;AACjB,YAAA,QAAQ,EAAE,YAAY;AACtB,YAAA,WAAW,EAAE,QAAQ;YACrB,YAAY,EAAE,CAAC,WAAW,CAAC;AAC5B,SAAA,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAEpB,QAAA,IAAA,CAAA,cAAc,GAAG;AACf,YAAA,gBAAgB,EAAE,IAAI;AACtB,YAAA,MAAM,EAAE,GAAG;SACZ,CAAC;AAGA,QAAA,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC,CAAC;QACxE,MAAM,CACJ,OACC,IAAI,CAAC,cAAc,GAAG;YACrB,GAAG,IAAI,CAAC,cAAc;YACtB,GAAG,IAAI,CAAC,2BAA2B,EAAE;AACtC,SAAA,CAAC,CACH,CAAC;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,SAAS,KAAI;YACtC,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,IAAY,CAAC;AACxC,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AACxB,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAY,CAAC,CAAC;AAEzC,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AACf,gBAAA,cAAc,EAAE,QAAQ;AACxB,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,gBAAgB,EAAE,CAAC,MAAM,KAAI;AAC3B,oBAAA,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACrD,IAAI,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE;wBAChD,aAAa,CAAC,GAAG,EAAE,CAAC;oBACtB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM;AAC/B,wBAAA,GAAG,GAAG;wBACN,QAAQ,EAAE,aAAa,CAAC,MAAM;AAC/B,qBAAA,CAAC,CAAC,CAAC;AACJ,oBAAA,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;wBAC5B,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC;AAE3D,wBAAA,IAAI,QAAQ;4BACV,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM;AAC/B,gCAAA,GAAG,GAAG;AACN,gCAAA,QAAQ,EAAE,GAAG,CAAC,QAAQ,GAAG,CAAC;AAC3B,6BAAA,CAAC,CAAC,CAAC;AACR,qBAAC,CAAC,CAAC;oBACH,OAAO,MAAM,CAAC;iBACf;gBACD,KAAK,CAAC,KAAK,EAAE,IAAI,EAAA;oBACf,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;iBACnC;AACD,gBAAA,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,KAAI;oBAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBAClC;AACF,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,SAAS,KAAI;AACrC,YAAA,MAAM,aAAa,GACjB,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACvE,MAAM,IAAI,GAAG,SAAS,CAAC,UAAW,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;AAC5C,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AACxB,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC/C,IAAI,CAAC,WAAW,EAAE,CAAC;AACnB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAY,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AACxC,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AAC1C,YAAA,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACpB,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAI;AACtD,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAChC,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC,KAAI;AACjC,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AAC1C,YAAA,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9D,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;AACpD,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;AAED;;;;;;AAMG;IACK,YAAY,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,KAAK,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,MAAsB,KAAI;;AAE7D,aAAC,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,MAAkC,KAAI;AAC1E,gBAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;AACnC,aAAC,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAsB,KAAI;;AAE9D,aAAC,CAAC,CAAC;SACJ;KACF;AAED;;;;;;AAMG;AACK,IAAA,mBAAmB,CAAC,MAAkC,EAAA;QAC5D,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;AAChC,YAAA,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;gBACnB,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,EAAE;oBACtB,OAAO,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;iBACpC;AACD,gBAAA,OAAO,CAAC,CAAC;AACX,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,IAAY,CAAC,CAAC;QAEpD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAU,CAAC,CAAC;QAClD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;KACvD;IAEO,WAAW,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;AAChB,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;SACnB;KACF;AAED;;;;;AAKG;AACH,IAAA,cAAc,CAAC,KAAa,EAAE,aAAa,GAAG,CAAC,EAAA;AAC7C,QAAA,IAAI,KAAK,KAAK,CAAC,EAAE;AACf,YAAA,OAAO,SAAS,CAAC;SAClB;QAED,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzE,QAAA,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AACzD,QAAA,OAAO,CAAG,EAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAI,CAAA,EAAA,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;KACnE;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;KAC9B;8GAvNU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EClC1B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,2BAAA,EAAA,EAAA,iBAAA,EAAA,6BAAA,EAAA,UAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,g9BAiBM,EDaM,MAAA,EAAA,CAAA,sTAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,0BAA0B,yIAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAIvC,aAAa,EAAA,UAAA,EAAA,CAAA;kBAPzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,cACR,IAAI,EAAA,OAAA,EACP,CAAC,0BAA0B,EAAE,YAAY,CAAC,EAAA,QAAA,EAAA,g9BAAA,EAAA,MAAA,EAAA,CAAA,sTAAA,CAAA,EAAA,CAAA;wDAK1C,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEN,UAAU,EAAA,CAAA;sBADT,KAAK;gBASI,YAAY,EAAA,CAAA;sBAArB,MAAM;gBACG,kBAAkB,EAAA,CAAA;sBAA3B,MAAM;gBACG,WAAW,EAAA,CAAA;sBAApB,MAAM;gBACG,QAAQ,EAAA,CAAA;sBAAjB,MAAM;gBACG,qBAAqB,EAAA,CAAA;sBAA9B,MAAM;;;AElDT;;AAEG;;;;"}
1
+ {"version":3,"file":"dealpos-npm-ng-dealpos-library-components-uppy-file-upload.mjs","sources":["../../../projects/dealpos-npm/ng-dealpos-library/components/uppy-file-upload/src/uppy.component.ts","../../../projects/dealpos-npm/ng-dealpos-library/components/uppy-file-upload/src/uppy.component.html","../../../projects/dealpos-npm/ng-dealpos-library/components/uppy-file-upload/dealpos-npm-ng-dealpos-library-components-uppy-file-upload.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n effect,\r\n EventEmitter,\r\n inject,\r\n input,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n signal,\r\n} from '@angular/core';\r\nimport { ConvertCsvService } from '@dealpos-npm/ng-dealpos-library/services/csv-parser';\r\nimport { HttpService } from '@dealpos-npm/ng-dealpos-library/services/http';\r\nimport { UppyAngularDashboardModule } from '@uppy/angular';\r\nimport Compressor from '@uppy/compressor';\r\nimport { Uppy } from '@uppy/core';\r\nimport '@uppy/core/dist/style.min.css';\r\nimport '@uppy/dashboard/dist/style.min.css';\r\nimport '@uppy/image-editor/dist/style.min.css';\r\nimport ImageEditor from '@uppy/image-editor';\r\nimport Transloadit, {\r\n COMPANION_ALLOWED_HOSTS,\r\n COMPANION_URL,\r\n} from '@uppy/transloadit';\r\nimport Papa from 'papaparse';\r\n\r\n@Component({\r\n selector: 'POS-uppy',\r\n standalone: true,\r\n imports: [UppyAngularDashboardModule, CommonModule],\r\n templateUrl: './uppy.component.html',\r\n styleUrl: './uppy.component.scss',\r\n})\r\nexport class UppyComponent implements OnDestroy {\r\n @Input() sampleUrl: string = '';\r\n @Input() subtitle: string = '';\r\n @Input()\r\n showSample: boolean = true;\r\n /**\r\n * For manually resetting Uppy after a successful upload\r\n */\r\n clear = input<boolean>(false);\r\n showSubtitle: boolean = true;\r\n uppyCoreConfiguration = input<any>();\r\n dashboardPropsConfiguration = input<any>();\r\n @Output() fileUploaded = new EventEmitter<Blob | File>();\r\n @Output() fileUploadComplete = new EventEmitter<Blob | File>();\r\n @Output() fileRemoved = new EventEmitter<string>();\r\n @Output() onParser = new EventEmitter<any>();\r\n @Output() multipleFilesUploaded = new EventEmitter<\r\n { file: Blob | File; id: string }[]\r\n >();\r\n\r\n http = inject(HttpService);\r\n csvParser = inject(ConvertCsvService);\r\n\r\n rowSummary = signal<{ rowCount: number; rowEmpty: number }>({\r\n rowCount: 0,\r\n rowEmpty: 0,\r\n });\r\n\r\n file = signal<File | null>(null);\r\n multipleFiles = signal<{ file: Blob | File; id: string }[]>([]);\r\n\r\n private static sizes = [\r\n 'Bytes',\r\n 'KB',\r\n 'MB',\r\n 'GB',\r\n 'TB',\r\n 'PB',\r\n 'EB',\r\n 'ZB',\r\n 'YB',\r\n ] as const;\r\n private static kilobyte = 1024;\r\n\r\n uppy: Uppy = new Uppy({\r\n debug: true,\r\n autoProceed: true,\r\n allowMultipleUploadBatches: false,\r\n restrictions: {\r\n allowedFileTypes: ['.csv'],\r\n maxTotalFileSize: 1000000,\r\n },\r\n onBeforeFileAdded: (currentFile, files) => {\r\n const modifiedFile = {\r\n ...currentFile,\r\n name: currentFile.name?.replace(/ /g, '_'),\r\n };\r\n return modifiedFile;\r\n },\r\n })\r\n .use(Compressor, {\r\n mimeType: 'image/jpeg',\r\n convertSize: Infinity,\r\n convertTypes: ['image/png'],\r\n })\r\n .use(ImageEditor);\r\n\r\n dashboardProps = {\r\n hideUploadButton: true,\r\n height: 350,\r\n };\r\n\r\n constructor() {\r\n effect(() => this.uppy.setOptions({ ...this.uppyCoreConfiguration() }));\r\n effect(\r\n () =>\r\n (this.dashboardProps = {\r\n ...this.dashboardProps,\r\n ...this.dashboardPropsConfiguration(),\r\n })\r\n );\r\n\r\n this.uppy.on('upload', (_, uppyFiles) => {\r\n const file = uppyFiles[0]?.data as File;\r\n this.showSample = false;\r\n this.showSubtitle = false;\r\n this.emitFileUpload(file);\r\n this.file.set(uppyFiles[0].data as File);\r\n\r\n Papa.parse(file, {\r\n skipEmptyLines: 'greedy',\r\n header: true,\r\n beforeFirstChunk: (_chunk) => {\r\n const withOutHeader = _chunk.split(/\\r?\\n/).slice(1);\r\n if (withOutHeader[withOutHeader.length - 1] === '')\r\n withOutHeader.pop();\r\n this.rowSummary.update((res) => ({\r\n ...res,\r\n rowCount: withOutHeader.length,\r\n }));\r\n withOutHeader.forEach((row) => {\r\n const emptyRow = row.split(',').every((row) => row === '');\r\n\r\n if (emptyRow)\r\n this.rowSummary.update((res) => ({\r\n ...res,\r\n rowEmpty: res.rowEmpty + 1,\r\n }));\r\n });\r\n return _chunk; // Return the original chunk to continue parsing\r\n },\r\n error(error, file) {\r\n console.log('ERROR', error, file);\r\n },\r\n complete: (results, _file) => {\r\n this.onParser.emit(results.data);\r\n },\r\n });\r\n });\r\n\r\n this.uppy.on('complete', (uppyFiles) => {\r\n const multipleFiles =\r\n uppyFiles.successful?.map((d) => ({ file: d.data, id: d.id })) ?? [];\r\n const file = uppyFiles.successful![0]?.data;\r\n this.showSample = false;\r\n this.showSubtitle = false;\r\n this.emitFileUploadComplete(file as File);\r\n this.emitMultipleFilesUploaded(multipleFiles);\r\n this.onResetUppy();\r\n this.file.set(file as File);\r\n this.multipleFiles.set(multipleFiles);\r\n });\r\n\r\n this.uppy.on('transloadit:upload', (x, y) => {\r\n console.log(x, y);\r\n });\r\n this.uppy.on('transloadit:result', (stepName, result) => {\r\n console.log(stepName, result);\r\n });\r\n\r\n this.uppy.on('file-removed', (f) => {\r\n this.showSample = true;\r\n this.showSubtitle = true;\r\n this.file.set(null);\r\n const currentFiles = this.multipleFiles();\r\n const updatedFiles = currentFiles.filter((r) => r.id != f.id);\r\n this.multipleFiles.set(updatedFiles);\r\n this.fileRemoved.emit(f.id);\r\n this.rowSummary.set({ rowCount: 0, rowEmpty: 0 });\r\n });\r\n\r\n this.onFileEdited();\r\n }\r\n\r\n /**\r\n * Sets up event listeners for the Uppy file editor events.\r\n *\r\n * - Listens for the `file-editor:complete` event, triggered when the file editor finishes editing a file.\r\n * Calls the `handlingEditedImage` method to process the edited file.\r\n * @private\r\n */\r\n private onFileEdited() {\r\n if (this.clear() == false) {\r\n this.uppy.on('file-editor:start', (result: { data: Blob }) => {\r\n // do nothing\r\n });\r\n\r\n this.uppy.on(\r\n 'file-editor:complete',\r\n (result: { data: Blob; id: string }) => {\r\n this.handlingEditedImage(result);\r\n }\r\n );\r\n\r\n this.uppy.on('file-editor:cancel', (result: { data: Blob }) => {\r\n // do nothing\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Updates the `multipleFiles` state by replacing the file with the matching ID\r\n * with the new edited image data. Sets the first file in the updated list as the\r\n * current file and emits the following events:\r\n * - `fileUploadComplete`: Emits the updated file as a `File` object.\r\n * - `multipleFilesUploaded`: Emits the updated list of files.\r\n */\r\n private handlingEditedImage(result: { data: Blob; id: string }) {\r\n this.multipleFiles.update((res) => {\r\n return res.map((r) => {\r\n if (r.id === result.id) {\r\n return { ...r, file: result.data };\r\n }\r\n return r;\r\n });\r\n });\r\n this.file.set(this.multipleFiles()[0].file as File);\r\n\r\n this.emitFileUploadComplete(this.file() as File);\r\n this.emitMultipleFilesUploaded(this.multipleFiles());\r\n }\r\n\r\n private onResetUppy() {\r\n if (this.clear()) {\r\n this.uppy.clear();\r\n }\r\n }\r\n\r\n /**\r\n * Converts a given number of bytes into a human-readable string.\r\n * @param bytes The number of bytes to convert.\r\n * @param decimalPoints The number of decimal places to display. Defaults to 2.\r\n * @returns A string in the form of \"X.XX [unit]\" where X is the numerical value and unit is the appropriate unit of measurement (Bytes, KB, MB, GB, etc.).\r\n */\r\n formatFileSize(bytes: number, decimalPoints = 2): string {\r\n if (bytes === 0) {\r\n return `0 bytes`;\r\n }\r\n\r\n const i = Math.floor(Math.log(bytes) / Math.log(UppyComponent.kilobyte));\r\n const size = bytes / Math.pow(UppyComponent.kilobyte, i);\r\n return `${size.toFixed(decimalPoints)} ${UppyComponent.sizes[i]}`;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.file.set(null);\r\n this.multipleFiles.set([]);\r\n }\r\n\r\n emitFileUpload(f: File) {\r\n const renamedFile = new File([f], f.name.replace(/ /g, '_'), {\r\n type: f.type,\r\n });\r\n this.fileUploaded.emit(renamedFile);\r\n }\r\n\r\n emitFileUploadComplete(f: File) {\r\n const renamedFile = new File([f], f.name.replace(/ /g, '_'), {\r\n type: f.type,\r\n });\r\n this.fileUploadComplete.emit(renamedFile);\r\n }\r\n emitMultipleFilesUploaded(data: { file: Blob | File; id: string }[]) {\r\n const renamedData = data.map((d) => ({\r\n file: new File([d.file], (d.file as File).name.replace(/ /g, '_'), {\r\n type: d.file.type,\r\n }),\r\n id: d.id,\r\n }));\r\n this.multipleFilesUploaded.emit(renamedData);\r\n }\r\n}\r\n","<div class=\"position-relative\">\r\n <uppy-dashboard [uppy]=\"uppy\" [props]=\"dashboardProps\"> </uppy-dashboard>\r\n <small *ngIf=\"subtitle && showSubtitle\" class=\"subtitle position-absolute\">{{subtitle}}</small>\r\n <a *ngIf=\"sampleUrl && showSample\" class=\"sample position-absolute\" [class.top-58]=\"subtitle\" role=\"button\"\r\n [href]=\"sampleUrl\">\r\n <i class=\"fa-solid fa-download ms-3\"></i> Download Template\r\n </a>\r\n\r\n @if (file() && file()?.type === 'text/csv') {\r\n <div class=\"alert alert-warning d-flex flex-column gap-2\" style=\"margin: 1rem 0 0 0;\" role=\"alert\">\r\n <h4 class=\"alert-heading\">CSV File Content Summary</h4>\r\n <hr>\r\n <p class=\"fs-6 m-0\">{{rowSummary().rowCount}} rows found <ng-container *ngIf=\"rowSummary().rowEmpty > 0\">-\r\n {{rowSummary().rowEmpty}} empty in the CSV you uploaded</ng-container></p>\r\n </div>\r\n\r\n }\r\n</div>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "@dealpos-npm/ng-dealpos-library",
3
- "version": "4.4.13",
3
+ "version": "4.4.15",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^18.2.0",
6
6
  "@angular/core": "^18.2.0",
7
- "@angular/material": "^18.2.0"
7
+ "@angular/material": "^18.2.0",
8
+ "@uppy/image-editor": "^3.3.2"
8
9
  },
9
10
  "dependencies": {
10
11
  "tslib": "^2.3.0"
@@ -110,18 +111,18 @@
110
111
  "esm": "./esm2022/components/toastr/dealpos-npm-ng-dealpos-library-components-toastr.mjs",
111
112
  "default": "./fesm2022/dealpos-npm-ng-dealpos-library-components-toastr.mjs"
112
113
  },
113
- "./components/uppy-file-upload": {
114
- "types": "./components/uppy-file-upload/index.d.ts",
115
- "esm2022": "./esm2022/components/uppy-file-upload/dealpos-npm-ng-dealpos-library-components-uppy-file-upload.mjs",
116
- "esm": "./esm2022/components/uppy-file-upload/dealpos-npm-ng-dealpos-library-components-uppy-file-upload.mjs",
117
- "default": "./fesm2022/dealpos-npm-ng-dealpos-library-components-uppy-file-upload.mjs"
118
- },
119
114
  "./directives/autonumeric": {
120
115
  "types": "./directives/autonumeric/index.d.ts",
121
116
  "esm2022": "./esm2022/directives/autonumeric/dealpos-npm-ng-dealpos-library-directives-autonumeric.mjs",
122
117
  "esm": "./esm2022/directives/autonumeric/dealpos-npm-ng-dealpos-library-directives-autonumeric.mjs",
123
118
  "default": "./fesm2022/dealpos-npm-ng-dealpos-library-directives-autonumeric.mjs"
124
119
  },
120
+ "./components/uppy-file-upload": {
121
+ "types": "./components/uppy-file-upload/index.d.ts",
122
+ "esm2022": "./esm2022/components/uppy-file-upload/dealpos-npm-ng-dealpos-library-components-uppy-file-upload.mjs",
123
+ "esm": "./esm2022/components/uppy-file-upload/dealpos-npm-ng-dealpos-library-components-uppy-file-upload.mjs",
124
+ "default": "./fesm2022/dealpos-npm-ng-dealpos-library-components-uppy-file-upload.mjs"
125
+ },
125
126
  "./directives/file-size-check": {
126
127
  "types": "./directives/file-size-check/index.d.ts",
127
128
  "esm2022": "./esm2022/directives/file-size-check/dealpos-npm-ng-dealpos-library-directives-file-size-check.mjs",
@@ -134,18 +135,18 @@
134
135
  "esm": "./esm2022/directives/form-or-floating-on-masked/dealpos-npm-ng-dealpos-library-directives-form-or-floating-on-masked.mjs",
135
136
  "default": "./fesm2022/dealpos-npm-ng-dealpos-library-directives-form-or-floating-on-masked.mjs"
136
137
  },
137
- "./directives/is-invalid-email-or-phone": {
138
- "types": "./directives/is-invalid-email-or-phone/index.d.ts",
139
- "esm2022": "./esm2022/directives/is-invalid-email-or-phone/dealpos-npm-ng-dealpos-library-directives-is-invalid-email-or-phone.mjs",
140
- "esm": "./esm2022/directives/is-invalid-email-or-phone/dealpos-npm-ng-dealpos-library-directives-is-invalid-email-or-phone.mjs",
141
- "default": "./fesm2022/dealpos-npm-ng-dealpos-library-directives-is-invalid-email-or-phone.mjs"
142
- },
143
138
  "./directives/numeric-input-only": {
144
139
  "types": "./directives/numeric-input-only/index.d.ts",
145
140
  "esm2022": "./esm2022/directives/numeric-input-only/dealpos-npm-ng-dealpos-library-directives-numeric-input-only.mjs",
146
141
  "esm": "./esm2022/directives/numeric-input-only/dealpos-npm-ng-dealpos-library-directives-numeric-input-only.mjs",
147
142
  "default": "./fesm2022/dealpos-npm-ng-dealpos-library-directives-numeric-input-only.mjs"
148
143
  },
144
+ "./directives/is-invalid-email-or-phone": {
145
+ "types": "./directives/is-invalid-email-or-phone/index.d.ts",
146
+ "esm2022": "./esm2022/directives/is-invalid-email-or-phone/dealpos-npm-ng-dealpos-library-directives-is-invalid-email-or-phone.mjs",
147
+ "esm": "./esm2022/directives/is-invalid-email-or-phone/dealpos-npm-ng-dealpos-library-directives-is-invalid-email-or-phone.mjs",
148
+ "default": "./fesm2022/dealpos-npm-ng-dealpos-library-directives-is-invalid-email-or-phone.mjs"
149
+ },
149
150
  "./directives/simple-keyboard": {
150
151
  "types": "./directives/simple-keyboard/index.d.ts",
151
152
  "esm2022": "./esm2022/directives/simple-keyboard/dealpos-npm-ng-dealpos-library-directives-simple-keyboard.mjs",