@valtimo/components 10.8.0 → 10.8.2

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 (21) hide show
  1. package/esm2020/lib/components/dropzone/dropzone.component.mjs +18 -5
  2. package/esm2020/lib/components/form-io/documenten-api-uploader/documenten-api-uploader-edit-form.mjs +11 -1
  3. package/esm2020/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.formio.mjs +4 -2
  4. package/esm2020/lib/components/form-io/form-io-uploader/form-io-uploader-edit-form.mjs +11 -1
  5. package/esm2020/lib/components/form-io/form-io-uploader/form-io-uploader.formio.mjs +3 -4
  6. package/esm2020/lib/components/form-io/form-io.component.mjs +68 -36
  7. package/fesm2015/valtimo-components.mjs +105 -41
  8. package/fesm2015/valtimo-components.mjs.map +1 -1
  9. package/fesm2020/valtimo-components.mjs +106 -41
  10. package/fesm2020/valtimo-components.mjs.map +1 -1
  11. package/lib/components/dropzone/dropzone.component.d.ts +5 -2
  12. package/lib/components/dropzone/dropzone.component.d.ts.map +1 -1
  13. package/lib/components/form-io/documenten-api-uploader/documenten-api-uploader-edit-form.d.ts +10 -10
  14. package/lib/components/form-io/documenten-api-uploader/documenten-api-uploader-edit-form.d.ts.map +1 -1
  15. package/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.formio.d.ts.map +1 -1
  16. package/lib/components/form-io/form-io-uploader/form-io-uploader-edit-form.d.ts +9 -9
  17. package/lib/components/form-io/form-io-uploader/form-io-uploader-edit-form.d.ts.map +1 -1
  18. package/lib/components/form-io/form-io-uploader/form-io-uploader.formio.d.ts.map +1 -1
  19. package/lib/components/form-io/form-io.component.d.ts +19 -13
  20. package/lib/components/form-io/form-io.component.d.ts.map +1 -1
  21. package/package.json +1 -1
@@ -16,7 +16,7 @@
16
16
  import { Component, EventEmitter, Input, Output, } from '@angular/core';
17
17
  import { Formio } from '@formio/angular';
18
18
  import jwt_decode from 'jwt-decode';
19
- import { from, timer } from 'rxjs';
19
+ import { BehaviorSubject, combineLatest, from, Subscription, timer } from 'rxjs';
20
20
  import { distinctUntilChanged, map, switchMap, take } from 'rxjs/operators';
21
21
  import * as i0 from "@angular/core";
22
22
  import * as i1 from "@valtimo/security";
