@valtimo/dossier-management 11.1.2 → 11.2.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 (67) hide show
  1. package/esm2022/lib/components/dossier-management-assignee/dossier-management-assignee.component.mjs +5 -5
  2. package/esm2022/lib/components/dossier-management-connect-modal/dossier-management-connect-modal.component.mjs +56 -27
  3. package/esm2022/lib/components/dossier-management-detail/dossier-management-detail.component.mjs +13 -74
  4. package/esm2022/lib/components/dossier-management-detail-container/dossier-management-detail-container.component.mjs +17 -13
  5. package/esm2022/lib/components/dossier-management-detail-container-actions/dossier-management-detail-container-actions.mjs +152 -0
  6. package/esm2022/lib/components/dossier-management-document-definition/dossier-management-document-definition.mjs +48 -0
  7. package/esm2022/lib/components/dossier-management-link-process/dossier-management-link-process.component.mjs +3 -3
  8. package/esm2022/lib/components/dossier-management-list/dossier-management-list.component.mjs +47 -30
  9. package/esm2022/lib/components/dossier-management-list-columns/dossier-management-list-columns.component.mjs +45 -43
  10. package/esm2022/lib/components/dossier-management-processes/dossier-management-processes.component.mjs +110 -0
  11. package/esm2022/lib/components/dossier-management-search-fields/dossier-management-search-fields.component.mjs +67 -58
  12. package/esm2022/lib/components/dossier-management-tabs/dossier-management-edit-tab-modal/dossier-management-edit-tab-modal.component.mjs +1 -1
  13. package/esm2022/lib/components/dossier-management-tabs/dossier-management-tabs.component.mjs +14 -27
  14. package/esm2022/lib/components/dossier-management-upload/dossier-management-upload.component.mjs +167 -111
  15. package/esm2022/lib/components/dossier-management-upload/dossier-management-upload.constants.mjs +23 -0
  16. package/esm2022/lib/components/dossier-management-upload/step/dossier-management-upload-step.component.mjs +17 -0
  17. package/esm2022/lib/dossier-management.module.mjs +48 -9
  18. package/esm2022/lib/models/tab.enum.mjs +3 -1
  19. package/esm2022/lib/services/dossier-detail.service.mjs +84 -0
  20. package/esm2022/lib/services/dossier-export.service.mjs +39 -0
  21. package/esm2022/lib/services/dossier-import.service.mjs +38 -0
  22. package/esm2022/lib/services/index.mjs +3 -1
  23. package/esm2022/lib/services/tab.service.mjs +2 -2
  24. package/fesm2022/valtimo-dossier-management.mjs +1174 -654
  25. package/fesm2022/valtimo-dossier-management.mjs.map +1 -1
  26. package/lib/components/dossier-management-assignee/dossier-management-assignee.component.d.ts +1 -1
  27. package/lib/components/dossier-management-assignee/dossier-management-assignee.component.d.ts.map +1 -1
  28. package/lib/components/dossier-management-connect-modal/dossier-management-connect-modal.component.d.ts +13 -10
  29. package/lib/components/dossier-management-connect-modal/dossier-management-connect-modal.component.d.ts.map +1 -1
  30. package/lib/components/dossier-management-detail/dossier-management-detail.component.d.ts +7 -22
  31. package/lib/components/dossier-management-detail/dossier-management-detail.component.d.ts.map +1 -1
  32. package/lib/components/dossier-management-detail-container/dossier-management-detail-container.component.d.ts +3 -1
  33. package/lib/components/dossier-management-detail-container/dossier-management-detail-container.component.d.ts.map +1 -1
  34. package/lib/components/dossier-management-detail-container-actions/dossier-management-detail-container-actions.d.ts +40 -0
  35. package/lib/components/dossier-management-detail-container-actions/dossier-management-detail-container-actions.d.ts.map +1 -0
  36. package/lib/components/dossier-management-document-definition/dossier-management-document-definition.d.ts +15 -0
  37. package/lib/components/dossier-management-document-definition/dossier-management-document-definition.d.ts.map +1 -0
  38. package/lib/components/dossier-management-list/dossier-management-list.component.d.ts +16 -19
  39. package/lib/components/dossier-management-list/dossier-management-list.component.d.ts.map +1 -1
  40. package/lib/components/dossier-management-list-columns/dossier-management-list-columns.component.d.ts +14 -11
  41. package/lib/components/dossier-management-list-columns/dossier-management-list-columns.component.d.ts.map +1 -1
  42. package/lib/components/dossier-management-processes/dossier-management-processes.component.d.ts +29 -0
  43. package/lib/components/dossier-management-processes/dossier-management-processes.component.d.ts.map +1 -0
  44. package/lib/components/dossier-management-search-fields/dossier-management-search-fields.component.d.ts +14 -13
  45. package/lib/components/dossier-management-search-fields/dossier-management-search-fields.component.d.ts.map +1 -1
  46. package/lib/components/dossier-management-tabs/dossier-management-tabs.component.d.ts +3 -2
  47. package/lib/components/dossier-management-tabs/dossier-management-tabs.component.d.ts.map +1 -1
  48. package/lib/components/dossier-management-upload/dossier-management-upload.component.d.ts +42 -30
  49. package/lib/components/dossier-management-upload/dossier-management-upload.component.d.ts.map +1 -1
  50. package/lib/components/dossier-management-upload/dossier-management-upload.constants.d.ts +15 -0
  51. package/lib/components/dossier-management-upload/dossier-management-upload.constants.d.ts.map +1 -0
  52. package/lib/components/dossier-management-upload/step/dossier-management-upload-step.component.d.ts +9 -0
  53. package/lib/components/dossier-management-upload/step/dossier-management-upload-step.component.d.ts.map +1 -0
  54. package/lib/dossier-management.module.d.ts +13 -9
  55. package/lib/dossier-management.module.d.ts.map +1 -1
  56. package/lib/models/tab.enum.d.ts +2 -0
  57. package/lib/models/tab.enum.d.ts.map +1 -1
  58. package/lib/services/dossier-detail.service.d.ts +30 -0
  59. package/lib/services/dossier-detail.service.d.ts.map +1 -0
  60. package/lib/services/dossier-export.service.d.ts +14 -0
  61. package/lib/services/dossier-export.service.d.ts.map +1 -0
  62. package/lib/services/dossier-import.service.d.ts +14 -0
  63. package/lib/services/dossier-import.service.d.ts.map +1 -0
  64. package/lib/services/index.d.ts +2 -0
  65. package/lib/services/index.d.ts.map +1 -1
  66. package/lib/services/tab.service.d.ts.map +1 -1
  67. package/package.json +1 -1
@@ -13,121 +13,169 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
16
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
17
+ import { Validators } from '@angular/forms';
18
+ import { WarningFilled16 } from '@carbon/icons';
19
+ import { CARBON_CONSTANTS } from '@valtimo/components';
17
20
  import { DocumentDefinitionCreateRequest } from '@valtimo/document';
18
- import { BehaviorSubject, Subject } from 'rxjs';
19
- import { switchMap, take, tap } from 'rxjs/operators';
21
+ import { BehaviorSubject, combineLatest, map, Subscription, switchMap, take } from 'rxjs';
22
+ import { STEPS, UPLOAD_STATUS, UPLOAD_STEP } from './dossier-management-upload.constants';
20
23
  import * as i0 from "@angular/core";
21
24
  import * as i1 from "@valtimo/document";
