brainloper-ui 18.0.1 → 20.0.0

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 (105) hide show
  1. package/fesm2022/brainloper-ui.mjs +124 -115
  2. package/fesm2022/brainloper-ui.mjs.map +1 -1
  3. package/index.d.ts +896 -5
  4. package/package.json +16 -18
  5. package/esm2022/brainloper-ui.mjs +0 -5
  6. package/esm2022/public_api.mjs +0 -58
  7. package/esm2022/src/app/modules/brainloper-ui/brainloper-ui.module.mjs +0 -303
  8. package/esm2022/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.mjs +0 -30
  9. package/esm2022/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.mjs +0 -23
  10. package/esm2022/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.mjs +0 -83
  11. package/esm2022/src/app/modules/brainloper-ui/components/carousel/carousel.component.mjs +0 -42
  12. package/esm2022/src/app/modules/brainloper-ui/components/combos/combos.component.mjs +0 -183
  13. package/esm2022/src/app/modules/brainloper-ui/components/data-table/data-table.component.mjs +0 -747
  14. package/esm2022/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.mjs +0 -120
  15. package/esm2022/src/app/modules/brainloper-ui/components/file-input/file-input.component.mjs +0 -205
  16. package/esm2022/src/app/modules/brainloper-ui/components/file-input/imagenes/doc.mjs +0 -2
  17. package/esm2022/src/app/modules/brainloper-ui/components/file-input/imagenes/fondoTransparente.mjs +0 -2
  18. package/esm2022/src/app/modules/brainloper-ui/components/file-input/imagenes/pdf.mjs +0 -2
  19. package/esm2022/src/app/modules/brainloper-ui/components/filters/filters.component.mjs +0 -227
  20. package/esm2022/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.mjs +0 -89
  21. package/esm2022/src/app/modules/brainloper-ui/components/report/template-ot/template-ot.component.mjs +0 -86
  22. package/esm2022/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.mjs +0 -117
  23. package/esm2022/src/app/modules/directives/carousel-item.directive.mjs +0 -20
  24. package/esm2022/src/app/modules/interfaces/buttons/button-icon.mjs +0 -2
  25. package/esm2022/src/app/modules/interfaces/buttons/button-lavel-edit.mjs +0 -2
  26. package/esm2022/src/app/modules/interfaces/combos/combos-configuration.mjs +0 -2
  27. package/esm2022/src/app/modules/interfaces/data-table/params.mjs +0 -2
  28. package/esm2022/src/app/modules/interfaces/data-table/rules.mjs +0 -2
  29. package/esm2022/src/app/modules/interfaces/data-table/table-columns.mjs +0 -2
  30. package/esm2022/src/app/modules/interfaces/data-table/table-configuration.mjs +0 -2
  31. package/esm2022/src/app/modules/interfaces/enum/enumActions.mjs +0 -8
  32. package/esm2022/src/app/modules/interfaces/enum/enumRules.mjs +0 -8
  33. package/esm2022/src/app/modules/interfaces/enum/httpResponseType.mjs +0 -8
  34. package/esm2022/src/app/modules/interfaces/file-forms-service/file-forms-params.mjs +0 -2
  35. package/esm2022/src/app/modules/interfaces/file-forms-service/file-input-params.mjs +0 -2
  36. package/esm2022/src/app/modules/interfaces/filters/header-filters.mjs +0 -2
  37. package/esm2022/src/app/modules/interfaces/menu-break-crumb/menu-break-crumb.mjs +0 -6
  38. package/esm2022/src/app/modules/interfaces/report/template-pdf-base.mjs +0 -2
  39. package/esm2022/src/app/modules/interfaces/report/template-pdf-ot.mjs +0 -2
  40. package/esm2022/src/app/modules/interfaces/report/template-pdf-purchase-order.mjs +0 -2
  41. package/esm2022/src/app/modules/interfaces/report/template-pfd-fo.mjs +0 -2
  42. package/esm2022/src/app/modules/services/crypto.service.mjs +0 -38
  43. package/esm2022/src/app/modules/services/export-data.service.mjs +0 -169
  44. package/esm2022/src/app/modules/services/file-forms.service.mjs +0 -24
  45. package/esm2022/src/app/modules/services/fuel-order-pdf.service.mjs +0 -346
  46. package/esm2022/src/app/modules/services/functions.service.mjs +0 -75
  47. package/esm2022/src/app/modules/services/generate-pdf.service.mjs +0 -93
  48. package/esm2022/src/app/modules/services/http.service.mjs +0 -142
  49. package/esm2022/src/app/modules/services/loading/loading.component.mjs +0 -30
  50. package/esm2022/src/app/modules/services/local-storage.service.mjs +0 -115
  51. package/esm2022/src/app/modules/services/message.service.mjs +0 -202
  52. package/esm2022/src/app/modules/services/purchase-order-pdf.service.mjs +0 -179
  53. package/esm2022/src/app/modules/services/screen-size-util.mjs +0 -6
  54. package/esm2022/src/app/modules/services/session.service.mjs +0 -43
  55. package/esm2022/src/app/modules/services/work-order-pdf.service.mjs +0 -363
  56. package/public_api.d.ts +0 -57
  57. package/src/app/modules/brainloper-ui/brainloper-ui.module.d.ts +0 -59
  58. package/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.d.ts +0 -13
  59. package/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.d.ts +0 -10
  60. package/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.d.ts +0 -24
  61. package/src/app/modules/brainloper-ui/components/carousel/carousel.component.d.ts +0 -16
  62. package/src/app/modules/brainloper-ui/components/combos/combos.component.d.ts +0 -46
  63. package/src/app/modules/brainloper-ui/components/data-table/data-table.component.d.ts +0 -101
  64. package/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.d.ts +0 -20
  65. package/src/app/modules/brainloper-ui/components/file-input/file-input.component.d.ts +0 -43
  66. package/src/app/modules/brainloper-ui/components/file-input/imagenes/doc.d.ts +0 -2
  67. package/src/app/modules/brainloper-ui/components/file-input/imagenes/fondoTransparente.d.ts +0 -2
  68. package/src/app/modules/brainloper-ui/components/file-input/imagenes/pdf.d.ts +0 -2
  69. package/src/app/modules/brainloper-ui/components/filters/filters.component.d.ts +0 -30
  70. package/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.d.ts +0 -39
  71. package/src/app/modules/brainloper-ui/components/report/template-ot/template-ot.component.d.ts +0 -38
  72. package/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.d.ts +0 -26
  73. package/src/app/modules/directives/carousel-item.directive.d.ts +0 -9
  74. package/src/app/modules/interfaces/buttons/button-icon.d.ts +0 -9
  75. package/src/app/modules/interfaces/buttons/button-lavel-edit.d.ts +0 -6
  76. package/src/app/modules/interfaces/combos/combos-configuration.d.ts +0 -13
  77. package/src/app/modules/interfaces/data-table/params.d.ts +0 -7
  78. package/src/app/modules/interfaces/data-table/rules.d.ts +0 -8
  79. package/src/app/modules/interfaces/data-table/table-columns.d.ts +0 -25
  80. package/src/app/modules/interfaces/data-table/table-configuration.d.ts +0 -26
  81. package/src/app/modules/interfaces/enum/enumActions.d.ts +0 -6
  82. package/src/app/modules/interfaces/enum/enumRules.d.ts +0 -6
  83. package/src/app/modules/interfaces/enum/httpResponseType.d.ts +0 -6
  84. package/src/app/modules/interfaces/file-forms-service/file-forms-params.d.ts +0 -4
  85. package/src/app/modules/interfaces/file-forms-service/file-input-params.d.ts +0 -13
  86. package/src/app/modules/interfaces/filters/header-filters.d.ts +0 -13
  87. package/src/app/modules/interfaces/menu-break-crumb/menu-break-crumb.d.ts +0 -10
  88. package/src/app/modules/interfaces/report/template-pdf-base.d.ts +0 -17
  89. package/src/app/modules/interfaces/report/template-pdf-ot.d.ts +0 -6
  90. package/src/app/modules/interfaces/report/template-pdf-purchase-order.d.ts +0 -17
  91. package/src/app/modules/interfaces/report/template-pfd-fo.d.ts +0 -7
  92. package/src/app/modules/services/crypto.service.d.ts +0 -10
  93. package/src/app/modules/services/export-data.service.d.ts +0 -18
  94. package/src/app/modules/services/file-forms.service.d.ts +0 -7
  95. package/src/app/modules/services/fuel-order-pdf.service.d.ts +0 -25
  96. package/src/app/modules/services/functions.service.d.ts +0 -15
  97. package/src/app/modules/services/generate-pdf.service.d.ts +0 -22
  98. package/src/app/modules/services/http.service.d.ts +0 -32
  99. package/src/app/modules/services/loading/loading.component.d.ts +0 -15
  100. package/src/app/modules/services/local-storage.service.d.ts +0 -49
  101. package/src/app/modules/services/message.service.d.ts +0 -23
  102. package/src/app/modules/services/purchase-order-pdf.service.d.ts +0 -21
  103. package/src/app/modules/services/screen-size-util.d.ts +0 -3
  104. package/src/app/modules/services/session.service.d.ts +0 -14
  105. package/src/app/modules/services/work-order-pdf.service.d.ts +0 -33
