@datarailsshared/datarailsshared 1.6.310 → 1.6.312

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 (25) hide show
  1. package/datarailsshared-datarailsshared-1.6.312.tgz +0 -0
  2. package/esm2022/lib/dr-chip/dr-chip.component.mjs +26 -10
  3. package/esm2022/lib/dr-file-upload/directives/drag-drop.directive.mjs +63 -0
  4. package/esm2022/lib/dr-file-upload/dr-file-upload-item/dr-file-upload-item.component.mjs +168 -0
  5. package/esm2022/lib/dr-file-upload/dr-file-upload.component.mjs +512 -0
  6. package/esm2022/lib/dr-file-upload/index.mjs +6 -0
  7. package/esm2022/lib/dr-file-upload/models/file-upload.models.mjs +2 -0
  8. package/esm2022/lib/dr-file-upload/services/file-upload-validation.service.mjs +76 -0
  9. package/esm2022/lib/dr-file-upload/templates/dr-file-upload-image-template/dr-file-upload-image-template.component.mjs +135 -0
  10. package/esm2022/lib/dr-progress-bar/dr-progress-bar.component.mjs +39 -8
  11. package/esm2022/local-api.mjs +2 -1
  12. package/fesm2022/datarailsshared-datarailsshared.mjs +1233 -256
  13. package/fesm2022/datarailsshared-datarailsshared.mjs.map +1 -1
  14. package/lib/dr-chip/dr-chip.component.d.ts +8 -5
  15. package/lib/dr-file-upload/directives/drag-drop.directive.d.ts +12 -0
  16. package/lib/dr-file-upload/dr-file-upload-item/dr-file-upload-item.component.d.ts +18 -0
  17. package/lib/dr-file-upload/dr-file-upload.component.d.ts +66 -0
  18. package/lib/dr-file-upload/index.d.ts +5 -0
  19. package/lib/dr-file-upload/models/file-upload.models.d.ts +13 -0
  20. package/lib/dr-file-upload/services/file-upload-validation.service.d.ts +16 -0
  21. package/lib/dr-file-upload/templates/dr-file-upload-image-template/dr-file-upload-image-template.component.d.ts +22 -0
  22. package/lib/dr-progress-bar/dr-progress-bar.component.d.ts +13 -4
  23. package/local-api.d.ts +1 -0
  24. package/package.json +1 -1
  25. package/datarailsshared-datarailsshared-1.6.310.tgz +0 -0