@@ -35,47 +35,58 @@ export class FormioComponent {
35
35
  this.route = route;
36
36
  this.translateService = translateService;
37
37
  this.modalService = modalService;
38
- this.submission = {};
39
38
  // eslint-disable-next-line @angular-eslint/no-output-native
40
39
  this.submit = new EventEmitter();
41
40
  // eslint-disable-next-line @angular-eslint/no-output-native
42
41
  this.change = new EventEmitter();
43
42
  this.refreshForm = new EventEmitter();
44
- this.errors = [];
43
+ this.submission$ = new BehaviorSubject(undefined);
44
+ this.form$ = new BehaviorSubject(undefined);
45
+ this.options$ = new BehaviorSubject(undefined);
46
+ this.readOnly$ = new BehaviorSubject(false);
47
+ this.errors$ = new BehaviorSubject([]);
45
48
  this.currentLanguage$ = this.translateService.stream('key').pipe(map(() => this.translateService.currentLang), distinctUntilChanged());
46
- this.formioOptions$ = this.currentLanguage$.pipe(map(language => {
49
+ this.formioOptions$ = combineLatest([
50
+ this.currentLanguage$,
51
+ this.options$,
52
+ ]).pipe(map(([language, options]) => {
47
53
  const formioTranslations = this.translateService.instant('formioTranslations');
48
54
  return typeof formioTranslations === 'object'
49
55
  ? {
50
- ...this.options,
51
- language,
56
+ ...options,
52
57
  i18n: {
53
58
  [language]: this.stateService.flattenTranslationsObject(formioTranslations),
54
59
  },
60
+ language,
55
61
  }
56
- : this.options;
62
+ : {
63
+ ...options,
64
+ language,
65
+ };
57
66
  }));
67
+ this._subscriptions = new Subscription();
68
+ }
69
+ set options(optionsValue) {
70
+ this.options$.next(optionsValue);
71
+ }
72
+ set submission(submissionValue) {
73
+ this.submission$.next(submissionValue);
74
+ }
75
+ set form(formValue) {
76
+ this.form$.next(formValue);
77
+ }
78
+ set readOnly(readOnlyValue) {
79
+ this.readOnly$.next(readOnlyValue);
58
80
  }
59
81
  ngOnInit() {
60
- const documentDefinitionName = this.route.snapshot.paramMap.get('documentDefinitionName');
61
- const documentId = this.route.snapshot.paramMap.get('documentId');
62
- this.formDefinition = this.form;
63
- this.errors = [];
82
+ this.openRouteSubscription();
83
+ this.errors$.next([]);
64
84
  this.setInitialToken();
65
- if (documentDefinitionName) {
66
- this.stateService.setDocumentDefinitionName(documentDefinitionName);
67
- }
68
- if (documentId) {
69
- this.stateService.setDocumentId(documentId);
70
- }
71
85
  this.subscribeFormRefresh();
86
+ this.openReloadFormSubscription();
87
+ this.openReloadSubmissionSubscription();
72
88
  }
73
89
  ngOnChanges(changes) {
74
- const currentForm = changes?.form?.currentValue;
75
- if (currentForm) {
76
- this.formDefinition = currentForm;
77
- this.reloadForm();
78
- }
79
90
  this.setInitialToken();
80
91
  if (changes.formDefinitionRefresh$) {
81
92
  this.unsubscribeFormRefresh();
@@ -85,21 +96,16 @@ export class FormioComponent {
85
96
  ngOnDestroy() {
86
97
  this.unsubscribeFormRefresh();
87
98
  this.tokenRefreshTimerSubscription?.unsubscribe();
88
- }
89
- reloadForm() {
90
- this.refreshForm.emit({
91
- form: this.formDefinition,
92
- });
99
+ this._subscriptions.unsubscribe();
93
100
  }
94
101
  showErrors(errors) {
95
- this.errors = errors;
102
+ this.errors$.next(errors);
96
103
  }
97
104
  onSubmit(submission) {
98
- this.errors = [];
105
+ this.errors$.next([]);
99
106
  this.submit.emit(submission);
100
107
  }
101
108
  formReady(form) {
102
- this.reloadForm();
103
109
  this.stateService.currentForm = form;
104
110
  }
105
111
  onChange(object) {
@@ -111,6 +117,20 @@ export class FormioComponent {
111
117
  prevPage() {
112
118
  this.scrollToTop();
113
119
  }
120
+ openReloadFormSubscription() {
121
+ this._subscriptions.add(this.form$.subscribe(form => {
122
+ this.refreshForm.emit({
123
+ form,
124
+ });
125
+ }));
126
+ }
127
+ openReloadSubmissionSubscription() {
128
+ this._subscriptions.add(this.submission$.subscribe(submission => {
129
+ this.refreshForm.emit({
130
+ submission,
131
+ });
132
+ }));
133
+ }
114
134
  scrollToTop() {
115
135
  this.modalService.scrollToTop();
116
136
  }
@@ -156,18 +176,30 @@ export class FormioComponent {
156
176
  this.formRefreshSubscription.unsubscribe();
157
177
  }
158
178
  }
179
+ openRouteSubscription() {
180
+ this._subscriptions.add(this.route.params.subscribe(params => {
181
+ const documentDefinitionName = params.documentDefinitionName;
182
+ const documentId = params.documentId;
183
+ if (documentDefinitionName) {
184
+ this.stateService.setDocumentDefinitionName(documentDefinitionName);
185
+ }
186
+ if (documentId) {
187
+ this.stateService.setDocumentId(documentId);
188
+ }
189
+ }));
190
+ }
159
191
  }
160
192
  FormioComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FormioComponent, deps: [{ token: i1.UserProviderService }, { token: i2.NGXLogger }, { token: i3.FormIoStateService }, { token: i4.ActivatedRoute }, { token: i5.TranslateService }, { token: i6.ValtimoModalService }], target: i0.ɵɵFactoryTarget.Component });
161
- FormioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: FormioComponent, selector: "valtimo-form-io", inputs: { form: "form", options: "options", submission: "submission", readOnly: "readOnly", formRefresh$: "formRefresh$" }, outputs: { submit: "submit", change: "change" }, usesOnChanges: 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<div>\n <div *ngIf=\"errors.length > 0\" class=\"alert alert-danger pt-5 pb-5 mb-2\">\n <ol>\n <li *ngFor=\"let error of errors\">\n {{ error }}\n </li>\n </ol>\n </div>\n <formio\n *ngIf=\"{\n currentLanguage: currentLanguage$ | async,\n formioOptions: formioOptions$ | async\n } as obs\"\n [submission]=\"submission\"\n [form]=\"formDefinition\"\n [refresh]=\"refreshForm\"\n [options]=\"obs.formioOptions || options\"\n [readOnly]=\"readOnly\"\n [language]=\"obs.currentLanguage\"\n (submit)=\"onSubmit($event)\"\n (ready)=\"formReady($event)\"\n (change)=\"onChange($event)\"\n (nextPage)=\"nextPage()\"\n (prevPage)=\"prevPage()\"\n ></formio>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.FormioComponent, selector: "formio" }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }] });
193
+ FormioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: FormioComponent, selector: "valtimo-form-io", inputs: { options: "options", submission: "submission", form: "form", readOnly: "readOnly", formRefresh$: "formRefresh$" }, outputs: { submit: "submit", change: "change" }, usesOnChanges: 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<div\n *ngIf=\"{\n currentLanguage: currentLanguage$ | async,\n formioOptions: formioOptions$ | async,\n submission: submission$ | async,\n readOnly: readOnly$ | async,\n form: form$ | async,\n errors: errors$ | async\n } as obs\"\n>\n <div *ngIf=\"obs.errors.length > 0\" class=\"alert alert-danger pt-5 pb-5 mb-2\">\n <ol>\n <li *ngFor=\"let error of obs.errors\">\n {{ error }}\n </li>\n </ol>\n </div>\n <formio\n *ngIf=\"obs.formioOptions && obs.form\"\n [submission]=\"obs.submission\"\n [form]=\"obs.form\"\n [refresh]=\"refreshForm\"\n [options]=\"obs.formioOptions\"\n [readOnly]=\"obs.readOnly\"\n (submit)=\"onSubmit($event)\"\n (ready)=\"formReady($event)\"\n (change)=\"onChange($event)\"\n (nextPage)=\"nextPage()\"\n (prevPage)=\"prevPage()\"\n ></formio>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.FormioComponent, selector: "formio" }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }] });
162
194
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FormioComponent, decorators: [{
163
195
  type: Component,
164
- args: [{ selector: 'valtimo-form-io', 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<div>\n <div *ngIf=\"errors.length > 0\" class=\"alert alert-danger pt-5 pb-5 mb-2\">\n <ol>\n <li *ngFor=\"let error of errors\">\n {{ error }}\n </li>\n </ol>\n </div>\n <formio\n *ngIf=\"{\n currentLanguage: currentLanguage$ | async,\n formioOptions: formioOptions$ | async\n } as obs\"\n [submission]=\"submission\"\n [form]=\"formDefinition\"\n [refresh]=\"refreshForm\"\n [options]=\"obs.formioOptions || options\"\n [readOnly]=\"readOnly\"\n [language]=\"obs.currentLanguage\"\n (submit)=\"onSubmit($event)\"\n (ready)=\"formReady($event)\"\n (change)=\"onChange($event)\"\n (nextPage)=\"nextPage()\"\n (prevPage)=\"prevPage()\"\n ></formio>\n</div>\n" }]
165
- }], ctorParameters: function () { return [{ type: i1.UserProviderService }, { type: i2.NGXLogger }, { type: i3.FormIoStateService }, { type: i4.ActivatedRoute }, { type: i5.TranslateService }, { type: i6.ValtimoModalService }]; }, propDecorators: { form: [{
166
- type: Input
167
- }], options: [{
196
+ args: [{ selector: 'valtimo-form-io', 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<div\n *ngIf=\"{\n currentLanguage: currentLanguage$ | async,\n formioOptions: formioOptions$ | async,\n submission: submission$ | async,\n readOnly: readOnly$ | async,\n form: form$ | async,\n errors: errors$ | async\n } as obs\"\n>\n <div *ngIf=\"obs.errors.length > 0\" class=\"alert alert-danger pt-5 pb-5 mb-2\">\n <ol>\n <li *ngFor=\"let error of obs.errors\">\n {{ error }}\n </li>\n </ol>\n </div>\n <formio\n *ngIf=\"obs.formioOptions && obs.form\"\n [submission]=\"obs.submission\"\n [form]=\"obs.form\"\n [refresh]=\"refreshForm\"\n [options]=\"obs.formioOptions\"\n [readOnly]=\"obs.readOnly\"\n (submit)=\"onSubmit($event)\"\n (ready)=\"formReady($event)\"\n (change)=\"onChange($event)\"\n (nextPage)=\"nextPage()\"\n (prevPage)=\"prevPage()\"\n ></formio>\n</div>\n" }]
197
+ }], ctorParameters: function () { return [{ type: i1.UserProviderService }, { type: i2.NGXLogger }, { type: i3.FormIoStateService }, { type: i4.ActivatedRoute }, { type: i5.TranslateService }, { type: i6.ValtimoModalService }]; }, propDecorators: { options: [{
168
198
  type: Input
169
199
  }], submission: [{
170
200
  type: Input
201
+ }], form: [{
202
+ type: Input
171
203
  }], readOnly: [{
172
204
  type: Input
173
205
  }], formRefresh$: [{
@@ -177,4 +209,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
177
209
  }], change: [{
178
210
  type: Output
179
211
  }] } });
180
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1pby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0taW8vZm9ybS1pby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0taW8vZm9ybS1pby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFJdkIsT0FBTyxFQUFDLE1BQU0sRUFBdUQsTUFBTSxpQkFBaUIsQ0FBQztBQUU3RixPQUFPLFVBQVUsTUFBTSxZQUFZLENBQUM7QUFFcEMsT0FBTyxFQUFDLElBQUksRUFBcUMsS0FBSyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBVTFFLE1BQU0sT0FBTyxlQUFlO0lBcUMxQixZQUNVLG1CQUF3QyxFQUN4QyxNQUFpQixFQUNSLFlBQWdDLEVBQ2hDLEtBQXFCLEVBQ3JCLGdCQUFrQyxFQUNsQyxZQUFpQztRQUwxQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDUixpQkFBWSxHQUFaLFlBQVksQ0FBb0I7UUFDaEMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUF4QzNDLGVBQVUsR0FBWSxFQUFFLENBQUM7UUFH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Qyx1QkFBdUIsRUFBRTtZQUNoQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDNUM7SUFDSCxDQUFDOzs0R0E5S1UsZUFBZTtnR0FBZixlQUFlLHlQQzVDNUIsZzNDQTBDQTsyRkRFYSxlQUFlO2tCQUwzQixTQUFTOytCQUNFLGlCQUFpQjtpUUFLbEIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFSSxNQUFNO3NCQUFmLE1BQU07Z0JBRUcsTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjMgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3JtaW9TdWJtaXNzaW9uLCBWYWx0aW1vRm9ybWlvT3B0aW9uc30gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7VmFsdGltb01vZGFsU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmFsdGltby1tb2RhbC5zZXJ2aWNlJztcbmltcG9ydCB7VXNlclByb3ZpZGVyU2VydmljZX0gZnJvbSAnQHZhbHRpbW8vc2VjdXJpdHknO1xuaW1wb3J0IHtGb3JtaW8sIEZvcm1pb0NvbXBvbmVudCBhcyBGb3JtSW9Tb3VyY2VDb21wb25lbnQsIEZvcm1pb0Zvcm19IGZyb20gJ0Bmb3JtaW8vYW5ndWxhcic7XG5pbXBvcnQge0Zvcm1pb1JlZnJlc2hWYWx1ZX0gZnJvbSAnQGZvcm1pby9hbmd1bGFyL2Zvcm1pby5jb21tb24nO1xuaW1wb3J0IGp3dF9kZWNvZGUgZnJvbSAnand0LWRlY29kZSc7XG5pbXBvcnQge05HWExvZ2dlcn0gZnJvbSAnbmd4LWxvZ2dlcic7XG5pbXBvcnQge2Zyb20sIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzd2l0Y2hNYXAsIHRha2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Rm9ybUlvU3RhdGVTZXJ2aWNlfSBmcm9tICcuL3NlcnZpY2VzL2Zvcm0taW8tc3RhdGUuc2VydmljZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1mb3JtLWlvJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0taW8uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mb3JtLWlvLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybWlvQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGZvcm06IGFueTtcbiAgQElucHV0KCkgb3B0aW9uczogVmFsdGltb0Zvcm1pb09wdGlvbnM7XG4gIEBJbnB1dCgpIHN1Ym1pc3Npb24/OiBvYmplY3QgPSB7fTtcbiAgQElucHV0KCkgcmVhZE9ubHk/OiBib29sZWFuO1xuICBASW5wdXQoKSBmb3JtUmVmcmVzaCQhOiBTdWJqZWN0PEZvcm1pb1JlZnJlc2hWYWx1ZT47XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCkgc3VibWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gIEBPdXRwdXQoKSBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICByZWZyZXNoRm9ybTogRXZlbnRFbWl0dGVyPEZvcm1pb1JlZnJlc2hWYWx1ZT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIGZvcm1EZWZpbml0aW9uOiBGb3JtaW9Gb3JtO1xuICBwdWJsaWMgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHByaXZhdGUgdG9rZW5SZWZyZXNoVGltZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBmb3JtUmVmcmVzaFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRMYW5ndWFnZSQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKS5waXBlKFxuICAgIG1hcCgoKSA9PiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgKTtcblxuICByZWFkb25seSBmb3JtaW9PcHRpb25zJDogT2JzZXJ2YWJsZTxWYWx0aW1vRm9ybWlvT3B0aW9ucz4gPSB0aGlzLmN1cnJlbnRMYW5ndWFnZSQucGlwZShcbiAgICBtYXAobGFuZ3VhZ2UgPT4ge1xuICAgICAgY29uc3QgZm9ybWlvVHJhbnNsYXRpb25zID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2Zvcm1pb1RyYW5zbGF0aW9ucycpO1xuICAgICAgcmV0dXJuIHR5cGVvZiBmb3JtaW9UcmFuc2xhdGlvbnMgPT09ICdvYmplY3QnXG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgICBpMThuOiB7XG4gICAgICAgICAgICAgIFtsYW5ndWFnZV06IHRoaXMuc3RhdGVTZXJ2aWNlLmZsYXR0ZW5UcmFuc2xhdGlvbnNPYmplY3QoZm9ybWlvVHJhbnNsYXRpb25zKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICA6IHRoaXMub3B0aW9ucztcbiAgICB9KVxuICApO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdXNlclByb3ZpZGVyU2VydmljZTogVXNlclByb3ZpZGVyU2VydmljZSxcbiAgICBwcml2YXRlIGxvZ2dlcjogTkdYTG9nZ2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhdGVTZXJ2aWNlOiBGb3JtSW9TdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbW9kYWxTZXJ2aWNlOiBWYWx0aW1vTW9kYWxTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBkb2N1bWVudERlZmluaXRpb25OYW1lID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ2RvY3VtZW50RGVmaW5pdGlvbk5hbWUnKTtcbiAgICBjb25zdCBkb2N1bWVudElkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ2RvY3VtZW50SWQnKTtcblxuICAgIHRoaXMuZm9ybURlZmluaXRpb24gPSB0aGlzLmZvcm07XG4gICAgdGhpcy5lcnJvcnMgPSBbXTtcblxuICAgIHRoaXMuc2V0SW5pdGlhbFRva2VuKCk7XG5cbiAgICBpZiAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSkge1xuICAgICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0RG9jdW1lbnREZWZpbml0aW9uTmFtZShkb2N1bWVudERlZmluaXRpb25OYW1lKTtcbiAgICB9XG4gICAgaWYgKGRvY3VtZW50SWQpIHtcbiAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNldERvY3VtZW50SWQoZG9jdW1lbnRJZCk7XG4gICAgfVxuXG4gICAgdGhpcy5zdWJzY3JpYmVGb3JtUmVmcmVzaCgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRGb3JtID0gY2hhbmdlcz8uZm9ybT8uY3VycmVudFZhbHVlO1xuXG4gICAgaWYgKGN1cnJlbnRGb3JtKSB7XG4gICAgICB0aGlzLmZvcm1EZWZpbml0aW9uID0gY3VycmVudEZvcm07XG4gICAgICB0aGlzLnJlbG9hZEZvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldEluaXRpYWxUb2tlbigpO1xuXG4gICAgaWYgKGNoYW5nZXMuZm9ybURlZmluaXRpb25SZWZyZXNoJCkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZUZvcm1SZWZyZXNoKCk7XG4gICAgICB0aGlzLnN1YnNjcmliZUZvcm1SZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bnN1YnNjcmliZUZvcm1SZWZyZXNoKCk7XG5cbiAgICB0aGlzLnRva2VuUmVmcmVzaFRpbWVyU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcmVsb2FkRm9ybSgpIHtcbiAgICB0aGlzLnJlZnJlc2hGb3JtLmVtaXQoe1xuICAgICAgZm9ybTogdGhpcy5mb3JtRGVmaW5pdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIHNob3dFcnJvcnMoZXJyb3JzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICB9XG5cbiAgb25TdWJtaXQoc3VibWlzc2lvbjogRm9ybWlvU3VibWlzc2lvbikge1xuICAgIHRoaXMuZXJyb3JzID0gW107XG4gICAgdGhpcy5zdWJtaXQuZW1pdChzdWJtaXNzaW9uKTtcbiAgfVxuXG4gIGZvcm1SZWFkeShmb3JtOiBGb3JtSW9Tb3VyY2VDb21wb25lbnQpOiB2b2lkIHtcbiAgICB0aGlzLnJlbG9hZEZvcm0oKTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5jdXJyZW50Rm9ybSA9IGZvcm07XG4gIH1cblxuICBvbkNoYW5nZShvYmplY3Q6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlLmVtaXQob2JqZWN0KTtcbiAgfVxuXG4gIG5leHRQYWdlKCk6IHZvaWQge1xuICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKTtcbiAgfVxuXG4gIHByZXZQYWdlKCk6IHZvaWQge1xuICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsVG9Ub3AoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uuc2Nyb2xsVG9Ub3AoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SW5pdGlhbFRva2VuKCk6IHZvaWQge1xuICAgIHRoaXMudXNlclByb3ZpZGVyU2VydmljZS5nZXRUb2tlbigpLnRoZW4oKHRva2VuOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMuc2V0VG9rZW4odG9rZW4pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRUb2tlbih0b2tlbjogc3RyaW5nKTogdm9pZCB7XG4gICAgRm9ybWlvLnNldFRva2VuKHRva2VuKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZm9ybWlvVG9rZW4nLCB0b2tlbik7XG4gICAgdGhpcy5zZXRUaW1lckZvclRva2VuUmVmcmVzaCh0b2tlbik7XG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTmV3IHRva2VuIHNldCBmb3IgZm9ybS5pby4nKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VGltZXJGb3JUb2tlblJlZnJlc2godG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHRva2VuRXhwID0gKGp3dF9kZWNvZGUodG9rZW4pIGFzIGFueSkuZXhwICogMTAwMDtcbiAgICBjb25zdCBleHBpcnlUaW1lID0gdG9rZW5FeHAgLSBEYXRlLm5vdygpIC0gMTAwMDtcbiAgICBpZiAoIXRoaXMudG9rZW5SZWZyZXNoVGltZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMudG9rZW5SZWZyZXNoVGltZXJTdWJzY3JpcHRpb24gPSB0aW1lcihleHBpcnlUaW1lKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbigpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFRpbWVyIGZvciBmb3JtLmlvIHRva2VuIHJlZnJlc2ggc2V0IGZvcjogJHtleHBpcnlUaW1lfW1zLmApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZyZXNoVG9rZW4oKTogdm9pZCB7XG4gICAgZnJvbSh0aGlzLnVzZXJQcm92aWRlclNlcnZpY2UudXBkYXRlVG9rZW4oLTEpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnVzZXJQcm92aWRlclNlcnZpY2UuZ2V0VG9rZW4oKSksXG4gICAgICAgIHRha2UoMSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodG9rZW4gPT4ge1xuICAgICAgICB0aGlzLnNldFRva2VuKHRva2VuKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVGb3JtUmVmcmVzaCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtUmVmcmVzaCQpIHtcbiAgICAgIHRoaXMuZm9ybVJlZnJlc2hTdWJzY3JpcHRpb24gPSB0aGlzLmZvcm1SZWZyZXNoJC5zdWJzY3JpYmUocmVmcmVzaFZhbHVlID0+IHtcbiAgICAgICAgaWYgKHJlZnJlc2hWYWx1ZSkge1xuICAgICAgICAgIHRoaXMucmVmcmVzaEZvcm0uZW1pdChyZWZyZXNoVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVuc3Vic2NyaWJlRm9ybVJlZnJlc2goKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9ybVJlZnJlc2hTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZm9ybVJlZnJlc2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPGRpdj5cbiAgPGRpdiAqbmdJZj1cImVycm9ycy5sZW5ndGggPiAwXCIgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgcHQtNSBwYi01IG1iLTJcIj5cbiAgICA8b2w+XG4gICAgICA8bGkgKm5nRm9yPVwibGV0IGVycm9yIG9mIGVycm9yc1wiPlxuICAgICAgICB7eyBlcnJvciB9fVxuICAgICAgPC9saT5cbiAgICA8L29sPlxuICA8L2Rpdj5cbiAgPGZvcm1pb1xuICAgICpuZ0lmPVwie1xuICAgICAgY3VycmVudExhbmd1YWdlOiBjdXJyZW50TGFuZ3VhZ2UkIHwgYXN5bmMsXG4gICAgICBmb3JtaW9PcHRpb25zOiBmb3JtaW9PcHRpb25zJCB8IGFzeW5jXG4gICAgfSBhcyBvYnNcIlxuICAgIFtzdWJtaXNzaW9uXT1cInN1Ym1pc3Npb25cIlxuICAgIFtmb3JtXT1cImZvcm1EZWZpbml0aW9uXCJcbiAgICBbcmVmcmVzaF09XCJyZWZyZXNoRm9ybVwiXG4gICAgW29wdGlvbnNdPVwib2JzLmZvcm1pb09wdGlvbnMgfHwgb3B0aW9uc1wiXG4gICAgW3JlYWRPbmx5XT1cInJlYWRPbmx5XCJcbiAgICBbbGFuZ3VhZ2VdPVwib2JzLmN1cnJlbnRMYW5ndWFnZVwiXG4gICAgKHN1Ym1pdCk9XCJvblN1Ym1pdCgkZXZlbnQpXCJcbiAgICAocmVhZHkpPVwiZm9ybVJlYWR5KCRldmVudClcIlxuICAgIChjaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgKG5leHRQYWdlKT1cIm5leHRQYWdlKClcIlxuICAgIChwcmV2UGFnZSk9XCJwcmV2UGFnZSgpXCJcbiAgPjwvZm9ybWlvPlxuPC9kaXY+XG4iXX0=
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1pby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0taW8vZm9ybS1pby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0taW8vZm9ybS1pby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFJdkIsT0FBTyxFQUFDLE1BQU0sRUFBMkMsTUFBTSxpQkFBaUIsQ0FBQztBQUVqRixPQUFPLFVBQVUsTUFBTSxZQUFZLENBQUM7QUFFcEMsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUF1QixZQUFZLEVBQUUsS0FBSyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3BHLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBVTFFLE1BQU0sT0FBTyxlQUFlO0lBMkQxQixZQUNtQixtQkFBd0MsRUFDeEMsTUFBaUIsRUFDakIsWUFBZ0MsRUFDaEMsS0FBcUIsRUFDckIsZ0JBQWtDLEVBQ2xDLFlBQWlDO1FBTGpDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQixpQkFBWSxHQUFaLFlBQVksQ0FBb0I7UUFDaEMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxpQkFBWSxHQUFaLFlBQVksQ0FB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WUFBWSxDQUFDLHlCQUF5QixDQUFDLHNCQUFzQixDQUFDLENBQUM7YUFDckU7WUFFRCxJQUFJLFVBQVUsRUFBRTtnQkFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUM3QztRQUNILENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOzs0R0FqTlUsZUFBZTtnR0FBZixlQUFlLHlQQzVDNUIsOCtDQStDQTsyRkRIYSxlQUFlO2tCQUwzQixTQUFTOytCQUNFLGlCQUFpQjtpUUFLZCxPQUFPO3NCQUFuQixLQUFLO2dCQUdPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBR08sSUFBSTtzQkFBaEIsS0FBSztnQkFHTyxRQUFRO3NCQUFwQixLQUFLO2dCQUdHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0ksTUFBTTtzQkFBZixNQUFNO2dCQUVHLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybWlvU3VibWlzc2lvbiwgVmFsdGltb0Zvcm1pb09wdGlvbnN9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge1ZhbHRpbW9Nb2RhbFNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZhbHRpbW8tbW9kYWwuc2VydmljZSc7XG5pbXBvcnQge1VzZXJQcm92aWRlclNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL3NlY3VyaXR5JztcbmltcG9ydCB7Rm9ybWlvLCBGb3JtaW9Db21wb25lbnQgYXMgRm9ybUlvU291cmNlQ29tcG9uZW50fSBmcm9tICdAZm9ybWlvL2FuZ3VsYXInO1xuaW1wb3J0IHtGb3JtaW9SZWZyZXNoVmFsdWV9IGZyb20gJ0Bmb3JtaW8vYW5ndWxhci9mb3JtaW8uY29tbW9uJztcbmltcG9ydCBqd3RfZGVjb2RlIGZyb20gJ2p3dC1kZWNvZGUnO1xuaW1wb3J0IHtOR1hMb2dnZXJ9IGZyb20gJ25neC1sb2dnZXInO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZyb20sIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzd2l0Y2hNYXAsIHRha2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Rm9ybUlvU3RhdGVTZXJ2aWNlfSBmcm9tICcuL3NlcnZpY2VzL2Zvcm0taW8tc3RhdGUuc2VydmljZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1mb3JtLWlvJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0taW8uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mb3JtLWlvLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybWlvQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHNldCBvcHRpb25zKG9wdGlvbnNWYWx1ZTogVmFsdGltb0Zvcm1pb09wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMkLm5leHQob3B0aW9uc1ZhbHVlKTtcbiAgfVxuICBASW5wdXQoKSBzZXQgc3VibWlzc2lvbihzdWJtaXNzaW9uVmFsdWU6IG9iamVjdCkge1xuICAgIHRoaXMuc3VibWlzc2lvbiQubmV4dChzdWJtaXNzaW9uVmFsdWUpO1xuICB9XG4gIEBJbnB1dCgpIHNldCBmb3JtKGZvcm1WYWx1ZTogb2JqZWN0KSB7XG4gICAgdGhpcy5mb3JtJC5uZXh0KGZvcm1WYWx1ZSk7XG4gIH1cbiAgQElucHV0KCkgc2V0IHJlYWRPbmx5KHJlYWRPbmx5VmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnJlYWRPbmx5JC5uZXh0KHJlYWRPbmx5VmFsdWUpO1xuICB9XG4gIEBJbnB1dCgpIGZvcm1SZWZyZXNoJCE6IFN1YmplY3Q8Rm9ybWlvUmVmcmVzaFZhbHVlPjtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgpIHN1Ym1pdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCkgY2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgcmVmcmVzaEZvcm06IEV2ZW50RW1pdHRlcjxGb3JtaW9SZWZyZXNoVmFsdWU+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHB1YmxpYyByZWFkb25seSBzdWJtaXNzaW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8b2JqZWN0Pih1bmRlZmluZWQpO1xuICBwdWJsaWMgcmVhZG9ubHkgZm9ybSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG9iamVjdD4odW5kZWZpbmVkKTtcbiAgcHVibGljIHJlYWRvbmx5IG9wdGlvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxWYWx0aW1vRm9ybWlvT3B0aW9ucz4odW5kZWZpbmVkKTtcbiAgcHVibGljIHJlYWRvbmx5IHJlYWRPbmx5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgZXJyb3JzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8c3RyaW5nPj4oW10pO1xuXG4gIHByaXZhdGUgdG9rZW5SZWZyZXNoVGltZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBmb3JtUmVmcmVzaFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRMYW5ndWFnZSQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKS5waXBlKFxuICAgIG1hcCgoKSA9PiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgKTtcblxuICByZWFkb25seSBmb3JtaW9PcHRpb25zJDogT2JzZXJ2YWJsZTxWYWx0aW1vRm9ybWlvT3B0aW9ucz4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZSQsXG4gICAgdGhpcy5vcHRpb25zJCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtsYW5ndWFnZSwgb3B0aW9uc10pID0+IHtcbiAgICAgIGNvbnN0IGZvcm1pb1RyYW5zbGF0aW9ucyA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdmb3JtaW9UcmFuc2xhdGlvbnMnKTtcbiAgICAgIHJldHVybiB0eXBlb2YgZm9ybWlvVHJhbnNsYXRpb25zID09PSAnb2JqZWN0J1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBpMThuOiB7XG4gICAgICAgICAgICAgIFtsYW5ndWFnZV06IHRoaXMuc3RhdGVTZXJ2aWNlLmZsYXR0ZW5UcmFuc2xhdGlvbnNPYmplY3QoZm9ybWlvVHJhbnNsYXRpb25zKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIH07XG4gICAgfSlcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlclByb3ZpZGVyU2VydmljZTogVXNlclByb3ZpZGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlcjogTkdYTG9nZ2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhdGVTZXJ2aWNlOiBGb3JtSW9TdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbW9kYWxTZXJ2aWNlOiBWYWx0aW1vTW9kYWxTZXJ2aWNlXG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5vcGVuUm91dGVTdWJzY3JpcHRpb24oKTtcbiAgICB0aGlzLmVycm9ycyQubmV4dChbXSk7XG4gICAgdGhpcy5zZXRJbml0aWFsVG9rZW4oKTtcbiAgICB0aGlzLnN1YnNjcmliZUZvcm1SZWZyZXNoKCk7XG4gICAgdGhpcy5vcGVuUmVsb2FkRm9ybVN1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMub3BlblJlbG9hZFN1Ym1pc3Npb25TdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgdGhpcy5zZXRJbml0aWFsVG9rZW4oKTtcblxuICAgIGlmIChjaGFuZ2VzLmZvcm1EZWZpbml0aW9uUmVmcmVzaCQpIHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVGb3JtUmVmcmVzaCgpO1xuICAgICAgdGhpcy5zdWJzY3JpYmVGb3JtUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlRm9ybVJlZnJlc2goKTtcbiAgICB0aGlzLnRva2VuUmVmcmVzaFRpbWVyU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93RXJyb3JzKGVycm9yczogc3RyaW5nW10pIHtcbiAgICB0aGlzLmVycm9ycyQubmV4dChlcnJvcnMpO1xuICB9XG5cbiAgcHVibGljIG9uU3VibWl0KHN1Ym1pc3Npb246IEZvcm1pb1N1Ym1pc3Npb24pIHtcbiAgICB0aGlzLmVycm9ycyQubmV4dChbXSk7XG4gICAgdGhpcy5zdWJtaXQuZW1pdChzdWJtaXNzaW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JtUmVhZHkoZm9ybTogRm9ybUlvU291cmNlQ29tcG9uZW50KTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuY3VycmVudEZvcm0gPSBmb3JtO1xuICB9XG5cbiAgcHVibGljIG9uQ2hhbmdlKG9iamVjdDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5jaGFuZ2UuZW1pdChvYmplY3QpO1xuICB9XG5cbiAgcHVibGljIG5leHRQYWdlKCk6IHZvaWQge1xuICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKTtcbiAgfVxuXG4gIHB1YmxpYyBwcmV2UGFnZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNjcm9sbFRvVG9wKCk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5SZWxvYWRGb3JtU3Vic2NyaXB0aW9uKCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5mb3JtJC5zdWJzY3JpYmUoZm9ybSA9PiB7XG4gICAgICAgIHRoaXMucmVmcmVzaEZvcm0uZW1pdCh7XG4gICAgICAgICAgZm9ybSxcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5SZWxvYWRTdWJtaXNzaW9uU3Vic2NyaXB0aW9uKCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5zdWJtaXNzaW9uJC5zdWJzY3JpYmUoc3VibWlzc2lvbiA9PiB7XG4gICAgICAgIHRoaXMucmVmcmVzaEZvcm0uZW1pdCh7XG4gICAgICAgICAgc3VibWlzc2lvbixcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbFRvVG9wKCk6IHZvaWQge1xuICAgIHRoaXMubW9kYWxTZXJ2aWNlLnNjcm9sbFRvVG9wKCk7XG4gIH1cblxuICBwcml2YXRlIHNldEluaXRpYWxUb2tlbigpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJQcm92aWRlclNlcnZpY2UuZ2V0VG9rZW4oKS50aGVuKCh0b2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLnNldFRva2VuKHRva2VuKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VG9rZW4odG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIEZvcm1pby5zZXRUb2tlbih0b2tlbik7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2Zvcm1pb1Rva2VuJywgdG9rZW4pO1xuICAgIHRoaXMuc2V0VGltZXJGb3JUb2tlblJlZnJlc2godG9rZW4pO1xuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ05ldyB0b2tlbiBzZXQgZm9yIGZvcm0uaW8uJyk7XG4gIH1cblxuICBwcml2YXRlIHNldFRpbWVyRm9yVG9rZW5SZWZyZXNoKHRva2VuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB0b2tlbkV4cCA9IChqd3RfZGVjb2RlKHRva2VuKSBhcyBhbnkpLmV4cCAqIDEwMDA7XG4gICAgY29uc3QgZXhwaXJ5VGltZSA9IHRva2VuRXhwIC0gRGF0ZS5ub3coKSAtIDEwMDA7XG4gICAgaWYgKCF0aGlzLnRva2VuUmVmcmVzaFRpbWVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnRva2VuUmVmcmVzaFRpbWVyU3Vic2NyaXB0aW9uID0gdGltZXIoZXhwaXJ5VGltZSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4oKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBUaW1lciBmb3IgZm9ybS5pbyB0b2tlbiByZWZyZXNoIHNldCBmb3I6ICR7ZXhwaXJ5VGltZX1tcy5gKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVmcmVzaFRva2VuKCk6IHZvaWQge1xuICAgIGZyb20odGhpcy51c2VyUHJvdmlkZXJTZXJ2aWNlLnVwZGF0ZVRva2VuKC0xKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy51c2VyUHJvdmlkZXJTZXJ2aWNlLmdldFRva2VuKCkpLFxuICAgICAgICB0YWtlKDEpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHRva2VuID0+IHtcbiAgICAgICAgdGhpcy5zZXRUb2tlbih0b2tlbik7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlRm9ybVJlZnJlc2goKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9ybVJlZnJlc2gkKSB7XG4gICAgICB0aGlzLmZvcm1SZWZyZXNoU3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtUmVmcmVzaCQuc3Vic2NyaWJlKHJlZnJlc2hWYWx1ZSA9PiB7XG4gICAgICAgIGlmIChyZWZyZXNoVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnJlZnJlc2hGb3JtLmVtaXQocmVmcmVzaFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZUZvcm1SZWZyZXNoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm1SZWZyZXNoU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmZvcm1SZWZyZXNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvcGVuUm91dGVTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9IHBhcmFtcy5kb2N1bWVudERlZmluaXRpb25OYW1lO1xuICAgICAgICBjb25zdCBkb2N1bWVudElkID0gcGFyYW1zLmRvY3VtZW50SWQ7XG5cbiAgICAgICAgaWYgKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpIHtcbiAgICAgICAgICB0aGlzLnN0YXRlU2VydmljZS5zZXREb2N1bWVudERlZmluaXRpb25OYW1lKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRvY3VtZW50SWQpIHtcbiAgICAgICAgICB0aGlzLnN0YXRlU2VydmljZS5zZXREb2N1bWVudElkKGRvY3VtZW50SWQpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPGRpdlxuICAqbmdJZj1cIntcbiAgICBjdXJyZW50TGFuZ3VhZ2U6IGN1cnJlbnRMYW5ndWFnZSQgfCBhc3luYyxcbiAgICBmb3JtaW9PcHRpb25zOiBmb3JtaW9PcHRpb25zJCB8IGFzeW5jLFxuICAgIHN1Ym1pc3Npb246IHN1Ym1pc3Npb24kIHwgYXN5bmMsXG4gICAgcmVhZE9ubHk6IHJlYWRPbmx5JCB8IGFzeW5jLFxuICAgIGZvcm06IGZvcm0kIHwgYXN5bmMsXG4gICAgZXJyb3JzOiBlcnJvcnMkIHwgYXN5bmNcbiAgfSBhcyBvYnNcIlxuPlxuICA8ZGl2ICpuZ0lmPVwib2JzLmVycm9ycy5sZW5ndGggPiAwXCIgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgcHQtNSBwYi01IG1iLTJcIj5cbiAgICA8b2w+XG4gICAgICA8bGkgKm5nRm9yPVwibGV0IGVycm9yIG9mIG9icy5lcnJvcnNcIj5cbiAgICAgICAge3sgZXJyb3IgfX1cbiAgICAgIDwvbGk+XG4gICAgPC9vbD5cbiAgPC9kaXY+XG4gIDxmb3JtaW9cbiAgICAqbmdJZj1cIm9icy5mb3JtaW9PcHRpb25zICYmIG9icy5mb3JtXCJcbiAgICBbc3VibWlzc2lvbl09XCJvYnMuc3VibWlzc2lvblwiXG4gICAgW2Zvcm1dPVwib2JzLmZvcm1cIlxuICAgIFtyZWZyZXNoXT1cInJlZnJlc2hGb3JtXCJcbiAgICBbb3B0aW9uc109XCJvYnMuZm9ybWlvT3B0aW9uc1wiXG4gICAgW3JlYWRPbmx5XT1cIm9icy5yZWFkT25seVwiXG4gICAgKHN1Ym1pdCk9XCJvblN1Ym1pdCgkZXZlbnQpXCJcbiAgICAocmVhZHkpPVwiZm9ybVJlYWR5KCRldmVudClcIlxuICAgIChjaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgKG5leHRQYWdlKT1cIm5leHRQYWdlKClcIlxuICAgIChwcmV2UGFnZSk9XCJwcmV2UGFnZSgpXCJcbiAgPjwvZm9ybWlvPlxuPC9kaXY+XG4iXX0=
@@ -4780,43 +4780,50 @@ class FormioComponent {
4780
4780
  this.route = route;
4781
4781
  this.translateService = translateService;
4782
4782
  this.modalService = modalService;
4783
- this.submission = {};
4784
4783
  // eslint-disable-next-line @angular-eslint/no-output-native
4785
4784
  this.submit = new EventEmitter();
4786
4785
  // eslint-disable-next-line @angular-eslint/no-output-native
4787
4786
  this.change = new EventEmitter();
4788
4787
  this.refreshForm = new EventEmitter();
4789
- this.errors = [];
4788
+ this.submission$ = new BehaviorSubject(undefined);
4789
+ this.form$ = new BehaviorSubject(undefined);
4790
+ this.options$ = new BehaviorSubject(undefined);
4791
+ this.readOnly$ = new BehaviorSubject(false);
4792
+ this.errors$ = new BehaviorSubject([]);
4790
4793
  this.currentLanguage$ = this.translateService.stream('key').pipe(map$1(() => this.translateService.currentLang), distinctUntilChanged());
4791
- this.formioOptions$ = this.currentLanguage$.pipe(map$1(language => {
4794
+ this.formioOptions$ = combineLatest([
4795
+ this.currentLanguage$,
4796
+ this.options$,
4797
+ ]).pipe(map$1(([language, options]) => {
4792
4798
  const formioTranslations = this.translateService.instant('formioTranslations');
4793
4799
  return typeof formioTranslations === 'object'
4794
- ? Object.assign(Object.assign({}, this.options), { language, i18n: {
4800
+ ? Object.assign(Object.assign({}, options), { i18n: {
4795
4801
  [language]: this.stateService.flattenTranslationsObject(formioTranslations),
4796
- } }) : this.options;
4802
+ }, language }) : Object.assign(Object.assign({}, options), { language });
4797
4803
  }));
4804
+ this._subscriptions = new Subscription();
4805
+ }
4806
+ set options(optionsValue) {
4807
+ this.options$.next(optionsValue);
4808
+ }
4809
+ set submission(submissionValue) {
4810
+ this.submission$.next(submissionValue);
4811
+ }
4812
+ set form(formValue) {
4813
+ this.form$.next(formValue);
4814
+ }
4815
+ set readOnly(readOnlyValue) {
4816
+ this.readOnly$.next(readOnlyValue);
4798
4817
  }
4799
4818
  ngOnInit() {
4800
- const documentDefinitionName = this.route.snapshot.paramMap.get('documentDefinitionName');
4801
- const documentId = this.route.snapshot.paramMap.get('documentId');
4802
- this.formDefinition = this.form;
4803
- this.errors = [];
4819
+ this.openRouteSubscription();
4820
+ this.errors$.next([]);
4804
4821
  this.setInitialToken();
4805
- if (documentDefinitionName) {
4806
- this.stateService.setDocumentDefinitionName(documentDefinitionName);
4807
- }
4808
- if (documentId) {
4809
- this.stateService.setDocumentId(documentId);
4810
- }
4811
4822
  this.subscribeFormRefresh();
4823
+ this.openReloadFormSubscription();
4824
+ this.openReloadSubmissionSubscription();
4812
4825
  }
4813
4826
  ngOnChanges(changes) {
4814
- var _a;
4815
- const currentForm = (_a = changes === null || changes === void 0 ? void 0 : changes.form) === null || _a === void 0 ? void 0 : _a.currentValue;
4816
- if (currentForm) {
4817
- this.formDefinition = currentForm;
4818
- this.reloadForm();
4819
- }
4820
4827
  this.setInitialToken();
4821
4828
  if (changes.formDefinitionRefresh$) {
4822
4829
  this.unsubscribeFormRefresh();
@@ -4827,21 +4834,16 @@ class FormioComponent {
4827
4834
  var _a;
4828
4835
  this.unsubscribeFormRefresh();
4829
4836
  (_a = this.tokenRefreshTimerSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
4830
- }
4831
- reloadForm() {
4832
- this.refreshForm.emit({
4833
- form: this.formDefinition,
4834
- });
4837
+ this._subscriptions.unsubscribe();
4835
4838
  }
4836
4839
  showErrors(errors) {
4837
- this.errors = errors;
4840
+ this.errors$.next(errors);
4838
4841
  }
4839
4842
  onSubmit(submission) {
4840
- this.errors = [];
4843
+ this.errors$.next([]);
4841
4844
  this.submit.emit(submission);
4842
4845
  }
4843
4846
  formReady(form) {
4844
- this.reloadForm();
4845
4847
  this.stateService.currentForm = form;
4846
4848
  }
4847
4849
  onChange(object) {
@@ -4853,6 +4855,20 @@ class FormioComponent {
4853
4855
  prevPage() {
4854
4856
  this.scrollToTop();
4855
4857
  }
4858
+ openReloadFormSubscription() {
4859
+ this._subscriptions.add(this.form$.subscribe(form => {
4860
+ this.refreshForm.emit({
4861
+ form,
4862
+ });
4863
+ }));
4864
+ }
4865
+ openReloadSubmissionSubscription() {
4866
+ this._subscriptions.add(this.submission$.subscribe(submission => {
4867
+ this.refreshForm.emit({
4868
+ submission,
4869
+ });
4870
+ }));
4871
+ }
4856
4872
  scrollToTop() {
4857
4873
  this.modalService.scrollToTop();
4858
4874
  }
@@ -4898,18 +4914,30 @@ class FormioComponent {
4898
4914
  this.formRefreshSubscription.unsubscribe();
4899
4915
  }
4900
4916
  }
4917
+ openRouteSubscription() {
4918
+ this._subscriptions.add(this.route.params.subscribe(params => {
4919
+ const documentDefinitionName = params.documentDefinitionName;
4920
+ const documentId = params.documentId;
4921
+ if (documentDefinitionName) {
4922
+ this.stateService.setDocumentDefinitionName(documentDefinitionName);
4923
+ }
4924
+ if (documentId) {
4925
+ this.stateService.setDocumentId(documentId);
4926
+ }
4927
+ }));
4928
+ }
4901
4929
  }
4902
4930
  FormioComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FormioComponent, deps: [{ token: i3$1.UserProviderService }, { token: i4.NGXLogger }, { token: FormIoStateService }, { token: i1$1.ActivatedRoute }, { token: i1.TranslateService }, { token: ValtimoModalService }], target: i0.ɵɵFactoryTarget.Component });
4903
- FormioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: FormioComponent, selector: "valtimo-form-io", inputs: { form: "form", options: "options", submission: "submission", readOnly: "readOnly", formRefresh$: "formRefresh$" }, outputs: { submit: "submit", change: "change" }, usesOnChanges: 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<div>\n <div *ngIf=\"errors.length > 0\" class=\"alert alert-danger pt-5 pb-5 mb-2\">\n <ol>\n <li *ngFor=\"let error of errors\">\n {{ error }}\n </li>\n </ol>\n </div>\n <formio\n *ngIf=\"{\n currentLanguage: currentLanguage$ | async,\n formioOptions: formioOptions$ | async\n } as obs\"\n [submission]=\"submission\"\n [form]=\"formDefinition\"\n [refresh]=\"refreshForm\"\n [options]=\"obs.formioOptions || options\"\n [readOnly]=\"readOnly\"\n [language]=\"obs.currentLanguage\"\n (submit)=\"onSubmit($event)\"\n (ready)=\"formReady($event)\"\n (change)=\"onChange($event)\"\n (nextPage)=\"nextPage()\"\n (prevPage)=\"prevPage()\"\n ></formio>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.FormioComponent, selector: "formio" }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }] });
4931
+ FormioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: FormioComponent, selector: "valtimo-form-io", inputs: { options: "options", submission: "submission", form: "form", readOnly: "readOnly", formRefresh$: "formRefresh$" }, outputs: { submit: "submit", change: "change" }, usesOnChanges: 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<div\n *ngIf=\"{\n currentLanguage: currentLanguage$ | async,\n formioOptions: formioOptions$ | async,\n submission: submission$ | async,\n readOnly: readOnly$ | async,\n form: form$ | async,\n errors: errors$ | async\n } as obs\"\n>\n <div *ngIf=\"obs.errors.length > 0\" class=\"alert alert-danger pt-5 pb-5 mb-2\">\n <ol>\n <li *ngFor=\"let error of obs.errors\">\n {{ error }}\n </li>\n </ol>\n </div>\n <formio\n *ngIf=\"obs.formioOptions && obs.form\"\n [submission]=\"obs.submission\"\n [form]=\"obs.form\"\n [refresh]=\"refreshForm\"\n [options]=\"obs.formioOptions\"\n [readOnly]=\"obs.readOnly\"\n (submit)=\"onSubmit($event)\"\n (ready)=\"formReady($event)\"\n (change)=\"onChange($event)\"\n (nextPage)=\"nextPage()\"\n (prevPage)=\"prevPage()\"\n ></formio>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.FormioComponent, selector: "formio" }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }] });
4904
4932
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FormioComponent, decorators: [{
4905
4933
  type: Component,
4906
- args: [{ selector: 'valtimo-form-io', 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<div>\n <div *ngIf=\"errors.length > 0\" class=\"alert alert-danger pt-5 pb-5 mb-2\">\n <ol>\n <li *ngFor=\"let error of errors\">\n {{ error }}\n </li>\n </ol>\n </div>\n <formio\n *ngIf=\"{\n currentLanguage: currentLanguage$ | async,\n formioOptions: formioOptions$ | async\n } as obs\"\n [submission]=\"submission\"\n [form]=\"formDefinition\"\n [refresh]=\"refreshForm\"\n [options]=\"obs.formioOptions || options\"\n [readOnly]=\"readOnly\"\n [language]=\"obs.currentLanguage\"\n (submit)=\"onSubmit($event)\"\n (ready)=\"formReady($event)\"\n (change)=\"onChange($event)\"\n (nextPage)=\"nextPage()\"\n (prevPage)=\"prevPage()\"\n ></formio>\n</div>\n" }]
4907
- }], ctorParameters: function () { return [{ type: i3$1.UserProviderService }, { type: i4.NGXLogger }, { type: FormIoStateService }, { type: i1$1.ActivatedRoute }, { type: i1.TranslateService }, { type: ValtimoModalService }]; }, propDecorators: { form: [{
4908
- type: Input
4909
- }], options: [{
4934
+ args: [{ selector: 'valtimo-form-io', 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<div\n *ngIf=\"{\n currentLanguage: currentLanguage$ | async,\n formioOptions: formioOptions$ | async,\n submission: submission$ | async,\n readOnly: readOnly$ | async,\n form: form$ | async,\n errors: errors$ | async\n } as obs\"\n>\n <div *ngIf=\"obs.errors.length > 0\" class=\"alert alert-danger pt-5 pb-5 mb-2\">\n <ol>\n <li *ngFor=\"let error of obs.errors\">\n {{ error }}\n </li>\n </ol>\n </div>\n <formio\n *ngIf=\"obs.formioOptions && obs.form\"\n [submission]=\"obs.submission\"\n [form]=\"obs.form\"\n [refresh]=\"refreshForm\"\n [options]=\"obs.formioOptions\"\n [readOnly]=\"obs.readOnly\"\n (submit)=\"onSubmit($event)\"\n (ready)=\"formReady($event)\"\n (change)=\"onChange($event)\"\n (nextPage)=\"nextPage()\"\n (prevPage)=\"prevPage()\"\n ></formio>\n</div>\n" }]
4935
+ }], ctorParameters: function () { return [{ type: i3$1.UserProviderService }, { type: i4.NGXLogger }, { type: FormIoStateService }, { type: i1$1.ActivatedRoute }, { type: i1.TranslateService }, { type: ValtimoModalService }]; }, propDecorators: { options: [{
4910
4936
  type: Input
4911
4937
  }], submission: [{
4912
4938
  type: Input
4939
+ }], form: [{
4940
+ type: Input
4913
4941
  }], readOnly: [{
4914
4942
  type: Input
4915
4943
  }], formRefresh$: [{
@@ -5177,8 +5205,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
5177
5205
  * limitations under the License.
5178
5206
  */
5179
5207
  class DropzoneComponent {
5180
- constructor(translateService) {
5208
+ constructor(translateService, renderer, document) {
5181
5209
  this.translateService = translateService;
5210
+ this.renderer = renderer;
5211
+ this.document = document;
5182
5212
  this.externalError$ = new BehaviorSubject('');
5183
5213
  this.maxFileSize = 5;
5184
5214
  this.showMaxFileSize = true;
@@ -5223,6 +5253,7 @@ class DropzoneComponent {
5223
5253
  }
5224
5254
  ngOnDestroy() {
5225
5255
  this.clearSubscription.unsubscribe();
5256
+ this.destroyHiddenInputs();
5226
5257
  }
5227
5258
  showCamera() {
5228
5259
  this.showingCamera$.next(true);
@@ -5257,13 +5288,24 @@ class DropzoneComponent {
5257
5288
  this.clearError();
5258
5289
  this.fileSelected.emit(file);
5259
5290
  }
5291
+ destroyHiddenInputs() {
5292
+ const hiddenElements = this.document.getElementsByClassName('dz-hidden-input');
5293
+ Array.from(hiddenElements).forEach(element => {
5294
+ element.remove();
5295
+ });
5296
+ }
5260
5297
  }
5261
- DropzoneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DropzoneComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
5298
+ DropzoneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DropzoneComponent, deps: [{ token: i1.TranslateService }, { token: i0.Renderer2 }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
5262
5299
  DropzoneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DropzoneComponent, selector: "valtimo-dropzone", inputs: { title: "title", hideTitle: "hideTitle", subtitle: "subtitle", externalError$: "externalError$", maxFileSize: "maxFileSize", showMaxFileSize: "showMaxFileSize", acceptedFiles: "acceptedFiles", clear$: "clear$", disabled: "disabled", hideFilePreview: "hideFilePreview", uploading: "uploading", camera: "camera", maxFiles: "maxFiles" }, outputs: { fileSelected: "fileSelected" }, viewQueries: [{ propertyName: "dropzoneRef", first: true, predicate: ["dropzone"], 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<form #dropzone [ngClass]=\"{disabled: disabled || uploading}\" class=\"dropzone dz-clickable\">\n <div class=\"dz-message\">\n <div class=\"icon large-icon\"><span class=\"mdi mdi-cloud-upload\"></span></div>\n <ng-container *ngTemplateOutlet=\"body\"></ng-container>\n <ng-container *ngIf=\"uploading\">\n <ng-container *ngTemplateOutlet=\"progressBar\"></ng-container>\n </ng-container>\n <div class=\"dropzone-mobile-trigger needsclick\"></div>\n </div>\n <button\n (click)=\"showCamera()\"\n *ngIf=\"camera\"\n type=\"button\"\n class=\"btn btn-primary px-3 webcam-button\"\n >\n <i class=\"icon mdi mdi-camera\" aria-hidden=\"true\"></i>\n </button>\n <ng-container *ngIf=\"showingCamera$ | async\">\n <ng-container *ngTemplateOutlet=\"webcam\"></ng-container>\n </ng-container>\n</form>\n\n<ng-template #body>\n <h2 *ngIf=\"!hideTitle\" class=\"mb-4 mt-2\">{{ title || ('dropzone.drop' | translate) }}</h2>\n <span *ngIf=\"subtitle\" class=\"note mb-3\">{{ subtitle }}</span>\n <span *ngIf=\"showMaxFileSize\" class=\"note mb-3 small-font\"\n >{{ 'dropzone.maxFileSize' | translate }}<b>{{ maxFileSize }}mb</b></span\n >\n <ng-container *ngTemplateOutlet=\"preview\"></ng-container>\n</ng-template>\n\n<ng-template #preview>\n <ng-container\n *ngIf=\"{\n errorMessage: errorMessage$ | async,\n externalError: externalError$ | async,\n file: file$ | async\n } as obs\"\n >\n <ng-container *ngIf=\"obs.externalError || obs.errorMessage\">\n <div class=\"alert alert-danger mt-2 mb-0\">\n <div class=\"message\">\n {{ obs.externalError || obs.errorMessage }}\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!hideFilePreview && obs.file && !obs.externalError && !obs.errorMessage\">\n <div class=\"file\">\n <i class=\"icon mdi mdi-file-text mr-2\"></i>\n <span class=\"note\">{{ obs.file.name }}</span>\n <span class=\"note file-size\">- {{ obs.file.size | filesize : 2 }}</span>\n </div>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #progressBar>\n <div class=\"progress-bar-container\">\n <valtimo-progress-bar></valtimo-progress-bar>\n </div>\n</ng-template>\n\n<ng-template #webcam>\n <valtimo-webcam (imageSaved)=\"webcamImageSaved($event)\"></valtimo-webcam>\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 */form.dropzone{padding:30px 20px}form.dropzone h2{text-align:center;font-size:1.69rem}form.dropzone.disabled{opacity:.7;pointer-events:none;cursor:default}form.dropzone.preview{padding:15px 20px;border:none}.dz-message{display:flex;flex-direction:column;align-items:center}.dropzone-mobile-trigger{cursor:pointer}.alert-light{display:flex;align-items:center}form.dropzone .mdi{background-color:transparent;border-radius:0;display:inline-block;height:auto;width:auto;margin-bottom:0;padding:0}form.dropzone .message{padding:1.385rem 2.1542rem}.file{font-size:1.5rem;display:flex;flex-direction:row;align-items:center}.small-font{font-size:1rem;color:#959595}.file-size{margin-left:5px}.progress-bar-container{height:auto;width:100%;position:absolute;bottom:0}.webcam-button{position:absolute;top:10px;right:10px}.large-icon,.large-icon .mdi{line-height:60px;font-size:60px}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ProgressBarComponent, selector: "valtimo-progress-bar" }, { kind: "component", type: WebcamComponent, selector: "valtimo-webcam", outputs: ["imageSaved"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: FileSizePipe, name: "filesize" }] });
5263
5300
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DropzoneComponent, decorators: [{
5264
5301
  type: Component,
5265
5302
  args: [{ selector: 'valtimo-dropzone', 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<form #dropzone [ngClass]=\"{disabled: disabled || uploading}\" class=\"dropzone dz-clickable\">\n <div class=\"dz-message\">\n <div class=\"icon large-icon\"><span class=\"mdi mdi-cloud-upload\"></span></div>\n <ng-container *ngTemplateOutlet=\"body\"></ng-container>\n <ng-container *ngIf=\"uploading\">\n <ng-container *ngTemplateOutlet=\"progressBar\"></ng-container>\n </ng-container>\n <div class=\"dropzone-mobile-trigger needsclick\"></div>\n </div>\n <button\n (click)=\"showCamera()\"\n *ngIf=\"camera\"\n type=\"button\"\n class=\"btn btn-primary px-3 webcam-button\"\n >\n <i class=\"icon mdi mdi-camera\" aria-hidden=\"true\"></i>\n </button>\n <ng-container *ngIf=\"showingCamera$ | async\">\n <ng-container *ngTemplateOutlet=\"webcam\"></ng-container>\n </ng-container>\n</form>\n\n<ng-template #body>\n <h2 *ngIf=\"!hideTitle\" class=\"mb-4 mt-2\">{{ title || ('dropzone.drop' | translate) }}</h2>\n <span *ngIf=\"subtitle\" class=\"note mb-3\">{{ subtitle }}</span>\n <span *ngIf=\"showMaxFileSize\" class=\"note mb-3 small-font\"\n >{{ 'dropzone.maxFileSize' | translate }}<b>{{ maxFileSize }}mb</b></span\n >\n <ng-container *ngTemplateOutlet=\"preview\"></ng-container>\n</ng-template>\n\n<ng-template #preview>\n <ng-container\n *ngIf=\"{\n errorMessage: errorMessage$ | async,\n externalError: externalError$ | async,\n file: file$ | async\n } as obs\"\n >\n <ng-container *ngIf=\"obs.externalError || obs.errorMessage\">\n <div class=\"alert alert-danger mt-2 mb-0\">\n <div class=\"message\">\n {{ obs.externalError || obs.errorMessage }}\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!hideFilePreview && obs.file && !obs.externalError && !obs.errorMessage\">\n <div class=\"file\">\n <i class=\"icon mdi mdi-file-text mr-2\"></i>\n <span class=\"note\">{{ obs.file.name }}</span>\n <span class=\"note file-size\">- {{ obs.file.size | filesize : 2 }}</span>\n </div>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #progressBar>\n <div class=\"progress-bar-container\">\n <valtimo-progress-bar></valtimo-progress-bar>\n </div>\n</ng-template>\n\n<ng-template #webcam>\n <valtimo-webcam (imageSaved)=\"webcamImageSaved($event)\"></valtimo-webcam>\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 */form.dropzone{padding:30px 20px}form.dropzone h2{text-align:center;font-size:1.69rem}form.dropzone.disabled{opacity:.7;pointer-events:none;cursor:default}form.dropzone.preview{padding:15px 20px;border:none}.dz-message{display:flex;flex-direction:column;align-items:center}.dropzone-mobile-trigger{cursor:pointer}.alert-light{display:flex;align-items:center}form.dropzone .mdi{background-color:transparent;border-radius:0;display:inline-block;height:auto;width:auto;margin-bottom:0;padding:0}form.dropzone .message{padding:1.385rem 2.1542rem}.file{font-size:1.5rem;display:flex;flex-direction:row;align-items:center}.small-font{font-size:1rem;color:#959595}.file-size{margin-left:5px}.progress-bar-container{height:auto;width:100%;position:absolute;bottom:0}.webcam-button{position:absolute;top:10px;right:10px}.large-icon,.large-icon .mdi{line-height:60px;font-size:60px}\n"] }]
5266
- }], ctorParameters: function () { return [{ type: i1.TranslateService }]; }, propDecorators: { dropzoneRef: [{
5303
+ }], ctorParameters: function () {
5304
+ return [{ type: i1.TranslateService }, { type: i0.Renderer2 }, { type: Document, decorators: [{
5305
+ type: Inject,
5306
+ args: [DOCUMENT]
5307
+ }] }];
5308
+ }, propDecorators: { dropzoneRef: [{
5267
5309
  type: ViewChild,
5268
5310
  args: ['dropzone']
5269
5311
  }], title: [{
@@ -6420,6 +6462,16 @@ const formIoUploaderEditForm = () => ({
6420
6462
  required: true,
6421
6463
  },
6422
6464
  },
6465
+ {
6466
+ type: 'checkbox',
6467
+ input: true,
6468
+ inputType: 'checkbox',
6469
+ key: 'validate.required',
6470
+ label: 'Required',
6471
+ validate: {
6472
+ required: false,
6473
+ },
6474
+ },
6423
6475
  {
6424
6476
  type: 'textfield',
6425
6477
  input: true,
@@ -6529,9 +6581,8 @@ function registerFormioUploadComponent(injector) {
6529
6581
  class UploaderComponent extends originalUploadComponent {
6530
6582
  setValue(value) {
6531
6583
  var _a;
6532
- let componentValue = (_a = this._customAngularElement) === null || _a === void 0 ? void 0 : _a.value;
6533
- if (componentValue) {
6534
- componentValue = value;
6584
+ if ((_a = this._customAngularElement) === null || _a === void 0 ? void 0 : _a.value) {
6585
+ this._customAngularElement.value = value;
6535
6586
  }
6536
6587
  return true;
6537
6588
  }
@@ -6569,6 +6620,16 @@ const documentenApiUploaderEditForm = () => ({
6569
6620
  required: true,
6570
6621
  },
6571
6622
  },
6623
+ {
6624
+ type: 'checkbox',
6625
+ input: true,
6626
+ inputType: 'checkbox',
6627
+ key: 'validate.required',
6628
+ label: 'Required',
6629
+ validate: {
6630
+ required: false,
6631
+ },
6632
+ },
6572
6633
  {
6573
6634
  type: 'textfield',
6574
6635
  input: true,
@@ -6867,7 +6928,10 @@ function registerDocumentenApiFormioUploadComponent(injector) {
6867
6928
  // override setValue function to allow for setting an array value
6868
6929
  class UploaderComponent extends originalUploadComponent {
6869
6930
  setValue(value) {
6870
- this._customAngularElement.value = value;
6931
+ var _a;
6932
+ if ((_a = this._customAngularElement) === null || _a === void 0 ? void 0 : _a.value) {
6933
+ this._customAngularElement.value = value;
6934
+ }
6871
6935
  return true;
6872
6936
  }
6873
6937
  }