@dbg-riskit/angular-file 12.3.0 → 9999.9999.9999-rc.12148

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.
Files changed (54) hide show
  1. package/dbg-riskit-angular-file.d.ts +1 -0
  2. package/docs/README.md +1 -11
  3. package/{esm2015/dbg-riskit-angular-file.js → esm2020/dbg-riskit-angular-file.mjs} +0 -0
  4. package/esm2020/lib/abstract.file.download.directive.mjs +139 -0
  5. package/esm2020/lib/abstract.file.upload.component.mjs +84 -0
  6. package/esm2020/lib/binary.file.upload.component.mjs +25 -0
  7. package/esm2020/lib/binary.file.upload.service.mjs +41 -0
  8. package/esm2020/lib/csv.file.download.directive.mjs +83 -0
  9. package/esm2020/lib/csv.file.upload.component.mjs +47 -0
  10. package/esm2020/lib/csv.file.upload.service.mjs +108 -0
  11. package/esm2020/lib/download.menu.component.mjs +34 -0
  12. package/esm2020/lib/file.download.directive.mjs +53 -0
  13. package/esm2020/lib/file.module.mjs +78 -0
  14. package/esm2020/lib/file.size.pipe.mjs +34 -0
  15. package/{esm2015/lib/file.types.js → esm2020/lib/file.types.mjs} +0 -0
  16. package/esm2020/lib/text.file.upload.component.mjs +26 -0
  17. package/esm2020/lib/text.file.upload.service.mjs +41 -0
  18. package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
  19. package/fesm2015/dbg-riskit-angular-file.mjs +727 -0
  20. package/fesm2015/dbg-riskit-angular-file.mjs.map +1 -0
  21. package/fesm2020/dbg-riskit-angular-file.mjs +727 -0
  22. package/fesm2020/dbg-riskit-angular-file.mjs.map +1 -0
  23. package/lib/abstract.file.download.directive.d.ts +3 -0
  24. package/lib/abstract.file.upload.component.d.ts +3 -0
  25. package/lib/binary.file.upload.component.d.ts +3 -0
  26. package/lib/binary.file.upload.service.d.ts +3 -0
  27. package/lib/csv.file.download.directive.d.ts +3 -0
  28. package/lib/csv.file.upload.component.d.ts +3 -0
  29. package/lib/csv.file.upload.service.d.ts +3 -0
  30. package/lib/download.menu.component.d.ts +3 -0
  31. package/lib/file.download.directive.d.ts +3 -0
  32. package/lib/file.module.d.ts +14 -0
  33. package/lib/file.size.pipe.d.ts +3 -0
  34. package/lib/text.file.upload.component.d.ts +3 -0
  35. package/lib/text.file.upload.service.d.ts +3 -0
  36. package/package.json +27 -15
  37. package/bundles/dbg-riskit-angular-file.umd.js +0 -1129
  38. package/bundles/dbg-riskit-angular-file.umd.js.map +0 -1
  39. package/dbg-riskit-angular-file.metadata.json +0 -1
  40. package/esm2015/lib/abstract.file.download.directive.js +0 -141
  41. package/esm2015/lib/abstract.file.upload.component.js +0 -73
  42. package/esm2015/lib/binary.file.upload.component.js +0 -29
  43. package/esm2015/lib/binary.file.upload.service.js +0 -38
  44. package/esm2015/lib/csv.file.download.directive.js +0 -79
  45. package/esm2015/lib/csv.file.upload.component.js +0 -51
  46. package/esm2015/lib/csv.file.upload.service.js +0 -105
  47. package/esm2015/lib/download.menu.component.js +0 -28
  48. package/esm2015/lib/file.download.directive.js +0 -51
  49. package/esm2015/lib/file.module.js +0 -50
  50. package/esm2015/lib/file.size.pipe.js +0 -46
  51. package/esm2015/lib/text.file.upload.component.js +0 -30
  52. package/esm2015/lib/text.file.upload.service.js +0 -38
  53. package/fesm2015/dbg-riskit-angular-file.js +0 -704
  54. package/fesm2015/dbg-riskit-angular-file.js.map +0 -1