22
- import * as i2 from "@ngx-translate/core";
23
- import * as i3 from "@valtimo/components";
24
- import * as i4 from "@angular/common";
25
+ import * as i2 from "../../services/dossier-import.service";
26
+ import * as i3 from "@angular/forms";
27
+ import * as i4 from "carbon-components-angular";
28
+ import * as i5 from "@ngx-translate/core";
29
+ import * as i6 from "@angular/common";
30
+ import * as i7 from "@valtimo/components";
31
+ import * as i8 from "./step/dossier-management-upload-step.component";
25
32
  export class DossierManagementUploadComponent {
26
- constructor(documentService, translateService, menuService) {
33
+ constructor(documentService, dossierImportService, fb, iconService, translateService) {
27
34
  this.documentService = documentService;
35
+ this.dossierImportService = dossierImportService;
36
+ this.fb = fb;
37
+ this.iconService = iconService;
28
38
  this.translateService = translateService;
29
- this.menuService = menuService;
30
- this.definitionUploaded = new EventEmitter();
31
- this.clear$ = new Subject();
32
- this.jsonString$ = new BehaviorSubject('');
33
- this.error$ = new BehaviorSubject('');
34
- this.disabled$ = new BehaviorSubject(false);
35
- this.file$ = new BehaviorSubject(undefined);
36
- }
37
- ngAfterViewInit() {
38
- this.openShowSubscription();
39
- this.openFileSubscription();
39
+ this.open = false;
40
+ this.closeModal = new EventEmitter();
41
+ this.acceptedFiles = ['.json', '.zip'];
42
+ this._disabled$ = new BehaviorSubject(true);
43
+ this.UPLOAD_STEP = UPLOAD_STEP;
44
+ this.UPLOAD_STATUS = UPLOAD_STATUS;
45
+ this.activeStep$ = new BehaviorSubject(UPLOAD_STEP.PLUGINS);
46
+ this.backButtonEnabled$ = this.activeStep$.pipe(map((activeStep) => [UPLOAD_STEP.FILE_SELECT, UPLOAD_STEP.ACCESS_CONTROL, UPLOAD_STEP.DASHBOARD].includes(activeStep)));
47
+ this.isStepAfterUpload$ = this.activeStep$.pipe(map((activeStep) => ![UPLOAD_STEP.PLUGINS, UPLOAD_STEP.FILE_SELECT].includes(activeStep)));
48
+ this.showCloseButton$ = this.activeStep$.pipe(map((activeStep) => [UPLOAD_STEP.PLUGINS, UPLOAD_STEP.FILE_SELECT, UPLOAD_STEP.FILE_UPLOAD].includes(activeStep)));
49
+ this.nextButtonDisabled$ = combineLatest([
50
+ this.activeStep$,
51
+ this._disabled$,
52
+ ]).pipe(map(([activeStep, disabled]) => activeStep !== UPLOAD_STEP.PLUGINS && disabled));
53
+ this.notificationObj$ = combineLatest([
54
+ this.translateService.stream('interface.warning'),
55
+ this.translateService.stream('dossierManagement.importDefinition.overwriteWarning'),
56
+ ]).pipe(map(([title, message]) => ({
57
+ type: 'warning',
58
+ title,
59
+ message,
60
+ showClose: false,
61
+ lowContrast: true,
62
+ })));
63
+ this.showCheckboxError$ = new BehaviorSubject(false);
64
+ this.uploadStatus$ = new BehaviorSubject(UPLOAD_STATUS.ACTIVE);
65
+ this.form = this.fb.group({
66
+ file: this.fb.control(new Set(), [Validators.required]),
67
+ });
68
+ this._checked = false;
69
+ this._importFile$ = new BehaviorSubject('');
70
+ this._subscriptions = new Subscription();
71
+ this.iconService.register(WarningFilled16);
72
+ }
73
+ ngOnInit() {
74
+ const control = this.form.get('file');
75
+ if (!control) {
76
+ return;
77
+ }
78
+ this._subscriptions.add(control.valueChanges.subscribe((fileSet) => {
79
+ const [fileItem] = fileSet;
80
+ if (!fileItem) {
81
+ this._disabled$.next(true);
82
+ this.showCheckboxError$.next(false);
83
+ this._checked = false;
84
+ return;
85
+ }
86
+ if (fileItem.file.type === 'application/json') {
87
+ this.setJsonFile(fileItem);
88
+ return;
89
+ }
90
+ this.setZipFile(fileItem);
91
+ }));
40
92
  }
41
93
  ngOnDestroy() {
42
- this.showSubscription.unsubscribe();
43
- this.fileSubscription.unsubscribe();
44
- this.closeErrorSubscription();
45
- }
46
- setFile(file) {
47
- this.clearError();
48
- this.file$.next(file);
49
- }
50
- uploadDefinition() {
51
- this.disable();
52
- this.jsonString$
53
- .pipe(switchMap(jsonString => this.documentService
54
- .createDocumentDefinitionForManagement(new DocumentDefinitionCreateRequest(jsonString))
55
- .pipe(tap(
56
- // success
57
- () => {
58
- this.closeErrorSubscription();
59
- this.clearError();
60
- this.enable();
61
- this.hideModal();
62
- this.menuService.reload();
63
- this.definitionUploaded.emit();
64
- },
65
- // error
66
- () => {
67
- this.openErrorSubscription('dropzone.error.invalidDocDef');
68
- this.enable();
69
- }))), take(1))
70
- .subscribe();
94
+ this.resetModal();
71
95
  }
72
- openErrorSubscription(errorCode) {
73
- this.closeErrorSubscription();
74
- this.errorSubscription = this.translateService.stream(errorCode).subscribe(error => {
75
- this.error$.next(error);
76
- });
96
+ onCloseModal(definitionUploaded) {
97
+ this.closeModal.emit(definitionUploaded ?? false);
98
+ this.resetModal();
77
99
  }
78
- closeErrorSubscription() {
79
- if (this.errorSubscription) {
80
- this.errorSubscription.unsubscribe();
100
+ onBackClick(activeStep) {
101
+ const prevIndex = STEPS.findIndex((step) => step === activeStep) - 1;
102
+ if (prevIndex === -1) {
103
+ return;
81
104
  }
105
+ this.activeStep$.next(STEPS[prevIndex]);
82
106
  }
83
- clearError() {
84
- this.error$.next('');
107
+ onNextClick(activeStep) {
108
+ const nextIndex = STEPS.findIndex((step) => step === activeStep) + 1;
109
+ if (nextIndex === STEPS.length) {
110
+ return;
111
+ }
112
+ if (activeStep === UPLOAD_STEP.FILE_SELECT && !this._checked) {
113
+ this.showCheckboxError$.next(true);
114
+ return;
115
+ }
116
+ this.activeStep$.next(STEPS[nextIndex]);
117
+ if (STEPS[nextIndex] !== UPLOAD_STEP.FILE_UPLOAD) {
118
+ return;
119
+ }
120
+ this.uploadDefinition();
85
121
  }
86
- openFileSubscription() {
87
- this.fileSubscription = this.file$.subscribe(file => {
88
- if (file) {
89
- const reader = new FileReader();
90
- reader.onloadend = () => {
91
- const result = reader.result.toString();
92
- if (this.stringIsValidJson(result)) {
93
- this.jsonString$.next(result);
94
- }
95
- else {
96
- this.clearJsonString();
97
- this.error$.next(this.translateService.instant('dropzone.error.invalidJson'));
98
- }
99
- };
100
- reader.readAsText(file);
101
- }
102
- else {
103
- this.clearJsonString();
104
- }
105
- });
122
+ onCheckedChange(checked) {
123
+ this._checked = checked;
124
+ if (!checked) {
125
+ return;
126
+ }
127
+ this.showCheckboxError$.next(false);
106
128
  }
107
- openShowSubscription() {
108
- this.showSubscription = this.show$.subscribe(show => {
109
- if (show) {
110
- this.showModal();
111
- }
112
- else {
113
- this.hideModal();
129
+ setJsonFile(fileItem) {
130
+ const file = fileItem?.file;
131
+ if (!file) {
132
+ this.clearJsonString();
133
+ return;
134
+ }
135
+ const reader = new FileReader();
136
+ reader.onloadend = () => {
137
+ const result = (reader.result ?? '').toString();
138
+ if (this.stringIsValidJson(result)) {
139
+ this._disabled$.next(false);
140
+ this._importFile$.next(result);
141
+ return;
114
142
  }
115
143
  this.clearJsonString();
116
- this.clearError();
117
- this.clearDropzone();
144
+ this.setErrorState(fileItem);
145
+ };
146
+ reader.readAsText(file);
147
+ }
148
+ setZipFile(fileItem) {
149
+ const file = fileItem?.file;
150
+ if (!file) {
151
+ this._importFile$.next('');
152
+ return;
153
+ }
154
+ const blob = new Blob([fileItem.file], { type: fileItem.file.type });
155
+ const fd = new FormData();
156
+ fd.append('file', blob, fileItem.file.name);
157
+ this._importFile$.next(fd);
158
+ this._disabled$.next(false);
159
+ }
160
+ uploadDefinition() {
161
+ this._disabled$.next(true);
162
+ this._importFile$
163
+ .pipe(switchMap((file) => file instanceof FormData
164
+ ? this.dossierImportService.importDocumentDefinitionZip(file)
165
+ : this.documentService.createDocumentDefinitionForManagement(new DocumentDefinitionCreateRequest(file))), take(1))
166
+ .subscribe({
167
+ next: () => {
168
+ this._disabled$.next(false);
169
+ this.uploadStatus$.next(UPLOAD_STATUS.FINISHED);
170
+ },
171
+ error: () => {
172
+ this.uploadStatus$.next(UPLOAD_STATUS.ERROR);
173
+ this._disabled$.next(false);
174
+ },
118
175
  });
119
176
  }
120
177
  clearJsonString() {
121
- this.jsonString$.next('');
122
- }
123
- clearDropzone() {
124
- this.clear$.next(null);
125
- }
126
- showModal() {
127
- this.modal.show();
128
- }
129
- hideModal() {
130
- this.modal.hide();
178
+ this._importFile$.next('');
131
179
  }
132
180
  stringIsValidJson(string) {
133
181
  try {
@@ -138,24 +186,32 @@ export class DossierManagementUploadComponent {
138
186
  }
139
187
  return true;
140
188
  }
141
- disable() {
142
- this.disabled$.next(true);
143
- }
144
- enable() {
145
- this.disabled$.next(false);
146
- }
147
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DossierManagementUploadComponent, deps: [{ token: i1.DocumentService }, { token: i2.TranslateService }, { token: i3.MenuService }], target: i0.ɵɵFactoryTarget.Component }); }
148
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DossierManagementUploadComponent, selector: "valtimo-dossier-management-upload", inputs: { show$: "show$" }, outputs: { definitionUploaded: "definitionUploaded" }, viewQueries: [{ propertyName: "modal", first: true, predicate: ["uploadDefinitionModal"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-modal\n #uploadDefinitionModal\n [title]=\"'Upload document definition' | translate\"\n showFooter=\"true\"\n>\n <div class=\"mt-2\" body>\n <valtimo-dropzone\n [clear$]=\"clear$\"\n (fileSelected)=\"setFile($event)\"\n [disabled]=\"disabled$ | async\"\n [subtitle]=\"'dropzone.jsonDocDef' | translate\"\n [externalError$]=\"error$\"\n [maxFiles]=\"1\"\n ></valtimo-dropzone>\n </div>\n <div footer>\n <ng-container *ngIf=\"(jsonString$ | async) && (error$ | async) === ''; else disabledUpload\">\n <button [disabled]=\"disabled$ | async\" class=\"btn btn-primary\" (click)=\"uploadDefinition()\">\n <i class=\"icon mdi mdi-upload mr-1\"></i>\n {{ 'Upload' | translate }}\n </button>\n </ng-container>\n </div>\n</valtimo-modal>\n\n<ng-template #disabledUpload>\n <button [disabled]=\"true\" class=\"btn btn-primary\">\n <i class=\"icon mdi mdi-upload mr-1\"></i>\n {{ 'Upload' | translate }}\n </button>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.DropzoneComponent, selector: "valtimo-dropzone", inputs: ["title", "hideTitle", "subtitle", "externalError$", "maxFileSize", "showMaxFileSize", "acceptedFiles", "clear$", "disabled", "hideFilePreview", "uploading", "camera", "maxFiles"], outputs: ["fileSelected"] }, { kind: "component", type: i3.ModalComponent, selector: "valtimo-modal", inputs: ["elementId", "title", "subtitle", "templateBelowSubtitle", "showFooter"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
189
+ setErrorState(fileItem) {
190
+ this._disabled$.next(true);
191
+ fileItem.invalid = true;
192
+ fileItem.invalidTitle = this.translateService.instant('dossierManagement.importDefinition.invalidJsonError.title');
193
+ fileItem.invalidText = this.translateService.instant('dossierManagement.importDefinition.invalidJsonError.text');
194
+ }
195
+ resetModal() {
196
+ setTimeout(() => {
197
+ this.activeStep$.next(UPLOAD_STEP.PLUGINS);
198
+ this.uploadStatus$.next(UPLOAD_STATUS.ACTIVE);
199
+ this.showCheckboxError$.next(false);
200
+ this._subscriptions.unsubscribe();
201
+ }, CARBON_CONSTANTS.modalAnimationMs);
202
+ }
203
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DossierManagementUploadComponent, deps: [{ token: i1.DocumentService }, { token: i2.DossierImportService }, { token: i3.FormBuilder }, { token: i4.IconService }, { token: i5.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
204
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DossierManagementUploadComponent, selector: "valtimo-dossier-management-upload", inputs: { open: "open" }, outputs: { closeModal: "closeModal" }, viewQueries: [{ propertyName: "modal", first: true, predicate: ["uploadDefinitionModal"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal\n *ngIf=\"{\n activeStep: activeStep$ | async,\n backButtonEnabled: backButtonEnabled$ | async,\n isStepAfterUpload: isStepAfterUpload$ | async,\n nextButtonDisabled: nextButtonDisabled$ | async,\n notificationObj: notificationObj$ | async,\n showCheckboxError: showCheckboxError$ | async,\n showCloseButton: showCloseButton$ | async,\n uploadStatus: uploadStatus$ | async\n } as obs\"\n valtimoCdsModal\n [open]=\"open\"\n showFooter=\"true\"\n class=\"valtimo-definition-uploader\"\n (close)=\"onCloseModal()\"\n>\n <cds-modal-header\n [showCloseButton]=\"obs.showCloseButton\"\n (closeSelect)=\"onCloseModal(obs.isStepAfterUpload && obs.uploadStatus !== UPLOAD_STATUS.ERROR)\"\n >\n <h3 cdsModalHeaderHeading>\n {{ 'dossierManagement.importDefinition.title' | translate }}\n </h3>\n </cds-modal-header>\n\n <section [ngSwitch]=\"obs.activeStep\" cdsModalContent class=\"valtimo-definition-uploader__content\">\n <ng-template ngSwitchDefault>\n <valtimo-dossier-management-upload-step\n [message]=\"\n 'dossierManagement.importDefinition.steps.' + obs.activeStep + '.message' | translate\n \"\n [title]=\"\n 'dossierManagement.importDefinition.steps.' + obs.activeStep + '.title' | translate\n \"\n [illustration]=\"'valtimo-layout/img/' + obs.activeStep + '.svg'\"\n >\n </valtimo-dossier-management-upload-step>\n </ng-template>\n\n <form *ngSwitchCase=\"UPLOAD_STEP.FILE_SELECT\" [formGroup]=\"form\">\n <cds-file-uploader\n [accept]=\"acceptedFiles\"\n [buttonText]=\"'dossierManagement.importDefinition.upload.buttonText' | translate\"\n [description]=\"'dossierManagement.importDefinition.upload.description' | translate\"\n [multiple]=\"false\"\n [title]=\"'dossierManagement.importDefinition.upload.title' | translate\"\n buttonType=\"primary\"\n data-carbon-theme=\"g10\"\n formControlName=\"file\"\n class=\"valtimo-definition-uploader__file-uploader\"\n >\n </cds-file-uploader>\n\n <ng-container *ngIf=\"!obs.nextButtonDisabled\">\n <cds-inline-notification [notificationObj]=\"obs.notificationObj\"></cds-inline-notification>\n\n <div class=\"valtimo-uploader__checkbox\">\n <cds-checkbox\n [class.valtimo-definition-uploader__checkbox--invalid]=\"obs.showCheckboxError\"\n (checkedChange)=\"onCheckedChange($event)\"\n >\n {{ 'dossierManagement.importDefinition.checkbox.message' | translate }}\n </cds-checkbox>\n\n <div *ngIf=\"obs.showCheckboxError\" class=\"valtimo-definition-uploader__error\">\n <svg cdsIcon=\"warning--filled\" size=\"16\"></svg>\n\n {{ 'dossierManagement.importDefinition.checkbox.error' | translate }}\n </div>\n </div>\n </ng-container>\n </form>\n\n <cds-progress-bar\n *ngSwitchCase=\"UPLOAD_STEP.FILE_UPLOAD\"\n class=\"valtimo-definition-uploader__progress-bar\"\n [label]=\"'dossierManagement.importDefinition.progressBar.label' | translate\"\n [status]=\"obs.uploadStatus\"\n [helperText]=\"\n 'dossierManagement.importDefinition.progressBar.' + obs.uploadStatus | translate\n \"\n ></cds-progress-bar>\n </section>\n\n <cds-modal-footer\n class=\"valtimo-definition-uploader__footer\"\n [class.valtimo-definition-uploader__footer--double]=\"obs.activeStep === UPLOAD_STEP.PLUGINS\"\n >\n <button\n *ngIf=\"obs.uploadStatus !== UPLOAD_STATUS.ERROR && obs.activeStep !== UPLOAD_STEP.FILE_UPLOAD\"\n class=\"valtimo-definition-uploader__cancel\"\n cdsButton=\"ghost\"\n (click)=\"onCloseModal(obs.isStepAfterUpload)\"\n >\n {{ (obs.isStepAfterUpload ? 'interface.skip' : 'interface.cancel') | translate }}\n </button>\n\n <div class=\"valtimo-definition-uploader__actions\">\n <button\n *ngIf=\"obs.backButtonEnabled\"\n cdsButton=\"secondary\"\n (click)=\"onBackClick(obs.activeStep)\"\n >\n {{ 'interface.back' | translate }}\n </button>\n\n <button\n *ngIf=\"obs.uploadStatus !== UPLOAD_STATUS.ERROR && obs.activeStep !== UPLOAD_STEP.DASHBOARD\"\n cdsButton=\"primary\"\n [disabled]=\"obs.nextButtonDisabled\"\n (click)=\"onNextClick(obs.activeStep)\"\n >\n {{\n (obs.activeStep === UPLOAD_STEP.FILE_SELECT\n ? 'dossierManagement.importDefinition.startUpload'\n : 'interface.next'\n ) | translate\n }}\n </button>\n\n <button\n *ngIf=\"obs.uploadStatus === UPLOAD_STATUS.ERROR || obs.activeStep === UPLOAD_STEP.DASHBOARD\"\n class=\"valtimo-definition-uploader__cancel\"\n cdsButton=\"primary\"\n (click)=\"onCloseModal(true)\"\n >\n {{ 'interface.finish' | translate }}\n </button>\n </div>\n </cds-modal-footer>\n</cds-modal>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.valtimo-definition-uploader__content,.valtimo-definition-uploader__content form{display:flex;flex-direction:column;gap:16px}.valtimo-definition-uploader__footer ::ng-deep .cds--modal-footer{justify-content:unset!important;display:grid!important;grid-template-columns:1fr 1fr 2fr!important;grid-template-areas:\"cancel . actions\"!important}.valtimo-definition-uploader__footer--double ::ng-deep .cds--modal-footer{grid-template-columns:1fr 1fr!important;grid-template-areas:\"cancel actions\"!important}.valtimo-definition-uploader__progress-bar{height:100%;display:flex;flex-direction:column;justify-content:center}.valtimo-definition-uploader__error{display:flex;align-items:center;gap:10px;color:#da1e28;fill:#da1e28;font-size:12px}.valtimo-definition-uploader__cancel{grid-area:cancel;width:100%}.valtimo-definition-uploader__actions{grid-area:actions;display:flex}.valtimo-definition-uploader__actions button{flex:unset;width:100%}.valtimo-definition-uploader__file-uploader ::ng-deep cds-file{max-width:unset}.valtimo-definition-uploader__checkbox{display:flex;flex-direction:column;gap:8px}.valtimo-definition-uploader__checkbox--invalid ::ng-deep label:before{border-color:#da1e28;margin-inline:0}.valtimo-definition-uploader ::ng-deep .cds--modal-container{height:550px}.valtimo-definition-uploader ::ng-deep .cds--checkbox-label-text{color:#000}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i6.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i6.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i4.Notification, selector: "cds-notification, cds-inline-notification, ibm-notification, ibm-inline-notification", inputs: ["notificationObj"] }, { kind: "directive", type: i4.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i4.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i4.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i4.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i4.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i4.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i4.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.Checkbox, selector: "cds-checkbox, ibm-checkbox", inputs: ["disabled", "skeleton", "hideLabel", "name", "id", "required", "value", "ariaLabel", "ariaLabelledby", "indeterminate", "checked"], outputs: ["click", "checkedChange", "indeterminateChange"] }, { kind: "directive", type: i7.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]" }, { kind: "component", type: i4.FileUploader, selector: "cds-file-uploader, ibm-file-uploader", inputs: ["buttonText", "buttonType", "title", "description", "accept", "multiple", "skeleton", "size", "fileItemSize", "drop", "dropText", "fileUploaderId", "files", "disabled"], outputs: ["filesChange"] }, { kind: "component", type: i4.ProgressBar, selector: "cds-progress-bar, ibm-progress-bar", inputs: ["value", "id", "label", "helperText", "max", "type", "status", "size"] }, { kind: "component", type: i8.DossierManagementUploadStepComponent, selector: "valtimo-dossier-management-upload-step", inputs: ["illustration", "message", "title"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
149
205
  }
150
206
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DossierManagementUploadComponent, decorators: [{
151
207
  type: Component,
152
- args: [{ selector: 'valtimo-dossier-management-upload', template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-modal\n #uploadDefinitionModal\n [title]=\"'Upload document definition' | translate\"\n showFooter=\"true\"\n>\n <div class=\"mt-2\" body>\n <valtimo-dropzone\n [clear$]=\"clear$\"\n (fileSelected)=\"setFile($event)\"\n [disabled]=\"disabled$ | async\"\n [subtitle]=\"'dropzone.jsonDocDef' | translate\"\n [externalError$]=\"error$\"\n [maxFiles]=\"1\"\n ></valtimo-dropzone>\n </div>\n <div footer>\n <ng-container *ngIf=\"(jsonString$ | async) && (error$ | async) === ''; else disabledUpload\">\n <button [disabled]=\"disabled$ | async\" class=\"btn btn-primary\" (click)=\"uploadDefinition()\">\n <i class=\"icon mdi mdi-upload mr-1\"></i>\n {{ 'Upload' | translate }}\n </button>\n </ng-container>\n </div>\n</valtimo-modal>\n\n<ng-template #disabledUpload>\n <button [disabled]=\"true\" class=\"btn btn-primary\">\n <i class=\"icon mdi mdi-upload mr-1\"></i>\n {{ 'Upload' | translate }}\n </button>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
153
- }], ctorParameters: function () { return [{ type: i1.DocumentService }, { type: i2.TranslateService }, { type: i3.MenuService }]; }, propDecorators: { show$: [{
154
- type: Input
155
- }], definitionUploaded: [{
156
- type: Output
157
- }], modal: [{
208
+ args: [{ selector: 'valtimo-dossier-management-upload', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal\n *ngIf=\"{\n activeStep: activeStep$ | async,\n backButtonEnabled: backButtonEnabled$ | async,\n isStepAfterUpload: isStepAfterUpload$ | async,\n nextButtonDisabled: nextButtonDisabled$ | async,\n notificationObj: notificationObj$ | async,\n showCheckboxError: showCheckboxError$ | async,\n showCloseButton: showCloseButton$ | async,\n uploadStatus: uploadStatus$ | async\n } as obs\"\n valtimoCdsModal\n [open]=\"open\"\n showFooter=\"true\"\n class=\"valtimo-definition-uploader\"\n (close)=\"onCloseModal()\"\n>\n <cds-modal-header\n [showCloseButton]=\"obs.showCloseButton\"\n (closeSelect)=\"onCloseModal(obs.isStepAfterUpload && obs.uploadStatus !== UPLOAD_STATUS.ERROR)\"\n >\n <h3 cdsModalHeaderHeading>\n {{ 'dossierManagement.importDefinition.title' | translate }}\n </h3>\n </cds-modal-header>\n\n <section [ngSwitch]=\"obs.activeStep\" cdsModalContent class=\"valtimo-definition-uploader__content\">\n <ng-template ngSwitchDefault>\n <valtimo-dossier-management-upload-step\n [message]=\"\n 'dossierManagement.importDefinition.steps.' + obs.activeStep + '.message' | translate\n \"\n [title]=\"\n 'dossierManagement.importDefinition.steps.' + obs.activeStep + '.title' | translate\n \"\n [illustration]=\"'valtimo-layout/img/' + obs.activeStep + '.svg'\"\n >\n </valtimo-dossier-management-upload-step>\n </ng-template>\n\n <form *ngSwitchCase=\"UPLOAD_STEP.FILE_SELECT\" [formGroup]=\"form\">\n <cds-file-uploader\n [accept]=\"acceptedFiles\"\n [buttonText]=\"'dossierManagement.importDefinition.upload.buttonText' | translate\"\n [description]=\"'dossierManagement.importDefinition.upload.description' | translate\"\n [multiple]=\"false\"\n [title]=\"'dossierManagement.importDefinition.upload.title' | translate\"\n buttonType=\"primary\"\n data-carbon-theme=\"g10\"\n formControlName=\"file\"\n class=\"valtimo-definition-uploader__file-uploader\"\n >\n </cds-file-uploader>\n\n <ng-container *ngIf=\"!obs.nextButtonDisabled\">\n <cds-inline-notification [notificationObj]=\"obs.notificationObj\"></cds-inline-notification>\n\n <div class=\"valtimo-uploader__checkbox\">\n <cds-checkbox\n [class.valtimo-definition-uploader__checkbox--invalid]=\"obs.showCheckboxError\"\n (checkedChange)=\"onCheckedChange($event)\"\n >\n {{ 'dossierManagement.importDefinition.checkbox.message' | translate }}\n </cds-checkbox>\n\n <div *ngIf=\"obs.showCheckboxError\" class=\"valtimo-definition-uploader__error\">\n <svg cdsIcon=\"warning--filled\" size=\"16\"></svg>\n\n {{ 'dossierManagement.importDefinition.checkbox.error' | translate }}\n </div>\n </div>\n </ng-container>\n </form>\n\n <cds-progress-bar\n *ngSwitchCase=\"UPLOAD_STEP.FILE_UPLOAD\"\n class=\"valtimo-definition-uploader__progress-bar\"\n [label]=\"'dossierManagement.importDefinition.progressBar.label' | translate\"\n [status]=\"obs.uploadStatus\"\n [helperText]=\"\n 'dossierManagement.importDefinition.progressBar.' + obs.uploadStatus | translate\n \"\n ></cds-progress-bar>\n </section>\n\n <cds-modal-footer\n class=\"valtimo-definition-uploader__footer\"\n [class.valtimo-definition-uploader__footer--double]=\"obs.activeStep === UPLOAD_STEP.PLUGINS\"\n >\n <button\n *ngIf=\"obs.uploadStatus !== UPLOAD_STATUS.ERROR && obs.activeStep !== UPLOAD_STEP.FILE_UPLOAD\"\n class=\"valtimo-definition-uploader__cancel\"\n cdsButton=\"ghost\"\n (click)=\"onCloseModal(obs.isStepAfterUpload)\"\n >\n {{ (obs.isStepAfterUpload ? 'interface.skip' : 'interface.cancel') | translate }}\n </button>\n\n <div class=\"valtimo-definition-uploader__actions\">\n <button\n *ngIf=\"obs.backButtonEnabled\"\n cdsButton=\"secondary\"\n (click)=\"onBackClick(obs.activeStep)\"\n >\n {{ 'interface.back' | translate }}\n </button>\n\n <button\n *ngIf=\"obs.uploadStatus !== UPLOAD_STATUS.ERROR && obs.activeStep !== UPLOAD_STEP.DASHBOARD\"\n cdsButton=\"primary\"\n [disabled]=\"obs.nextButtonDisabled\"\n (click)=\"onNextClick(obs.activeStep)\"\n >\n {{\n (obs.activeStep === UPLOAD_STEP.FILE_SELECT\n ? 'dossierManagement.importDefinition.startUpload'\n : 'interface.next'\n ) | translate\n }}\n </button>\n\n <button\n *ngIf=\"obs.uploadStatus === UPLOAD_STATUS.ERROR || obs.activeStep === UPLOAD_STEP.DASHBOARD\"\n class=\"valtimo-definition-uploader__cancel\"\n cdsButton=\"primary\"\n (click)=\"onCloseModal(true)\"\n >\n {{ 'interface.finish' | translate }}\n </button>\n </div>\n </cds-modal-footer>\n</cds-modal>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.valtimo-definition-uploader__content,.valtimo-definition-uploader__content form{display:flex;flex-direction:column;gap:16px}.valtimo-definition-uploader__footer ::ng-deep .cds--modal-footer{justify-content:unset!important;display:grid!important;grid-template-columns:1fr 1fr 2fr!important;grid-template-areas:\"cancel . actions\"!important}.valtimo-definition-uploader__footer--double ::ng-deep .cds--modal-footer{grid-template-columns:1fr 1fr!important;grid-template-areas:\"cancel actions\"!important}.valtimo-definition-uploader__progress-bar{height:100%;display:flex;flex-direction:column;justify-content:center}.valtimo-definition-uploader__error{display:flex;align-items:center;gap:10px;color:#da1e28;fill:#da1e28;font-size:12px}.valtimo-definition-uploader__cancel{grid-area:cancel;width:100%}.valtimo-definition-uploader__actions{grid-area:actions;display:flex}.valtimo-definition-uploader__actions button{flex:unset;width:100%}.valtimo-definition-uploader__file-uploader ::ng-deep cds-file{max-width:unset}.valtimo-definition-uploader__checkbox{display:flex;flex-direction:column;gap:8px}.valtimo-definition-uploader__checkbox--invalid ::ng-deep label:before{border-color:#da1e28;margin-inline:0}.valtimo-definition-uploader ::ng-deep .cds--modal-container{height:550px}.valtimo-definition-uploader ::ng-deep .cds--checkbox-label-text{color:#000}\n"] }]
209
+ }], ctorParameters: function () { return [{ type: i1.DocumentService }, { type: i2.DossierImportService }, { type: i3.FormBuilder }, { type: i4.IconService }, { type: i5.TranslateService }]; }, propDecorators: { modal: [{
158
210
  type: ViewChild,
159
211
  args: ['uploadDefinitionModal']
212
+ }], open: [{
213
+ type: Input
214
+ }], closeModal: [{
215
+ type: Output
160
216
  }] } });
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1tYW5hZ2VtZW50LXVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXItbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvZG9zc2llci1tYW5hZ2VtZW50LXVwbG9hZC9kb3NzaWVyLW1hbmFnZW1lbnQtdXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci1tYW5hZ2VtZW50L3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLW1hbmFnZW1lbnQtdXBsb2FkL2Rvc3NpZXItbWFuYWdlbWVudC11cGxvYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQWtCLCtCQUErQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDbkYsT0FBTyxFQUFDLGVBQWUsRUFBYyxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDeEUsT0FBTyxFQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQU9wRCxNQUFNLE9BQU8sZ0NBQWdDO0lBc0IzQyxZQUNtQixlQUFnQyxFQUNoQyxnQkFBa0MsRUFDbEMsV0FBd0I7UUFGeEIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUF2QmpDLHVCQUFrQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBSTVELFdBQU0sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FB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Q0FBQztJQUVPLFNBQVM7UUFDZixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxNQUFjO1FBQ3RDLElBQUk7WUFDRixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3BCO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sT0FBTztRQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFTyxNQUFNO1FBQ1osSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQzsrR0FoS1UsZ0NBQWdDO21HQUFoQyxnQ0FBZ0MsNFFDcEM3Qyxzb0RBK0NBOzs0RkRYYSxnQ0FBZ0M7a0JBTDVDLFNBQVM7K0JBQ0UsbUNBQW1DOytKQUtwQyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0ksa0JBQWtCO3NCQUEzQixNQUFNO2dCQUU2QixLQUFLO3NCQUF4QyxTQUFTO3VCQUFDLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtNZW51U2VydmljZSwgTW9kYWxDb21wb25lbnR9IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtEb2N1bWVudFNlcnZpY2UsIERvY3VtZW50RGVmaW5pdGlvbkNyZWF0ZVJlcXVlc3R9IGZyb20gJ0B2YWx0aW1vL2RvY3VtZW50JztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtzd2l0Y2hNYXAsIHRha2UsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWRvc3NpZXItbWFuYWdlbWVudC11cGxvYWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9zc2llci1tYW5hZ2VtZW50LXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Rvc3NpZXItbWFuYWdlbWVudC11cGxvYWQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRG9zc2llck1hbmFnZW1lbnRVcGxvYWRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBzaG93JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgQE91dHB1dCgpIGRlZmluaXRpb25VcGxvYWRlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQFZpZXdDaGlsZCgndXBsb2FkRGVmaW5pdGlvbk1vZGFsJykgbW9kYWw6IE1vZGFsQ29tcG9uZW50O1xuXG4gIHJlYWRvbmx5IGNsZWFyJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcmVhZG9ubHkganNvblN0cmluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIHJlYWRvbmx5IGVycm9yJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG5cbiAgcmVhZG9ubHkgZGlzYWJsZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSBzaG93U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBmaWxlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBlcnJvclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZmlsZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZpbGU+KHVuZGVmaW5lZCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudFNlcnZpY2U6IERvY3VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZW51U2VydmljZTogTWVudVNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5TaG93U3Vic2NyaXB0aW9uKCk7XG4gICAgdGhpcy5vcGVuRmlsZVN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zaG93U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5maWxlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jbG9zZUVycm9yU3Vic2NyaXB0aW9uKCk7XG4gIH1cblxuICBzZXRGaWxlKGZpbGU6IEZpbGUpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyRXJyb3IoKTtcbiAgICB0aGlzLmZpbGUkLm5leHQoZmlsZSk7XG4gIH1cblxuICB1cGxvYWREZWZpbml0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZSgpO1xuXG4gICAgdGhpcy5qc29uU3RyaW5nJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcChqc29uU3RyaW5nID0+XG4gICAgICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2VcbiAgICAgICAgICAgIC5jcmVhdGVEb2N1bWVudERlZmluaXRpb25Gb3JNYW5hZ2VtZW50KG5ldyBEb2N1bWVudERlZmluaXRpb25DcmVhdGVSZXF1ZXN0KGpzb25TdHJpbmcpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRhcChcbiAgICAgICAgICAgICAgICAvLyBzdWNjZXNzXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZUVycm9yU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmhpZGVNb2RhbCgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZW51U2VydmljZS5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5pdGlvblVwbG9hZGVkLmVtaXQoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC8vIGVycm9yXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuRXJyb3JTdWJzY3JpcHRpb24oJ2Ryb3B6b25lLmVycm9yLmludmFsaWREb2NEZWYnKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHRha2UoMSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkVycm9yU3Vic2NyaXB0aW9uKGVycm9yQ29kZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUVycm9yU3Vic2NyaXB0aW9uKCk7XG4gICAgdGhpcy5lcnJvclN1YnNjcmlwdGlvbiA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oZXJyb3JDb2RlKS5zdWJzY3JpYmUoZXJyb3IgPT4ge1xuICAgICAgdGhpcy5lcnJvciQubmV4dChlcnJvcik7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlRXJyb3JTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZXJyb3JTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZXJyb3JTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRXJyb3IoKTogdm9pZCB7XG4gICAgdGhpcy5lcnJvciQubmV4dCgnJyk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5GaWxlU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsZVN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsZSQuc3Vic2NyaWJlKGZpbGUgPT4ge1xuICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblxuICAgICAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlYWRlci5yZXN1bHQudG9TdHJpbmcoKTtcbiAgICAgICAgICBpZiAodGhpcy5zdHJpbmdJc1ZhbGlkSnNvbihyZXN1bHQpKSB7XG4gICAgICAgICAgICB0aGlzLmpzb25TdHJpbmckLm5leHQocmVzdWx0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jbGVhckpzb25TdHJpbmcoKTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3IkLm5leHQodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2Ryb3B6b25lLmVycm9yLmludmFsaWRKc29uJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICByZWFkZXIucmVhZEFzVGV4dChmaWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2xlYXJKc29uU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5TaG93U3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd1N1YnNjcmlwdGlvbiA9IHRoaXMuc2hvdyQuc3Vic2NyaWJlKHNob3cgPT4ge1xuICAgICAgaWYgKHNob3cpIHtcbiAgICAgICAgdGhpcy5zaG93TW9kYWwoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGlkZU1vZGFsKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2xlYXJKc29uU3RyaW5nKCk7XG4gICAgICB0aGlzLmNsZWFyRXJyb3IoKTtcbiAgICAgIHRoaXMuY2xlYXJEcm9wem9uZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckpzb25TdHJpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5qc29uU3RyaW5nJC5uZXh0KCcnKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJEcm9wem9uZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyJC5uZXh0KG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93TW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbC5zaG93KCk7XG4gIH1cblxuICBwcml2YXRlIGhpZGVNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsLmhpZGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RyaW5nSXNWYWxpZEpzb24oc3RyaW5nOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgSlNPTi5wYXJzZShzdHJpbmcpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGRpc2FibGUoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlKCk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQkLm5leHQoZmFsc2UpO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyMyBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjx2YWx0aW1vLW1vZGFsXG4gICN1cGxvYWREZWZpbml0aW9uTW9kYWxcbiAgW3RpdGxlXT1cIidVcGxvYWQgZG9jdW1lbnQgZGVmaW5pdGlvbicgfCB0cmFuc2xhdGVcIlxuICBzaG93Rm9vdGVyPVwidHJ1ZVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJtdC0yXCIgYm9keT5cbiAgICA8dmFsdGltby1kcm9wem9uZVxuICAgICAgW2NsZWFyJF09XCJjbGVhciRcIlxuICAgICAgKGZpbGVTZWxlY3RlZCk9XCJzZXRGaWxlKCRldmVudClcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkJCB8IGFzeW5jXCJcbiAgICAgIFtzdWJ0aXRsZV09XCInZHJvcHpvbmUuanNvbkRvY0RlZicgfCB0cmFuc2xhdGVcIlxuICAgICAgW2V4dGVybmFsRXJyb3IkXT1cImVycm9yJFwiXG4gICAgICBbbWF4RmlsZXNdPVwiMVwiXG4gICAgPjwvdmFsdGltby1kcm9wem9uZT5cbiAgPC9kaXY+XG4gIDxkaXYgZm9vdGVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoanNvblN0cmluZyQgfCBhc3luYykgJiYgKGVycm9yJCB8IGFzeW5jKSA9PT0gJyc7IGVsc2UgZGlzYWJsZWRVcGxvYWRcIj5cbiAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImRpc2FibGVkJCB8IGFzeW5jXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwidXBsb2FkRGVmaW5pdGlvbigpXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiaWNvbiBtZGkgbWRpLXVwbG9hZCBtci0xXCI+PC9pPlxuICAgICAgICB7eyAnVXBsb2FkJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC92YWx0aW1vLW1vZGFsPlxuXG48bmctdGVtcGxhdGUgI2Rpc2FibGVkVXBsb2FkPlxuICA8YnV0dG9uIFtkaXNhYmxlZF09XCJ0cnVlXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIj5cbiAgICA8aSBjbGFzcz1cImljb24gbWRpIG1kaS11cGxvYWQgbXItMVwiPjwvaT5cbiAgICB7eyAnVXBsb2FkJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
217
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1tYW5hZ2VtZW50LXVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXItbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvZG9zc2llci1tYW5hZ2VtZW50LXVwbG9hZC9kb3NzaWVyLW1hbmFnZW1lbnQtdXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci1tYW5hZ2VtZW50L3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLW1hbmFnZW1lbnQtdXBsb2FkL2Rvc3NpZXItbWFuYWdlbWVudC11cGxvYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUEwQyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTlDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBaUIsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRSxPQUFPLEVBQUMsK0JBQStCLEVBQWtCLE1BQU0sbUJBQW1CLENBQUM7QUFFbkYsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLFlBQVksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXBHLE9BQU8sRUFBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBQyxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7Ozs7O0FBUXhGLE1BQU0sT0FBTyxnQ0FBZ0M7SUE0RDNDLFlBQ21CLGVBQWdDLEVB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YSxnQ0FBZ0M7a0JBTjVDLFNBQVM7K0JBQ0UsbUNBQW1DLG1CQUc1Qix1QkFBdUIsQ0FBQyxNQUFNOzROQUdYLEtBQUs7c0JBQXhDLFNBQVM7dUJBQUMsdUJBQXVCO2dCQUV6QixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7V2FybmluZ0ZpbGxlZDE2fSBmcm9tICdAY2FyYm9uL2ljb25zJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0NBUkJPTl9DT05TVEFOVFMsIE1vZGFsQ29tcG9uZW50fSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcbmltcG9ydCB7RG9jdW1lbnREZWZpbml0aW9uQ3JlYXRlUmVxdWVzdCwgRG9jdW1lbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge0ZpbGVJdGVtLCBJY29uU2VydmljZSwgTm90aWZpY2F0aW9uQ29udGVudH0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIHN3aXRjaE1hcCwgdGFrZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0Rvc3NpZXJJbXBvcnRTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kb3NzaWVyLWltcG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7U1RFUFMsIFVQTE9BRF9TVEFUVVMsIFVQTE9BRF9TVEVQfSBmcm9tICcuL2Rvc3NpZXItbWFuYWdlbWVudC11cGxvYWQuY29uc3RhbnRzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1kb3NzaWVyLW1hbmFnZW1lbnQtdXBsb2FkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rvc3NpZXItbWFuYWdlbWVudC11cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb3NzaWVyLW1hbmFnZW1lbnQtdXBsb2FkLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEb3NzaWVyTWFuYWdlbWVudFVwbG9hZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgndXBsb2FkRGVmaW5pdGlvbk1vZGFsJykgbW9kYWw6IE1vZGFsQ29tcG9uZW50O1xuXG4gIEBJbnB1dCgpIG9wZW4gPSBmYWxzZTtcbiAgQE91dHB1dCgpIGNsb3NlTW9kYWwgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgcHVibGljIGFjY2VwdGVkRmlsZXM6IHN0cmluZ1tdID0gWycuanNvbicsICcuemlwJ107XG4gIHB1YmxpYyBzZWxlY3RlZEZpbGU6IEZpbGUgfCBudWxsO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc2FibGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IFVQTE9BRF9TVEVQID0gVVBMT0FEX1NURVA7XG4gIHB1YmxpYyByZWFkb25seSBVUExPQURfU1RBVFVTID0gVVBMT0FEX1NUQVRVUztcbiAgcHVibGljIHJlYWRvbmx5IGFjdGl2ZVN0ZXAkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVUExPQURfU1RFUD4oVVBMT0FEX1NURVAuUExVR0lOUyk7XG4gIHB1YmxpYyByZWFkb25seSBiYWNrQnV0dG9uRW5hYmxlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmFjdGl2ZVN0ZXAkLnBpcGUoXG4gICAgbWFwKChhY3RpdmVTdGVwOiBVUExPQURfU1RFUCkgPT5cbiAgICAgIFtVUExPQURfU1RFUC5GSUxFX1NFTEVDVCwgVVBMT0FEX1NURVAuQUNDRVNTX0NPTlRST0wsIFVQTE9BRF9TVEVQLkRBU0hCT0FSRF0uaW5jbHVkZXMoXG4gICAgICAgIGFjdGl2ZVN0ZXBcbiAgICAgIClcbiAgICApXG4gICk7XG4gIHB1YmxpYyByZWFkb25seSBpc1N0ZXBBZnRlclVwbG9hZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmFjdGl2ZVN0ZXAkLnBpcGUoXG4gICAgbWFwKFxuICAgICAgKGFjdGl2ZVN0ZXA6IFVQTE9BRF9TVEVQKSA9PlxuICAgICAgICAhW1VQTE9BRF9TVEVQLlBMVUdJTlMsIFVQTE9BRF9TVEVQLkZJTEVfU0VMRUNUXS5pbmNsdWRlcyhhY3RpdmVTdGVwKVxuICAgIClcbiAgKTtcbiAgcHVibGljIHJlYWRvbmx5IHNob3dDbG9zZUJ1dHRvbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmFjdGl2ZVN0ZXAkLnBpcGUoXG4gICAgbWFwKChhY3RpdmVTdGVwOiBVUExPQURfU1RFUCkgPT5cbiAgICAgIFtVUExPQURfU1RFUC5QTFVHSU5TLCBVUExPQURfU1RFUC5GSUxFX1NFTEVDVCwgVVBMT0FEX1NURVAuRklMRV9VUExPQURdLmluY2x1ZGVzKGFjdGl2ZVN0ZXApXG4gICAgKVxuICApO1xuICBwdWJsaWMgcmVhZG9ubHkgbmV4dEJ1dHRvbkRpc2FibGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuYWN0aXZlU3RlcCQsXG4gICAgdGhpcy5fZGlzYWJsZWQkLFxuICBdKS5waXBlKG1hcCgoW2FjdGl2ZVN0ZXAsIGRpc2FibGVkXSkgPT4gYWN0aXZlU3RlcCAhPT0gVVBMT0FEX1NURVAuUExVR0lOUyAmJiBkaXNhYmxlZCkpO1xuICBwdWJsaWMgcmVhZG9ubHkgbm90aWZpY2F0aW9uT2JqJDogT2JzZXJ2YWJsZTxOb3RpZmljYXRpb25Db250ZW50PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2ludGVyZmFjZS53YXJuaW5nJyksXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgnZG9zc2llck1hbmFnZW1lbnQuaW1wb3J0RGVmaW5pdGlvbi5vdmVyd3JpdGVXYXJuaW5nJyksXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbdGl0bGUsIG1lc3NhZ2VdKSA9PiAoe1xuICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgdGl0bGUsXG4gICAgICBtZXNzYWdlLFxuICAgICAgc2hvd0Nsb3NlOiBmYWxzZSxcbiAgICAgIGxvd0NvbnRyYXN0OiB0cnVlLFxuICAgIH0pKVxuICApO1xuICBwdWJsaWMgcmVhZG9ubHkgc2hvd0NoZWNrYm94RXJyb3IkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSB1cGxvYWRTdGF0dXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVUExPQURfU1RBVFVTPihVUExPQURfU1RBVFVTLkFDVElWRSk7XG5cbiAgcHVibGljIGZvcm06IEZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgIGZpbGU6IHRoaXMuZmIuY29udHJvbChuZXcgU2V0PGFueT4oKSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcbiAgfSk7XG5cbiAgcHJpdmF0ZSBfY2hlY2tlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ltcG9ydEZpbGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBGb3JtRGF0YT4oJycpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRTZXJ2aWNlOiBEb2N1bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb3NzaWVySW1wb3J0U2VydmljZTogRG9zc2llckltcG9ydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpY29uU2VydmljZTogSWNvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuaWNvblNlcnZpY2UucmVnaXN0ZXIoV2FybmluZ0ZpbGxlZDE2KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsID0gdGhpcy5mb3JtLmdldCgnZmlsZScpO1xuICAgIGlmICghY29udHJvbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChmaWxlU2V0OiBTZXQ8RmlsZUl0ZW0+KSA9PiB7XG4gICAgICAgIGNvbnN0IFtmaWxlSXRlbV0gPSBmaWxlU2V0O1xuICAgICAgICBpZiAoIWZpbGVJdGVtKSB7XG4gICAgICAgICAgdGhpcy5fZGlzYWJsZWQkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgdGhpcy5zaG93Q2hlY2tib3hFcnJvciQubmV4dChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5fY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlSXRlbS5maWxlLnR5cGUgPT09ICdhcHBsaWNhdGlvbi9qc29uJykge1xuICAgICAgICAgIHRoaXMuc2V0SnNvbkZpbGUoZmlsZUl0ZW0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0WmlwRmlsZShmaWxlSXRlbSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldE1vZGFsKCk7XG4gIH1cblxuICBwdWJsaWMgb25DbG9zZU1vZGFsKGRlZmluaXRpb25VcGxvYWRlZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlTW9kYWwuZW1pdChkZWZpbml0aW9uVXBsb2FkZWQgPz8gZmFsc2UpO1xuICAgIHRoaXMucmVzZXRNb2RhbCgpO1xuICB9XG5cbiAgcHVibGljIG9uQmFja0NsaWNrKGFjdGl2ZVN0ZXA6IFVQTE9BRF9TVEVQKTogdm9pZCB7XG4gICAgY29uc3QgcHJldkluZGV4OiBudW1iZXIgPSBTVEVQUy5maW5kSW5kZXgoKHN0ZXA6IFVQTE9BRF9TVEVQKSA9PiBzdGVwID09PSBhY3RpdmVTdGVwKSAtIDE7XG4gICAgaWYgKHByZXZJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmFjdGl2ZVN0ZXAkLm5leHQoU1RFUFNbcHJldkluZGV4XSk7XG4gIH1cblxuICBwdWJsaWMgb25OZXh0Q2xpY2soYWN0aXZlU3RlcDogVVBMT0FEX1NURVApOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0SW5kZXg6IG51bWJlciA9IFNURVBTLmZpbmRJbmRleCgoc3RlcDogVVBMT0FEX1NURVApID0+IHN0ZXAgPT09IGFjdGl2ZVN0ZXApICsgMTtcbiAgICBpZiAobmV4dEluZGV4ID09PSBTVEVQUy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoYWN0aXZlU3RlcCA9PT0gVVBMT0FEX1NURVAuRklMRV9TRUxFQ1QgJiYgIXRoaXMuX2NoZWNrZWQpIHtcbiAgICAgIHRoaXMuc2hvd0NoZWNrYm94RXJyb3IkLm5leHQodHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hY3RpdmVTdGVwJC5uZXh0KFNURVBTW25leHRJbmRleF0pO1xuICAgIGlmIChTVEVQU1tuZXh0SW5kZXhdICE9PSBVUExPQURfU1RFUC5GSUxFX1VQTE9BRCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXBsb2FkRGVmaW5pdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG9uQ2hlY2tlZENoYW5nZShjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fY2hlY2tlZCA9IGNoZWNrZWQ7XG5cbiAgICBpZiAoIWNoZWNrZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dDaGVja2JveEVycm9yJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SnNvbkZpbGUoZmlsZUl0ZW06IEZpbGVJdGVtIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgZmlsZSA9IGZpbGVJdGVtPy5maWxlO1xuXG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICB0aGlzLmNsZWFySnNvblN0cmluZygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IChyZWFkZXIucmVzdWx0ID8/ICcnKS50b1N0cmluZygpO1xuICAgICAgaWYgKHRoaXMuc3RyaW5nSXNWYWxpZEpzb24ocmVzdWx0KSkge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCQubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMuX2ltcG9ydEZpbGUkLm5leHQocmVzdWx0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNsZWFySnNvblN0cmluZygpO1xuICAgICAgdGhpcy5zZXRFcnJvclN0YXRlKGZpbGVJdGVtKTtcbiAgICB9O1xuXG4gICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7XG4gIH1cblxuICBwcml2YXRlIHNldFppcEZpbGUoZmlsZUl0ZW06IEZpbGVJdGVtKTogdm9pZCB7XG4gICAgY29uc3QgZmlsZSA9IGZpbGVJdGVtPy5maWxlO1xuXG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICB0aGlzLl9pbXBvcnRGaWxlJC5uZXh0KCcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2ZpbGVJdGVtLmZpbGVdLCB7dHlwZTogZmlsZUl0ZW0uZmlsZS50eXBlfSk7XG4gICAgY29uc3QgZmQgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmZC5hcHBlbmQoJ2ZpbGUnLCBibG9iLCBmaWxlSXRlbS5maWxlLm5hbWUpO1xuICAgIHRoaXMuX2ltcG9ydEZpbGUkLm5leHQoZmQpO1xuICAgIHRoaXMuX2Rpc2FibGVkJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBsb2FkRGVmaW5pdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNhYmxlZCQubmV4dCh0cnVlKTtcbiAgICB0aGlzLl9pbXBvcnRGaWxlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoZmlsZTogc3RyaW5nIHwgRm9ybURhdGEpID0+XG4gICAgICAgICAgZmlsZSBpbnN0YW5jZW9mIEZvcm1EYXRhXG4gICAgICAgICAgICA/IHRoaXMuZG9zc2llckltcG9ydFNlcnZpY2UuaW1wb3J0RG9jdW1lbnREZWZpbml0aW9uWmlwKGZpbGUpXG4gICAgICAgICAgICA6IHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmNyZWF0ZURvY3VtZW50RGVmaW5pdGlvbkZvck1hbmFnZW1lbnQoXG4gICAgICAgICAgICAgICAgbmV3IERvY3VtZW50RGVmaW5pdGlvbkNyZWF0ZVJlcXVlc3QoZmlsZSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICB0YWtlKDEpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2Rpc2FibGVkJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLnVwbG9hZFN0YXR1cyQubmV4dChVUExPQURfU1RBVFVTLkZJTklTSEVEKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnVwbG9hZFN0YXR1cyQubmV4dChVUExPQURfU1RBVFVTLkVSUk9SKTtcbiAgICAgICAgICB0aGlzLl9kaXNhYmxlZCQubmV4dChmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJKc29uU3RyaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuX2ltcG9ydEZpbGUkLm5leHQoJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdJc1ZhbGlkSnNvbihzdHJpbmc6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBKU09OLnBhcnNlKHN0cmluZyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RXJyb3JTdGF0ZShmaWxlSXRlbTogRmlsZUl0ZW0pOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNhYmxlZCQubmV4dCh0cnVlKTtcbiAgICBmaWxlSXRlbS5pbnZhbGlkID0gdHJ1ZTtcbiAgICBmaWxlSXRlbS5pbnZhbGlkVGl0bGUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICdkb3NzaWVyTWFuYWdlbWVudC5pbXBvcnREZWZpbml0aW9uLmludmFsaWRKc29uRXJyb3IudGl0bGUnXG4gICAgKTtcbiAgICBmaWxlSXRlbS5pbnZhbGlkVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgJ2Rvc3NpZXJNYW5hZ2VtZW50LmltcG9ydERlZmluaXRpb24uaW52YWxpZEpzb25FcnJvci50ZXh0J1xuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0TW9kYWwoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmFjdGl2ZVN0ZXAkLm5leHQoVVBMT0FEX1NURVAuUExVR0lOUyk7XG4gICAgICB0aGlzLnVwbG9hZFN0YXR1cyQubmV4dChVUExPQURfU1RBVFVTLkFDVElWRSk7XG4gICAgICB0aGlzLnNob3dDaGVja2JveEVycm9yJC5uZXh0KGZhbHNlKTtcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9LCBDQVJCT05fQ09OU1RBTlRTLm1vZGFsQW5pbWF0aW9uTXMpO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyMyBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxjZHMtbW9kYWxcbiAgKm5nSWY9XCJ7XG4gICAgYWN0aXZlU3RlcDogYWN0aXZlU3RlcCQgfCBhc3luYyxcbiAgICBiYWNrQnV0dG9uRW5hYmxlZDogYmFja0J1dHRvbkVuYWJsZWQkIHwgYXN5bmMsXG4gICAgaXNTdGVwQWZ0ZXJVcGxvYWQ6IGlzU3RlcEFmdGVyVXBsb2FkJCB8IGFzeW5jLFxuICAgIG5leHRCdXR0b25EaXNhYmxlZDogbmV4dEJ1dHRvbkRpc2FibGVkJCB8IGFzeW5jLFxuICAgIG5vdGlmaWNhdGlvbk9iajogbm90aWZpY2F0aW9uT2JqJCB8IGFzeW5jLFxuICAgIHNob3dDaGVja2JveEVycm9yOiBzaG93Q2hlY2tib3hFcnJvciQgfCBhc3luYyxcbiAgICBzaG93Q2xvc2VCdXR0b246IHNob3dDbG9zZUJ1dHRvbiQgfCBhc3luYyxcbiAgICB1cGxvYWRTdGF0dXM6IHVwbG9hZFN0YXR1cyQgfCBhc3luY1xuICB9IGFzIG9ic1wiXG4gIHZhbHRpbW9DZHNNb2RhbFxuICBbb3Blbl09XCJvcGVuXCJcbiAgc2hvd0Zvb3Rlcj1cInRydWVcIlxuICBjbGFzcz1cInZhbHRpbW8tZGVmaW5pdGlvbi11cGxvYWRlclwiXG4gIChjbG9zZSk9XCJvbkNsb3NlTW9kYWwoKVwiXG4+XG4gIDxjZHMtbW9kYWwtaGVhZGVyXG4gICAgW3Nob3dDbG9zZUJ1dHRvbl09XCJvYnMuc2hvd0Nsb3NlQnV0dG9uXCJcbiAgICAoY2xvc2VTZWxlY3QpPVwib25DbG9zZU1vZGFsKG9icy5pc1N0ZXBBZnRlclVwbG9hZCAmJiBvYnMudXBsb2FkU3RhdHVzICE9PSBVUExPQURfU1RBVFVTLkVSUk9SKVwiXG4gID5cbiAgICA8aDMgY2RzTW9kYWxIZWFkZXJIZWFkaW5nPlxuICAgICAge3sgJ2Rvc3NpZXJNYW5hZ2VtZW50LmltcG9ydERlZmluaXRpb24udGl0bGUnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9oMz5cbiAgPC9jZHMtbW9kYWwtaGVhZGVyPlxuXG4gIDxzZWN0aW9uIFtuZ1N3aXRjaF09XCJvYnMuYWN0aXZlU3RlcFwiIGNkc01vZGFsQ29udGVudCBjbGFzcz1cInZhbHRpbW8tZGVmaW5pdGlvbi11cGxvYWRlcl9fY29udGVudFwiPlxuICAgIDxuZy10ZW1wbGF0ZSBuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICA8dmFsdGltby1kb3NzaWVyLW1hbmFnZW1lbnQtdXBsb2FkLXN0ZXBcbiAgICAgICAgW21lc3NhZ2VdPVwiXG4gICAgICAgICAgJ2Rvc3NpZXJNYW5hZ2VtZW50LmltcG9ydERlZmluaXRpb24uc3RlcHMuJyArIG9icy5hY3RpdmVTdGVwICsgJy5tZXNzYWdlJyB8IHRyYW5zbGF0ZVxuICAgICAgICBcIlxuICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgJ2Rvc3NpZXJNYW5hZ2VtZW50LmltcG9ydERlZmluaXRpb24uc3RlcHMuJyArIG9icy5hY3RpdmVTdGVwICsgJy50aXRsZScgfCB0cmFuc2xhdGVcbiAgICAgICAgXCJcbiAgICAgICAgW2lsbHVzdHJhdGlvbl09XCIndmFsdGltby1sYXlvdXQvaW1nLycgKyBvYnMuYWN0aXZlU3RlcCArICcuc3ZnJ1wiXG4gICAgICA+XG4gICAgICA8L3ZhbHRpbW8tZG9zc2llci1tYW5hZ2VtZW50LXVwbG9hZC1zdGVwPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8Zm9ybSAqbmdTd2l0Y2hDYXNlPVwiVVBMT0FEX1NURVAuRklMRV9TRUxFQ1RcIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICAgIDxjZHMtZmlsZS11cGxvYWRlclxuICAgICAgICBbYWNjZXB0XT1cImFjY2VwdGVkRmlsZXNcIlxuICAgICAgICBbYnV0dG9uVGV4dF09XCInZG9zc2llck1hbmFnZW1lbnQuaW1wb3J0RGVmaW5pdGlvbi51cGxvYWQuYnV0dG9uVGV4dCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ2Rvc3NpZXJNYW5hZ2VtZW50LmltcG9ydERlZmluaXRpb24udXBsb2FkLmRlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFttdWx0aXBsZV09XCJmYWxzZVwiXG4gICAgICAgIFt0aXRsZV09XCInZG9zc2llck1hbmFnZW1lbnQuaW1wb3J0RGVmaW5pdGlvbi51cGxvYWQudGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgYnV0dG9uVHlwZT1cInByaW1hcnlcIlxuICAgICAgICBkYXRhLWNhcmJvbi10aGVtZT1cImcxMFwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZpbGVcIlxuICAgICAgICBjbGFzcz1cInZhbHRpbW8tZGVmaW5pdGlvbi11cGxvYWRlcl9fZmlsZS11cGxvYWRlclwiXG4gICAgICA+XG4gICAgICA8L2Nkcy1maWxlLXVwbG9hZGVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW9icy5uZXh0QnV0dG9uRGlzYWJsZWRcIj5cbiAgICAgICAgPGNkcy1pbmxpbmUtbm90aWZpY2F0aW9uIFtub3RpZmljYXRpb25PYmpdPVwib2JzLm5vdGlmaWNhdGlvbk9ialwiPjwvY2RzLWlubGluZS1ub3RpZmljYXRpb24+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZhbHRpbW8tdXBsb2FkZXJfX2NoZWNrYm94XCI+XG4gICAgICAgICAgPGNkcy1jaGVja2JveFxuICAgICAgICAgICAgW2NsYXNzLnZhbHRpbW8tZGVmaW5pdGlvbi11cGxvYWRlcl9fY2hlY2tib3gtLWludmFsaWRdPVwib2JzLnNob3dDaGVja2JveEVycm9yXCJcbiAgICAgICAgICAgIChjaGVja2VkQ2hhbmdlKT1cIm9uQ2hlY2tlZENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyAnZG9zc2llck1hbmFnZW1lbnQuaW1wb3J0RGVmaW5pdGlvbi5jaGVja2JveC5tZXNzYWdlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvY2RzLWNoZWNrYm94PlxuXG4gICAgICAgICAgPGRpdiAqbmdJZj1cIm9icy5zaG93Q2hlY2tib3hFcnJvclwiIGNsYXNzPVwidmFsdGltby1kZWZpbml0aW9uLXVwbG9hZGVyX19lcnJvclwiPlxuICAgICAgICAgICAgPHN2ZyBjZHNJY29uPVwid2FybmluZy0tZmlsbGVkXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG5cbiAgICAgICAgICAgIHt7ICdkb3NzaWVyTWFuYWdlbWVudC5pbXBvcnREZWZpbml0aW9uLmNoZWNrYm94LmVycm9yJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZm9ybT5cblxuICAgIDxjZHMtcHJvZ3Jlc3MtYmFyXG4gICAgICAqbmdTd2l0Y2hDYXNlPVwiVVBMT0FEX1NURVAuRklMRV9VUExPQURcIlxuICAgICAgY2xhc3M9XCJ2YWx0aW1vLWRlZmluaXRpb24tdXBsb2FkZXJfX3Byb2dyZXNzLWJhclwiXG4gICAgICBbbGFiZWxdPVwiJ2Rvc3NpZXJNYW5hZ2VtZW50LmltcG9ydERlZmluaXRpb24ucHJvZ3Jlc3NCYXIubGFiZWwnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtzdGF0dXNdPVwib2JzLnVwbG9hZFN0YXR1c1wiXG4gICAgICBbaGVscGVyVGV4dF09XCJcbiAgICAgICAgJ2Rvc3NpZXJNYW5hZ2VtZW50LmltcG9ydERlZmluaXRpb24ucHJvZ3Jlc3NCYXIuJyArIG9icy51cGxvYWRTdGF0dXMgfCB0cmFuc2xhdGVcbiAgICAgIFwiXG4gICAgPjwvY2RzLXByb2dyZXNzLWJhcj5cbiAgPC9zZWN0aW9uPlxuXG4gIDxjZHMtbW9kYWwtZm9vdGVyXG4gICAgY2xhc3M9XCJ2YWx0aW1vLWRlZmluaXRpb24tdXBsb2FkZXJfX2Zvb3RlclwiXG4gICAgW2NsYXNzLnZhbHRpbW8tZGVmaW5pdGlvbi11cGxvYWRlcl9fZm9vdGVyLS1kb3VibGVdPVwib2JzLmFjdGl2ZVN0ZXAgPT09IFVQTE9BRF9TVEVQLlBMVUdJTlNcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJvYnMudXBsb2FkU3RhdHVzICE9PSBVUExPQURfU1RBVFVTLkVSUk9SICYmIG9icy5hY3RpdmVTdGVwICE9PSBVUExPQURfU1RFUC5GSUxFX1VQTE9BRFwiXG4gICAgICBjbGFzcz1cInZhbHRpbW8tZGVmaW5pdGlvbi11cGxvYWRlcl9fY2FuY2VsXCJcbiAgICAgIGNkc0J1dHRvbj1cImdob3N0XCJcbiAgICAgIChjbGljayk9XCJvbkNsb3NlTW9kYWwob2JzLmlzU3RlcEFmdGVyVXBsb2FkKVwiXG4gICAgPlxuICAgICAge3sgKG9icy5pc1N0ZXBBZnRlclVwbG9hZCA/ICdpbnRlcmZhY2Uuc2tpcCcgOiAnaW50ZXJmYWNlLmNhbmNlbCcpIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG5cbiAgICA8ZGl2IGNsYXNzPVwidmFsdGltby1kZWZpbml0aW9uLXVwbG9hZGVyX19hY3Rpb25zXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwib2JzLmJhY2tCdXR0b25FbmFibGVkXCJcbiAgICAgICAgY2RzQnV0dG9uPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQmFja0NsaWNrKG9icy5hY3RpdmVTdGVwKVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdpbnRlcmZhY2UuYmFjaycgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwib2JzLnVwbG9hZFN0YXR1cyAhPT0gVVBMT0FEX1NUQVRVUy5FUlJPUiAmJiBvYnMuYWN0aXZlU3RlcCAhPT0gVVBMT0FEX1NURVAuREFTSEJPQVJEXCJcbiAgICAgICAgY2RzQnV0dG9uPVwicHJpbWFyeVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJvYnMubmV4dEJ1dHRvbkRpc2FibGVkXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uTmV4dENsaWNrKG9icy5hY3RpdmVTdGVwKVwiXG4gICAgICA+XG4gICAgICAgIHt7XG4gICAgICAgICAgKG9icy5hY3RpdmVTdGVwID09PSBVUExPQURfU1RFUC5GSUxFX1NFTEVDVFxuICAgICAgICAgICAgPyAnZG9zc2llck1hbmFnZW1lbnQuaW1wb3J0RGVmaW5pdGlvbi5zdGFydFVwbG9hZCdcbiAgICAgICAgICAgIDogJ2ludGVyZmFjZS5uZXh0J1xuICAgICAgICAgICkgfCB0cmFuc2xhdGVcbiAgICAgICAgfX1cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwib2JzLnVwbG9hZFN0YXR1cyA9PT0gVVBMT0FEX1NUQVRVUy5FUlJPUiB8fCBvYnMuYWN0aXZlU3RlcCA9PT0gVVBMT0FEX1NURVAuREFTSEJPQVJEXCJcbiAgICAgICAgY2xhc3M9XCJ2YWx0aW1vLWRlZmluaXRpb24tdXBsb2FkZXJfX2NhbmNlbFwiXG4gICAgICAgIGNkc0J1dHRvbj1cInByaW1hcnlcIlxuICAgICAgICAoY2xpY2spPVwib25DbG9zZU1vZGFsKHRydWUpXCJcbiAgICAgID5cbiAgICAgICAge3sgJ2ludGVyZmFjZS5maW5pc2gnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9jZHMtbW9kYWwtZm9vdGVyPlxuPC9jZHMtbW9kYWw+XG4iXX0=
@@ -0,0 +1,23 @@
1
+ var UPLOAD_STATUS;
2
+ (function (UPLOAD_STATUS) {
3
+ UPLOAD_STATUS["ACTIVE"] = "active";
4
+ UPLOAD_STATUS["ERROR"] = "error";
5
+ UPLOAD_STATUS["FINISHED"] = "finished";
6
+ })(UPLOAD_STATUS || (UPLOAD_STATUS = {}));
7
+ var UPLOAD_STEP;
8
+ (function (UPLOAD_STEP) {
9
+ UPLOAD_STEP["ACCESS_CONTROL"] = "accessControl";
10
+ UPLOAD_STEP["DASHBOARD"] = "dashboard";
11
+ UPLOAD_STEP["FILE_SELECT"] = "fileSelect";
12
+ UPLOAD_STEP["FILE_UPLOAD"] = "fileUpload";
13
+ UPLOAD_STEP["PLUGINS"] = "plugins";
14
+ })(UPLOAD_STEP || (UPLOAD_STEP = {}));
15
+ const STEPS = [
16
+ UPLOAD_STEP.PLUGINS,
17
+ UPLOAD_STEP.FILE_SELECT,
18
+ UPLOAD_STEP.FILE_UPLOAD,
19
+ UPLOAD_STEP.ACCESS_CONTROL,
20
+ UPLOAD_STEP.DASHBOARD,
21
+ ];
22
+ export { STEPS, UPLOAD_STATUS, UPLOAD_STEP };
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1tYW5hZ2VtZW50LXVwbG9hZC5jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXItbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvZG9zc2llci1tYW5hZ2VtZW50LXVwbG9hZC9kb3NzaWVyLW1hbmFnZW1lbnQtdXBsb2FkLmNvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxJQUFLLGFBSUo7QUFKRCxXQUFLLGFBQWE7SUFDaEIsa0NBQWlCLENBQUE7SUFDakIsZ0NBQWUsQ0FBQTtJQUNmLHNDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFKSSxhQUFhLEtBQWIsYUFBYSxRQUlqQjtBQUVELElBQUssV0FNSjtBQU5ELFdBQUssV0FBVztJQUNkLCtDQUFnQyxDQUFBO0lBQ2hDLHNDQUF1QixDQUFBO0lBQ3ZCLHlDQUEwQixDQUFBO0lBQzFCLHlDQUEwQixDQUFBO0lBQzFCLGtDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFOSSxXQUFXLEtBQVgsV0FBVyxRQU1mO0FBRUQsTUFBTSxLQUFLLEdBQUc7SUFDWixXQUFXLENBQUMsT0FBTztJQUNuQixXQUFXLENBQUMsV0FBVztJQUN2QixXQUFXLENBQUMsV0FBVztJQUN2QixXQUFXLENBQUMsY0FBYztJQUMxQixXQUFXLENBQUMsU0FBUztDQUN0QixDQUFDO0FBRUYsT0FBTyxFQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJlbnVtIFVQTE9BRF9TVEFUVVMge1xuICBBQ1RJVkUgPSAnYWN0aXZlJyxcbiAgRVJST1IgPSAnZXJyb3InLFxuICBGSU5JU0hFRCA9ICdmaW5pc2hlZCcsXG59XG5cbmVudW0gVVBMT0FEX1NURVAge1xuICBBQ0NFU1NfQ09OVFJPTCA9ICdhY2Nlc3NDb250cm9sJyxcbiAgREFTSEJPQVJEID0gJ2Rhc2hib2FyZCcsXG4gIEZJTEVfU0VMRUNUID0gJ2ZpbGVTZWxlY3QnLFxuICBGSUxFX1VQTE9BRCA9ICdmaWxlVXBsb2FkJyxcbiAgUExVR0lOUyA9ICdwbHVnaW5zJyxcbn1cblxuY29uc3QgU1RFUFMgPSBbXG4gIFVQTE9BRF9TVEVQLlBMVUdJTlMsXG4gIFVQTE9BRF9TVEVQLkZJTEVfU0VMRUNULFxuICBVUExPQURfU1RFUC5GSUxFX1VQTE9BRCxcbiAgVVBMT0FEX1NURVAuQUNDRVNTX0NPTlRST0wsXG4gIFVQTE9BRF9TVEVQLkRBU0hCT0FSRCxcbl07XG5cbmV4cG9ydCB7U1RFUFMsIFVQTE9BRF9TVEFUVVMsIFVQTE9BRF9TVEVQfTtcbiJdfQ==
@@ -0,0 +1,17 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class DossierManagementUploadStepComponent {
4
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DossierManagementUploadStepComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DossierManagementUploadStepComponent, selector: "valtimo-dossier-management-upload-step", inputs: { illustration: "illustration", message: "message", title: "title" }, ngImport: i0, template: "<div class=\"valtimo-upload-step__content\">\n <div class=\"valtimo-upload-step__title\">{{ title }}</div>\n\n <div class=\"valtimo-upload-step__message\">{{ message }}</div>\n</div>\n\n<img [src]=\"illustration\" alt=\"{{ illustration }}\" class=\"valtimo-upload-step__illustration\" />\n", styles: [":host{display:flex;justify-content:space-around;align-items:center;gap:32px;height:100%}:host label{color:unset}.valtimo-upload-step__content{display:flex;flex-direction:column;gap:16px}.valtimo-upload-step__title{font-weight:600;font-size:16px}.valtimo-upload-step__message{font-size:16px;line-height:28px}.valtimo-upload-step__illustration{max-width:200px}\n"] }); }
6
+ }
7
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DossierManagementUploadStepComponent, decorators: [{
8
+ type: Component,
9
+ args: [{ selector: 'valtimo-dossier-management-upload-step', template: "<div class=\"valtimo-upload-step__content\">\n <div class=\"valtimo-upload-step__title\">{{ title }}</div>\n\n <div class=\"valtimo-upload-step__message\">{{ message }}</div>\n</div>\n\n<img [src]=\"illustration\" alt=\"{{ illustration }}\" class=\"valtimo-upload-step__illustration\" />\n", styles: [":host{display:flex;justify-content:space-around;align-items:center;gap:32px;height:100%}:host label{color:unset}.valtimo-upload-step__content{display:flex;flex-direction:column;gap:16px}.valtimo-upload-step__title{font-weight:600;font-size:16px}.valtimo-upload-step__message{font-size:16px;line-height:28px}.valtimo-upload-step__illustration{max-width:200px}\n"] }]
10
+ }], propDecorators: { illustration: [{
11
+ type: Input
12
+ }], message: [{
13
+ type: Input
14
+ }], title: [{
15
+ type: Input
16
+ }] } });
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1tYW5hZ2VtZW50LXVwbG9hZC1zdGVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci1tYW5hZ2VtZW50L3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLW1hbmFnZW1lbnQtdXBsb2FkL3N0ZXAvZG9zc2llci1tYW5hZ2VtZW50LXVwbG9hZC1zdGVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci1tYW5hZ2VtZW50L3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLW1hbmFnZW1lbnQtdXBsb2FkL3N0ZXAvZG9zc2llci1tYW5hZ2VtZW50LXVwbG9hZC1zdGVwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDOztBQU8vQyxNQUFNLE9BQU8sb0NBQW9DOytHQUFwQyxvQ0FBb0M7bUdBQXBDLG9DQUFvQyw0SkNQakQscVNBT0E7OzRGREFhLG9DQUFvQztrQkFMaEQsU0FBUzsrQkFDRSx3Q0FBd0M7OEJBS3pDLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9zc2llci1tYW5hZ2VtZW50LXVwbG9hZC1zdGVwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rvc3NpZXItbWFuYWdlbWVudC11cGxvYWQtc3RlcC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Rvc3NpZXItbWFuYWdlbWVudC11cGxvYWQtc3RlcC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEb3NzaWVyTWFuYWdlbWVudFVwbG9hZFN0ZXBDb21wb25lbnQge1xuICBASW5wdXQoKSBpbGx1c3RyYXRpb24hOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1lc3NhZ2UhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRpdGxlITogc3RyaW5nO1xufVxuIiwiPGRpdiBjbGFzcz1cInZhbHRpbW8tdXBsb2FkLXN0ZXBfX2NvbnRlbnRcIj5cbiAgPGRpdiBjbGFzcz1cInZhbHRpbW8tdXBsb2FkLXN0ZXBfX3RpdGxlXCI+e3sgdGl0bGUgfX08L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwidmFsdGltby11cGxvYWQtc3RlcF9fbWVzc2FnZVwiPnt7IG1lc3NhZ2UgfX08L2Rpdj5cbjwvZGl2PlxuXG48aW1nIFtzcmNdPVwiaWxsdXN0cmF0aW9uXCIgYWx0PVwie3sgaWxsdXN0cmF0aW9uIH19XCIgY2xhc3M9XCJ2YWx0aW1vLXVwbG9hZC1zdGVwX19pbGx1c3RyYXRpb25cIiAvPlxuIl19