@@ -1,142 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { HttpParams } from '@angular/common/http';
3
- import { HttpResponseType } from '../interfaces/enum/httpResponseType';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/common/http";
6
- import * as i2 from "./message.service";
7
- export class HttpService {
8
- http;
9
- message;
10
- constructor(http, message) {
11
- this.http = http;
12
- this.message = message;
13
- }
14
- createParams(params) {
15
- let data = new HttpParams();
16
- if (params) {
17
- params.forEach(element => {
18
- data = data.append(`${element.id}`, `${element.value}`);
19
- });
20
- }
21
- return data;
22
- }
23
- createOptionsWithResponseType(params, withCredentials = false, responseType = HttpResponseType.JSON) {
24
- const options = {
25
- params: this.createParams(params),
26
- withCredentials
27
- };
28
- if (responseType !== HttpResponseType.JSON) {
29
- options.responseType = responseType;
30
- }
31
- return options;
32
- }
33
- getData(url, params, withCredentials = false) {
34
- return this.http.get(url, { params: this.createParams(params), withCredentials });
35
- }
36
- postData(url, body, params, withCredentials = false) {
37
- return this.http.post(url, body, { params: this.createParams(params), withCredentials });
38
- }
39
- putData(url, body, params, withCredentials = false) {
40
- return this.http.put(url, body, { params: this.createParams(params), withCredentials });
41
- }
42
- deleteData(url, params, withCredentials = false) {
43
- return this.http.delete(url, { params: this.createParams(params), withCredentials });
44
- }
45
- getDataPromise(url, params, withCredentials = false) {
46
- return new Promise((resolve, reject) => {
47
- this.getData(url, params, withCredentials).subscribe(res => resolve(res), err => reject(err));
48
- });
49
- }
50
- postDataPromise(url, body, params, withCredentials = false) {
51
- return new Promise((resolve, reject) => {
52
- this.postData(url, body, params, withCredentials).subscribe(res => resolve(res), err => reject(err));
53
- });
54
- }
55
- putDataPromise(url, body, params, withCredentials = false) {
56
- return new Promise((resolve, reject) => {
57
- this.putData(url, body, params, withCredentials).subscribe(res => resolve(res), err => reject(err));
58
- });
59
- }
60
- deleteDataPromise(url, params, withCredentials = false) {
61
- return new Promise((resolve, reject) => {
62
- this.deleteData(url, params, withCredentials).subscribe(res => resolve(res), err => reject(err));
63
- });
64
- }
65
- getDataBody(url, params, withCredentials = false) {
66
- return new Promise((resolve, reject) => {
67
- this.http.get(url, { params: this.createParams(params), withCredentials }).subscribe(res => {
68
- if (res['code'] === 0 && res['body']) {
69
- resolve(res['body']);
70
- }
71
- else {
72
- resolve(null);
73
- this.message.Error("Error", res['message']);
74
- }
75
- }, err => reject(err));
76
- });
77
- }
78
- postDataBody(url, body, params, withCredentials = false) {
79
- return new Promise((resolve, reject) => {
80
- this.http.post(url, body, { params: this.createParams(params), withCredentials }).subscribe(res => {
81
- if (res['code'] === 0 && res['body']) {
82
- resolve(res['body']);
83
- }
84
- else {
85
- resolve(null);
86
- this.message.Error("Error", res['message']);
87
- }
88
- }, err => reject(err));
89
- });
90
- }
91
- putDataBody(url, body, params, withCredentials = false) {
92
- return new Promise((resolve, reject) => {
93
- this.http.put(url, body, { params: this.createParams(params), withCredentials }).subscribe(res => {
94
- if (res['code'] === 0 && res['body']) {
95
- resolve(res['body']);
96
- }
97
- else {
98
- resolve(null);
99
- this.message.Error("Error", res['message']);
100
- }
101
- }, err => reject(err));
102
- });
103
- }
104
- getDataWithResponseType(url, params, withCredentials = false, responseType = HttpResponseType.JSON) {
105
- return this.http.get(url, this.createOptionsWithResponseType(params, withCredentials, responseType));
106
- }
107
- postDataWithResponseType(url, body, params, withCredentials = false, responseType = HttpResponseType.JSON) {
108
- return this.http.post(url, body, this.createOptionsWithResponseType(params, withCredentials, responseType));
109
- }
110
- putDataWithResponseType(url, body, params, withCredentials = false, responseType = HttpResponseType.JSON) {
111
- return this.http.put(url, body, this.createOptionsWithResponseType(params, withCredentials, responseType));
112
- }
113
- deleteDataWithResponseType(url, params, withCredentials = false, responseType = HttpResponseType.JSON) {
114
- return this.http.delete(url, this.createOptionsWithResponseType(params, withCredentials, responseType));
115
- }
116
- getDataPromiseWithResponseType(url, params, withCredentials = false, responseType = HttpResponseType.JSON) {
117
- return new Promise((resolve, reject) => {
118
- this.getDataWithResponseType(url, params, withCredentials, responseType).subscribe(res => resolve(res), err => reject(err));
119
- });
120
- }
121
- postDataPromiseWithResponseType(url, body, params, withCredentials = false, responseType = HttpResponseType.JSON) {
122
- return new Promise((resolve, reject) => {
123
- this.postDataWithResponseType(url, body, params, withCredentials, responseType).subscribe(res => resolve(res), err => reject(err));
124
- });
125
- }
126
- putDataPromiseWithResponseType(url, body, params, withCredentials = false, responseType = HttpResponseType.JSON) {
127
- return new Promise((resolve, reject) => {
128
- this.putDataWithResponseType(url, body, params, withCredentials, responseType).subscribe(res => resolve(res), err => reject(err));
129
- });
130
- }
131
- deleteDataPromiseWithResponseType(url, params, withCredentials = false, responseType = HttpResponseType.JSON) {
132
- return new Promise((resolve, reject) => {
133
- this.deleteDataWithResponseType(url, params, withCredentials, responseType).subscribe(res => resolve(res), err => reject(err));
134
- });
135
- }
136
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HttpService, deps: [{ token: i1.HttpClient }, { token: i2.MessageService }], target: i0.ɵɵFactoryTarget.Injectable });
137
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HttpService });
138
- }
139
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HttpService, decorators: [{
140
- type: Injectable
141
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.MessageService }] });
142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL3NlcnZpY2VzL2h0dHAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7OztBQUd2RSxNQUFNLE9BQU8sV0FBVztJQUdaO0lBQ0E7SUFGVixZQUNVLElBQWdCLEVBQ2hCLE9BQXVCO1FBRHZCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7SUFDN0IsQ0FBQztJQUVHLFlBQVksQ0FBQyxNQUFZO1FBQy9CLElBQUksSUFBSSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDNUIsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3ZCLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDMUQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sNkJBQTZCLENBQUMsTUFBTyxFQUFFLGtCQUEyQixLQUFLLEVBQUUsZUFBaUMsZ0JBQWdCLENBQUMsSUFBSTtRQUNySSxNQUFNLE9BQU8sR0FBUTtZQUNuQixNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7WUFDakMsZUFBZTtTQUNoQixDQUFDO1FBRUYsSUFBSSxZQUFZLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7WUFD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bWVzc2FnZS5zZXJ2aWNlJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBIdHRwUmVzcG9uc2VUeXBlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbnVtL2h0dHBSZXNwb25zZVR5cGUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSHR0cFNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIG1lc3NhZ2U6IE1lc3NhZ2VTZXJ2aWNlXG4gICkgeyB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVQYXJhbXMocGFyYW1zPzogYW55KTogSHR0cFBhcmFtcyB7XG4gICAgbGV0IGRhdGEgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGlmIChwYXJhbXMpIHtcbiAgICAgIHBhcmFtcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBkYXRhID0gZGF0YS5hcHBlbmQoYCR7ZWxlbWVudC5pZH1gLCBgJHtlbGVtZW50LnZhbHVlfWApO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVPcHRpb25zV2l0aFJlc3BvbnNlVHlwZShwYXJhbXM/LCB3aXRoQ3JlZGVudGlhbHM6IGJvb2xlYW4gPSBmYWxzZSwgcmVzcG9uc2VUeXBlOiBIdHRwUmVzcG9uc2VUeXBlID0gSHR0cFJlc3BvbnNlVHlwZS5KU09OKSB7XG4gICAgY29uc3Qgb3B0aW9uczogYW55ID0geyBcbiAgICAgIHBhcmFtczogdGhpcy5jcmVhdGVQYXJhbXMocGFyYW1zKSwgXG4gICAgICB3aXRoQ3JlZGVudGlhbHMgXG4gICAgfTtcbiAgICBcbiAgICBpZiAocmVzcG9uc2VUeXBlICE9PSBIdHRwUmVzcG9uc2VUeXBlLkpTT04pIHtcbiAgICAgIG9wdGlvbnMucmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuXG4gIGdldERhdGEodXJsOiBzdHJpbmcsIHBhcmFtcz8sIHdpdGhDcmVkZW50aWFsczogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsLCB7IHBhcmFtczogdGhpcy5jcmVhdGVQYXJhbXMocGFyYW1zKSwgd2l0aENyZWRlbnRpYWxzIH0pO1xuICB9XG5cbiAgcG9zdERhdGEodXJsOiBzdHJpbmcsIGJvZHk6IGFueSwgcGFyYW1zPywgd2l0aENyZWRlbnRpYWxzOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodXJsLCBib2R5LCB7IHBhcmFtczogdGhpcy5jcmVhdGVQYXJhbXMocGFyYW1zKSwgd2l0aENyZWRlbnRpYWxzIH0pO1xuICB9XG5cbiAgcHV0RGF0YSh1cmw6IHN0cmluZywgYm9keTogYW55LCBwYXJhbXM/LCB3aXRoQ3JlZGVudGlhbHM6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHVybCwgYm9keSwgeyBwYXJhbXM6IHRoaXMuY3JlYXRlUGFyYW1zKHBhcmFtcyksIHdpdGhDcmVkZW50aWFscyB9KTtcbiAgfVxuXG4gIGRlbGV0ZURhdGEodXJsOiBzdHJpbmcsIHBhcmFtcz8sIHdpdGhDcmVkZW50aWFsczogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUodXJsLCB7IHBhcmFtczogdGhpcy5jcmVhdGVQYXJhbXMocGFyYW1zKSwgd2l0aENyZWRlbnRpYWxzIH0pO1xuICB9XG5cbiAgZ2V0RGF0YVByb21pc2UodXJsOiBzdHJpbmcsIHBhcmFtcz8sIHdpdGhDcmVkZW50aWFsczogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZ2V0RGF0YSh1cmwsIHBhcmFtcywgd2l0aENyZWRlbnRpYWxzKS5zdWJzY3JpYmUoXG4gICAgICAgIHJlcyA9PiByZXNvbHZlKHJlcyksXG4gICAgICAgIGVyciA9PiByZWplY3QoZXJyKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHBvc3REYXRhUHJvbWlzZSh1cmw6IHN0cmluZywgYm9keTogYW55LCBwYXJhbXM/LCB3aXRoQ3JlZGVudGlhbHM6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnBvc3REYXRhKHVybCwgYm9keSwgcGFyYW1zLCB3aXRoQ3JlZGVudGlhbHMpLnN1YnNjcmliZShcbiAgICAgICAgcmVzID0+IHJlc29sdmUocmVzKSxcbiAgICAgICAgZXJyID0+IHJlamVjdChlcnIpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHV0RGF0YVByb21pc2UodXJsOiBzdHJpbmcsIGJvZHk6IGFueSwgcGFyYW1zPywgd2l0aENyZWRlbnRpYWxzOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5wdXREYXRhKHVybCwgYm9keSwgcGFyYW1zLCB3aXRoQ3JlZGVudGlhbHMpLnN1YnNjcmliZShcbiAgICAgICAgcmVzID0+IHJlc29sdmUocmVzKSxcbiAgICAgICAgZXJyID0+IHJlamVjdChlcnIpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlRGF0YVByb21pc2UodXJsOiBzdHJpbmcsIHBhcmFtcz8sIHdpdGhDcmVkZW50aWFsczogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZGVsZXRlRGF0YSh1cmwsIHBhcmFtcywgd2l0aENyZWRlbnRpYWxzKS5zdWJzY3JpYmUoXG4gICAgICAgIHJlcyA9PiByZXNvbHZlKHJlcyksXG4gICAgICAgIGVyciA9PiByZWplY3QoZXJyKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldERhdGFCb2R5PFQ+KHVybDogc3RyaW5nLCBwYXJhbXM/LCB3aXRoQ3JlZGVudGlhbHM6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmh0dHAuZ2V0KHVybCwgeyBwYXJhbXM6IHRoaXMuY3JlYXRlUGFyYW1zKHBhcmFtcyksIHdpdGhDcmVkZW50aWFscyB9KS5zdWJzY3JpYmUoXG4gICAgICAgIHJlcyA9PiB7XG4gICAgICAgICAgaWYgKHJlc1snY29kZSddID09PSAwICYmIHJlc1snYm9keSddKSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc1snYm9keSddIGFzIFQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlLkVycm9yKFwiRXJyb3JcIiwgcmVzWydtZXNzYWdlJ10pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyID0+IHJlamVjdChlcnIpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcG9zdERhdGFCb2R5PFQ+KHVybDogc3RyaW5nLCBib2R5OiBhbnksIHBhcmFtcz8sIHdpdGhDcmVkZW50aWFsczogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuaHR0cC5wb3N0KHVybCwgYm9keSwgeyBwYXJhbXM6IHRoaXMuY3JlYXRlUGFyYW1zKHBhcmFtcyksIHdpdGhDcmVkZW50aWFscyB9KS5zdWJzY3JpYmUoXG4gICAgICAgIHJlcyA9PiB7XG4gICAgICAgICAgaWYgKHJlc1snY29kZSddID09PSAwICYmIHJlc1snYm9keSddKSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc1snYm9keSddIGFzIFQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlLkVycm9yKFwiRXJyb3JcIiwgcmVzWydtZXNzYWdlJ10pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyID0+IHJlamVjdChlcnIpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHV0RGF0YUJvZHk8VD4odXJsOiBzdHJpbmcsIGJvZHk6IGFueSwgcGFyYW1zPywgd2l0aENyZWRlbnRpYWxzOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5odHRwLnB1dCh1cmwsIGJvZHksIHsgcGFyYW1zOiB0aGlzLmNyZWF0ZVBhcmFtcyhwYXJhbXMpLCB3aXRoQ3JlZGVudGlhbHMgfSkuc3Vic2NyaWJlKFxuICAgICAgICByZXMgPT4ge1xuICAgICAgICAgIGlmIChyZXNbJ2NvZGUnXSA9PT0gMCAmJiByZXNbJ2JvZHknXSkge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXNbJ2JvZHknXSBhcyBUKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZS5FcnJvcihcIkVycm9yXCIsIHJlc1snbWVzc2FnZSddKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVyciA9PiByZWplY3QoZXJyKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldERhdGFXaXRoUmVzcG9uc2VUeXBlKHVybDogc3RyaW5nLCBwYXJhbXM/LCB3aXRoQ3JlZGVudGlhbHM6IGJvb2xlYW4gPSBmYWxzZSwgcmVzcG9uc2VUeXBlOiBIdHRwUmVzcG9uc2VUeXBlID0gSHR0cFJlc3BvbnNlVHlwZS5KU09OKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsLCB0aGlzLmNyZWF0ZU9wdGlvbnNXaXRoUmVzcG9uc2VUeXBlKHBhcmFtcywgd2l0aENyZWRlbnRpYWxzLCByZXNwb25zZVR5cGUpKTtcbiAgfVxuXG4gIHBvc3REYXRhV2l0aFJlc3BvbnNlVHlwZSh1cmw6IHN0cmluZywgYm9keTogYW55LCBwYXJhbXM/LCB3aXRoQ3JlZGVudGlhbHM6IGJvb2xlYW4gPSBmYWxzZSwgcmVzcG9uc2VUeXBlOiBIdHRwUmVzcG9uc2VUeXBlID0gSHR0cFJlc3BvbnNlVHlwZS5KU09OKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHVybCwgYm9keSwgdGhpcy5jcmVhdGVPcHRpb25zV2l0aFJlc3BvbnNlVHlwZShwYXJhbXMsIHdpdGhDcmVkZW50aWFscywgcmVzcG9uc2VUeXBlKSk7XG4gIH1cblxuICBwdXREYXRhV2l0aFJlc3BvbnNlVHlwZSh1cmw6IHN0cmluZywgYm9keTogYW55LCBwYXJhbXM/LCB3aXRoQ3JlZGVudGlhbHM6IGJvb2xlYW4gPSBmYWxzZSwgcmVzcG9uc2VUeXBlOiBIdHRwUmVzcG9uc2VUeXBlID0gSHR0cFJlc3BvbnNlVHlwZS5KU09OKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodXJsLCBib2R5LCB0aGlzLmNyZWF0ZU9wdGlvbnNXaXRoUmVzcG9uc2VUeXBlKHBhcmFtcywgd2l0aENyZWRlbnRpYWxzLCByZXNwb25zZVR5cGUpKTtcbiAgfVxuXG4gIGRlbGV0ZURhdGFXaXRoUmVzcG9uc2VUeXBlKHVybDogc3RyaW5nLCBwYXJhbXM/LCB3aXRoQ3JlZGVudGlhbHM6IGJvb2xlYW4gPSBmYWxzZSwgcmVzcG9uc2VUeXBlOiBIdHRwUmVzcG9uc2VUeXBlID0gSHR0cFJlc3BvbnNlVHlwZS5KU09OKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUodXJsLCB0aGlzLmNyZWF0ZU9wdGlvbnNXaXRoUmVzcG9uc2VUeXBlKHBhcmFtcywgd2l0aENyZWRlbnRpYWxzLCByZXNwb25zZVR5cGUpKTtcbiAgfVxuXG4gIGdldERhdGFQcm9taXNlV2l0aFJlc3BvbnNlVHlwZTxUID0gYW55Pih1cmw6IHN0cmluZywgcGFyYW1zPywgd2l0aENyZWRlbnRpYWxzOiBib29sZWFuID0gZmFsc2UsIHJlc3BvbnNlVHlwZTogSHR0cFJlc3BvbnNlVHlwZSA9IEh0dHBSZXNwb25zZVR5cGUuSlNPTik6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmdldERhdGFXaXRoUmVzcG9uc2VUeXBlKHVybCwgcGFyYW1zLCB3aXRoQ3JlZGVudGlhbHMsIHJlc3BvbnNlVHlwZSkuc3Vic2NyaWJlKFxuICAgICAgICByZXMgPT4gcmVzb2x2ZShyZXMgYXMgVCksXG4gICAgICAgIGVyciA9PiByZWplY3QoZXJyKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHBvc3REYXRhUHJvbWlzZVdpdGhSZXNwb25zZVR5cGU8VCA9IGFueT4odXJsOiBzdHJpbmcsIGJvZHk6IGFueSwgcGFyYW1zPywgd2l0aENyZWRlbnRpYWxzOiBib29sZWFuID0gZmFsc2UsIHJlc3BvbnNlVHlwZTogSHR0cFJlc3BvbnNlVHlwZSA9IEh0dHBSZXNwb25zZVR5cGUuSlNPTik6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnBvc3REYXRhV2l0aFJlc3BvbnNlVHlwZSh1cmwsIGJvZHksIHBhcmFtcywgd2l0aENyZWRlbnRpYWxzLCByZXNwb25zZVR5cGUpLnN1YnNjcmliZShcbiAgICAgICAgcmVzID0+IHJlc29sdmUocmVzIGFzIFQpLFxuICAgICAgICBlcnIgPT4gcmVqZWN0KGVycilcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwdXREYXRhUHJvbWlzZVdpdGhSZXNwb25zZVR5cGU8VCA9IGFueT4odXJsOiBzdHJpbmcsIGJvZHk6IGFueSwgcGFyYW1zPywgd2l0aENyZWRlbnRpYWxzOiBib29sZWFuID0gZmFsc2UsIHJlc3BvbnNlVHlwZTogSHR0cFJlc3BvbnNlVHlwZSA9IEh0dHBSZXNwb25zZVR5cGUuSlNPTik6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnB1dERhdGFXaXRoUmVzcG9uc2VUeXBlKHVybCwgYm9keSwgcGFyYW1zLCB3aXRoQ3JlZGVudGlhbHMsIHJlc3BvbnNlVHlwZSkuc3Vic2NyaWJlKFxuICAgICAgICByZXMgPT4gcmVzb2x2ZShyZXMgYXMgVCksXG4gICAgICAgIGVyciA9PiByZWplY3QoZXJyKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRlbGV0ZURhdGFQcm9taXNlV2l0aFJlc3BvbnNlVHlwZTxUID0gYW55Pih1cmw6IHN0cmluZywgcGFyYW1zPywgd2l0aENyZWRlbnRpYWxzOiBib29sZWFuID0gZmFsc2UsIHJlc3BvbnNlVHlwZTogSHR0cFJlc3BvbnNlVHlwZSA9IEh0dHBSZXNwb25zZVR5cGUuSlNPTik6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRlbGV0ZURhdGFXaXRoUmVzcG9uc2VUeXBlKHVybCwgcGFyYW1zLCB3aXRoQ3JlZGVudGlhbHMsIHJlc3BvbnNlVHlwZSkuc3Vic2NyaWJlKFxuICAgICAgICByZXMgPT4gcmVzb2x2ZShyZXMgYXMgVCksXG4gICAgICAgIGVyciA9PiByZWplY3QoZXJyKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxufSJdfQ==
@@ -1,30 +0,0 @@
1
- import { Component, Inject, ViewEncapsulation } from '@angular/core';
2
- import { MAT_DIALOG_DATA } from '@angular/material/dialog';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/material/dialog";
5
- export class LoadingComponent {
6
- dialogRef;
7
- data;
8
- options = {
9
- path: '/assets/loading.json'
10
- };
11
- constructor(dialogRef, data) {
12
- this.dialogRef = dialogRef;
13
- this.data = data;
14
- }
15
- ngOnInit() {
16
- }
17
- animationCreated(animationItem) {
18
- console.log(animationItem);
19
- }
20
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LoadingComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
21
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: LoadingComponent, selector: "app-loading", ngImport: i0, template: "<mat-dialog-content style=\"display: flex; justify-content: center; align-items: center; flex-direction: column;\">\n <div style=\"font-size: 20px;\">\n <strong>{{data.title}}</strong>\n </div>\n <div>\n <!-- <ng-lottie width='170px' [options]=\"options\" (animationCreated)=\"animationCreated($event)\"></ng-lottie> -->\n <img width=\"170px\" src=\"assets/loading.gif\" alt=\"\">\n </div>\n <div style=\"text-align: center;\">\n {{data.message}}\n </div>\n</mat-dialog-content>", styles: [".mat-dialog-container{overflow:hidden!important;background-color:#fff!important}\n"], dependencies: [{ kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }], encapsulation: i0.ViewEncapsulation.None });
22
- }
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LoadingComponent, decorators: [{
24
- type: Component,
25
- args: [{ selector: 'app-loading', encapsulation: ViewEncapsulation.None, template: "<mat-dialog-content style=\"display: flex; justify-content: center; align-items: center; flex-direction: column;\">\n <div style=\"font-size: 20px;\">\n <strong>{{data.title}}</strong>\n </div>\n <div>\n <!-- <ng-lottie width='170px' [options]=\"options\" (animationCreated)=\"animationCreated($event)\"></ng-lottie> -->\n <img width=\"170px\" src=\"assets/loading.gif\" alt=\"\">\n </div>\n <div style=\"text-align: center;\">\n {{data.message}}\n </div>\n</mat-dialog-content>", styles: [".mat-dialog-container{overflow:hidden!important;background-color:#fff!important}\n"] }]
26
- }], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
27
- type: Inject,
28
- args: [MAT_DIALOG_DATA]
29
- }] }] });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvc2VydmljZXMvbG9hZGluZy9sb2FkaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zZXJ2aWNlcy9sb2FkaW5nL2xvYWRpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsaUJBQWlCLEVBQUcsTUFBTSxlQUFlLENBQUM7QUFHOUUsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7O0FBU3pFLE1BQU0sT0FBTyxnQkFBZ0I7SUFPbEI7SUFDeUI7SUFObEMsT0FBTyxHQUFxQjtRQUMxQixJQUFJLEVBQUUsc0JBQXNCO0tBQzdCLENBQUM7SUFFRixZQUNTLFNBQXlDLEVBQ2hCLElBQUk7UUFEN0IsY0FBUyxHQUFULFNBQVMsQ0FBZ0M7UUFDaEIsU0FBSSxHQUFKLElBQUksQ0FBQTtJQUNsQyxDQUFDO0lBRUwsUUFBUTtJQUVSLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxhQUE0QjtRQUMzQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzdCLENBQUM7d0dBakJVLGdCQUFnQiw4Q0FRakIsZUFBZTs0RkFSZCxnQkFBZ0IsbURDWjdCLGtmQVdxQjs7NEZEQ1IsZ0JBQWdCO2tCQU41QixTQUFTOytCQUNFLGFBQWEsaUJBR1IsaUJBQWlCLENBQUMsSUFBSTs7MEJBVWxDLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbmplY3QsIFZpZXdFbmNhcHN1bGF0aW9uICB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW5pbWF0aW9uSXRlbSB9IGZyb20gJ2xvdHRpZS13ZWInO1xuaW1wb3J0IHsgQW5pbWF0aW9uT3B0aW9ucyB9IGZyb20gJ25neC1sb3R0aWUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1sb2FkaW5nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvYWRpbmcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9sb2FkaW5nLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgTG9hZGluZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgb3B0aW9uczogQW5pbWF0aW9uT3B0aW9ucyA9IHtcbiAgICBwYXRoOiAnL2Fzc2V0cy9sb2FkaW5nLmpzb24nXG4gIH07XG4gXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxMb2FkaW5nQ29tcG9uZW50PixcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGFcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcblxuICB9XG5cbiAgYW5pbWF0aW9uQ3JlYXRlZChhbmltYXRpb25JdGVtOiBBbmltYXRpb25JdGVtKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coYW5pbWF0aW9uSXRlbSk7XG4gIH1cblxuICBcblxufVxuIiwiPG1hdC1kaWFsb2ctY29udGVudCBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1wiPlxuICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOiAyMHB4O1wiPlxuICAgIDxzdHJvbmc+e3tkYXRhLnRpdGxlfX08L3N0cm9uZz5cbiAgPC9kaXY+XG4gIDxkaXY+XG4gICAgPCEtLSA8bmctbG90dGllIHdpZHRoPScxNzBweCcgW29wdGlvbnNdPVwib3B0aW9uc1wiIChhbmltYXRpb25DcmVhdGVkKT1cImFuaW1hdGlvbkNyZWF0ZWQoJGV2ZW50KVwiPjwvbmctbG90dGllPiAtLT5cbiAgICA8aW1nIHdpZHRoPVwiMTcwcHhcIiBzcmM9XCJhc3NldHMvbG9hZGluZy5naWZcIiBhbHQ9XCJcIj5cbiAgPC9kaXY+XG4gIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+XG4gICAge3tkYXRhLm1lc3NhZ2V9fVxuICA8L2Rpdj5cbjwvbWF0LWRpYWxvZy1jb250ZW50PiJdfQ==
@@ -1,115 +0,0 @@
1
- import { compress, decompress } from 'lz-string';
2
- import { Injectable } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- export class LocalStorageService {
5
- prefix = 'bl-f';
6
- store = window.localStorage;
7
- constructor() {
8
- this.prefix += '.';
9
- }
10
- /**
11
- * set key in local storage
12
- * @param key key
13
- * @param value value
14
- */
15
- set(key, value) {
16
- key = this.prefix + key;
17
- this.store.setItem(key, compress(JSON.stringify(value))); // compress data
18
- return true;
19
- }
20
- /**
21
- * get key in local storage
22
- * @param key key
23
- * @returns value as object
24
- */
25
- get(key) {
26
- key = this.prefix + key;
27
- const datacompressed = this.store.getItem(key);
28
- if (!datacompressed) {
29
- return null;
30
- }
31
- const item = decompress(datacompressed); // decompress
32
- return JSON.parse(item);
33
- }
34
- /**
35
- * remove a key
36
- * @param key key to remove
37
- * @returns boolean
38
- */
39
- remove(key) {
40
- key = this.prefix + key;
41
- this.store.removeItem(key);
42
- return true;
43
- }
44
- /**
45
- * clear all
46
- * @returns boolean
47
- */
48
- clear() {
49
- this.store.clear();
50
- return true;
51
- }
52
- /**
53
- * get all keys present in local storage
54
- * @returns array of keys
55
- */
56
- getAllKeys() {
57
- let keys = [];
58
- for (let index = 0; index < this.store.length; index++) {
59
- const key = this.store.key(index);
60
- if (key.indexOf(this.prefix) === 0) {
61
- keys.push(key.substr(this.prefix.length));
62
- }
63
- }
64
- return keys;
65
- }
66
- /**
67
- * set key with expire time
68
- * @param key key
69
- * @param value value
70
- * @returns true if set correctly
71
- */
72
- setWhitExpiry(key, value) {
73
- const now = new Date();
74
- const ttl = 3600 * 1000;
75
- const item = {
76
- value: value,
77
- expiry: now.getTime() + ttl,
78
- };
79
- key = this.prefix + key;
80
- this.store.setItem(key, compress(JSON.stringify(item))); // compress data
81
- return true;
82
- }
83
- /**
84
- * return key with expire time
85
- * @param key key
86
- * @returns return object with data or null if key expired
87
- */
88
- getWithExpiry(key) {
89
- key = this.prefix + key;
90
- const datacompressed = this.store.getItem(key);
91
- if (!datacompressed) {
92
- return null;
93
- }
94
- const itemStr = decompress(datacompressed); // decompress
95
- const item = JSON.parse(itemStr);
96
- const now = new Date();
97
- if (!item) {
98
- return null;
99
- }
100
- if (now.getTime() > item.expiry) {
101
- this.store.removeItem(key);
102
- return null;
103
- }
104
- return item.value;
105
- }
106
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LocalStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
107
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LocalStorageService, providedIn: 'root' });
108
- }
109
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LocalStorageService, decorators: [{
110
- type: Injectable,
111
- args: [{
112
- providedIn: 'root',
113
- }]
114
- }], ctorParameters: () => [] });
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sbUJBQW1CO0lBQ3RCLE1BQU0sR0FBVyxNQUFNLENBQUM7SUFDeEIsS0FBSyxHQUFRLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFDekM7UUFDRSxJQUFJLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEdBQUcsQ0FBSSxHQUFXLEVBQUUsS0FBUTtRQUMxQixHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtRQUMxRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFQTs7OztPQUlHO0lBQ0osR0FBRyxDQUFJLEdBQVc7UUFDaEIsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ3hCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFXLENBQUMsQ0FBQyxhQUFhO1FBQ2hFLE9B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VUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wcmVzcywgZGVjb21wcmVzcyB9IGZyb20gJ2x6LXN0cmluZyc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBwcmVmaXg6IHN0cmluZyA9ICdibC1mJztcbiAgcHJpdmF0ZSBzdG9yZTogYW55ID0gd2luZG93LmxvY2FsU3RvcmFnZTtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5wcmVmaXggKz0gJy4nO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCBrZXkgaW4gbG9jYWwgc3RvcmFnZVxuICAgKiBAcGFyYW0ga2V5ICBrZXlcbiAgICogQHBhcmFtIHZhbHVlICB2YWx1ZVxuICAgKi9cbiAgc2V0PFQ+KGtleTogc3RyaW5nLCB2YWx1ZTogVCkgOiBib29sZWFue1xuICAgIGtleSA9IHRoaXMucHJlZml4ICsga2V5O1xuICAgIHRoaXMuc3RvcmUuc2V0SXRlbShrZXksIGNvbXByZXNzKEpTT04uc3RyaW5naWZ5KHZhbHVlKSkpOyAvLyBjb21wcmVzcyBkYXRhXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAgLyoqXG4gICAgKiBnZXQga2V5IGluIGxvY2FsIHN0b3JhZ2VcbiAgICAqIEBwYXJhbSBrZXkgIGtleVxuICAgICogQHJldHVybnMgIHZhbHVlIGFzIG9iamVjdFxuICAgICovXG4gIGdldDxUPihrZXk6IHN0cmluZykgOiBUIHwgbnVsbCB7XG4gICAga2V5ID0gdGhpcy5wcmVmaXggKyBrZXk7XG4gICAgY29uc3QgZGF0YWNvbXByZXNzZWQgPSB0aGlzLnN0b3JlLmdldEl0ZW0oa2V5KTtcbiAgICBpZiAoIWRhdGFjb21wcmVzc2VkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgaXRlbSA9IGRlY29tcHJlc3MoZGF0YWNvbXByZXNzZWQpIGFzIHN0cmluZzsgLy8gZGVjb21wcmVzc1xuICAgIHJldHVybiBKU09OLnBhcnNlKGl0ZW0pIGFzIFQ7XG4gIH1cbiAgLyoqXG4gICAqIHJlbW92ZSBhIGtleVxuICAgKiBAcGFyYW0ga2V5IGtleSB0byByZW1vdmVcbiAgICogQHJldHVybnMgYm9vbGVhblxuICAgKi9cbiAgcmVtb3ZlKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAga2V5ID0gdGhpcy5wcmVmaXggKyBrZXk7XG4gICAgdGhpcy5zdG9yZS5yZW1vdmVJdGVtKGtleSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAgIC8qKlxuICAgKiBjbGVhciBhbGxcbiAgICogQHJldHVybnMgYm9vbGVhblxuICAgKi9cbiAgY2xlYXIoKTpib29sZWFue1xuICAgIHRoaXMuc3RvcmUuY2xlYXIoKVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCBhbGwga2V5cyBwcmVzZW50IGluIGxvY2FsIHN0b3JhZ2VcbiAgICogQHJldHVybnMgIGFycmF5IG9mIGtleXNcbiAgICovXG4gIGdldEFsbEtleXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgbGV0IGtleXMgPSBbXTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5zdG9yZS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuc3RvcmUua2V5KGluZGV4KTtcbiAgICAgIGlmIChrZXkuaW5kZXhPZih0aGlzLnByZWZpeCkgPT09IDApIHtcbiAgICAgICAga2V5cy5wdXNoKGtleS5zdWJzdHIodGhpcy5wcmVmaXgubGVuZ3RoKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBrZXlzO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCBrZXkgd2l0aCBleHBpcmUgdGltZVxuICAgKiBAcGFyYW0ga2V5IGtleVxuICAgKiBAcGFyYW0gdmFsdWUgIHZhbHVlXG4gICAqIEByZXR1cm5zIHRydWUgaWYgc2V0IGNvcnJlY3RseVxuICAgKi9cbiAgc2V0V2hpdEV4cGlyeTxUPihrZXk6IHN0cmluZywgdmFsdWU6IFQpOiBib29sZWFuIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IHR0bCA9IDM2MDAgKiAxMDAwO1xuICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBleHBpcnk6IG5vdy5nZXRUaW1lKCkgKyB0dGwsXG4gICAgfTtcblxuICAgIGtleSA9IHRoaXMucHJlZml4ICsga2V5O1xuICAgIHRoaXMuc3RvcmUuc2V0SXRlbShrZXksIGNvbXByZXNzKEpTT04uc3RyaW5naWZ5KGl0ZW0pKSk7IC8vIGNvbXByZXNzIGRhdGFcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuIC8qKlxuICAqIHJldHVybiBrZXkgd2l0aCBleHBpcmUgdGltZVxuICAqIEBwYXJhbSBrZXkga2V5XG4gICogQHJldHVybnMgcmV0dXJuIG9iamVjdCB3aXRoIGRhdGEgb3IgbnVsbCBpZiBrZXkgZXhwaXJlZFxuICAqL1xuXG4gIGdldFdpdGhFeHBpcnk8VD4oa2V5OiBzdHJpbmcpOiBUIHwgbnVsbCB7XG4gICAga2V5ID0gdGhpcy5wcmVmaXggKyBrZXk7XG4gICAgY29uc3QgZGF0YWNvbXByZXNzZWQgPSB0aGlzLnN0b3JlLmdldEl0ZW0oa2V5KTtcbiAgICBpZiAoIWRhdGFjb21wcmVzc2VkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgaXRlbVN0ciA9IGRlY29tcHJlc3MoZGF0YWNvbXByZXNzZWQpIGFzIHN0cmluZzsgLy8gZGVjb21wcmVzc1xuXG4gICAgY29uc3QgaXRlbSA9IEpTT04ucGFyc2UoaXRlbVN0cik7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAobm93LmdldFRpbWUoKSA+IGl0ZW0uZXhwaXJ5KSB7XG4gICAgICB0aGlzLnN0b3JlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbS52YWx1ZSBhcyBUO1xuICB9XG59XG4iXX0=
@@ -1,202 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import Swal from 'sweetalert2';
3
- import { LoadingComponent } from './loading/loading.component';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/material/dialog";
6
- export class MessageService {
7
- dialog;
8
- loadingNow = false;
9
- warningQueue = [];
10
- showingWarning = false;
11
- loading;
12
- constructor(dialog) {
13
- this.dialog = dialog;
14
- }
15
- openLoading(title, message) {
16
- if (!this.loadingNow) {
17
- this.loadingNow = true;
18
- this.loading = this.dialog.open(LoadingComponent, {
19
- data: {
20
- title,
21
- message
22
- },
23
- width: '250px',
24
- // height:'280px',
25
- disableClose: true,
26
- });
27
- }
28
- }
29
- closeLoading() {
30
- if (this.loadingNow) {
31
- this.loading.close();
32
- this.loadingNow = false;
33
- }
34
- }
35
- Error(title, message, showCancelButton = false, confirmButtonText = 'Aceptar', cancelButtonText = 'Cancelar') {
36
- return new Promise((resolve, reject) => {
37
- Swal.fire({
38
- title: title,
39
- text: message,
40
- icon: 'error',
41
- showCancelButton: showCancelButton,
42
- confirmButtonText: confirmButtonText,
43
- cancelButtonText: cancelButtonText,
44
- customClass: {
45
- confirmButton: 'confirm-button-class',
46
- cancelButton: 'cancel-button-class',
47
- }
48
- }).then((result) => {
49
- if (result.value) {
50
- resolve(true);
51
- }
52
- else if (result.dismiss === Swal.DismissReason.cancel) {
53
- resolve(false);
54
- }
55
- });
56
- });
57
- }
58
- Success(title, message, showCancelButton = false, confirmButtonText = 'Aceptar', cancelButtonText = 'Cancelar') {
59
- return new Promise((resolve, reject) => {
60
- Swal.fire({
61
- title: title,
62
- text: message,
63
- icon: 'success',
64
- showCancelButton: showCancelButton,
65
- confirmButtonText: confirmButtonText,
66
- cancelButtonText: cancelButtonText,
67
- customClass: {
68
- confirmButton: 'confirm-button-class',
69
- cancelButton: 'cancel-button-class',
70
- }
71
- }).then((result) => {
72
- if (result.value) {
73
- resolve(true);
74
- }
75
- else if (result.dismiss === Swal.DismissReason.cancel) {
76
- resolve(false);
77
- }
78
- });
79
- });
80
- }
81
- Warning(title, message, showCancelButton = false, confirmButtonText = 'Aceptar', cancelButtonText = 'Cancelar', allowOutsideClick = false) {
82
- return new Promise((resolve, reject) => {
83
- const warningData = {
84
- title: title,
85
- message: message,
86
- showCancelButton: showCancelButton,
87
- confirmButtonText: confirmButtonText,
88
- cancelButtonText: cancelButtonText,
89
- resolve: resolve,
90
- allowOutsideClick
91
- };
92
- this.warningQueue.push(warningData);
93
- if (!this.showingWarning) {
94
- this.showNextWarning();
95
- }
96
- });
97
- }
98
- showNextWarning() {
99
- if (this.warningQueue.length > 0) {
100
- this.showingWarning = true;
101
- const warningData = this.warningQueue.shift();
102
- Swal.fire({
103
- title: warningData.title,
104
- text: warningData.message,
105
- icon: 'warning',
106
- showCancelButton: warningData.showCancelButton,
107
- confirmButtonText: warningData.confirmButtonText,
108
- cancelButtonText: warningData.cancelButtonText,
109
- customClass: {
110
- confirmButton: 'confirm-button-class',
111
- cancelButton: 'cancel-button-class',
112
- },
113
- allowOutsideClick: warningData.allowOutsideClick,
114
- }).then((result) => {
115
- this.showingWarning = false;
116
- if (result.value) {
117
- warningData.resolve(true);
118
- }
119
- else if (result.dismiss === Swal.DismissReason.cancel) {
120
- warningData.resolve(false);
121
- }
122
- this.showNextWarning();
123
- });
124
- }
125
- }
126
- Info(title, message, showCancelButton = false, confirmButtonText = 'Aceptar', cancelButtonText = 'Cancelar') {
127
- return new Promise((resolve, reject) => {
128
- Swal.fire({
129
- title: title,
130
- text: message,
131
- icon: 'info',
132
- showCancelButton: showCancelButton,
133
- confirmButtonText: confirmButtonText,
134
- cancelButtonText: cancelButtonText,
135
- customClass: {
136
- confirmButton: 'confirm-button-class',
137
- cancelButton: 'cancel-button-class',
138
- }
139
- }).then((result) => {
140
- if (result.value) {
141
- resolve(true);
142
- }
143
- else if (result.dismiss === Swal.DismissReason.cancel) {
144
- resolve(false);
145
- }
146
- });
147
- });
148
- }
149
- SuccessToast(message, duration = 4000) {
150
- Swal.fire({
151
- position: 'top-end',
152
- icon: 'success',
153
- title: message,
154
- showConfirmButton: false,
155
- toast: true,
156
- timer: duration,
157
- width: 'auto'
158
- });
159
- }
160
- ErrorToast(message, duration = 4000) {
161
- Swal.fire({
162
- position: 'top-end',
163
- icon: 'error',
164
- title: message,
165
- showConfirmButton: false,
166
- toast: true,
167
- timer: duration,
168
- width: 'auto'
169
- });
170
- }
171
- WarningToast(message, duration = 4000) {
172
- Swal.fire({
173
- position: 'top-end',
174
- icon: 'warning',
175
- title: message,
176
- showConfirmButton: false,
177
- toast: true,
178
- timer: duration,
179
- width: 'auto'
180
- });
181
- }
182
- InfoToast(message, duration = 4000) {
183
- Swal.fire({
184
- position: 'top-end',
185
- icon: 'info',
186
- title: message,
187
- showConfirmButton: false,
188
- toast: true,
189
- timer: duration,
190
- width: 'auto'
191
- });
192
- }
193
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MessageService, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable });
194
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MessageService, providedIn: 'root' });
195
- }
196
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MessageService, decorators: [{
197
- type: Injectable,
198
- args: [{
199
- providedIn: 'root'
200
- }]
201
- }], ctorParameters: () => [{ type: i1.MatDialog }] });
202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL3NlcnZpY2VzL21lc3NhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQTtBQUU5QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7O0FBSy9ELE1BQU0sT0FBTyxjQUFjO0lBT2Y7SUFMRixVQUFVLEdBQVksS0FBSyxDQUFBO0lBQzNCLFlBQVksR0FBVSxFQUFFLENBQUM7SUFDekIsY0FBYyxHQUFZLEtBQUssQ0FBQztJQUNoQyxPQUFPLENBQUE7SUFDZixZQUNVLE1BQWdCO1FBQWhCLFdBQU0sR0FBTixNQUFNLENBQVU7SUFDdEIsQ0FBQztJQUVMLFdBQVcsQ0FBQyxLQUFLLEVBQUMsT0FBTztRQUN2QixJQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBQyxDQUFDO1lBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO1lBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ2hELElBQUksRUFBQztvQkFDSCxLQUFLO29CQUNMLE9BQU87aUJBQ1I7Z0JBQ0QsS0FBSyxFQUFDLE9BQU87Z0JBQ2Isa0JBQWtCO2dCQUNsQixZQUFZLEVBQUMsSUFBSTthQUVsQixDQUFDLENBQUE7UUFDSixDQUFDO0lBRUgsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFHLElBQUksQ0FBQyxVQUFVLEVBQUMsQ0FBQztZQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFBO1lBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFBO1FBQ3pCLENBQUM7SUFDSCxDQUFD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a0IsSUFBSTtRQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ1IsUUFBUSxFQUFFLFNBQVM7WUFDbkIsSUFBSSxFQUFFLE9BQU87WUFDYixLQUFLLEVBQUUsT0FBTztZQUNkLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsS0FBSyxFQUFDLElBQUk7WUFDVixLQUFLLEVBQUUsUUFBUTtZQUNmLEtBQUssRUFBQyxNQUFNO1NBQ2IsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxPQUFjLEVBQUUsV0FBa0IsSUFBSTtRQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ1IsUUFBUSxFQUFFLFNBQVM7WUFDbkIsSUFBSSxFQUFFLFNBQVM7WUFDZixLQUFLLEVBQUUsT0FBTztZQUNkLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsS0FBSyxFQUFDLElBQUk7WUFDVixLQUFLLEVBQUUsUUFBUTtZQUNmLEtBQUssRUFBQyxNQUFNO1NBQ2IsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFjLEVBQUUsV0FBa0IsSUFBSTtRQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ1IsUUFBUSxFQUFFLFNBQVM7WUFDbkIsSUFBSSxFQUFFLE1BQU07WUFDWixLQUFLLEVBQUUsT0FBTztZQUNkLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsS0FBSyxFQUFDLElBQUk7WUFDVixLQUFLLEVBQUUsUUFBUTtZQUNmLEtBQUssRUFBQyxNQUFNO1NBQ2IsQ0FBQyxDQUFBO0lBQ0osQ0FBQzt3R0FoTlUsY0FBYzs0R0FBZCxjQUFjLGNBRmIsTUFBTTs7NEZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgU3dhbCBmcm9tICdzd2VldGFsZXJ0MidcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBMb2FkaW5nQ29tcG9uZW50IH0gZnJvbSAnLi9sb2FkaW5nL2xvYWRpbmcuY29tcG9uZW50JztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTWVzc2FnZVNlcnZpY2Uge1xuXG4gIHByaXZhdGUgbG9hZGluZ05vdzogYm9vbGVhbiA9IGZhbHNlXG4gIHByaXZhdGUgd2FybmluZ1F1ZXVlOiBhbnlbXSA9IFtdO1xuICBwcml2YXRlIHNob3dpbmdXYXJuaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgbG9hZGluZ1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRpYWxvZzpNYXREaWFsb2dcbiAgKSB7IH1cblxuICBvcGVuTG9hZGluZyh0aXRsZSxtZXNzYWdlKXtcbiAgICBpZighdGhpcy5sb2FkaW5nTm93KXtcbiAgICAgIHRoaXMubG9hZGluZ05vdyA9IHRydWVcbiAgICAgIHRoaXMubG9hZGluZyA9IHRoaXMuZGlhbG9nLm9wZW4oTG9hZGluZ0NvbXBvbmVudCwge1xuICAgICAgICBkYXRhOntcbiAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICBtZXNzYWdlXG4gICAgICAgIH0sXG4gICAgICAgIHdpZHRoOicyNTBweCcsXG4gICAgICAgIC8vIGhlaWdodDonMjgwcHgnLFxuICAgICAgICBkaXNhYmxlQ2xvc2U6dHJ1ZSxcblxuICAgICAgfSlcbiAgICB9XG5cbiAgfVxuXG4gIGNsb3NlTG9hZGluZygpe1xuICAgIGlmKHRoaXMubG9hZGluZ05vdyl7XG4gICAgICB0aGlzLmxvYWRpbmcuY2xvc2UoKVxuICAgICAgdGhpcy5sb2FkaW5nTm93ID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICBFcnJvcih0aXRsZTpzdHJpbmcsIG1lc3NhZ2U6c3RyaW5nLCBzaG93Q2FuY2VsQnV0dG9uOmJvb2xlYW49ZmFsc2UsY29uZmlybUJ1dHRvblRleHQ6c3RyaW5nPSdBY2VwdGFyJywgY2FuY2VsQnV0dG9uVGV4dDpzdHJpbmc9J0NhbmNlbGFyJyl7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLHJlamVjdCk9PntcbiAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgdGV4dDogbWVzc2FnZSxcbiAgICAgICAgaWNvbjogJ2Vycm9yJyxcbiAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogc2hvd0NhbmNlbEJ1dHRvbixcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IGNvbmZpcm1CdXR0b25UZXh0LFxuICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiBjYW5jZWxCdXR0b25UZXh0LFxuICAgICAgICBjdXN0b21DbGFzczoge1xuICAgICAgICAgIGNvbmZpcm1CdXR0b246ICdjb25maXJtLWJ1dHRvbi1jbGFzcycsXG4gICAgICAgICAgY2FuY2VsQnV0dG9uOiAnY2FuY2VsLWJ1dHRvbi1jbGFzcycsXG4gICAgICAgIH1cbiAgICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbHVlKSB7XG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5kaXNtaXNzID09PSBTd2FsLkRpc21pc3NSZWFzb24uY2FuY2VsKSB7XG4gICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgU3VjY2Vzcyh0aXRsZTpzdHJpbmcsIG1lc3NhZ2U6c3RyaW5nLCBzaG93Q2FuY2VsQnV0dG9uOmJvb2xlYW49ZmFsc2UsY29uZmlybUJ1dHRvblRleHQ6c3RyaW5nPSdBY2VwdGFyJywgY2FuY2VsQnV0dG9uVGV4dDpzdHJpbmc9J0NhbmNlbGFyJyl7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUscmVqZWN0KT0+e1xuICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICB0ZXh0OiBtZXNzYWdlLFxuICAgICAgICBpY29uOiAnc3VjY2VzcycsXG4gICAgICAgIHNob3dDYW5jZWxCdXR0b246IHNob3dDYW5jZWxCdXR0b24sXG4gICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBjb25maXJtQnV0dG9uVGV4dCxcbiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogY2FuY2VsQnV0dG9uVGV4dCxcbiAgICAgICAgY3VzdG9tQ2xhc3M6IHtcbiAgICAgICAgICBjb25maXJtQnV0dG9uOiAnY29uZmlybS1idXR0b24tY2xhc3MnLFxuICAgICAgICAgIGNhbmNlbEJ1dHRvbjogJ2NhbmNlbC1idXR0b24tY2xhc3MnLFxuICAgICAgICB9XG4gICAgICB9KS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWx1ZSkge1xuICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuZGlzbWlzcyA9PT0gU3dhbC5EaXNtaXNzUmVhc29uLmNhbmNlbCkge1xuICAgICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIFdhcm5pbmcoXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgc2hvd0NhbmNlbEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGNvbmZpcm1CdXR0b25UZXh0OiBzdHJpbmcgPSAnQWNlcHRhcicsXG4gICAgY2FuY2VsQnV0dG9uVGV4dDogc3RyaW5nID0gJ0NhbmNlbGFyJyxcbiAgICBhbGxvd091dHNpZGVDbGljayA9IGZhbHNlXG4gICkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCB3YXJuaW5nRGF0YSA9IHtcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiBzaG93Q2FuY2VsQnV0dG9uLFxuICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogY29uZmlybUJ1dHRvblRleHQsXG4gICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IGNhbmNlbEJ1dHRvblRleHQsXG4gICAgICAgIHJlc29sdmU6IHJlc29sdmUsXG4gICAgICAgIGFsbG93T3V0c2lkZUNsaWNrXG4gICAgICB9O1xuXG4gICAgICB0aGlzLndhcm5pbmdRdWV1ZS5wdXNoKHdhcm5pbmdEYXRhKTtcblxuICAgICAgaWYgKCF0aGlzLnNob3dpbmdXYXJuaW5nKSB7XG4gICAgICAgIHRoaXMuc2hvd05leHRXYXJuaW5nKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNob3dOZXh0V2FybmluZygpIHtcbiAgICBpZiAodGhpcy53YXJuaW5nUXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zaG93aW5nV2FybmluZyA9IHRydWU7XG4gICAgICBjb25zdCB3YXJuaW5nRGF0YSA9IHRoaXMud2FybmluZ1F1ZXVlLnNoaWZ0KCk7XG5cbiAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgIHRpdGxlOiB3YXJuaW5nRGF0YS50aXRsZSxcbiAgICAgICAgdGV4dDogd2FybmluZ0RhdGEubWVzc2FnZSxcbiAgICAgICAgaWNvbjogJ3dhcm5pbmcnLFxuICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB3YXJuaW5nRGF0YS5zaG93Q2FuY2VsQnV0dG9uLFxuICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogd2FybmluZ0RhdGEuY29uZmlybUJ1dHRvblRleHQsXG4gICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IHdhcm5pbmdEYXRhLmNhbmNlbEJ1dHRvblRleHQsXG4gICAgICAgIGN1c3RvbUNsYXNzOiB7XG4gICAgICAgICAgY29uZmlybUJ1dHRvbjogJ2NvbmZpcm0tYnV0dG9uLWNsYXNzJyxcbiAgICAgICAgICBjYW5jZWxCdXR0b246ICdjYW5jZWwtYnV0dG9uLWNsYXNzJyxcbiAgICAgICAgfSxcbiAgICAgICAgYWxsb3dPdXRzaWRlQ2xpY2s6IHdhcm5pbmdEYXRhLmFsbG93T3V0c2lkZUNsaWNrLFxuICAgICAgfSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd2luZ1dhcm5pbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAocmVzdWx0LnZhbHVlKSB7XG4gICAgICAgICAgd2FybmluZ0RhdGEucmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuZGlzbWlzcyA9PT0gU3dhbC5EaXNtaXNzUmVhc29uLmNhbmNlbCkge1xuICAgICAgICAgIHdhcm5pbmdEYXRhLnJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd05leHRXYXJuaW5nKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBJbmZvKHRpdGxlOnN0cmluZywgbWVzc2FnZTpzdHJpbmcsIHNob3dDYW5jZWxCdXR0b246Ym9vbGVhbj1mYWxzZSxjb25maXJtQnV0dG9uVGV4dDpzdHJpbmc9J0FjZXB0YXInLCBjYW5jZWxCdXR0b25UZXh0OnN0cmluZz0nQ2FuY2VsYXInKXtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUscmVqZWN0KT0+e1xuICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICB0ZXh0OiBtZXNzYWdlLFxuICAgICAgICBpY29uOiAnaW5mbycsXG4gICAgICAgIHNob3dDYW5jZWxCdXR0b246IHNob3dDYW5jZWxCdXR0b24sXG4gICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBjb25maXJtQnV0dG9uVGV4dCxcbiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogY2FuY2VsQnV0dG9uVGV4dCxcbiAgICAgICAgY3VzdG9tQ2xhc3M6IHtcbiAgICAgICAgICBjb25maXJtQnV0dG9uOiAnY29uZmlybS1idXR0b24tY2xhc3MnLFxuICAgICAgICAgIGNhbmNlbEJ1dHRvbjogJ2NhbmNlbC1idXR0b24tY2xhc3MnLFxuICAgICAgICB9XG4gICAgICB9KS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWx1ZSkge1xuICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuZGlzbWlzcyA9PT0gU3dhbC5EaXNtaXNzUmVhc29uLmNhbmNlbCkge1xuICAgICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG5cbiAgU3VjY2Vzc1RvYXN0KG1lc3NhZ2U6c3RyaW5nLCBkdXJhdGlvbjpudW1iZXIgPSA0MDAwKXtcbiAgICBTd2FsLmZpcmUoe1xuICAgICAgcG9zaXRpb246ICd0b3AtZW5kJyxcbiAgICAgIGljb246ICdzdWNjZXNzJyxcbiAgICAgIHRpdGxlOiBtZXNzYWdlLFxuICAgICAgc2hvd0NvbmZpcm1CdXR0b246IGZhbHNlLFxuICAgICAgdG9hc3Q6dHJ1ZSxcbiAgICAgIHRpbWVyOiBkdXJhdGlvbixcbiAgICAgIHdpZHRoOidhdXRvJ1xuICAgIH0pXG4gIH1cblxuICBFcnJvclRvYXN0KG1lc3NhZ2U6c3RyaW5nLCBkdXJhdGlvbjpudW1iZXIgPSA0MDAwKXtcbiAgICBTd2FsLmZpcmUoe1xuICAgICAgcG9zaXRpb246ICd0b3AtZW5kJyxcbiAgICAgIGljb246ICdlcnJvcicsXG4gICAgICB0aXRsZTogbWVzc2FnZSxcbiAgICAgIHNob3dDb25maXJtQnV0dG9uOiBmYWxzZSxcbiAgICAgIHRvYXN0OnRydWUsXG4gICAgICB0aW1lcjogZHVyYXRpb24sXG4gICAgICB3aWR0aDonYXV0bydcbiAgICB9KVxuICB9XG5cbiAgV2FybmluZ1RvYXN0KG1lc3NhZ2U6c3RyaW5nLCBkdXJhdGlvbjpudW1iZXIgPSA0MDAwKXtcbiAgICBTd2FsLmZpcmUoe1xuICAgICAgcG9zaXRpb246ICd0b3AtZW5kJyxcbiAgICAgIGljb246ICd3YXJuaW5nJyxcbiAgICAgIHRpdGxlOiBtZXNzYWdlLFxuICAgICAgc2hvd0NvbmZpcm1CdXR0b246IGZhbHNlLFxuICAgICAgdG9hc3Q6dHJ1ZSxcbiAgICAgIHRpbWVyOiBkdXJhdGlvbixcbiAgICAgIHdpZHRoOidhdXRvJ1xuICAgIH0pXG4gIH1cblxuICBJbmZvVG9hc3QobWVzc2FnZTpzdHJpbmcsIGR1cmF0aW9uOm51bWJlciA9IDQwMDApe1xuICAgIFN3YWwuZmlyZSh7XG4gICAgICBwb3NpdGlvbjogJ3RvcC1lbmQnLFxuICAgICAgaWNvbjogJ2luZm8nLFxuICAgICAgdGl0bGU6IG1lc3NhZ2UsXG4gICAgICBzaG93Q29uZmlybUJ1dHRvbjogZmFsc2UsXG4gICAgICB0b2FzdDp0cnVlLFxuICAgICAgdGltZXI6IGR1cmF0aW9uLFxuICAgICAgd2lkdGg6J2F1dG8nXG4gICAgfSlcbiAgfVxuXG59XG4iXX0=