@@ -0,0 +1,108 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { toString } from '@dbg-riskit/common';
3
+ import { forkJoin, Observable } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ // Create a regular expression to parse the CSV values.
6
+ const CSV_FILE_PATTERN = new RegExp((
7
+ // Delimiters.
8
+ '([,;]|\\r?\\n|\\r|^)' +
9
+ // Quoted fields.
10
+ '(?:"([^"]*(?:""[^"]*)*)"|' +
11
+ // Standard fields.
12
+ '([^",;\\r\\n]*))'), 'gi');
13
+ export class CSVFileUploadService {
14
+ readFiles(files, nameMapper = (name) => name) {
15
+ const fileOservables = [];
16
+ for (const file of Array.from(files)) {
17
+ fileOservables.push(new Observable((observer) => {
18
+ setTimeout(() => {
19
+ try {
20
+ const reader = new FileReader();
21
+ // Handle errors load
22
+ reader.onload = (event) => {
23
+ observer.next(CSVFileUploadService.getCSVFile(toString(event.target.result), file, nameMapper));
24
+ observer.complete();
25
+ };
26
+ reader.onerror = (event) => {
27
+ observer.error(event.target.error);
28
+ };
29
+ // Read file into memory as UTF-8
30
+ reader.readAsText(file);
31
+ }
32
+ catch (err) {
33
+ observer.error(err);
34
+ }
35
+ });
36
+ }));
37
+ }
38
+ return forkJoin(fileOservables);
39
+ }
40
+ static getCSVFile(content, file, nameMapper) {
41
+ // Create an array to hold our data. Give the array
42
+ // a default empty first row.
43
+ let arrData = [[]];
44
+ // Create an array to hold our individual pattern
45
+ // matching groups.
46
+ // Keep looping over the regular expression matches
47
+ // until we can no longer find a match.
48
+ while (true) {
49
+ const arrMatches = CSV_FILE_PATTERN.exec(content);
50
+ if (arrMatches == null) {
51
+ break;
52
+ }
53
+ // Get the delimiter that was found.
54
+ const strMatchedDelimiter = arrMatches[1];
55
+ // Check to see if the given delimiter has a length
56
+ // (is not the start of string) and if it matches
57
+ // field delimiter. If id does not, then we know
58
+ // that this delimiter is a row delimiter.
59
+ if (strMatchedDelimiter.length && strMatchedDelimiter !== ',' && strMatchedDelimiter !== ';') {
60
+ // Since we have reached a new row of data,
61
+ // add an empty row to our data array.
62
+ arrData.push([]);
63
+ }
64
+ let strMatchedValue;
65
+ // Now that we have our delimiter out of the way,
66
+ // let's check to see which kind of value we
67
+ // captured (quoted or unquoted).
68
+ if (arrMatches[2]) {
69
+ // We found a quoted value. When we capture
70
+ // this value, unescape any double quotes.
71
+ strMatchedValue = arrMatches[2].replace(new RegExp('""', 'g'), '"');
72
+ }
73
+ else {
74
+ // We found a non-quoted value.
75
+ strMatchedValue = arrMatches[3];
76
+ }
77
+ // Now that we have our value string, let's add
78
+ // it to the data array.
79
+ arrData[arrData.length - 1].push(strMatchedValue);
80
+ }
81
+ // Filter out empty rows
82
+ arrData = arrData.filter((dataRow) => {
83
+ return dataRow.some((item) => item != null && item.trim() !== '');
84
+ });
85
+ // Return the parsed data.
86
+ return {
87
+ header: arrData[0],
88
+ body: arrData.slice(1).map((dataRow) => {
89
+ const row = {};
90
+ for (let i = 0; i < arrData[0].length; i++) {
91
+ row[nameMapper(arrData[0][i])] = dataRow[i];
92
+ }
93
+ return row;
94
+ }),
95
+ file: {
96
+ name: file.name,
97
+ size: file.size,
98
+ type: file.type
99
+ }
100
+ };
101
+ }
102
+ }
103
+ CSVFileUploadService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CSVFileUploadService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
104
+ CSVFileUploadService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CSVFileUploadService });
105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CSVFileUploadService, decorators: [{
106
+ type: Injectable
107
+ }] });
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3N2LmZpbGUudXBsb2FkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wa2cvZGJnLXJpc2tpdC9hbmd1bGFyLWZpbGUvc3JjL2xpYi9jc3YuZmlsZS51cGxvYWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsUUFBUSxFQUFFLFVBQVUsRUFBYSxNQUFNLE1BQU0sQ0FBQzs7QUFHdEQsdURBQXVEO0FBQ3ZELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxNQUFNLENBQy9CO0FBQ0ksY0FBYztBQUNkLHNCQUFzQjtJQUV0QixpQkFBaUI7SUFDakIsMkJBQTJCO0lBRTNCLG1CQUFtQjtJQUNuQixrQkFBa0IsQ0FDckIsRUFDRCxJQUFJLENBQ1AsQ0FBQztBQUdGLE1BQU0sT0FBTyxvQkFBb0I7SUFFdEIsU0FBUyxDQUFDLEtBQWUsRUFBRSxhQUFrQyxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsSUFBSTtRQUN0RixNQUFNLGNBQWMsR0FBK0IsRUFBRSxDQUFDO1FBQ3RELEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNsQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsUUFBNkIsRUFBRSxFQUFFO2dCQUNqRSxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNaLElBQUk7d0JBQ0EsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQzt3QkFDaEMscUJBQXFCO3dCQUNyQixNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFOzRCQUNyQyxRQUFRLENBQUMsSUFBSSxDQUNULG9CQUFvQixDQUFDLFVBQVUsQ0FDM0IsUUFBUSxDQUFFLEtBQUssQ0FBQyxNQUFxQixDQUFDLE1BQU0sQ0FBQyxFQUM3QyxJQUFJLEVBQ0osVUFBVSxDQUFDLENBQ2xCLENBQUM7NEJBQ0YsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUN4QixDQUFDLENBQUM7d0JBQ0YsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQW9CLEVBQUUsRUFBRTs0QkFDdEMsUUFBUSxDQUFDLEtBQUssQ0FBRSxLQUFLLENBQUMsTUFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDdkQsQ0FBQyxDQUFDO3dCQUNGLGlDQUFpQzt3QkFDakMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDM0I7b0JBQUMsT0FBTyxHQUFHLEVBQUU7d0JBQ1YsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDdkI7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ1A7UUFDRCxPQUFPLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU0sTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFlLEVBQUUsSUFBVSxFQUFFLFVBQStCO1FBQ2pGLG1EQUFtRDtRQUNuRCw2QkFBNkI7UUFDN0IsSUFBSSxPQUFPLEdBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUUvQixpREFBaUQ7UUFDakQsbUJBQW1CO1FBRW5CLG1EQUFtRDtRQUNuRCx1Q0FBdUM7UUFDdkMsT0FBTyxJQUFJLEVBQUU7WUFDVCxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEQsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO2dCQUNwQixNQUFNO2FBQ1Q7WUFFRCxvQ0FBb0M7WUFDcEMsTUFBTSxtQkFBbUIsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFMUMsbURBQW1EO1lBQ25ELGlEQUFpRDtZQUNqRCxnREFBZ0Q7WUFDaEQsMENBQTBDO1lBQzFDLElBQUksbUJBQW1CLENBQUMsTUFBTSxJQUFJLG1CQUFtQixLQUFLLEdBQUcsSUFBSSxtQkFBbUIsS0FBSyxHQUFHLEVBQUU7Z0JBQzFGLDJDQUEyQztnQkFDM0Msc0NBQXNDO2dCQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3BCO1lBRUQsSUFBSSxlQUFlLENBQUM7WUFFcEIsaURBQWlEO1lBQ2pELDRDQUE0QztZQUM1QyxpQ0FBaUM7WUFDakMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBRWYsMkNBQTJDO2dCQUMzQywwQ0FBMEM7Z0JBQzFDLGVBQWUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUNuQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQ3JCLEdBQUcsQ0FDTixDQUFDO2FBRUw7aUJBQU07Z0JBRUgsK0JBQStCO2dCQUMvQixlQUFlLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBRW5DO1lBRUQsK0NBQStDO1lBQy9DLHdCQUF3QjtZQUN4QixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDckQ7UUFFRCx3QkFBd0I7UUFDeEIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFpQixFQUFFLEVBQUU7WUFDM0MsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM5RSxDQUFDLENBQUMsQ0FBQztRQUVILDBCQUEwQjtRQUMxQixPQUFPO1lBQ0gsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDbEIsSUFBSSxFQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBaUIsRUFBRSxFQUFFO2dCQUMvQyxNQUFNLEdBQUcsR0FBOEIsRUFBRSxDQUFDO2dCQUMxQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDeEMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDL0M7Z0JBQ0QsT0FBTyxHQUFHLENBQUM7WUFDZixDQUFDLENBQUM7WUFDRixJQUFJLEVBQUk7Z0JBQ0osSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7YUFDbEI7U0FDSixDQUFDO0lBQ04sQ0FBQzs7aUhBN0dRLG9CQUFvQjtxSEFBcEIsb0JBQW9COzJGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0b1N0cmluZ30gZnJvbSAnQGRiZy1yaXNraXQvY29tbW9uJztcbmltcG9ydCB7Zm9ya0pvaW4sIE9ic2VydmFibGUsIFN1YnNjcmliZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtDU1ZDb2x1bW5OYW1lTWFwcGVyLCBDU1ZGaWxlfSBmcm9tICcuL2ZpbGUudHlwZXMnO1xuXG4vLyBDcmVhdGUgYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gcGFyc2UgdGhlIENTViB2YWx1ZXMuXG5jb25zdCBDU1ZfRklMRV9QQVRURVJOID0gbmV3IFJlZ0V4cChcbiAgICAoXG4gICAgICAgIC8vIERlbGltaXRlcnMuXG4gICAgICAgICcoWyw7XXxcXFxccj9cXFxcbnxcXFxccnxeKScgK1xuXG4gICAgICAgIC8vIFF1b3RlZCBmaWVsZHMuXG4gICAgICAgICcoPzpcIihbXlwiXSooPzpcIlwiW15cIl0qKSopXCJ8JyArXG5cbiAgICAgICAgLy8gU3RhbmRhcmQgZmllbGRzLlxuICAgICAgICAnKFteXCIsO1xcXFxyXFxcXG5dKikpJ1xuICAgICksXG4gICAgJ2dpJ1xuKTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENTVkZpbGVVcGxvYWRTZXJ2aWNlIHtcblxuICAgIHB1YmxpYyByZWFkRmlsZXMoZmlsZXM6IEZpbGVMaXN0LCBuYW1lTWFwcGVyOiBDU1ZDb2x1bW5OYW1lTWFwcGVyID0gKG5hbWU6IHN0cmluZykgPT4gbmFtZSk6IE9ic2VydmFibGU8Q1NWRmlsZVtdPiB7XG4gICAgICAgIGNvbnN0IGZpbGVPc2VydmFibGVzOiBBcnJheTxPYnNlcnZhYmxlPENTVkZpbGU+PiA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgQXJyYXkuZnJvbShmaWxlcykpIHtcbiAgICAgICAgICAgIGZpbGVPc2VydmFibGVzLnB1c2gobmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBTdWJzY3JpYmVyPENTVkZpbGU+KSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGVycm9ycyBsb2FkXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkID0gKGV2ZW50OiBQcm9ncmVzc0V2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NWRmlsZVVwbG9hZFNlcnZpY2UuZ2V0Q1NWRmlsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nKChldmVudC50YXJnZXQgYXMgRmlsZVJlYWRlcikucmVzdWx0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lTWFwcGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIub25lcnJvciA9IChldmVudDogUHJvZ3Jlc3NFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKChldmVudC50YXJnZXQgYXMgRmlsZVJlYWRlcikuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlYWQgZmlsZSBpbnRvIG1lbW9yeSBhcyBVVEYtOFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JrSm9pbihmaWxlT3NlcnZhYmxlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRDU1ZGaWxlKGNvbnRlbnQ6IHN0cmluZywgZmlsZTogRmlsZSwgbmFtZU1hcHBlcjogQ1NWQ29sdW1uTmFtZU1hcHBlcik6IENTVkZpbGUge1xuICAgICAgICAvLyBDcmVhdGUgYW4gYXJyYXkgdG8gaG9sZCBvdXIgZGF0YS4gR2l2ZSB0aGUgYXJyYXlcbiAgICAgICAgLy8gYSBkZWZhdWx0IGVtcHR5IGZpcnN0IHJvdy5cbiAgICAgICAgbGV0IGFyckRhdGE6IHN0cmluZ1tdW10gPSBbW11dO1xuXG4gICAgICAgIC8vIENyZWF0ZSBhbiBhcnJheSB0byBob2xkIG91ciBpbmRpdmlkdWFsIHBhdHRlcm5cbiAgICAgICAgLy8gbWF0Y2hpbmcgZ3JvdXBzLlxuXG4gICAgICAgIC8vIEtlZXAgbG9vcGluZyBvdmVyIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hlc1xuICAgICAgICAvLyB1bnRpbCB3ZSBjYW4gbm8gbG9uZ2VyIGZpbmQgYSBtYXRjaC5cbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyck1hdGNoZXMgPSBDU1ZfRklMRV9QQVRURVJOLmV4ZWMoY29udGVudCk7XG4gICAgICAgICAgICBpZiAoYXJyTWF0Y2hlcyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCB0aGUgZGVsaW1pdGVyIHRoYXQgd2FzIGZvdW5kLlxuICAgICAgICAgICAgY29uc3Qgc3RyTWF0Y2hlZERlbGltaXRlciA9IGFyck1hdGNoZXNbMV07XG5cbiAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgZ2l2ZW4gZGVsaW1pdGVyIGhhcyBhIGxlbmd0aFxuICAgICAgICAgICAgLy8gKGlzIG5vdCB0aGUgc3RhcnQgb2Ygc3RyaW5nKSBhbmQgaWYgaXQgbWF0Y2hlc1xuICAgICAgICAgICAgLy8gZmllbGQgZGVsaW1pdGVyLiBJZiBpZCBkb2VzIG5vdCwgdGhlbiB3ZSBrbm93XG4gICAgICAgICAgICAvLyB0aGF0IHRoaXMgZGVsaW1pdGVyIGlzIGEgcm93IGRlbGltaXRlci5cbiAgICAgICAgICAgIGlmIChzdHJNYXRjaGVkRGVsaW1pdGVyLmxlbmd0aCAmJiBzdHJNYXRjaGVkRGVsaW1pdGVyICE9PSAnLCcgJiYgc3RyTWF0Y2hlZERlbGltaXRlciAhPT0gJzsnKSB7XG4gICAgICAgICAgICAgICAgLy8gU2luY2Ugd2UgaGF2ZSByZWFjaGVkIGEgbmV3IHJvdyBvZiBkYXRhLFxuICAgICAgICAgICAgICAgIC8vIGFkZCBhbiBlbXB0eSByb3cgdG8gb3VyIGRhdGEgYXJyYXkuXG4gICAgICAgICAgICAgICAgYXJyRGF0YS5wdXNoKFtdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHN0ck1hdGNoZWRWYWx1ZTtcblxuICAgICAgICAgICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBvdXIgZGVsaW1pdGVyIG91dCBvZiB0aGUgd2F5LFxuICAgICAgICAgICAgLy8gbGV0J3MgY2hlY2sgdG8gc2VlIHdoaWNoIGtpbmQgb2YgdmFsdWUgd2VcbiAgICAgICAgICAgIC8vIGNhcHR1cmVkIChxdW90ZWQgb3IgdW5xdW90ZWQpLlxuICAgICAgICAgICAgaWYgKGFyck1hdGNoZXNbMl0pIHtcblxuICAgICAgICAgICAgICAgIC8vIFdlIGZvdW5kIGEgcXVvdGVkIHZhbHVlLiBXaGVuIHdlIGNhcHR1cmVcbiAgICAgICAgICAgICAgICAvLyB0aGlzIHZhbHVlLCB1bmVzY2FwZSBhbnkgZG91YmxlIHF1b3Rlcy5cbiAgICAgICAgICAgICAgICBzdHJNYXRjaGVkVmFsdWUgPSBhcnJNYXRjaGVzWzJdLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBSZWdFeHAoJ1wiXCInLCAnZycpLFxuICAgICAgICAgICAgICAgICAgICAnXCInXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIC8vIFdlIGZvdW5kIGEgbm9uLXF1b3RlZCB2YWx1ZS5cbiAgICAgICAgICAgICAgICBzdHJNYXRjaGVkVmFsdWUgPSBhcnJNYXRjaGVzWzNdO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgb3VyIHZhbHVlIHN0cmluZywgbGV0J3MgYWRkXG4gICAgICAgICAgICAvLyBpdCB0byB0aGUgZGF0YSBhcnJheS5cbiAgICAgICAgICAgIGFyckRhdGFbYXJyRGF0YS5sZW5ndGggLSAxXS5wdXNoKHN0ck1hdGNoZWRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaWx0ZXIgb3V0IGVtcHR5IHJvd3NcbiAgICAgICAgYXJyRGF0YSA9IGFyckRhdGEuZmlsdGVyKChkYXRhUm93OiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGFSb3cuc29tZSgoaXRlbTogc3RyaW5nKSA9PiBpdGVtICE9IG51bGwgJiYgaXRlbS50cmltKCkgIT09ICcnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSBwYXJzZWQgZGF0YS5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlYWRlcjogYXJyRGF0YVswXSxcbiAgICAgICAgICAgIGJvZHkgIDogYXJyRGF0YS5zbGljZSgxKS5tYXAoKGRhdGFSb3c6IHN0cmluZ1tdKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJEYXRhWzBdLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd1tuYW1lTWFwcGVyKGFyckRhdGFbMF1baV0pXSA9IGRhdGFSb3dbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByb3c7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGZpbGUgIDoge1xuICAgICAgICAgICAgICAgIG5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgICAgICBzaXplOiBmaWxlLnNpemUsXG4gICAgICAgICAgICAgICAgdHlwZTogZmlsZS50eXBlXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuIl19
@@ -0,0 +1,34 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/material/menu";
4
+ import * as i2 from "@angular/material/button";
5
+ import * as i3 from "@angular/material/icon";
6
+ import * as i4 from "./csv.file.download.directive";
7
+ import * as i5 from "@angular/material/tooltip";
8
+ export class CSVDownloadMenuComponent {
9
+ constructor() {
10
+ this.menuLabel = 'Download';
11
+ this.disabled = false;
12
+ }
13
+ }
14
+ CSVDownloadMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CSVDownloadMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15
+ CSVDownloadMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: CSVDownloadMenuComponent, selector: "risk-download-menu", inputs: { menuLabel: "menuLabel", menuTooltip: "menuTooltip", columns: "columns", data: "data", disabled: "disabled", filename: "filename" }, host: { properties: { "class.risk-download-menu": "true" } }, ngImport: i0, template: "<mat-menu #downloadMenu=\"matMenu\"\n [overlapTrigger]=\"false\">\n <a mat-menu-item\n [risk-csv-download]=\"data\"\n [risk-csv-download-columns]=\"columns\"\n [risk-csv-download-filename]=\"filename\"\n [risk-csv-download-crlf]=\"true\">\n As CSV file (Windows)\n </a>\n <a mat-menu-item\n [risk-csv-download]=\"data\"\n [risk-csv-download-columns]=\"columns\"\n [risk-csv-download-filename]=\"filename\">\n As CSV file (Unix)\n </a>\n</mat-menu>\n\n<button mat-button\n #menu=\"matMenuTrigger\"\n [disabled]=\"disabled\"\n [matMenuTriggerFor]=\"downloadMenu\"\n [class.risk-menu-open]=\"menu.menuOpen\"\n [matTooltip]=\"menuTooltip\">\n <mat-icon>file_download</mat-icon>\n {{ menuLabel }}\n</button>\n", styles: [":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n", ":host{display:inline-block}\n"], components: [{ type: i1.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i4.CSVFileDownloadDirective, selector: "[risk-csv-download]", inputs: ["risk-csv-download-columns", "risk-csv-download", "risk-csv-download-filename", "risk-csv-download-crlf"] }, { type: i1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i5.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CSVDownloadMenuComponent, decorators: [{
17
+ type: Component,
18
+ args: [{ selector: 'risk-download-menu', host: {
19
+ '[class.risk-download-menu]': 'true'
20
+ }, changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, template: "<mat-menu #downloadMenu=\"matMenu\"\n [overlapTrigger]=\"false\">\n <a mat-menu-item\n [risk-csv-download]=\"data\"\n [risk-csv-download-columns]=\"columns\"\n [risk-csv-download-filename]=\"filename\"\n [risk-csv-download-crlf]=\"true\">\n As CSV file (Windows)\n </a>\n <a mat-menu-item\n [risk-csv-download]=\"data\"\n [risk-csv-download-columns]=\"columns\"\n [risk-csv-download-filename]=\"filename\">\n As CSV file (Unix)\n </a>\n</mat-menu>\n\n<button mat-button\n #menu=\"matMenuTrigger\"\n [disabled]=\"disabled\"\n [matMenuTriggerFor]=\"downloadMenu\"\n [class.risk-menu-open]=\"menu.menuOpen\"\n [matTooltip]=\"menuTooltip\">\n <mat-icon>file_download</mat-icon>\n {{ menuLabel }}\n</button>\n", styles: [":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n", ":host{display:inline-block}\n"] }]
21
+ }], propDecorators: { menuLabel: [{
22
+ type: Input
23
+ }], menuTooltip: [{
24
+ type: Input
25
+ }], columns: [{
26
+ type: Input
27
+ }], data: [{
28
+ type: Input
29
+ }], disabled: [{
30
+ type: Input
31
+ }], filename: [{
32
+ type: Input
33
+ }] } });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG93bmxvYWQubWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wa2cvZGJnLXJpc2tpdC9hbmd1bGFyLWZpbGUvc3JjL2xpYi9kb3dubG9hZC5tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3BrZy9kYmctcmlza2l0L2FuZ3VsYXItZmlsZS9zcmMvbGliL2Rvd25sb2FkLm1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7QUFpQnhFLE1BQU0sT0FBTyx3QkFBd0I7SUFickM7UUFnQlcsY0FBUyxHQUFHLFVBQVUsQ0FBQztRQVl2QixhQUFRLEdBQUcsS0FBSyxDQUFDO0tBSTNCOztxSEFuQlksd0JBQXdCO3lHQUF4Qix3QkFBd0Isc1FDakJyQyx3ekJBMEJBOzJGRFRhLHdCQUF3QjtrQkFicEMsU0FBUzsrQkFDZSxvQkFBb0IsUUFNcEI7d0JBQ2pCLDRCQUE0QixFQUFFLE1BQU07cUJBQ3ZDLG1CQUNvQix1QkFBdUIsQ0FBQyxNQUFNLHVCQUM5QixLQUFLOzhCQUtuQixTQUFTO3NCQURmLEtBQUs7Z0JBSUMsV0FBVztzQkFEakIsS0FBSztnQkFJQyxPQUFPO3NCQURiLEtBQUs7Z0JBSUMsSUFBSTtzQkFEVixLQUFLO2dCQUlDLFFBQVE7c0JBRGQsS0FBSztnQkFJQyxRQUFRO3NCQURkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0NTVkV4cG9ydENvbHVtbn0gZnJvbSAnLi9maWxlLnR5cGVzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3IgICAgICAgICAgIDogJ3Jpc2stZG93bmxvYWQtbWVudScsXG4gICAgdGVtcGxhdGVVcmwgICAgICAgIDogJ2Rvd25sb2FkLm1lbnUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJscyAgICAgICAgICA6IFtcbiAgICAgICAgJy4uLy4uLy4uL2NvbXBvbmVudC5zY3NzJyxcbiAgICAgICAgJ2Rvd25sb2FkLm1lbnUuY29tcG9uZW50LnNjc3MnXG4gICAgXSxcbiAgICBob3N0ICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICdbY2xhc3Mucmlzay1kb3dubG9hZC1tZW51XSc6ICd0cnVlJ1xuICAgIH0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uICAgIDogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlXG59KVxuZXhwb3J0IGNsYXNzIENTVkRvd25sb2FkTWVudUNvbXBvbmVudCB7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtZW51TGFiZWwgPSAnRG93bmxvYWQnO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbWVudVRvb2x0aXA/OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjb2x1bW5zPzogQXJyYXk8Q1NWRXhwb3J0Q29sdW1uPHVua25vd24+PjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRhdGE/OiB1bmtub3duW10gfCBPYnNlcnZhYmxlPHVua25vd25bXT47XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZmlsZW5hbWU/OiBzdHJpbmc7XG59XG4iLCI8bWF0LW1lbnUgI2Rvd25sb2FkTWVudT1cIm1hdE1lbnVcIlxuICAgICAgICAgIFtvdmVybGFwVHJpZ2dlcl09XCJmYWxzZVwiPlxuICAgIDxhIG1hdC1tZW51LWl0ZW1cbiAgICAgICBbcmlzay1jc3YtZG93bmxvYWRdPVwiZGF0YVwiXG4gICAgICAgW3Jpc2stY3N2LWRvd25sb2FkLWNvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgICAgW3Jpc2stY3N2LWRvd25sb2FkLWZpbGVuYW1lXT1cImZpbGVuYW1lXCJcbiAgICAgICBbcmlzay1jc3YtZG93bmxvYWQtY3JsZl09XCJ0cnVlXCI+XG4gICAgICAgIEFzIENTViBmaWxlIChXaW5kb3dzKVxuICAgIDwvYT5cbiAgICA8YSBtYXQtbWVudS1pdGVtXG4gICAgICAgW3Jpc2stY3N2LWRvd25sb2FkXT1cImRhdGFcIlxuICAgICAgIFtyaXNrLWNzdi1kb3dubG9hZC1jb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgICAgIFtyaXNrLWNzdi1kb3dubG9hZC1maWxlbmFtZV09XCJmaWxlbmFtZVwiPlxuICAgICAgICBBcyBDU1YgZmlsZSAoVW5peClcbiAgICA8L2E+XG48L21hdC1tZW51PlxuXG48YnV0dG9uIG1hdC1idXR0b25cbiAgICAgICAgI21lbnU9XCJtYXRNZW51VHJpZ2dlclwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJkb3dubG9hZE1lbnVcIlxuICAgICAgICBbY2xhc3Mucmlzay1tZW51LW9wZW5dPVwibWVudS5tZW51T3BlblwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cIm1lbnVUb29sdGlwXCI+XG4gICAgPG1hdC1pY29uPmZpbGVfZG93bmxvYWQ8L21hdC1pY29uPlxuICAgIHt7IG1lbnVMYWJlbCB9fVxuPC9idXR0b24+XG4iXX0=
@@ -0,0 +1,53 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import { AbstractFileDownloadDirective } from './abstract.file.download.directive';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@dbg-riskit/angular-view";
5
+ import * as i2 from "./file.size.pipe";
6
+ import * as i3 from "@dbg-riskit/common";
7
+ export class FileDownloadDirective extends AbstractFileDownloadDirective {
8
+ constructor(elementRef, dialogService, fileSizePipe, logger) {
9
+ super(elementRef, dialogService, fileSizePipe, logger);
10
+ }
11
+ mapToFile(data) {
12
+ const filename = this.filename || 'data.txt';
13
+ if (data instanceof Blob) {
14
+ return {
15
+ content: data,
16
+ filename
17
+ };
18
+ }
19
+ if (typeof data === 'object' && 'content' in data && data.content instanceof Blob) {
20
+ return {
21
+ content: data.content,
22
+ filename: data.filename || filename
23
+ };
24
+ }
25
+ const stringData = typeof data === 'string' ? data : JSON.stringify(data);
26
+ return {
27
+ content: this.createBlob([stringData], { type: this.contentType }),
28
+ filename
29
+ };
30
+ }
31
+ }
32
+ FileDownloadDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: FileDownloadDirective, deps: [{ token: i0.ElementRef }, { token: i1.DialogService }, { token: i2.FileSizePipe }, { token: i3.Logger }], target: i0.ɵɵFactoryTarget.Directive });
33
+ FileDownloadDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.2", type: FileDownloadDirective, selector: "[risk-download]", inputs: { data: ["risk-download", "data"], contentType: ["risk-download-content-type", "contentType"], filename: ["risk-download-filename", "filename"] }, host: { listeners: { "click": "download()" }, properties: { "class.risk-download": "true" } }, usesInheritance: true, ngImport: i0 });
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: FileDownloadDirective, decorators: [{
35
+ type: Directive,
36
+ args: [{
37
+ selector: '[risk-download]',
38
+ host: {
39
+ '[class.risk-download]': 'true',
40
+ '(click)': 'download()'
41
+ }
42
+ }]
43
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.DialogService }, { type: i2.FileSizePipe }, { type: i3.Logger }]; }, propDecorators: { data: [{
44
+ type: Input,
45
+ args: ['risk-download']
46
+ }], contentType: [{
47
+ type: Input,
48
+ args: ['risk-download-content-type']
49
+ }], filename: [{
50
+ type: Input,
51
+ args: ['risk-download-filename']
52
+ }] } });
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5kb3dubG9hZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wa2cvZGJnLXJpc2tpdC9hbmd1bGFyLWZpbGUvc3JjL2xpYi9maWxlLmRvd25sb2FkLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFjLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUkzRCxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7QUFZakYsTUFBTSxPQUFPLHFCQUFzQixTQUFRLDZCQUF1RDtJQWE5RixZQUFtQixVQUFzQixFQUN0QixhQUE0QixFQUM1QixZQUEwQixFQUMxQixNQUFjO1FBQzdCLEtBQUssQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRVMsU0FBUyxDQUFDLElBQThCO1FBQzlDLE1BQU0sUUFBUSxHQUFXLElBQUksQ0FBQyxRQUFRLElBQUksVUFBVSxDQUFDO1FBQ3JELElBQUksSUFBSSxZQUFZLElBQUksRUFBRTtZQUN0QixPQUFPO2dCQUNILE9BQU8sRUFBRSxJQUFJO2dCQUNiLFFBQVE7YUFDWCxDQUFDO1NBQ0w7UUFFRCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxTQUFTLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLFlBQVksSUFBSSxFQUFFO1lBQy9FLE9BQU87Z0JBQ0gsT0FBTyxFQUFHLElBQUksQ0FBQyxPQUFPO2dCQUN0QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRO2FBQ3RDLENBQUM7U0FDTDtRQUVELE1BQU0sVUFBVSxHQUFHLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFFLE9BQU87WUFDSCxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUMsQ0FBQztZQUNoRSxRQUFRO1NBQ1gsQ0FBQztJQUNOLENBQUM7O2tIQXpDUSxxQkFBcUI7c0dBQXJCLHFCQUFxQjsyRkFBckIscUJBQXFCO2tCQVBqQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLElBQUksRUFBTTt3QkFDTix1QkFBdUIsRUFBRSxNQUFNO3dCQUMvQixTQUFTLEVBQWdCLFlBQVk7cUJBQ3hDO2lCQUNKOzZLQUlVLElBQUk7c0JBRFYsS0FBSzt1QkFBQyxlQUFlO2dCQU1mLFdBQVc7c0JBRGpCLEtBQUs7dUJBQUMsNEJBQTRCO2dCQUk1QixRQUFRO3NCQURkLEtBQUs7dUJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSAnQGRiZy1yaXNraXQvYW5ndWxhci12aWV3JztcbmltcG9ydCB7RmlsZVdpdGhDb250ZW50LCBMb2dnZXIsIE9ic2VydmFibGVXaXRoUHJvZ3Jlc3N9IGZyb20gJ0BkYmctcmlza2l0L2NvbW1vbic7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtBYnN0cmFjdEZpbGVEb3dubG9hZERpcmVjdGl2ZX0gZnJvbSAnLi9hYnN0cmFjdC5maWxlLmRvd25sb2FkLmRpcmVjdGl2ZSc7XG5pbXBvcnQge0ZpbGVTaXplUGlwZX0gZnJvbSAnLi9maWxlLnNpemUucGlwZSc7XG5cbmV4cG9ydCB0eXBlIFN1cHBvcnRlZERvd25sb2FkRm9ybWF0cyA9IEZpbGVXaXRoQ29udGVudCB8IEJsb2IgfCBvYmplY3QgfCBzdHJpbmc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3Jpc2stZG93bmxvYWRdJyxcbiAgICBob3N0ICAgIDoge1xuICAgICAgICAnW2NsYXNzLnJpc2stZG93bmxvYWRdJzogJ3RydWUnLFxuICAgICAgICAnKGNsaWNrKScgICAgICAgICAgICAgIDogJ2Rvd25sb2FkKCknXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBGaWxlRG93bmxvYWREaXJlY3RpdmUgZXh0ZW5kcyBBYnN0cmFjdEZpbGVEb3dubG9hZERpcmVjdGl2ZTxTdXBwb3J0ZWREb3dubG9hZEZvcm1hdHM+IHtcblxuICAgIEBJbnB1dCgncmlzay1kb3dubG9hZCcpXG4gICAgcHVibGljIGRhdGE/OiBPYnNlcnZhYmxlV2l0aFByb2dyZXNzPFN1cHBvcnRlZERvd25sb2FkRm9ybWF0cz5cbiAgICAgICAgfCBPYnNlcnZhYmxlPFN1cHBvcnRlZERvd25sb2FkRm9ybWF0cz5cbiAgICAgICAgfCBTdXBwb3J0ZWREb3dubG9hZEZvcm1hdHM7XG5cbiAgICBASW5wdXQoJ3Jpc2stZG93bmxvYWQtY29udGVudC10eXBlJylcbiAgICBwdWJsaWMgY29udGVudFR5cGU/OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoJ3Jpc2stZG93bmxvYWQtZmlsZW5hbWUnKVxuICAgIHB1YmxpYyBmaWxlbmFtZT86IHN0cmluZztcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICBmaWxlU2l6ZVBpcGU6IEZpbGVTaXplUGlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyOiBMb2dnZXIpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudFJlZiwgZGlhbG9nU2VydmljZSwgZmlsZVNpemVQaXBlLCBsb2dnZXIpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBtYXBUb0ZpbGUoZGF0YTogU3VwcG9ydGVkRG93bmxvYWRGb3JtYXRzKTogRmlsZVdpdGhDb250ZW50IHtcbiAgICAgICAgY29uc3QgZmlsZW5hbWU6IHN0cmluZyA9IHRoaXMuZmlsZW5hbWUgfHwgJ2RhdGEudHh0JztcbiAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGRhdGEsXG4gICAgICAgICAgICAgICAgZmlsZW5hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICdjb250ZW50JyBpbiBkYXRhICYmIGRhdGEuY29udGVudCBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29udGVudCA6IGRhdGEuY29udGVudCxcbiAgICAgICAgICAgICAgICBmaWxlbmFtZTogZGF0YS5maWxlbmFtZSB8fCBmaWxlbmFtZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0cmluZ0RhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycgPyBkYXRhIDogSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiB0aGlzLmNyZWF0ZUJsb2IoW3N0cmluZ0RhdGFdLCB7dHlwZTogdGhpcy5jb250ZW50VHlwZX0pLFxuICAgICAgICAgICAgZmlsZW5hbWVcbiAgICAgICAgfTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,78 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { NgModule } from '@angular/core';
3
+ import { LoggingModule } from '@dbg-riskit/angular-logging';
4
+ import { CommonViewModule } from '@dbg-riskit/angular-view';
5
+ import { BinaryFileUploadComponent } from './binary.file.upload.component';
6
+ import { BinaryFileUploadService } from './binary.file.upload.service';
7
+ import { CSVFileDownloadDirective } from './csv.file.download.directive';
8
+ import { CSVFileUploadComponent } from './csv.file.upload.component';
9
+ import { CSVFileUploadService } from './csv.file.upload.service';
10
+ import { CSVDownloadMenuComponent } from './download.menu.component';
11
+ import { FileDownloadDirective } from './file.download.directive';
12
+ import { FileSizePipe } from './file.size.pipe';
13
+ import { TextFileUploadComponent } from './text.file.upload.component';
14
+ import { TextFileUploadService } from './text.file.upload.service';
15
+ import * as i0 from "@angular/core";
16
+ export class FileModule {
17
+ }
18
+ FileModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: FileModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
19
+ FileModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: FileModule, declarations: [BinaryFileUploadComponent,
20
+ CSVFileUploadComponent,
21
+ TextFileUploadComponent,
22
+ CSVFileDownloadDirective,
23
+ CSVDownloadMenuComponent,
24
+ FileDownloadDirective,
25
+ FileSizePipe], imports: [CommonModule,
26
+ CommonViewModule,
27
+ LoggingModule], exports: [BinaryFileUploadComponent,
28
+ CSVFileUploadComponent,
29
+ TextFileUploadComponent,
30
+ CSVFileDownloadDirective,
31
+ CSVDownloadMenuComponent,
32
+ FileDownloadDirective,
33
+ FileSizePipe] });
34
+ FileModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: FileModule, providers: [
35
+ BinaryFileUploadService,
36
+ CSVFileUploadService,
37
+ TextFileUploadService,
38
+ FileSizePipe
39
+ ], imports: [[
40
+ CommonModule,
41
+ CommonViewModule,
42
+ LoggingModule
43
+ ]] });
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: FileModule, decorators: [{
45
+ type: NgModule,
46
+ args: [{
47
+ imports: [
48
+ CommonModule,
49
+ CommonViewModule,
50
+ LoggingModule
51
+ ],
52
+ declarations: [
53
+ BinaryFileUploadComponent,
54
+ CSVFileUploadComponent,
55
+ TextFileUploadComponent,
56
+ CSVFileDownloadDirective,
57
+ CSVDownloadMenuComponent,
58
+ FileDownloadDirective,
59
+ FileSizePipe
60
+ ],
61
+ exports: [
62
+ BinaryFileUploadComponent,
63
+ CSVFileUploadComponent,
64
+ TextFileUploadComponent,
65
+ CSVFileDownloadDirective,
66
+ CSVDownloadMenuComponent,
67
+ FileDownloadDirective,
68
+ FileSizePipe
69
+ ],
70
+ providers: [
71
+ BinaryFileUploadService,
72
+ CSVFileUploadService,
73
+ TextFileUploadService,
74
+ FileSizePipe
75
+ ]
76
+ }]
77
+ }] });
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wa2cvZGJnLXJpc2tpdC9hbmd1bGFyLWZpbGUvc3JjL2xpYi9maWxlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDekUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDdkUsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDaEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ3JFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDRCQUE0QixDQUFDOztBQWlDakUsTUFBTSxPQUFPLFVBQVU7O3VHQUFWLFVBQVU7d0dBQVYsVUFBVSxpQkF4QmYseUJBQXlCO1FBQ3pCLHNCQUFzQjtRQUN0Qix1QkFBdUI7UUFDdkIsd0JBQXdCO1FBQ3hCLHdCQUF3QjtRQUN4QixxQkFBcUI7UUFDckIsWUFBWSxhQVhaLFlBQVk7UUFDWixnQkFBZ0I7UUFDaEIsYUFBYSxhQVliLHlCQUF5QjtRQUN6QixzQkFBc0I7UUFDdEIsdUJBQXVCO1FBQ3ZCLHdCQUF3QjtRQUN4Qix3QkFBd0I7UUFDeEIscUJBQXFCO1FBQ3JCLFlBQVk7d0dBU1AsVUFBVSxhQVBMO1FBQ1YsdUJBQXVCO1FBQ3ZCLG9CQUFvQjtRQUNwQixxQkFBcUI7UUFDckIsWUFBWTtLQUNmLFlBNUJhO1lBQ1YsWUFBWTtZQUNaLGdCQUFnQjtZQUNoQixhQUFhO1NBQ2hCOzJGQTBCUSxVQUFVO2tCQS9CdEIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQU87d0JBQ1YsWUFBWTt3QkFDWixnQkFBZ0I7d0JBQ2hCLGFBQWE7cUJBQ2hCO29CQUNELFlBQVksRUFBRTt3QkFDVix5QkFBeUI7d0JBQ3pCLHNCQUFzQjt3QkFDdEIsdUJBQXVCO3dCQUN2Qix3QkFBd0I7d0JBQ3hCLHdCQUF3Qjt3QkFDeEIscUJBQXFCO3dCQUNyQixZQUFZO3FCQUNmO29CQUNELE9BQU8sRUFBTzt3QkFDVix5QkFBeUI7d0JBQ3pCLHNCQUFzQjt3QkFDdEIsdUJBQXVCO3dCQUN2Qix3QkFBd0I7d0JBQ3hCLHdCQUF3Qjt3QkFDeEIscUJBQXFCO3dCQUNyQixZQUFZO3FCQUNmO29CQUNELFNBQVMsRUFBSzt3QkFDVix1QkFBdUI7d0JBQ3ZCLG9CQUFvQjt3QkFDcEIscUJBQXFCO3dCQUNyQixZQUFZO3FCQUNmO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TG9nZ2luZ01vZHVsZX0gZnJvbSAnQGRiZy1yaXNraXQvYW5ndWxhci1sb2dnaW5nJztcbmltcG9ydCB7Q29tbW9uVmlld01vZHVsZX0gZnJvbSAnQGRiZy1yaXNraXQvYW5ndWxhci12aWV3JztcbmltcG9ydCB7QmluYXJ5RmlsZVVwbG9hZENvbXBvbmVudH0gZnJvbSAnLi9iaW5hcnkuZmlsZS51cGxvYWQuY29tcG9uZW50JztcbmltcG9ydCB7QmluYXJ5RmlsZVVwbG9hZFNlcnZpY2V9IGZyb20gJy4vYmluYXJ5LmZpbGUudXBsb2FkLnNlcnZpY2UnO1xuaW1wb3J0IHtDU1ZGaWxlRG93bmxvYWREaXJlY3RpdmV9IGZyb20gJy4vY3N2LmZpbGUuZG93bmxvYWQuZGlyZWN0aXZlJztcbmltcG9ydCB7Q1NWRmlsZVVwbG9hZENvbXBvbmVudH0gZnJvbSAnLi9jc3YuZmlsZS51cGxvYWQuY29tcG9uZW50JztcbmltcG9ydCB7Q1NWRmlsZVVwbG9hZFNlcnZpY2V9IGZyb20gJy4vY3N2LmZpbGUudXBsb2FkLnNlcnZpY2UnO1xuaW1wb3J0IHtDU1ZEb3dubG9hZE1lbnVDb21wb25lbnR9IGZyb20gJy4vZG93bmxvYWQubWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHtGaWxlRG93bmxvYWREaXJlY3RpdmV9IGZyb20gJy4vZmlsZS5kb3dubG9hZC5kaXJlY3RpdmUnO1xuaW1wb3J0IHtGaWxlU2l6ZVBpcGV9IGZyb20gJy4vZmlsZS5zaXplLnBpcGUnO1xuaW1wb3J0IHtUZXh0RmlsZVVwbG9hZENvbXBvbmVudH0gZnJvbSAnLi90ZXh0LmZpbGUudXBsb2FkLmNvbXBvbmVudCc7XG5pbXBvcnQge1RleHRGaWxlVXBsb2FkU2VydmljZX0gZnJvbSAnLi90ZXh0LmZpbGUudXBsb2FkLnNlcnZpY2UnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHMgICAgIDogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIENvbW1vblZpZXdNb2R1bGUsXG4gICAgICAgIExvZ2dpbmdNb2R1bGVcbiAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICBCaW5hcnlGaWxlVXBsb2FkQ29tcG9uZW50LFxuICAgICAgICBDU1ZGaWxlVXBsb2FkQ29tcG9uZW50LFxuICAgICAgICBUZXh0RmlsZVVwbG9hZENvbXBvbmVudCxcbiAgICAgICAgQ1NWRmlsZURvd25sb2FkRGlyZWN0aXZlLFxuICAgICAgICBDU1ZEb3dubG9hZE1lbnVDb21wb25lbnQsXG4gICAgICAgIEZpbGVEb3dubG9hZERpcmVjdGl2ZSxcbiAgICAgICAgRmlsZVNpemVQaXBlXG4gICAgXSxcbiAgICBleHBvcnRzICAgICA6IFtcbiAgICAgICAgQmluYXJ5RmlsZVVwbG9hZENvbXBvbmVudCxcbiAgICAgICAgQ1NWRmlsZVVwbG9hZENvbXBvbmVudCxcbiAgICAgICAgVGV4dEZpbGVVcGxvYWRDb21wb25lbnQsXG4gICAgICAgIENTVkZpbGVEb3dubG9hZERpcmVjdGl2ZSxcbiAgICAgICAgQ1NWRG93bmxvYWRNZW51Q29tcG9uZW50LFxuICAgICAgICBGaWxlRG93bmxvYWREaXJlY3RpdmUsXG4gICAgICAgIEZpbGVTaXplUGlwZVxuICAgIF0sXG4gICAgcHJvdmlkZXJzICAgOiBbXG4gICAgICAgIEJpbmFyeUZpbGVVcGxvYWRTZXJ2aWNlLFxuICAgICAgICBDU1ZGaWxlVXBsb2FkU2VydmljZSxcbiAgICAgICAgVGV4dEZpbGVVcGxvYWRTZXJ2aWNlLFxuICAgICAgICBGaWxlU2l6ZVBpcGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEZpbGVNb2R1bGUge1xufVxuIl19
@@ -0,0 +1,34 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ export class FileSizePipe {
5
+ constructor(decimalPipe) {
6
+ this.decimalPipe = decimalPipe;
7
+ this.base = 1024;
8
+ this.powerSuffixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];
9
+ }
10
+ transform(value) {
11
+ if (value == null) {
12
+ return '';
13
+ }
14
+ if (typeof value === 'string') {
15
+ value = parseFloat(value);
16
+ }
17
+ let divider = 1;
18
+ let power = 0;
19
+ while (value / divider > this.base && power < this.powerSuffixes.length - 1) {
20
+ divider *= this.base;
21
+ power += 1;
22
+ }
23
+ const formatted = this.decimalPipe.transform(value / divider, '1.2-2') || '';
24
+ const suffix = this.powerSuffixes[power];
25
+ return suffix ? `${formatted}${suffix}` : formatted;
26
+ }
27
+ }
28
+ FileSizePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: FileSizePipe, deps: [{ token: i1.DecimalPipe }], target: i0.ɵɵFactoryTarget.Pipe });
29
+ FileSizePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: FileSizePipe, name: "riskFileSize" });
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: FileSizePipe, decorators: [{
31
+ type: Pipe,
32
+ args: [{ name: 'riskFileSize' }]
33
+ }], ctorParameters: function () { return [{ type: i1.DecimalPipe }]; } });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5zaXplLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wa2cvZGJnLXJpc2tpdC9hbmd1bGFyLWZpbGUvc3JjL2xpYi9maWxlLnNpemUucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFlQSxPQUFPLEVBQUMsSUFBSSxFQUFnQixNQUFNLGVBQWUsQ0FBQzs7O0FBSWxELE1BQU0sT0FBTyxZQUFZO0lBSXJCLFlBQW9DLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBSDNDLFNBQUksR0FBRyxJQUFJLENBQUM7UUFDWixrQkFBYSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUdyRSxDQUFDO0lBRU0sU0FBUyxDQUFDLEtBQTZCO1FBQzFDLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtZQUNmLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUMzQixLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzdCO1FBRUQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUVkLE9BQU8sS0FBSyxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDekUsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDckIsS0FBSyxJQUFJLENBQUMsQ0FBQztTQUNkO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDN0UsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN4RCxDQUFDOzt5R0EzQlEsWUFBWTt1R0FBWixZQUFZOzJGQUFaLFlBQVk7a0JBRHhCLElBQUk7bUJBQUMsRUFBQyxJQUFJLEVBQUUsY0FBYyxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTcgVGhlIEt1YmVybmV0ZXMgQXV0aG9ycy5cbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cbmltcG9ydCB7RGVjaW1hbFBpcGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1BpcGUsIFBpcGVUcmFuc2Zvcm19IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNYXliZX0gZnJvbSAnQGRiZy1yaXNraXQvY29tbW9uJztcblxuQFBpcGUoe25hbWU6ICdyaXNrRmlsZVNpemUnfSlcbmV4cG9ydCBjbGFzcyBGaWxlU2l6ZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJhc2UgPSAxMDI0O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcG93ZXJTdWZmaXhlcyA9IFsnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQiddO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZGVjaW1hbFBpcGU6IERlY2ltYWxQaXBlKSB7XG4gICAgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybSh2YWx1ZTogTWF5YmU8bnVtYmVyIHwgc3RyaW5nPik6IHN0cmluZyB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBkaXZpZGVyID0gMTtcbiAgICAgICAgbGV0IHBvd2VyID0gMDtcblxuICAgICAgICB3aGlsZSAodmFsdWUgLyBkaXZpZGVyID4gdGhpcy5iYXNlICYmIHBvd2VyIDwgdGhpcy5wb3dlclN1ZmZpeGVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIGRpdmlkZXIgKj0gdGhpcy5iYXNlO1xuICAgICAgICAgICAgcG93ZXIgKz0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IHRoaXMuZGVjaW1hbFBpcGUudHJhbnNmb3JtKHZhbHVlIC8gZGl2aWRlciwgJzEuMi0yJykgfHwgJyc7XG4gICAgICAgIGNvbnN0IHN1ZmZpeCA9IHRoaXMucG93ZXJTdWZmaXhlc1twb3dlcl07XG4gICAgICAgIHJldHVybiBzdWZmaXggPyBgJHtmb3JtYXR0ZWR9JHtzdWZmaXh9YCA6IGZvcm1hdHRlZDtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,26 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { AbstractFileUploadComponent } from './abstract.file.upload.component';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./text.file.upload.service";
5
+ import * as i2 from "@angular/material/button";
6
+ import * as i3 from "@angular/material/icon";
7
+ import * as i4 from "@angular/common";
8
+ export class TextFileUploadComponent extends AbstractFileUploadComponent {
9
+ constructor(fileUploadService, renderer) {
10
+ super(renderer);
11
+ this.fileUploadService = fileUploadService;
12
+ }
13
+ readFiles(fileList) {
14
+ return this.fileUploadService
15
+ .readFiles(fileList);
16
+ }
17
+ }
18
+ TextFileUploadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: TextFileUploadComponent, deps: [{ token: i1.TextFileUploadService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
19
+ TextFileUploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: TextFileUploadComponent, selector: "risk-text-file-upload", host: { properties: { "class.risk-text-file-upload": "true" } }, usesInheritance: true, ngImport: i0, template: "<a *ngIf=\"raised; else notRaised\"\n mat-raised-button\n [disabled]=\"disabled\"\n [color]=\"color\"\n (mousemove)=\"move($event)\">\n <mat-icon *ngIf=\"icon\">{{icon}}</mat-icon>\n {{label}}\n <div #wrapper\n class=\"risk-file-upload-input-wrapper\">\n <input *ngIf=\"!fileInputHidden\" type=\"file\"\n id=\"fileInput\"\n #fileInput\n [multiple]=\"multiple\"\n [disabled]=\"disabled\"\n title=\"\"\n (change)=\"handleFiles($event.target.files)\"\n [accept]=\"accept\">\n </div>\n</a>\n<ng-template #notRaised>\n <a mat-button\n [disabled]=\"disabled\"\n [color]=\"color\"\n (mousemove)=\"move($event)\">\n <mat-icon *ngIf=\"icon\">{{icon}}</mat-icon>\n {{label}}\n <div #wrapper\n class=\"risk-file-upload-input-wrapper\">\n <input *ngIf=\"!fileInputHidden\" type=\"file\"\n id=\"fileInput\"\n #fileInput\n [multiple]=\"multiple\"\n [disabled]=\"disabled\"\n title=\"\"\n (change)=\"handleFiles($event.target.files)\"\n [accept]=\"accept\">\n </div>\n </a>\n</ng-template>\n", styles: [":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n", ":host{display:inline-block}a{overflow:hidden}a .risk-file-upload-input-wrapper{width:30px;height:36px;margin-left:-15px;top:0;left:0;position:absolute;overflow:hidden;cursor:pointer;z-index:1}a .risk-file-upload-input-wrapper input{position:absolute;display:block;cursor:pointer;height:36px;font-size:36px;top:0;right:0;outline:0 none;opacity:0}\n"], components: [{ type: i2.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: TextFileUploadComponent, decorators: [{
21
+ type: Component,
22
+ args: [{ selector: 'risk-text-file-upload', host: {
23
+ '[class.risk-text-file-upload]': 'true'
24
+ }, changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, template: "<a *ngIf=\"raised; else notRaised\"\n mat-raised-button\n [disabled]=\"disabled\"\n [color]=\"color\"\n (mousemove)=\"move($event)\">\n <mat-icon *ngIf=\"icon\">{{icon}}</mat-icon>\n {{label}}\n <div #wrapper\n class=\"risk-file-upload-input-wrapper\">\n <input *ngIf=\"!fileInputHidden\" type=\"file\"\n id=\"fileInput\"\n #fileInput\n [multiple]=\"multiple\"\n [disabled]=\"disabled\"\n title=\"\"\n (change)=\"handleFiles($event.target.files)\"\n [accept]=\"accept\">\n </div>\n</a>\n<ng-template #notRaised>\n <a mat-button\n [disabled]=\"disabled\"\n [color]=\"color\"\n (mousemove)=\"move($event)\">\n <mat-icon *ngIf=\"icon\">{{icon}}</mat-icon>\n {{label}}\n <div #wrapper\n class=\"risk-file-upload-input-wrapper\">\n <input *ngIf=\"!fileInputHidden\" type=\"file\"\n id=\"fileInput\"\n #fileInput\n [multiple]=\"multiple\"\n [disabled]=\"disabled\"\n title=\"\"\n (change)=\"handleFiles($event.target.files)\"\n [accept]=\"accept\">\n </div>\n </a>\n</ng-template>\n", styles: [":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n", ":host{display:inline-block}a{overflow:hidden}a .risk-file-upload-input-wrapper{width:30px;height:36px;margin-left:-15px;top:0;left:0;position:absolute;overflow:hidden;cursor:pointer;z-index:1}a .risk-file-upload-input-wrapper input{position:absolute;display:block;cursor:pointer;height:36px;font-size:36px;top:0;right:0;outline:0 none;opacity:0}\n"] }]
25
+ }], ctorParameters: function () { return [{ type: i1.TextFileUploadService }, { type: i0.Renderer2 }]; } });
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5maWxlLnVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wa2cvZGJnLXJpc2tpdC9hbmd1bGFyLWZpbGUvc3JjL2xpYi90ZXh0LmZpbGUudXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3BrZy9kYmctcmlza2l0L2FuZ3VsYXItZmlsZS9zcmMvbGliL2Fic3RyYWN0LmZpbGUudXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQVksTUFBTSxlQUFlLENBQUM7QUFFNUUsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7Ozs7OztBQWlCN0UsTUFBTSxPQUFPLHVCQUF3QixTQUFRLDJCQUFxQztJQUU5RSxZQUFvQyxpQkFBd0MsRUFDekQsUUFBbUI7UUFDbEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRmdCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBdUI7SUFHNUUsQ0FBQztJQUVTLFNBQVMsQ0FBQyxRQUFrQjtRQUNsQyxPQUFPLElBQUksQ0FBQyxpQkFBaUI7YUFDeEIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdCLENBQUM7O29IQVZRLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLHFKQ25CcEMsZ3lDQXVDQTsyRkRwQmEsdUJBQXVCO2tCQWJuQyxTQUFTOytCQUNlLHVCQUF1QixRQU12Qjt3QkFDakIsK0JBQStCLEVBQUUsTUFBTTtxQkFDMUMsbUJBQ29CLHVCQUF1QixDQUFDLE1BQU0sdUJBQzlCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIFJlbmRlcmVyMn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtBYnN0cmFjdEZpbGVVcGxvYWRDb21wb25lbnR9IGZyb20gJy4vYWJzdHJhY3QuZmlsZS51cGxvYWQuY29tcG9uZW50JztcbmltcG9ydCB7VGV4dEZpbGV9IGZyb20gJy4vZmlsZS50eXBlcyc7XG5pbXBvcnQge1RleHRGaWxlVXBsb2FkU2VydmljZX0gZnJvbSAnLi90ZXh0LmZpbGUudXBsb2FkLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvciAgICAgICAgICAgOiAncmlzay10ZXh0LWZpbGUtdXBsb2FkJyxcbiAgICB0ZW1wbGF0ZVVybCAgICAgICAgOiAnYWJzdHJhY3QuZmlsZS51cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJscyAgICAgICAgICA6IFtcbiAgICAgICAgJy4uLy4uLy4uL2NvbXBvbmVudC5zY3NzJyxcbiAgICAgICAgJ2Fic3RyYWN0LmZpbGUudXBsb2FkLmNvbXBvbmVudC5zY3NzJ1xuICAgIF0sXG4gICAgaG9zdCAgICAgICAgICAgICAgIDoge1xuICAgICAgICAnW2NsYXNzLnJpc2stdGV4dC1maWxlLXVwbG9hZF0nOiAndHJ1ZSdcbiAgICB9LFxuICAgIGNoYW5nZURldGVjdGlvbiAgICA6IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZVxufSlcbmV4cG9ydCBjbGFzcyBUZXh0RmlsZVVwbG9hZENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0RmlsZVVwbG9hZENvbXBvbmVudDxUZXh0RmlsZT4ge1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZmlsZVVwbG9hZFNlcnZpY2U6IFRleHRGaWxlVXBsb2FkU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXI6IFJlbmRlcmVyMikge1xuICAgICAgICBzdXBlcihyZW5kZXJlcik7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlYWRGaWxlcyhmaWxlTGlzdDogRmlsZUxpc3QpOiBPYnNlcnZhYmxlPFRleHRGaWxlW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsZVVwbG9hZFNlcnZpY2VcbiAgICAgICAgICAgIC5yZWFkRmlsZXMoZmlsZUxpc3QpO1xuICAgIH1cbn1cbiIsIjxhICpuZ0lmPVwicmFpc2VkOyBlbHNlIG5vdFJhaXNlZFwiXG4gICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgIFtjb2xvcl09XCJjb2xvclwiXG4gICAobW91c2Vtb3ZlKT1cIm1vdmUoJGV2ZW50KVwiPlxuICAgIDxtYXQtaWNvbiAqbmdJZj1cImljb25cIj57e2ljb259fTwvbWF0LWljb24+XG4gICAge3tsYWJlbH19XG4gICAgPGRpdiAjd3JhcHBlclxuICAgICAgICAgY2xhc3M9XCJyaXNrLWZpbGUtdXBsb2FkLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgPGlucHV0ICpuZ0lmPVwiIWZpbGVJbnB1dEhpZGRlblwiIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgIGlkPVwiZmlsZUlucHV0XCJcbiAgICAgICAgICAgICAgICNmaWxlSW5wdXRcbiAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgdGl0bGU9XCJcIlxuICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVGaWxlcygkZXZlbnQudGFyZ2V0LmZpbGVzKVwiXG4gICAgICAgICAgICAgICBbYWNjZXB0XT1cImFjY2VwdFwiPlxuICAgIDwvZGl2PlxuPC9hPlxuPG5nLXRlbXBsYXRlICNub3RSYWlzZWQ+XG4gICAgPGEgbWF0LWJ1dHRvblxuICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgW2NvbG9yXT1cImNvbG9yXCJcbiAgICAgICAobW91c2Vtb3ZlKT1cIm1vdmUoJGV2ZW50KVwiPlxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJpY29uXCI+e3tpY29ufX08L21hdC1pY29uPlxuICAgICAgICB7e2xhYmVsfX1cbiAgICAgICAgPGRpdiAjd3JhcHBlclxuICAgICAgICAgICAgIGNsYXNzPVwicmlzay1maWxlLXVwbG9hZC1pbnB1dC13cmFwcGVyXCI+XG4gICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCIhZmlsZUlucHV0SGlkZGVuXCIgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgICAgIGlkPVwiZmlsZUlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAjZmlsZUlucHV0XG4gICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiXCJcbiAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImhhbmRsZUZpbGVzKCRldmVudC50YXJnZXQuZmlsZXMpXCJcbiAgICAgICAgICAgICAgICAgICBbYWNjZXB0XT1cImFjY2VwdFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2E+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -0,0 +1,41 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { toString } from '@dbg-riskit/common';
3
+ import { forkJoin, Observable } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ export class TextFileUploadService {
6
+ readFiles(files) {
7
+ const fileOservables = [];
8
+ for (const file of Array.from(files)) {
9
+ fileOservables.push(new Observable((observer) => {
10
+ setTimeout(() => {
11
+ try {
12
+ const reader = new FileReader();
13
+ // Handle errors load
14
+ reader.onload = (event) => {
15
+ observer.next({
16
+ body: toString(event.target.result),
17
+ file
18
+ });
19
+ observer.complete();
20
+ };
21
+ reader.onerror = (event) => {
22
+ observer.error(event.target.error);
23
+ };
24
+ // Read file into memory as UTF-8
25
+ reader.readAsText(file);
26
+ }
27
+ catch (err) {
28
+ observer.error(err);
29
+ }
30
+ });
31
+ }));
32
+ }
33
+ return forkJoin(fileOservables);
34
+ }
35
+ }
36
+ TextFileUploadService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: TextFileUploadService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
37
+ TextFileUploadService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: TextFileUploadService });
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: TextFileUploadService, decorators: [{
39
+ type: Injectable
40
+ }] });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5maWxlLnVwbG9hZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGtnL2RiZy1yaXNraXQvYW5ndWxhci1maWxlL3NyYy9saWIvdGV4dC5maWxlLnVwbG9hZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxRQUFRLEVBQUUsVUFBVSxFQUFhLE1BQU0sTUFBTSxDQUFDOztBQUl0RCxNQUFNLE9BQU8scUJBQXFCO0lBRXZCLFNBQVMsQ0FBQyxLQUFlO1FBQzVCLE1BQU0sY0FBYyxHQUFnQyxFQUFFLENBQUM7UUFDdkQsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2xDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUE4QixFQUFFLEVBQUU7Z0JBQ2xFLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ1osSUFBSTt3QkFDQSxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO3dCQUNoQyxxQkFBcUI7d0JBQ3JCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFvQixFQUFFLEVBQUU7NEJBQ3JDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0NBQ1YsSUFBSSxFQUFFLFFBQVEsQ0FBRSxLQUFLLENBQUMsTUFBcUIsQ0FBQyxNQUFNLENBQUM7Z0NBQ25ELElBQUk7NkJBQ1AsQ0FBQyxDQUFDOzRCQUNILFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDeEIsQ0FBQyxDQUFDO3dCQUNGLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFvQixFQUFFLEVBQUU7NEJBQ3RDLFFBQVEsQ0FBQyxLQUFLLENBQUUsS0FBSyxDQUFDLE1BQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ3ZELENBQUMsQ0FBQzt3QkFDRixpQ0FBaUM7d0JBQ2pDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQzNCO29CQUFDLE9BQU8sR0FBRyxFQUFFO3dCQUNWLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQ3ZCO2dCQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNQO1FBQ0QsT0FBTyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEMsQ0FBQzs7a0hBN0JRLHFCQUFxQjtzSEFBckIscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0b1N0cmluZ30gZnJvbSAnQGRiZy1yaXNraXQvY29tbW9uJztcbmltcG9ydCB7Zm9ya0pvaW4sIE9ic2VydmFibGUsIFN1YnNjcmliZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtUZXh0RmlsZX0gZnJvbSAnLi9maWxlLnR5cGVzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRleHRGaWxlVXBsb2FkU2VydmljZSB7XG5cbiAgICBwdWJsaWMgcmVhZEZpbGVzKGZpbGVzOiBGaWxlTGlzdCk6IE9ic2VydmFibGU8VGV4dEZpbGVbXT4ge1xuICAgICAgICBjb25zdCBmaWxlT3NlcnZhYmxlczogQXJyYXk8T2JzZXJ2YWJsZTxUZXh0RmlsZT4+ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBBcnJheS5mcm9tKGZpbGVzKSkge1xuICAgICAgICAgICAgZmlsZU9zZXJ2YWJsZXMucHVzaChuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXI6IFN1YnNjcmliZXI8VGV4dEZpbGU+KSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGVycm9ycyBsb2FkXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkID0gKGV2ZW50OiBQcm9ncmVzc0V2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHRvU3RyaW5nKChldmVudC50YXJnZXQgYXMgRmlsZVJlYWRlcikucmVzdWx0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoZXZlbnQ6IFByb2dyZXNzRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcigoZXZlbnQudGFyZ2V0IGFzIEZpbGVSZWFkZXIpLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWFkIGZpbGUgaW50byBtZW1vcnkgYXMgVVRGLThcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ya0pvaW4oZmlsZU9zZXJ2YWJsZXMpO1xuICAgIH1cbn1cbiJdfQ==