@@ -0,0 +1,512 @@
1
+ import { booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, EventEmitter, HostBinding, inject, Input, Output, TemplateRef, ViewChild, } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { DrDragDropDirective } from './directives/drag-drop.directive';
4
+ import { DrFileUploadItemComponent } from './dr-file-upload-item/dr-file-upload-item.component';
5
+ import { DrButtonComponent } from '../dr-inputs/button/button.component';
6
+ import { FileUploadValidationService } from './services/file-upload-validation.service';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common";
9
+ const _c0 = ["dropzoneTemplate"];
10
+ const _c1 = ["fileItemTemplate"];
11
+ const _c2 = ["browseButtonTemplate"];
12
+ const _c3 = ["uploadTemplate"];
13
+ const _c4 = ["fileInput"];
14
+ function DrFileUploadComponent_div_2_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
15
+ i0.ɵɵelementContainer(0);
16
+ } }
17
+ function DrFileUploadComponent_div_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
18
+ i0.ɵɵelementContainerStart(0);
19
+ i0.ɵɵtemplate(1, DrFileUploadComponent_div_2_ng_container_1_ng_container_1_Template, 1, 0, "ng-container", 8);
20
+ i0.ɵɵelementContainerEnd();
21
+ } if (rf & 2) {
22
+ const ctx_r5 = i0.ɵɵnextContext(2);
23
+ i0.ɵɵadvance(1);
24
+ i0.ɵɵproperty("ngTemplateOutlet", ctx_r5.dropzoneTemplate);
25
+ } }
26
+ function DrFileUploadComponent_div_2_ng_template_2_span_4_Template(rf, ctx) { if (rf & 1) {
27
+ i0.ɵɵelementStart(0, "span", 15);
28
+ i0.ɵɵtext(1);
29
+ i0.ɵɵelementEnd();
30
+ } if (rf & 2) {
31
+ const ctx_r9 = i0.ɵɵnextContext(3);
32
+ i0.ɵɵadvance(1);
33
+ i0.ɵɵtextInterpolate(ctx_r9.computedDropzoneSubtext);
34
+ } }
35
+ function DrFileUploadComponent_div_2_ng_template_2_ng_container_7_ng_container_1_Template(rf, ctx) { if (rf & 1) {
36
+ i0.ɵɵelementContainer(0);
37
+ } }
38
+ function DrFileUploadComponent_div_2_ng_template_2_ng_container_7_Template(rf, ctx) { if (rf & 1) {
39
+ i0.ɵɵelementContainerStart(0);
40
+ i0.ɵɵtemplate(1, DrFileUploadComponent_div_2_ng_template_2_ng_container_7_ng_container_1_Template, 1, 0, "ng-container", 8);
41
+ i0.ɵɵelementContainerEnd();
42
+ } if (rf & 2) {
43
+ const ctx_r10 = i0.ɵɵnextContext(3);
44
+ i0.ɵɵadvance(1);
45
+ i0.ɵɵproperty("ngTemplateOutlet", ctx_r10.browseButtonTemplate);
46
+ } }
47
+ function DrFileUploadComponent_div_2_ng_template_2_ng_template_8_Template(rf, ctx) { if (rf & 1) {
48
+ const _r15 = i0.ɵɵgetCurrentView();
49
+ i0.ɵɵelementStart(0, "dr-button", 16);
50
+ i0.ɵɵlistener("click", function DrFileUploadComponent_div_2_ng_template_2_ng_template_8_Template_dr_button_click_0_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r14 = i0.ɵɵnextContext(3); ctx_r14.onBrowseClick(); return i0.ɵɵresetView($event.stopPropagation()); });
51
+ i0.ɵɵtext(1, " Browse ");
52
+ i0.ɵɵelementEnd();
53
+ } if (rf & 2) {
54
+ const ctx_r12 = i0.ɵɵnextContext(3);
55
+ i0.ɵɵattribute("aria-label", "Browse files. " + ctx_r12.acceptDescription);
56
+ } }
57
+ function DrFileUploadComponent_div_2_ng_template_2_Template(rf, ctx) { if (rf & 1) {
58
+ i0.ɵɵelementStart(0, "div", 9)(1, "div", 10)(2, "span", 11);
59
+ i0.ɵɵtext(3);
60
+ i0.ɵɵelementEnd();
61
+ i0.ɵɵtemplate(4, DrFileUploadComponent_div_2_ng_template_2_span_4_Template, 2, 1, "span", 12);
62
+ i0.ɵɵelementEnd();
63
+ i0.ɵɵelementStart(5, "span", 13);
64
+ i0.ɵɵtext(6, "Or");
65
+ i0.ɵɵelementEnd();
66
+ i0.ɵɵtemplate(7, DrFileUploadComponent_div_2_ng_template_2_ng_container_7_Template, 2, 1, "ng-container", 6);
67
+ i0.ɵɵtemplate(8, DrFileUploadComponent_div_2_ng_template_2_ng_template_8_Template, 2, 1, "ng-template", null, 14, i0.ɵɵtemplateRefExtractor);
68
+ i0.ɵɵelementEnd();
69
+ } if (rf & 2) {
70
+ const _r11 = i0.ɵɵreference(9);
71
+ const ctx_r7 = i0.ɵɵnextContext(2);
72
+ i0.ɵɵadvance(3);
73
+ i0.ɵɵtextInterpolate(ctx_r7.dropzoneText);
74
+ i0.ɵɵadvance(1);
75
+ i0.ɵɵproperty("ngIf", ctx_r7.computedDropzoneSubtext);
76
+ i0.ɵɵadvance(3);
77
+ i0.ɵɵproperty("ngIf", ctx_r7.browseButtonTemplate)("ngIfElse", _r11);
78
+ } }
79
+ function DrFileUploadComponent_div_2_Template(rf, ctx) { if (rf & 1) {
80
+ const _r17 = i0.ɵɵgetCurrentView();
81
+ i0.ɵɵelementStart(0, "div", 5);
82
+ i0.ɵɵlistener("fileDrop", function DrFileUploadComponent_div_2_Template_div_fileDrop_0_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r16 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r16.onFileDrop($event)); })("dragStateChange", function DrFileUploadComponent_div_2_Template_div_dragStateChange_0_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r18 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r18.onDragStateChange($event)); })("click", function DrFileUploadComponent_div_2_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r19 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r19.onBrowseClick()); })("keydown.enter", function DrFileUploadComponent_div_2_Template_div_keydown_enter_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r20 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r20.onBrowseClick()); })("keydown.space", function DrFileUploadComponent_div_2_Template_div_keydown_space_0_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r21 = i0.ɵɵnextContext(); ctx_r21.onBrowseClick(); return i0.ɵɵresetView($event.preventDefault()); });
83
+ i0.ɵɵtemplate(1, DrFileUploadComponent_div_2_ng_container_1_Template, 2, 1, "ng-container", 6);
84
+ i0.ɵɵtemplate(2, DrFileUploadComponent_div_2_ng_template_2_Template, 10, 4, "ng-template", null, 7, i0.ɵɵtemplateRefExtractor);
85
+ i0.ɵɵelementEnd();
86
+ } if (rf & 2) {
87
+ const _r6 = i0.ɵɵreference(3);
88
+ const ctx_r1 = i0.ɵɵnextContext();
89
+ i0.ɵɵattribute("tabindex", ctx_r1.disabled ? -1 : 0)("aria-label", ctx_r1.dropzoneAriaLabel)("aria-disabled", ctx_r1.disabled)("aria-describedby", ctx_r1.validationErrorMessage ? "file-upload-error" : null);
90
+ i0.ɵɵadvance(1);
91
+ i0.ɵɵproperty("ngIf", ctx_r1.dropzoneTemplate)("ngIfElse", _r6);
92
+ } }
93
+ function DrFileUploadComponent_ng_container_3_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
94
+ i0.ɵɵelementContainer(0);
95
+ } }
96
+ const _c5 = function (a0, a1) { return { $implicit: a0, remove: a1 }; };
97
+ function DrFileUploadComponent_ng_container_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
98
+ i0.ɵɵelementContainerStart(0);
99
+ i0.ɵɵtemplate(1, DrFileUploadComponent_ng_container_3_ng_container_1_ng_container_1_Template, 1, 0, "ng-container", 18);
100
+ i0.ɵɵelementContainerEnd();
101
+ } if (rf & 2) {
102
+ const ctx_r22 = i0.ɵɵnextContext(2);
103
+ i0.ɵɵadvance(1);
104
+ i0.ɵɵproperty("ngTemplateOutlet", ctx_r22.fileItemTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction2(2, _c5, ctx_r22.files[0], ctx_r22.onFileRemove.bind(ctx_r22)));
105
+ } }
106
+ function DrFileUploadComponent_ng_container_3_ng_template_2_Template(rf, ctx) { if (rf & 1) {
107
+ const _r27 = i0.ɵɵgetCurrentView();
108
+ i0.ɵɵelementStart(0, "div", 19)(1, "button", 20);
109
+ i0.ɵɵlistener("click", function DrFileUploadComponent_ng_container_3_ng_template_2_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r27); const ctx_r26 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r26.onFileRemove(ctx_r26.files[0])); });
110
+ i0.ɵɵelement(2, "i", 21);
111
+ i0.ɵɵelementEnd();
112
+ i0.ɵɵelement(3, "dr-file-upload-item", 22);
113
+ i0.ɵɵelementEnd();
114
+ } if (rf & 2) {
115
+ const ctx_r24 = i0.ɵɵnextContext(2);
116
+ i0.ɵɵattribute("aria-label", "Uploaded file: " + ctx_r24.files[0].file.name);
117
+ i0.ɵɵadvance(1);
118
+ i0.ɵɵattribute("aria-label", "Remove file " + ctx_r24.files[0].file.name);
119
+ i0.ɵɵadvance(2);
120
+ i0.ɵɵproperty("item", ctx_r24.files[0])("removable", false);
121
+ } }
122
+ function DrFileUploadComponent_ng_container_3_Template(rf, ctx) { if (rf & 1) {
123
+ i0.ɵɵelementContainerStart(0);
124
+ i0.ɵɵtemplate(1, DrFileUploadComponent_ng_container_3_ng_container_1_Template, 2, 5, "ng-container", 6);
125
+ i0.ɵɵtemplate(2, DrFileUploadComponent_ng_container_3_ng_template_2_Template, 4, 4, "ng-template", null, 17, i0.ɵɵtemplateRefExtractor);
126
+ i0.ɵɵelementContainerEnd();
127
+ } if (rf & 2) {
128
+ const _r23 = i0.ɵɵreference(3);
129
+ const ctx_r2 = i0.ɵɵnextContext();
130
+ i0.ɵɵadvance(1);
131
+ i0.ɵɵproperty("ngIf", ctx_r2.fileItemTemplate)("ngIfElse", _r23);
132
+ } }
133
+ function DrFileUploadComponent_ng_container_4_li_5_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
134
+ i0.ɵɵelementContainer(0);
135
+ } }
136
+ function DrFileUploadComponent_ng_container_4_li_5_ng_container_1_Template(rf, ctx) { if (rf & 1) {
137
+ i0.ɵɵelementContainerStart(0);
138
+ i0.ɵɵtemplate(1, DrFileUploadComponent_ng_container_4_li_5_ng_container_1_ng_container_1_Template, 1, 0, "ng-container", 18);
139
+ i0.ɵɵelementContainerEnd();
140
+ } if (rf & 2) {
141
+ const item_r30 = i0.ɵɵnextContext().$implicit;
142
+ const ctx_r31 = i0.ɵɵnextContext(2);
143
+ i0.ɵɵadvance(1);
144
+ i0.ɵɵproperty("ngTemplateOutlet", ctx_r31.fileItemTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction2(2, _c5, item_r30, ctx_r31.onFileRemove.bind(ctx_r31)));
145
+ } }
146
+ function DrFileUploadComponent_ng_container_4_li_5_ng_template_2_Template(rf, ctx) { if (rf & 1) {
147
+ const _r38 = i0.ɵɵgetCurrentView();
148
+ i0.ɵɵelementStart(0, "dr-file-upload-item", 30);
149
+ i0.ɵɵlistener("remove", function DrFileUploadComponent_ng_container_4_li_5_ng_template_2_Template_dr_file_upload_item_remove_0_listener() { i0.ɵɵrestoreView(_r38); const item_r30 = i0.ɵɵnextContext().$implicit; const ctx_r36 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r36.onFileRemove(item_r30)); });
150
+ i0.ɵɵelementEnd();
151
+ } if (rf & 2) {
152
+ const item_r30 = i0.ɵɵnextContext().$implicit;
153
+ i0.ɵɵproperty("item", item_r30)("removable", true)("compact", true);
154
+ } }
155
+ function DrFileUploadComponent_ng_container_4_li_5_Template(rf, ctx) { if (rf & 1) {
156
+ i0.ɵɵelementStart(0, "li", 28);
157
+ i0.ɵɵtemplate(1, DrFileUploadComponent_ng_container_4_li_5_ng_container_1_Template, 2, 5, "ng-container", 6);
158
+ i0.ɵɵtemplate(2, DrFileUploadComponent_ng_container_4_li_5_ng_template_2_Template, 1, 3, "ng-template", null, 29, i0.ɵɵtemplateRefExtractor);
159
+ i0.ɵɵelementEnd();
160
+ } if (rf & 2) {
161
+ const _r32 = i0.ɵɵreference(3);
162
+ const ctx_r28 = i0.ɵɵnextContext(2);
163
+ i0.ɵɵadvance(1);
164
+ i0.ɵɵproperty("ngIf", ctx_r28.fileItemTemplate)("ngIfElse", _r32);
165
+ } }
166
+ function DrFileUploadComponent_ng_container_4_div_6_Template(rf, ctx) { if (rf & 1) {
167
+ i0.ɵɵelementStart(0, "div", 31);
168
+ i0.ɵɵtext(1);
169
+ i0.ɵɵelementEnd();
170
+ } if (rf & 2) {
171
+ const ctx_r29 = i0.ɵɵnextContext(2);
172
+ i0.ɵɵadvance(1);
173
+ i0.ɵɵtextInterpolate2(" ", ctx_r29.failedFilesCount, " ", ctx_r29.failedFilesCount === 1 ? "file" : "files", " could not be uploaded. Please try again ");
174
+ } }
175
+ function DrFileUploadComponent_ng_container_4_Template(rf, ctx) { if (rf & 1) {
176
+ i0.ɵɵelementContainerStart(0);
177
+ i0.ɵɵelementStart(1, "div", 23)(2, "div", 24);
178
+ i0.ɵɵtext(3);
179
+ i0.ɵɵelementEnd();
180
+ i0.ɵɵelementStart(4, "ul", 25);
181
+ i0.ɵɵtemplate(5, DrFileUploadComponent_ng_container_4_li_5_Template, 4, 2, "li", 26);
182
+ i0.ɵɵelementEnd();
183
+ i0.ɵɵtemplate(6, DrFileUploadComponent_ng_container_4_div_6_Template, 2, 2, "div", 27);
184
+ i0.ɵɵelementEnd();
185
+ i0.ɵɵelementContainerEnd();
186
+ } if (rf & 2) {
187
+ const ctx_r3 = i0.ɵɵnextContext();
188
+ i0.ɵɵadvance(3);
189
+ i0.ɵɵtextInterpolate2(" ", ctx_r3.uploadedFiles.length, " ", ctx_r3.uploadedFiles.length === 1 ? "File" : "Files", " uploaded ");
190
+ i0.ɵɵadvance(1);
191
+ i0.ɵɵattribute("aria-label", ctx_r3.files.length + " files in upload queue");
192
+ i0.ɵɵadvance(1);
193
+ i0.ɵɵproperty("ngForOf", ctx_r3.files)("ngForTrackBy", ctx_r3.trackByFile);
194
+ i0.ɵɵadvance(1);
195
+ i0.ɵɵproperty("ngIf", ctx_r3.hasPartialSuccess);
196
+ } }
197
+ function DrFileUploadComponent_div_5_Template(rf, ctx) { if (rf & 1) {
198
+ i0.ɵɵelementStart(0, "div", 32);
199
+ i0.ɵɵtext(1);
200
+ i0.ɵɵelementEnd();
201
+ } if (rf & 2) {
202
+ const ctx_r4 = i0.ɵɵnextContext();
203
+ i0.ɵɵadvance(1);
204
+ i0.ɵɵtextInterpolate1(" ", ctx_r4.validationErrorMessage, "\n");
205
+ } }
206
+ export class DrFileUploadComponent {
207
+ constructor() {
208
+ this.cdr = inject(ChangeDetectorRef);
209
+ this.validationService = inject(FileUploadValidationService);
210
+ this.variant = 'single';
211
+ this.accept = '.xlsx,.xls';
212
+ this.maxFiles = 10;
213
+ this.disabled = false;
214
+ this.validateFormats = true;
215
+ this.dropzoneText = 'Drag & drop your .xlsx or .xls files here';
216
+ this.filesChange = new EventEmitter();
217
+ this.fileRemove = new EventEmitter();
218
+ this.validationError = new EventEmitter();
219
+ this._files = [];
220
+ this.isDragover = false;
221
+ }
222
+ set files(value) {
223
+ this._files = value;
224
+ }
225
+ get files() {
226
+ return this._files;
227
+ }
228
+ ngAfterViewInit() {
229
+ if (this.uploadTemplate) {
230
+ this.dropzoneTemplate = this.uploadTemplate.dropzoneTemplate;
231
+ this.fileItemTemplate = this.uploadTemplate.fileItemTemplate;
232
+ this.cdr.detectChanges();
233
+ }
234
+ }
235
+ get isDisabled() {
236
+ return this.disabled;
237
+ }
238
+ get hasDragover() {
239
+ return this.isDragover;
240
+ }
241
+ get hasFiles() {
242
+ return this.files.length > 0;
243
+ }
244
+ get isSingle() {
245
+ return this.variant === 'single';
246
+ }
247
+ get isMultiple() {
248
+ return this.variant === 'multiple';
249
+ }
250
+ get computedDropzoneSubtext() {
251
+ if (this.dropzoneSubtext) {
252
+ return this.dropzoneSubtext;
253
+ }
254
+ const hasMaxSize = this.maxFileSize !== undefined && this.maxFileSize !== Infinity && this.maxFileSize > 0;
255
+ const hasMaxFiles = this.maxFiles !== undefined && this.maxFiles !== Infinity && this.maxFiles > 0;
256
+ if (this.variant === 'multiple') {
257
+ const filesWord = this.maxFiles === 1 ? 'file' : 'files';
258
+ if (hasMaxFiles && hasMaxSize) {
259
+ return `(up to ${this.maxFiles} ${filesWord}, ${this.maxFileSize} MB each)`;
260
+ }
261
+ if (hasMaxFiles) {
262
+ return `(up to ${this.maxFiles} ${filesWord})`;
263
+ }
264
+ if (hasMaxSize) {
265
+ return `(up to ${this.maxFileSize} MB per file)`;
266
+ }
267
+ return '';
268
+ }
269
+ if (hasMaxSize) {
270
+ return `(up to ${this.maxFileSize} MB)`;
271
+ }
272
+ return '';
273
+ }
274
+ get validationErrorMessage() {
275
+ return this.invalidFormatError || this.invalidSizeError || this.overLimitError || this.errorMessage;
276
+ }
277
+ get showDropzone() {
278
+ if (this.variant === 'multiple') {
279
+ return true;
280
+ }
281
+ return this.files.length === 0;
282
+ }
283
+ get uploadedFiles() {
284
+ return this.files.filter((f) => f.status === 'success');
285
+ }
286
+ get failedFilesCount() {
287
+ return this.files.filter((f) => f.status === 'error').length;
288
+ }
289
+ get hasPartialSuccess() {
290
+ return this.uploadedFiles.length > 0 && this.failedFilesCount > 0;
291
+ }
292
+ get ariaLabel() {
293
+ if (this.customAriaLabel) {
294
+ return this.customAriaLabel;
295
+ }
296
+ const fileType = this.variant === 'single' ? 'file' : 'files';
297
+ return `Upload ${fileType}. ${this.acceptDescription}`;
298
+ }
299
+ get dropzoneAriaLabel() {
300
+ const action = this.variant === 'single' ? 'Click or drag and drop a file' : 'Click or drag and drop files';
301
+ return `${action}. ${this.acceptDescription}`;
302
+ }
303
+ get acceptDescription() {
304
+ const extensions = this.validationService.getAcceptedExtensions(this.accept);
305
+ if (extensions.length > 0) {
306
+ return `Accepted formats: ${extensions.map((e) => '.' + e).join(', ')}`;
307
+ }
308
+ const mimes = this.validationService.getAcceptedMimes(this.accept);
309
+ if (mimes.length > 0) {
310
+ return `Accepted types: ${mimes.join(', ')}`;
311
+ }
312
+ return 'All file types accepted';
313
+ }
314
+ trackByFile(_index, item) {
315
+ return item.file.name + item.file.size + item.file.lastModified;
316
+ }
317
+ onDragStateChange(isDragover) {
318
+ this.isDragover = isDragover;
319
+ this.cdr.markForCheck();
320
+ }
321
+ onFileDrop(fileList) {
322
+ this.handleFiles(fileList);
323
+ }
324
+ onBrowseClick() {
325
+ if (!this.disabled) {
326
+ this.fileInput?.nativeElement?.click();
327
+ }
328
+ }
329
+ onFileInputChange(event) {
330
+ const input = event.target;
331
+ if (input.files && input.files.length > 0) {
332
+ this.handleFiles(input.files);
333
+ input.value = '';
334
+ }
335
+ }
336
+ onFileRemove(item) {
337
+ this._files = this._files.filter((f) => f !== item);
338
+ this.fileRemove.emit(item.file);
339
+ this.filesChange.emit(this._files);
340
+ this.clearValidationErrors();
341
+ this.cdr.markForCheck();
342
+ }
343
+ handleFiles(fileList) {
344
+ if (this.disabled) {
345
+ return;
346
+ }
347
+ this.clearValidationErrors();
348
+ let filesArray = Array.from(fileList);
349
+ if (this.validateFormats) {
350
+ const result = this.validationService.filterByFormat(filesArray, this.accept);
351
+ filesArray = result.valid;
352
+ if (result.invalidFileName) {
353
+ this.invalidFormatError = `Invalid file format: ${result.invalidFileName}`;
354
+ this.validationError.emit({
355
+ type: 'format',
356
+ fileName: result.invalidFileName,
357
+ message: this.invalidFormatError,
358
+ });
359
+ }
360
+ }
361
+ if (this.maxFileSize !== undefined && this.maxFileSize !== Infinity && this.maxFileSize > 0) {
362
+ const result = this.validationService.filterBySize(filesArray, this.maxFileSize);
363
+ filesArray = result.valid;
364
+ if (result.oversizedFileName) {
365
+ this.invalidSizeError = `File too large: ${result.oversizedFileName} (max ${this.maxFileSize} MB)`;
366
+ this.validationError.emit({
367
+ type: 'size',
368
+ fileName: result.oversizedFileName,
369
+ message: this.invalidSizeError,
370
+ });
371
+ }
372
+ }
373
+ if (this.variant === 'multiple') {
374
+ const availableSlots = Math.max(this.maxFiles - this._files.length, 0);
375
+ if (availableSlots < filesArray.length) {
376
+ this.overLimitError = `Maximum ${this.maxFiles} files allowed`;
377
+ this.validationError.emit({
378
+ type: 'limit',
379
+ message: this.overLimitError,
380
+ });
381
+ filesArray = filesArray.slice(0, availableSlots);
382
+ }
383
+ }
384
+ if (filesArray.length === 0) {
385
+ this.cdr.markForCheck();
386
+ return;
387
+ }
388
+ const newItems = filesArray.map((file) => ({
389
+ file,
390
+ progress: 0,
391
+ status: 'pending',
392
+ }));
393
+ if (this.variant === 'single') {
394
+ this._files = newItems.slice(0, 1);
395
+ }
396
+ else {
397
+ this._files = [...this._files, ...newItems].slice(0, this.maxFiles);
398
+ }
399
+ this.filesChange.emit(this._files);
400
+ this.cdr.markForCheck();
401
+ }
402
+ clearValidationErrors() {
403
+ this.invalidFormatError = undefined;
404
+ this.invalidSizeError = undefined;
405
+ this.overLimitError = undefined;
406
+ }
407
+ /** @nocollapse */ static { this.ɵfac = function DrFileUploadComponent_Factory(t) { return new (t || DrFileUploadComponent)(); }; }
408
+ /** @nocollapse */ static { this.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: DrFileUploadComponent, selectors: [["dr-file-upload"]], contentQueries: function DrFileUploadComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
409
+ i0.ɵɵcontentQuery(dirIndex, _c0, 5);
410
+ i0.ɵɵcontentQuery(dirIndex, _c1, 5);
411
+ i0.ɵɵcontentQuery(dirIndex, _c2, 5);
412
+ i0.ɵɵcontentQuery(dirIndex, _c3, 5);
413
+ } if (rf & 2) {
414
+ let _t;
415
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.dropzoneTemplate = _t.first);
416
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.fileItemTemplate = _t.first);
417
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.browseButtonTemplate = _t.first);
418
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.uploadTemplate = _t.first);
419
+ } }, viewQuery: function DrFileUploadComponent_Query(rf, ctx) { if (rf & 1) {
420
+ i0.ɵɵviewQuery(_c4, 7);
421
+ } if (rf & 2) {
422
+ let _t;
423
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.fileInput = _t.first);
424
+ } }, hostVars: 10, hostBindings: function DrFileUploadComponent_HostBindings(rf, ctx) { if (rf & 2) {
425
+ i0.ɵɵclassProp("dr-file-upload--disabled", ctx.isDisabled)("dr-file-upload--dragover", ctx.hasDragover)("dr-file-upload--has-files", ctx.hasFiles)("dr-file-upload--single", ctx.isSingle)("dr-file-upload--multiple", ctx.isMultiple);
426
+ } }, inputs: { variant: "variant", accept: "accept", maxFileSize: "maxFileSize", maxFiles: "maxFiles", disabled: ["disabled", "disabled", booleanAttribute], validateFormats: ["validateFormats", "validateFormats", booleanAttribute], dropzoneText: "dropzoneText", dropzoneSubtext: "dropzoneSubtext", errorMessage: "errorMessage", customAriaLabel: ["aria-label", "customAriaLabel"], files: "files" }, outputs: { filesChange: "filesChange", fileRemove: "fileRemove", validationError: "validationError" }, standalone: true, features: [i0.ɵɵInputTransformsFeature, i0.ɵɵStandaloneFeature], decls: 6, vars: 8, consts: [["type", "file", "hidden", "", 3, "accept", "multiple", "change"], ["fileInput", ""], ["class", "dr-file-upload__dropzone", "role", "button", "drDragDrop", "", 3, "fileDrop", "dragStateChange", "click", "keydown.enter", "keydown.space", 4, "ngIf"], [4, "ngIf"], ["id", "file-upload-error", "class", "dr-file-upload__error", "role", "alert", "aria-live", "assertive", 4, "ngIf"], ["role", "button", "drDragDrop", "", 1, "dr-file-upload__dropzone", 3, "fileDrop", "dragStateChange", "click", "keydown.enter", "keydown.space"], [4, "ngIf", "ngIfElse"], ["defaultDropzone", ""], [4, "ngTemplateOutlet"], [1, "dr-file-upload__dropzone-content"], [1, "dr-file-upload__dropzone-text"], [1, "dr-file-upload__dropzone-title"], ["class", "dr-file-upload__dropzone-subtitle", 4, "ngIf"], ["aria-hidden", "true", 1, "dr-file-upload__dropzone-or"], ["defaultBrowseButton", ""], [1, "dr-file-upload__dropzone-subtitle"], ["theme", "secondary", "icon", "dr-icon-add", 3, "click"], ["defaultSingleFileItem", ""], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], ["role", "group", 1, "dr-file-upload__single-item-container"], ["type", "button", 1, "dr-file-upload__single-item-close", 3, "click"], ["aria-hidden", "true", 1, "dr-icon-exit"], [3, "item", "removable"], ["role", "region", "aria-label", "Uploaded files", 1, "dr-file-upload__files-section"], ["aria-live", "polite", 1, "dr-file-upload__files-header"], ["role", "list", 1, "dr-file-upload__files-list"], ["role", "listitem", 4, "ngFor", "ngForOf", "ngForTrackBy"], ["class", "dr-file-upload__partial-error", "role", "alert", "aria-live", "assertive", 4, "ngIf"], ["role", "listitem"], ["defaultMultipleFileItem", ""], [3, "item", "removable", "compact", "remove"], ["role", "alert", "aria-live", "assertive", 1, "dr-file-upload__partial-error"], ["id", "file-upload-error", "role", "alert", "aria-live", "assertive", 1, "dr-file-upload__error"]], template: function DrFileUploadComponent_Template(rf, ctx) { if (rf & 1) {
427
+ i0.ɵɵelementStart(0, "input", 0, 1);
428
+ i0.ɵɵlistener("change", function DrFileUploadComponent_Template_input_change_0_listener($event) { return ctx.onFileInputChange($event); });
429
+ i0.ɵɵelementEnd();
430
+ i0.ɵɵtemplate(2, DrFileUploadComponent_div_2_Template, 4, 6, "div", 2);
431
+ i0.ɵɵtemplate(3, DrFileUploadComponent_ng_container_3_Template, 4, 2, "ng-container", 3);
432
+ i0.ɵɵtemplate(4, DrFileUploadComponent_ng_container_4_Template, 7, 6, "ng-container", 3);
433
+ i0.ɵɵtemplate(5, DrFileUploadComponent_div_5_Template, 2, 1, "div", 4);
434
+ } if (rf & 2) {
435
+ i0.ɵɵproperty("accept", ctx.accept)("multiple", ctx.variant === "multiple");
436
+ i0.ɵɵattribute("aria-label", ctx.ariaLabel)("aria-describedby", ctx.validationErrorMessage ? "file-upload-error" : null);
437
+ i0.ɵɵadvance(2);
438
+ i0.ɵɵproperty("ngIf", ctx.showDropzone);
439
+ i0.ɵɵadvance(1);
440
+ i0.ɵɵproperty("ngIf", ctx.variant === "single" && ctx.files.length > 0);
441
+ i0.ɵɵadvance(1);
442
+ i0.ɵɵproperty("ngIf", ctx.variant === "multiple" && ctx.files.length > 0);
443
+ i0.ɵɵadvance(1);
444
+ i0.ɵɵproperty("ngIf", ctx.validationErrorMessage);
445
+ } }, dependencies: [CommonModule, i1.NgForOf, i1.NgIf, i1.NgTemplateOutlet, DrDragDropDirective, DrFileUploadItemComponent, DrButtonComponent], styles: ["[_nghost-%COMP%]{display:flex;flex-direction:column;gap:24px;width:100%}.dr-file-upload__dropzone[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:16px 32px;background:#fff;border:1px dashed #9ea1aa;border-radius:4px;cursor:pointer;transition:all .2s ease}.dr-file-upload__dropzone[_ngcontent-%COMP%]:hover{border-color:#4646ce;background-color:#f5f5f5}.dr-file-upload__dropzone[_ngcontent-%COMP%]:focus{outline:2px solid #4646ce;outline-offset:2px}.dr-file-upload__dropzone[_ngcontent-%COMP%]:focus:not(:focus-visible){outline:none}.dr-file-upload__dropzone[_ngcontent-%COMP%]:focus-visible{outline:2px solid #4646ce;outline-offset:2px;border-color:#4646ce}.dr-file-upload__dropzone-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:8px}.dr-file-upload__dropzone-text[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:4px}.dr-file-upload__dropzone-title[_ngcontent-%COMP%]{font-size:14px;line-height:24px;font-weight:400;color:#6d6e6f}.dr-file-upload__dropzone-subtitle[_ngcontent-%COMP%]{font-size:12px;line-height:16px;font-weight:400;color:#6d6e6f}.dr-file-upload__dropzone-or[_ngcontent-%COMP%]{font-size:14px;line-height:24px;font-weight:400;color:#6d6e6f}.dr-file-upload__files-section[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px}.dr-file-upload__files-header[_ngcontent-%COMP%]{font-size:14px;line-height:24px;font-weight:400;color:#333}.dr-file-upload__files-list[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:10px;list-style:none;padding:0;margin:0}.dr-file-upload__files-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{display:contents}.dr-file-upload__partial-error[_ngcontent-%COMP%], .dr-file-upload__error[_ngcontent-%COMP%]{font-size:12px;line-height:16px;font-weight:400;color:#bf1d30}.dr-file-upload__single-item-container[_ngcontent-%COMP%]{position:relative;padding:32px 16px;background:#fff;border:1px dashed #9ea1aa;border-radius:4px;min-height:126px;display:flex;align-items:center}.dr-file-upload__single-item-container[_ngcontent-%COMP%] dr-file-upload-item[_ngcontent-%COMP%]{border:none;padding:0;background:transparent}.dr-file-upload__single-item-close[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;position:absolute;top:4px;right:4px;padding:0;margin:0;border:none;background:transparent;cursor:pointer;z-index:1;border-radius:2px}.dr-file-upload__single-item-close[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:16px;color:#333}.dr-file-upload__single-item-close[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%]{color:#333}.dr-file-upload__single-item-close[_ngcontent-%COMP%]:focus{outline:2px solid #4646ce;outline-offset:2px}.dr-file-upload__single-item-close[_ngcontent-%COMP%]:focus:not(:focus-visible){outline:none}.dr-file-upload__single-item-close[_ngcontent-%COMP%]:focus-visible{outline:2px solid #4646ce;outline-offset:2px}.dr-file-upload--dragover[_nghost-%COMP%] .dr-file-upload__dropzone[_ngcontent-%COMP%]{background:#f5f5f5;border-color:#4646ce}.dr-file-upload--disabled[_nghost-%COMP%] .dr-file-upload__dropzone[_ngcontent-%COMP%]{pointer-events:none;opacity:.6}.dr-file-upload--disabled[_nghost-%COMP%] .dr-file-upload__dropzone[_ngcontent-%COMP%]:hover{border-color:#9ea1aa}.dr-file-upload--single[_nghost-%COMP%] .dr-file-upload__dropzone[_ngcontent-%COMP%]{min-height:148px}.dr-file-upload--multiple[_nghost-%COMP%] .dr-file-upload__dropzone[_ngcontent-%COMP%]{min-height:100px}"], changeDetection: 0 }); }
446
+ }
447
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DrFileUploadComponent, [{
448
+ type: Component,
449
+ args: [{ selector: 'dr-file-upload', standalone: true, imports: [CommonModule, DrDragDropDirective, DrFileUploadItemComponent, DrButtonComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<input\n #fileInput\n type=\"file\"\n [accept]=\"accept\"\n [multiple]=\"variant === 'multiple'\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-describedby]=\"validationErrorMessage ? 'file-upload-error' : null\"\n (change)=\"onFileInputChange($event)\"\n hidden />\n\n<div\n *ngIf=\"showDropzone\"\n class=\"dr-file-upload__dropzone\"\n role=\"button\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [attr.aria-label]=\"dropzoneAriaLabel\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-describedby]=\"validationErrorMessage ? 'file-upload-error' : null\"\n drDragDrop\n (fileDrop)=\"onFileDrop($event)\"\n (dragStateChange)=\"onDragStateChange($event)\"\n (click)=\"onBrowseClick()\"\n (keydown.enter)=\"onBrowseClick()\"\n (keydown.space)=\"onBrowseClick(); $event.preventDefault()\">\n <ng-container *ngIf=\"dropzoneTemplate; else defaultDropzone\">\n <ng-container *ngTemplateOutlet=\"dropzoneTemplate\"></ng-container>\n </ng-container>\n\n <ng-template #defaultDropzone>\n <div class=\"dr-file-upload__dropzone-content\">\n <div class=\"dr-file-upload__dropzone-text\">\n <span class=\"dr-file-upload__dropzone-title\">{{ dropzoneText }}</span>\n <span *ngIf=\"computedDropzoneSubtext\" class=\"dr-file-upload__dropzone-subtitle\">{{\n computedDropzoneSubtext\n }}</span>\n </div>\n <span class=\"dr-file-upload__dropzone-or\" aria-hidden=\"true\">Or</span>\n <ng-container *ngIf=\"browseButtonTemplate; else defaultBrowseButton\">\n <ng-container *ngTemplateOutlet=\"browseButtonTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultBrowseButton>\n <dr-button\n theme=\"secondary\"\n icon=\"dr-icon-add\"\n [attr.aria-label]=\"'Browse files. ' + acceptDescription\"\n (click)=\"onBrowseClick(); $event.stopPropagation()\">\n Browse\n </dr-button>\n </ng-template>\n </div>\n </ng-template>\n</div>\n\n<ng-container *ngIf=\"variant === 'single' && files.length > 0\">\n <ng-container *ngIf=\"fileItemTemplate; else defaultSingleFileItem\">\n <ng-container *ngTemplateOutlet=\"fileItemTemplate; context: { $implicit: files[0], remove: onFileRemove.bind(this) }\">\n </ng-container>\n </ng-container>\n\n <ng-template #defaultSingleFileItem>\n <div\n class=\"dr-file-upload__single-item-container\"\n role=\"group\"\n [attr.aria-label]=\"'Uploaded file: ' + files[0].file.name\">\n <button\n type=\"button\"\n class=\"dr-file-upload__single-item-close\"\n [attr.aria-label]=\"'Remove file ' + files[0].file.name\"\n (click)=\"onFileRemove(files[0])\">\n <i class=\"dr-icon-exit\" aria-hidden=\"true\"></i>\n </button>\n <dr-file-upload-item [item]=\"files[0]\" [removable]=\"false\"> </dr-file-upload-item>\n </div>\n </ng-template>\n</ng-container>\n\n<ng-container *ngIf=\"variant === 'multiple' && files.length > 0\">\n <div class=\"dr-file-upload__files-section\" role=\"region\" aria-label=\"Uploaded files\">\n <div class=\"dr-file-upload__files-header\" aria-live=\"polite\">\n {{ uploadedFiles.length }} {{ uploadedFiles.length === 1 ? 'File' : 'Files' }} uploaded\n </div>\n <ul class=\"dr-file-upload__files-list\" role=\"list\" [attr.aria-label]=\"files.length + ' files in upload queue'\">\n <li *ngFor=\"let item of files; trackBy: trackByFile\" role=\"listitem\">\n <ng-container *ngIf=\"fileItemTemplate; else defaultMultipleFileItem\">\n <ng-container\n *ngTemplateOutlet=\"fileItemTemplate; context: { $implicit: item, remove: onFileRemove.bind(this) }\">\n </ng-container>\n </ng-container>\n\n <ng-template #defaultMultipleFileItem>\n <dr-file-upload-item [item]=\"item\" [removable]=\"true\" [compact]=\"true\" (remove)=\"onFileRemove(item)\">\n </dr-file-upload-item>\n </ng-template>\n </li>\n </ul>\n <div *ngIf=\"hasPartialSuccess\" class=\"dr-file-upload__partial-error\" role=\"alert\" aria-live=\"assertive\">\n {{ failedFilesCount }} {{ failedFilesCount === 1 ? 'file' : 'files' }} could not be uploaded. Please try again\n </div>\n </div>\n</ng-container>\n\n<div\n *ngIf=\"validationErrorMessage\"\n id=\"file-upload-error\"\n class=\"dr-file-upload__error\"\n role=\"alert\"\n aria-live=\"assertive\">\n {{ validationErrorMessage }}\n</div>\n", styles: [":host{display:flex;flex-direction:column;gap:24px;width:100%}.dr-file-upload__dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:16px 32px;background:#fff;border:1px dashed #9ea1aa;border-radius:4px;cursor:pointer;transition:all .2s ease}.dr-file-upload__dropzone:hover{border-color:#4646ce;background-color:#f5f5f5}.dr-file-upload__dropzone:focus{outline:2px solid #4646ce;outline-offset:2px}.dr-file-upload__dropzone:focus:not(:focus-visible){outline:none}.dr-file-upload__dropzone:focus-visible{outline:2px solid #4646ce;outline-offset:2px;border-color:#4646ce}.dr-file-upload__dropzone-content{display:flex;flex-direction:column;align-items:center;gap:8px}.dr-file-upload__dropzone-text{display:flex;flex-direction:column;align-items:center;gap:4px}.dr-file-upload__dropzone-title{font-size:14px;line-height:24px;font-weight:400;color:#6d6e6f}.dr-file-upload__dropzone-subtitle{font-size:12px;line-height:16px;font-weight:400;color:#6d6e6f}.dr-file-upload__dropzone-or{font-size:14px;line-height:24px;font-weight:400;color:#6d6e6f}.dr-file-upload__files-section{display:flex;flex-direction:column;gap:8px}.dr-file-upload__files-header{font-size:14px;line-height:24px;font-weight:400;color:#333}.dr-file-upload__files-list{display:flex;flex-wrap:wrap;gap:10px;list-style:none;padding:0;margin:0}.dr-file-upload__files-list li{display:contents}.dr-file-upload__partial-error,.dr-file-upload__error{font-size:12px;line-height:16px;font-weight:400;color:#bf1d30}.dr-file-upload__single-item-container{position:relative;padding:32px 16px;background:#fff;border:1px dashed #9ea1aa;border-radius:4px;min-height:126px;display:flex;align-items:center}.dr-file-upload__single-item-container dr-file-upload-item{border:none;padding:0;background:transparent}.dr-file-upload__single-item-close{display:flex;align-items:center;justify-content:center;position:absolute;top:4px;right:4px;padding:0;margin:0;border:none;background:transparent;cursor:pointer;z-index:1;border-radius:2px}.dr-file-upload__single-item-close i{font-size:16px;color:#333}.dr-file-upload__single-item-close:hover i{color:#333}.dr-file-upload__single-item-close:focus{outline:2px solid #4646ce;outline-offset:2px}.dr-file-upload__single-item-close:focus:not(:focus-visible){outline:none}.dr-file-upload__single-item-close:focus-visible{outline:2px solid #4646ce;outline-offset:2px}:host(.dr-file-upload--dragover) .dr-file-upload__dropzone{background:#f5f5f5;border-color:#4646ce}:host(.dr-file-upload--disabled) .dr-file-upload__dropzone{pointer-events:none;opacity:.6}:host(.dr-file-upload--disabled) .dr-file-upload__dropzone:hover{border-color:#9ea1aa}:host(.dr-file-upload--single) .dr-file-upload__dropzone{min-height:148px}:host(.dr-file-upload--multiple) .dr-file-upload__dropzone{min-height:100px}\n"] }]
450
+ }], null, { variant: [{
451
+ type: Input
452
+ }], accept: [{
453
+ type: Input
454
+ }], maxFileSize: [{
455
+ type: Input
456
+ }], maxFiles: [{
457
+ type: Input
458
+ }], disabled: [{
459
+ type: Input,
460
+ args: [{ transform: booleanAttribute }]
461
+ }], validateFormats: [{
462
+ type: Input,
463
+ args: [{ transform: booleanAttribute }]
464
+ }], dropzoneText: [{
465
+ type: Input
466
+ }], dropzoneSubtext: [{
467
+ type: Input
468
+ }], errorMessage: [{
469
+ type: Input
470
+ }], customAriaLabel: [{
471
+ type: Input,
472
+ args: ['aria-label']
473
+ }], files: [{
474
+ type: Input
475
+ }], filesChange: [{
476
+ type: Output
477
+ }], fileRemove: [{
478
+ type: Output
479
+ }], validationError: [{
480
+ type: Output
481
+ }], dropzoneTemplate: [{
482
+ type: ContentChild,
483
+ args: ['dropzoneTemplate']
484
+ }], fileItemTemplate: [{
485
+ type: ContentChild,
486
+ args: ['fileItemTemplate']
487
+ }], browseButtonTemplate: [{
488
+ type: ContentChild,
489
+ args: ['browseButtonTemplate']
490
+ }], uploadTemplate: [{
491
+ type: ContentChild,
492
+ args: ['uploadTemplate']
493
+ }], fileInput: [{
494
+ type: ViewChild,
495
+ args: ['fileInput', { static: true }]
496
+ }], isDisabled: [{
497
+ type: HostBinding,
498
+ args: ['class.dr-file-upload--disabled']
499
+ }], hasDragover: [{
500
+ type: HostBinding,
501
+ args: ['class.dr-file-upload--dragover']
502
+ }], hasFiles: [{
503
+ type: HostBinding,
504
+ args: ['class.dr-file-upload--has-files']
505
+ }], isSingle: [{
506
+ type: HostBinding,
507
+ args: ['class.dr-file-upload--single']
508
+ }], isMultiple: [{
509
+ type: HostBinding,
510
+ args: ['class.dr-file-upload--multiple']
511
+ }] }); })();
512
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvZHItZmlsZS11cGxvYWQvZHItZmlsZS11cGxvYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvZHItZmlsZS11cGxvYWQvZHItZmlsZS11cGxvYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDaEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDekUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7Ozs7Ozs7OztJQ0loRix3QkFBa0U7OztJQUR0RSw2QkFBNkQ7SUFDekQsNkdBQWtFO0lBQ3RFLDBCQUFlOzs7SUFESSxlQUFrQztJQUFsQywwREFBa0M7OztJQU96QyxnQ0FBZ0Y7SUFBQSxZQUU5RTtJQUFBLGlCQUFPOzs7SUFGdUUsZUFFOUU7SUFGOEUsb0RBRTlFOzs7SUFJRix3QkFBc0U7OztJQUQxRSw2QkFBcUU7SUFDakUsMkhBQXNFO0lBQzFFLDBCQUFlOzs7SUFESSxlQUFzQztJ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TixlQUFlO2tCQURkLEtBQUs7bUJBQUMsWUFBWTtZQUdmLEtBQUs7a0JBRFIsS0FBSztZQVNHLFdBQVc7a0JBRG5CLE1BQU07WUFHRSxVQUFVO2tCQURsQixNQUFNO1lBR0UsZUFBZTtrQkFEdkIsTUFBTTtZQVNQLGdCQUFnQjtrQkFEZixZQUFZO21CQUFDLGtCQUFrQjtZQUdoQyxnQkFBZ0I7a0JBRGYsWUFBWTttQkFBQyxrQkFBa0I7WUFHaEMsb0JBQW9CO2tCQURuQixZQUFZO21CQUFDLHNCQUFzQjtZQUdwQyxjQUFjO2tCQURiLFlBQVk7bUJBQUMsZ0JBQWdCO1lBSTlCLFNBQVM7a0JBRFIsU0FBUzttQkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO1lBY3BDLFVBQVU7a0JBRGIsV0FBVzttQkFBQyxnQ0FBZ0M7WUFNekMsV0FBVztrQkFEZCxXQUFXO21CQUFDLGdDQUFnQztZQU16QyxRQUFRO2tCQURYLFdBQVc7bUJBQUMsaUNBQWlDO1lBTTFDLFFBQVE7a0JBRFgsV0FBVzttQkFBQyw4QkFBOEI7WUFNdkMsVUFBVTtrQkFEYixXQUFXO21CQUFDLGdDQUFnQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZpbGVVcGxvYWRWYXJpYW50LCBGaWxlVXBsb2FkSXRlbSwgRmlsZVVwbG9hZFRlbXBsYXRlIH0gZnJvbSAnLi9tb2RlbHMvZmlsZS11cGxvYWQubW9kZWxzJztcbmltcG9ydCB7IERyRHJhZ0Ryb3BEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvZHJhZy1kcm9wLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEckZpbGVVcGxvYWRJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9kci1maWxlLXVwbG9hZC1pdGVtL2RyLWZpbGUtdXBsb2FkLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IERyQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vZHItaW5wdXRzL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IEZpbGVVcGxvYWRWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZmlsZS11cGxvYWQtdmFsaWRhdGlvbi5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdkci1maWxlLXVwbG9hZCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBEckRyYWdEcm9wRGlyZWN0aXZlLCBEckZpbGVVcGxvYWRJdGVtQ29tcG9uZW50LCBEckJ1dHRvbkNvbXBvbmVudF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RyLWZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9kci1maWxlLXVwbG9hZC5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEckZpbGVVcGxvYWRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSB2YWxpZGF0aW9uU2VydmljZSA9IGluamVjdChGaWxlVXBsb2FkVmFsaWRhdGlvblNlcnZpY2UpO1xuXG4gICAgQElucHV0KClcbiAgICB2YXJpYW50OiBGaWxlVXBsb2FkVmFyaWFudCA9ICdzaW5nbGUnO1xuICAgIEBJbnB1dCgpXG4gICAgYWNjZXB0ID0gJy54bHN4LC54bHMnO1xuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgbWF4aW11bSBhbGxvd2VkIGZpbGUgc2l6ZSBmb3IgdXBsb2FkcywgaW4gbWVnYWJ5dGVzIChNQikuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBtYXhGaWxlU2l6ZT86IG51bWJlcjtcbiAgICBASW5wdXQoKVxuICAgIG1heEZpbGVzID0gMTA7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgZGlzYWJsZWQgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICB2YWxpZGF0ZUZvcm1hdHMgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBkcm9wem9uZVRleHQgPSAnRHJhZyAmIGRyb3AgeW91ciAueGxzeCBvciAueGxzIGZpbGVzIGhlcmUnO1xuICAgIEBJbnB1dCgpXG4gICAgZHJvcHpvbmVTdWJ0ZXh0Pzogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgZXJyb3JNZXNzYWdlPzogc3RyaW5nO1xuICAgIEBJbnB1dCgnYXJpYS1sYWJlbCcpXG4gICAgY3VzdG9tQXJpYUxhYmVsPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGZpbGVzKHZhbHVlOiBGaWxlVXBsb2FkSXRlbVtdKSB7XG4gICAgICAgIHRoaXMuX2ZpbGVzID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBmaWxlcygpOiBGaWxlVXBsb2FkSXRlbVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGVzO1xuICAgIH1cblxuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGZpbGVzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlVXBsb2FkSXRlbVtdPigpO1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGZpbGVSZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGU+KCk7XG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgdmFsaWRhdGlvbkVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjx7IHR5cGU6ICdmb3JtYXQnIHwgJ3NpemUnIHwgJ2xpbWl0JzsgZmlsZU5hbWU/OiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuXG4gICAgcHJpdmF0ZSBfZmlsZXM6IEZpbGVVcGxvYWRJdGVtW10gPSBbXTtcbiAgICBpbnZhbGlkRm9ybWF0RXJyb3I/OiBzdHJpbmc7XG4gICAgaW52YWxpZFNpemVFcnJvcj86IHN0cmluZztcbiAgICBvdmVyTGltaXRFcnJvcj86IHN0cmluZztcblxuICAgIEBDb250ZW50Q2hpbGQoJ2Ryb3B6b25lVGVtcGxhdGUnKVxuICAgIGRyb3B6b25lVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcbiAgICBAQ29udGVudENoaWxkKCdmaWxlSXRlbVRlbXBsYXRlJylcbiAgICBmaWxlSXRlbVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XG4gICAgQENvbnRlbnRDaGlsZCgnYnJvd3NlQnV0dG9uVGVtcGxhdGUnKVxuICAgIGJyb3dzZUJ1dHRvblRlbXBsYXRlPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XG4gICAgQENvbnRlbnRDaGlsZCgndXBsb2FkVGVtcGxhdGUnKVxuICAgIHVwbG9hZFRlbXBsYXRlPzogRmlsZVVwbG9hZFRlbXBsYXRlO1xuXG4gICAgQFZpZXdDaGlsZCgnZmlsZUlucHV0JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBmaWxlSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgaXNEcmFnb3ZlciA9IGZhbHNlO1xuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy51cGxvYWRUZW1wbGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5kcm9wem9uZVRlbXBsYXRlID0gdGhpcy51cGxvYWRUZW1wbGF0ZS5kcm9wem9uZVRlbXBsYXRlO1xuICAgICAgICAgICAgdGhpcy5maWxlSXRlbVRlbXBsYXRlID0gdGhpcy51cGxvYWRUZW1wbGF0ZS5maWxlSXRlbVRlbXBsYXRlO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kci1maWxlLXVwbG9hZC0tZGlzYWJsZWQnKVxuICAgIGdldCBpc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRyLWZpbGUtdXBsb2FkLS1kcmFnb3ZlcicpXG4gICAgZ2V0IGhhc0RyYWdvdmVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0RyYWdvdmVyO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZHItZmlsZS11cGxvYWQtLWhhcy1maWxlcycpXG4gICAgZ2V0IGhhc0ZpbGVzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWxlcy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZHItZmlsZS11cGxvYWQtLXNpbmdsZScpXG4gICAgZ2V0IGlzU2luZ2xlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YXJpYW50ID09PSAnc2luZ2xlJztcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRyLWZpbGUtdXBsb2FkLS1tdWx0aXBsZScpXG4gICAgZ2V0IGlzTXVsdGlwbGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhcmlhbnQgPT09ICdtdWx0aXBsZSc7XG4gICAgfVxuXG4gICAgZ2V0IGNvbXB1dGVkRHJvcHpvbmVTdWJ0ZXh0KCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmRyb3B6b25lU3VidGV4dCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZHJvcHpvbmVTdWJ0ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhc01heFNpemUgPSB0aGlzLm1heEZpbGVTaXplICE9PSB1bmRlZmluZWQgJiYgdGhpcy5tYXhGaWxlU2l6ZSAhPT0gSW5maW5pdHkgJiYgdGhpcy5tYXhGaWxlU2l6ZSA+IDA7XG4gICAgICAgIGNvbnN0IGhhc01heEZpbGVzID0gdGhpcy5tYXhGaWxlcyAhPT0gdW5kZWZpbmVkICYmIHRoaXMubWF4RmlsZXMgIT09IEluZmluaXR5ICYmIHRoaXMubWF4RmlsZXMgPiAwO1xuXG4gICAgICAgIGlmICh0aGlzLnZhcmlhbnQgPT09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzV29yZCA9IHRoaXMubWF4RmlsZXMgPT09IDEgPyAnZmlsZScgOiAnZmlsZXMnO1xuICAgICAgICAgICAgaWYgKGhhc01heEZpbGVzICYmIGhhc01heFNpemUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCh1cCB0byAke3RoaXMubWF4RmlsZXN9ICR7ZmlsZXNXb3JkfSwgJHt0aGlzLm1heEZpbGVTaXplfSBNQiBlYWNoKWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzTWF4RmlsZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCh1cCB0byAke3RoaXMubWF4RmlsZXN9ICR7ZmlsZXNXb3JkfSlgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhhc01heFNpemUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCh1cCB0byAke3RoaXMubWF4RmlsZVNpemV9IE1CIHBlciBmaWxlKWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc01heFNpemUpIHtcbiAgICAgICAgICAgIHJldHVybiBgKHVwIHRvICR7dGhpcy5tYXhGaWxlU2l6ZX0gTUIpYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZ2V0IHZhbGlkYXRpb25FcnJvck1lc3NhZ2UoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW52YWxpZEZvcm1hdEVycm9yIHx8IHRoaXMuaW52YWxpZFNpemVFcnJvciB8fCB0aGlzLm92ZXJMaW1pdEVycm9yIHx8IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgIH1cblxuICAgIGdldCBzaG93RHJvcHpvbmUoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLnZhcmlhbnQgPT09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZpbGVzLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBnZXQgdXBsb2FkZWRGaWxlcygpOiBGaWxlVXBsb2FkSXRlbVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsZXMuZmlsdGVyKChmKSA9PiBmLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKTtcbiAgICB9XG5cbiAgICBnZXQgZmFpbGVkRmlsZXNDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5maWxlcy5maWx0ZXIoKGYpID0+IGYuc3RhdHVzID09PSAnZXJyb3InKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgZ2V0IGhhc1BhcnRpYWxTdWNjZXNzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRlZEZpbGVzLmxlbmd0aCA+IDAgJiYgdGhpcy5mYWlsZWRGaWxlc0NvdW50ID4gMDtcbiAgICB9XG5cbiAgICBnZXQgYXJpYUxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmN1c3RvbUFyaWFMYWJlbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tQXJpYUxhYmVsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbGVUeXBlID0gdGhpcy52YXJpYW50ID09PSAnc2luZ2xlJyA/ICdmaWxlJyA6ICdmaWxlcyc7XG4gICAgICAgIHJldHVybiBgVXBsb2FkICR7ZmlsZVR5cGV9LiAke3RoaXMuYWNjZXB0RGVzY3JpcHRpb259YDtcbiAgICB9XG5cbiAgICBnZXQgZHJvcHpvbmVBcmlhTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy52YXJpYW50ID09PSAnc2luZ2xlJyA/ICdDbGljayBvciBkcmFnIGFuZCBkcm9wIGEgZmlsZScgOiAnQ2xpY2sgb3IgZHJhZyBhbmQgZHJvcCBmaWxlcyc7XG4gICAgICAgIHJldHVybiBgJHthY3Rpb259LiAke3RoaXMuYWNjZXB0RGVzY3JpcHRpb259YDtcbiAgICB9XG5cbiAgICBnZXQgYWNjZXB0RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9ucyA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UuZ2V0QWNjZXB0ZWRFeHRlbnNpb25zKHRoaXMuYWNjZXB0KTtcbiAgICAgICAgaWYgKGV4dGVuc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGBBY2NlcHRlZCBmb3JtYXRzOiAke2V4dGVuc2lvbnMubWFwKChlKSA9PiAnLicgKyBlKS5qb2luKCcsICcpfWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWltZXMgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmdldEFjY2VwdGVkTWltZXModGhpcy5hY2NlcHQpO1xuICAgICAgICBpZiAobWltZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGBBY2NlcHRlZCB0eXBlczogJHttaW1lcy5qb2luKCcsICcpfWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdBbGwgZmlsZSB0eXBlcyBhY2NlcHRlZCc7XG4gICAgfVxuXG4gICAgdHJhY2tCeUZpbGUoX2luZGV4OiBudW1iZXIsIGl0ZW06IEZpbGVVcGxvYWRJdGVtKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uZmlsZS5uYW1lICsgaXRlbS5maWxlLnNpemUgKyBpdGVtLmZpbGUubGFzdE1vZGlmaWVkO1xuICAgIH1cblxuICAgIG9uRHJhZ1N0YXRlQ2hhbmdlKGlzRHJhZ292ZXI6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0RyYWdvdmVyID0gaXNEcmFnb3ZlcjtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgb25GaWxlRHJvcChmaWxlTGlzdDogRmlsZUxpc3QpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oYW5kbGVGaWxlcyhmaWxlTGlzdCk7XG4gICAgfVxuXG4gICAgb25Ccm93c2VDbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVJbnB1dD8ubmF0aXZlRWxlbWVudD8uY2xpY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRmlsZUlucHV0Q2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBpZiAoaW5wdXQuZmlsZXMgJiYgaW5wdXQuZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVGaWxlcyhpbnB1dC5maWxlcyk7XG4gICAgICAgICAgICBpbnB1dC52YWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25GaWxlUmVtb3ZlKGl0ZW06IEZpbGVVcGxvYWRJdGVtKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZpbGVzID0gdGhpcy5fZmlsZXMuZmlsdGVyKChmKSA9PiBmICE9PSBpdGVtKTtcbiAgICAgICAgdGhpcy5maWxlUmVtb3ZlLmVtaXQoaXRlbS5maWxlKTtcbiAgICAgICAgdGhpcy5maWxlc0NoYW5nZS5lbWl0KHRoaXMuX2ZpbGVzKTtcbiAgICAgICAgdGhpcy5jbGVhclZhbGlkYXRpb25FcnJvcnMoKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVGaWxlcyhmaWxlTGlzdDogRmlsZUxpc3QpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xlYXJWYWxpZGF0aW9uRXJyb3JzKCk7XG5cbiAgICAgICAgbGV0IGZpbGVzQXJyYXkgPSBBcnJheS5mcm9tKGZpbGVMaXN0KTtcblxuICAgICAgICBpZiAodGhpcy52YWxpZGF0ZUZvcm1hdHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UuZmlsdGVyQnlGb3JtYXQoZmlsZXNBcnJheSwgdGhpcy5hY2NlcHQpO1xuICAgICAgICAgICAgZmlsZXNBcnJheSA9IHJlc3VsdC52YWxpZDtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuaW52YWxpZEZpbGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkRm9ybWF0RXJyb3IgPSBgSW52YWxpZCBmaWxlIGZvcm1hdDogJHtyZXN1bHQuaW52YWxpZEZpbGVOYW1lfWA7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3IuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdmb3JtYXQnLFxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogcmVzdWx0LmludmFsaWRGaWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5pbnZhbGlkRm9ybWF0RXJyb3IsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tYXhGaWxlU2l6ZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMubWF4RmlsZVNpemUgIT09IEluZmluaXR5ICYmIHRoaXMubWF4RmlsZVNpemUgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmZpbHRlckJ5U2l6ZShmaWxlc0FycmF5LCB0aGlzLm1heEZpbGVTaXplKTtcbiAgICAgICAgICAgIGZpbGVzQXJyYXkgPSByZXN1bHQudmFsaWQ7XG4gICAgICAgICAgICBpZiAocmVzdWx0Lm92ZXJzaXplZEZpbGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkU2l6ZUVycm9yID0gYEZpbGUgdG9vIGxhcmdlOiAke3Jlc3VsdC5vdmVyc2l6ZWRGaWxlTmFtZX0gKG1heCAke3RoaXMubWF4RmlsZVNpemV9IE1CKWA7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3IuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzaXplJyxcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IHJlc3VsdC5vdmVyc2l6ZWRGaWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5pbnZhbGlkU2l6ZUVycm9yLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudmFyaWFudCA9PT0gJ211bHRpcGxlJykge1xuICAgICAgICAgICAgY29uc3QgYXZhaWxhYmxlU2xvdHMgPSBNYXRoLm1heCh0aGlzLm1heEZpbGVzIC0gdGhpcy5fZmlsZXMubGVuZ3RoLCAwKTtcbiAgICAgICAgICAgIGlmIChhdmFpbGFibGVTbG90cyA8IGZpbGVzQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vdmVyTGltaXRFcnJvciA9IGBNYXhpbXVtICR7dGhpcy5tYXhGaWxlc30gZmlsZXMgYWxsb3dlZGA7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3IuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsaW1pdCcsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMub3ZlckxpbWl0RXJyb3IsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZmlsZXNBcnJheSA9IGZpbGVzQXJyYXkuc2xpY2UoMCwgYXZhaWxhYmxlU2xvdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzQXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld0l0ZW1zOiBGaWxlVXBsb2FkSXRlbVtdID0gZmlsZXNBcnJheS5tYXAoKGZpbGUpID0+ICh7XG4gICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgcHJvZ3Jlc3M6IDAsXG4gICAgICAgICAgICBzdGF0dXM6ICdwZW5kaW5nJyBhcyBjb25zdCxcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGlmICh0aGlzLnZhcmlhbnQgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICB0aGlzLl9maWxlcyA9IG5ld0l0ZW1zLnNsaWNlKDAsIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZmlsZXMgPSBbLi4udGhpcy5fZmlsZXMsIC4uLm5ld0l0ZW1zXS5zbGljZSgwLCB0aGlzLm1heEZpbGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlsZXNDaGFuZ2UuZW1pdCh0aGlzLl9maWxlcyk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJWYWxpZGF0aW9uRXJyb3JzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmludmFsaWRGb3JtYXRFcnJvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5pbnZhbGlkU2l6ZUVycm9yID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm92ZXJMaW1pdEVycm9yID0gdW5kZWZpbmVkO1xuICAgIH1cbn1cbiIsIjxpbnB1dFxuICAgICNmaWxlSW5wdXRcbiAgICB0eXBlPVwiZmlsZVwiXG4gICAgW2FjY2VwdF09XCJhY2NlcHRcIlxuICAgIFttdWx0aXBsZV09XCJ2YXJpYW50ID09PSAnbXVsdGlwbGUnXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJ2YWxpZGF0aW9uRXJyb3JNZXNzYWdlID8gJ2ZpbGUtdXBsb2FkLWVycm9yJyA6IG51bGxcIlxuICAgIChjaGFuZ2UpPVwib25GaWxlSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgaGlkZGVuIC8+XG5cbjxkaXZcbiAgICAqbmdJZj1cInNob3dEcm9wem9uZVwiXG4gICAgY2xhc3M9XCJkci1maWxlLXVwbG9hZF9fZHJvcHpvbmVcIlxuICAgIHJvbGU9XCJidXR0b25cIlxuICAgIFthdHRyLnRhYmluZGV4XT1cImRpc2FibGVkID8gLTEgOiAwXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImRyb3B6b25lQXJpYUxhYmVsXCJcbiAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cInZhbGlkYXRpb25FcnJvck1lc3NhZ2UgPyAnZmlsZS11cGxvYWQtZXJyb3InIDogbnVsbFwiXG4gICAgZHJEcmFnRHJvcFxuICAgIChmaWxlRHJvcCk9XCJvbkZpbGVEcm9wKCRldmVudClcIlxuICAgIChkcmFnU3RhdGVDaGFuZ2UpPVwib25EcmFnU3RhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKGNsaWNrKT1cIm9uQnJvd3NlQ2xpY2soKVwiXG4gICAgKGtleWRvd24uZW50ZXIpPVwib25Ccm93c2VDbGljaygpXCJcbiAgICAoa2V5ZG93bi5zcGFjZSk9XCJvbkJyb3dzZUNsaWNrKCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRyb3B6b25lVGVtcGxhdGU7IGVsc2UgZGVmYXVsdERyb3B6b25lXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wem9uZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHREcm9wem9uZT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRyLWZpbGUtdXBsb2FkX19kcm9wem9uZS1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHItZmlsZS11cGxvYWRfX2Ryb3B6b25lLXRleHRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRyLWZpbGUtdXBsb2FkX19kcm9wem9uZS10aXRsZVwiPnt7IGRyb3B6b25lVGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbXB1dGVkRHJvcHpvbmVTdWJ0ZXh0XCIgY2xhc3M9XCJkci1maWxlLXVwbG9hZF9fZHJvcHpvbmUtc3VidGl0bGVcIj57e1xuICAgICAgICAgICAgICAgICAgICBjb21wdXRlZERyb3B6b25lU3VidGV4dFxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRyLWZpbGUtdXBsb2FkX19kcm9wem9uZS1vclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPk9yPC9zcGFuPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJyb3dzZUJ1dHRvblRlbXBsYXRlOyBlbHNlIGRlZmF1bHRCcm93c2VCdXR0b25cIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnJvd3NlQnV0dG9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0QnJvd3NlQnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkci1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgdGhlbWU9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZHItaWNvbi1hZGRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidCcm93c2UgZmlsZXMuICcgKyBhY2NlcHREZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkJyb3dzZUNsaWNrKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICBCcm93c2VcbiAgICAgICAgICAgICAgICA8L2RyLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInZhcmlhbnQgPT09ICdzaW5nbGUnICYmIGZpbGVzLmxlbmd0aCA+IDBcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsZUl0ZW1UZW1wbGF0ZTsgZWxzZSBkZWZhdWx0U2luZ2xlRmlsZUl0ZW1cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpbGVJdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBmaWxlc1swXSwgcmVtb3ZlOiBvbkZpbGVSZW1vdmUuYmluZCh0aGlzKSB9XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0U2luZ2xlRmlsZUl0ZW0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZHItZmlsZS11cGxvYWRfX3NpbmdsZS1pdGVtLWNvbnRhaW5lclwiXG4gICAgICAgICAgICByb2xlPVwiZ3JvdXBcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInVXBsb2FkZWQgZmlsZTogJyArIGZpbGVzWzBdLmZpbGUubmFtZVwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHItZmlsZS11cGxvYWRfX3NpbmdsZS1pdGVtLWNsb3NlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidSZW1vdmUgZmlsZSAnICsgZmlsZXNbMF0uZmlsZS5uYW1lXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25GaWxlUmVtb3ZlKGZpbGVzWzBdKVwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZHItaWNvbi1leGl0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8ZHItZmlsZS11cGxvYWQtaXRlbSBbaXRlbV09XCJmaWxlc1swXVwiIFtyZW1vdmFibGVdPVwiZmFsc2VcIj4gPC9kci1maWxlLXVwbG9hZC1pdGVtPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ2YXJpYW50ID09PSAnbXVsdGlwbGUnICYmIGZpbGVzLmxlbmd0aCA+IDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZHItZmlsZS11cGxvYWRfX2ZpbGVzLXNlY3Rpb25cIiByb2xlPVwicmVnaW9uXCIgYXJpYS1sYWJlbD1cIlVwbG9hZGVkIGZpbGVzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkci1maWxlLXVwbG9hZF9fZmlsZXMtaGVhZGVyXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgICAgICAgICB7eyB1cGxvYWRlZEZpbGVzLmxlbmd0aCB9fSB7eyB1cGxvYWRlZEZpbGVzLmxlbmd0aCA9PT0gMSA/ICdGaWxlJyA6ICdGaWxlcycgfX0gdXBsb2FkZWRcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDx1bCBjbGFzcz1cImRyLWZpbGUtdXBsb2FkX19maWxlcy1saXN0XCIgcm9sZT1cImxpc3RcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImZpbGVzLmxlbmd0aCArICcgZmlsZXMgaW4gdXBsb2FkIHF1ZXVlJ1wiPlxuICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbGVzOyB0cmFja0J5OiB0cmFja0J5RmlsZVwiIHJvbGU9XCJsaXN0aXRlbVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWxlSXRlbVRlbXBsYXRlOyBlbHNlIGRlZmF1bHRNdWx0aXBsZUZpbGVJdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsZUl0ZW1UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0sIHJlbW92ZTogb25GaWxlUmVtb3ZlLmJpbmQodGhpcykgfVwiPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdE11bHRpcGxlRmlsZUl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxkci1maWxlLXVwbG9hZC1pdGVtIFtpdGVtXT1cIml0ZW1cIiBbcmVtb3ZhYmxlXT1cInRydWVcIiBbY29tcGFjdF09XCJ0cnVlXCIgKHJlbW92ZSk9XCJvbkZpbGVSZW1vdmUoaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9kci1maWxlLXVwbG9hZC1pdGVtPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaGFzUGFydGlhbFN1Y2Nlc3NcIiBjbGFzcz1cImRyLWZpbGUtdXBsb2FkX19wYXJ0aWFsLWVycm9yXCIgcm9sZT1cImFsZXJ0XCIgYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCI+XG4gICAgICAgICAgICB7eyBmYWlsZWRGaWxlc0NvdW50IH19IHt7IGZhaWxlZEZpbGVzQ291bnQgPT09IDEgPyAnZmlsZScgOiAnZmlsZXMnIH19IGNvdWxkIG5vdCBiZSB1cGxvYWRlZC4gUGxlYXNlIHRyeSBhZ2FpblxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48ZGl2XG4gICAgKm5nSWY9XCJ2YWxpZGF0aW9uRXJyb3JNZXNzYWdlXCJcbiAgICBpZD1cImZpbGUtdXBsb2FkLWVycm9yXCJcbiAgICBjbGFzcz1cImRyLWZpbGUtdXBsb2FkX19lcnJvclwiXG4gICAgcm9sZT1cImFsZXJ0XCJcbiAgICBhcmlhLWxpdmU9XCJhc3NlcnRpdmVcIj5cbiAgICB7eyB2YWxpZGF0aW9uRXJyb3JNZXNzYWdlIH19XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,6 @@
1
+ export * from './dr-file-upload.component';
2
+ export * from './dr-file-upload-item/dr-file-upload-item.component';
3
+ export * from './models/file-upload.models';
4
+ export * from './templates/dr-file-upload-image-template/dr-file-upload-image-template.component';
5
+ export * from './services/file-upload-validation.service';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1maWxlLXVwbG9hZC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLG1GQUFtRixDQUFDO0FBQ2xHLGNBQWMsMkNBQTJDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RyLWZpbGUtdXBsb2FkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2RyLWZpbGUtdXBsb2FkLWl0ZW0vZHItZmlsZS11cGxvYWQtaXRlbS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMvZmlsZS11cGxvYWQubW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vdGVtcGxhdGVzL2RyLWZpbGUtdXBsb2FkLWltYWdlLXRlbXBsYXRlL2RyLWZpbGUtdXBsb2FkLWltYWdlLXRlbXBsYXRlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2ZpbGUtdXBsb2FkLXZhbGlkYXRpb24uc2VydmljZSc7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQubW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvZHItZmlsZS11cGxvYWQvbW9kZWxzL2ZpbGUtdXBsb2FkLm1vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IHR5cGUgRmlsZVVwbG9hZFZhcmlhbnQgPSAnc2luZ2xlJyB8ICdtdWx0aXBsZSc7XG5cbmV4cG9ydCB0eXBlIEZpbGVVcGxvYWRJdGVtU3RhdHVzID0gJ2lkbGUnIHwgJ3BlbmRpbmcnIHwgJ3VwbG9hZGluZycgfCAnc3VjY2VzcycgfCAnZXJyb3InO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVVcGxvYWRJdGVtIHtcbiAgICBmaWxlOiBGaWxlO1xuICAgIHByb2dyZXNzOiBudW1iZXI7XG4gICAgc3RhdHVzOiBGaWxlVXBsb2FkSXRlbVN0YXR1cztcbiAgICBlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVVwbG9hZFRlbXBsYXRlIHtcbiAgICBkcm9wem9uZVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XG4gICAgZmlsZUl0ZW1UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHVua25vd24+O1xufVxuIl19