@valtimo/components 11.3.0 → 11.3.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.
@@ -14,10 +14,11 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { Component, EventEmitter, HostListener, Input, Output, } from '@angular/core';
17
- import { Formio, } from '@formio/angular';
17
+ import { Formio } from '@formio/angular';
18
18
  import jwt_decode from 'jwt-decode';
19
19
  import { BehaviorSubject, combineLatest, Subscription, timer } from 'rxjs';
20
20
  import { distinctUntilChanged, map, switchMap, take } from 'rxjs/operators';
21
+ import { FormIoLocalStorageService } from './services/form-io-local-storage.service';
21
22
  import * as i0 from "@angular/core";
22
23
  import * as i1 from "@valtimo/security";
23
24
  import * as i2 from "ngx-logger";
@@ -25,8 +26,9 @@ import * as i3 from "./services/form-io-state.service";
25
26
  import * as i4 from "@angular/router";
26
27
  import * as i5 from "@ngx-translate/core";
27
28
  import * as i6 from "../../services/valtimo-modal.service";
28
- import * as i7 from "@angular/common";
29
- import * as i8 from "@formio/angular";
29
+ import * as i7 from "./services/form-io-local-storage.service";
30
+ import * as i8 from "@angular/common";
31
+ import * as i9 from "@formio/angular";
30
32
  export class FormioComponent {
31
33
  set options(optionsValue) {
32
34
  this.options$.next(optionsValue);
@@ -41,15 +43,16 @@ export class FormioComponent {
41
43
  this.readOnly$.next(readOnlyValue);
42
44
  }
43
45
  handleBeforeUnload() {
44
- this.clearTokenFromLocalStorage();
46
+ this.localStorageService.clearTokenFromLocalStorage();
45
47
  }
46
- constructor(userProviderService, logger, stateService, route, translateService, modalService) {
48
+ constructor(userProviderService, logger, stateService, route, translateService, modalService, localStorageService) {
47
49
  this.userProviderService = userProviderService;
48
50
  this.logger = logger;
49
51
  this.stateService = stateService;
50
52
  this.route = route;
51
53
  this.translateService = translateService;
52
54
  this.modalService = modalService;
55
+ this.localStorageService = localStorageService;
53
56
  // eslint-disable-next-line @angular-eslint/no-output-native
54
57
  this.submit = new EventEmitter();
55
58
  // eslint-disable-next-line @angular-eslint/no-output-native
@@ -60,7 +63,6 @@ export class FormioComponent {
60
63
  this.options$ = new BehaviorSubject(undefined);
61
64
  this.readOnly$ = new BehaviorSubject(false);
62
65
  this.errors$ = new BehaviorSubject([]);
63
- this.tokenSetInLocalStorage$ = new BehaviorSubject(false);
64
66
  this.currentLanguage$ = this.translateService.stream('key').pipe(map(() => this.translateService.currentLang), distinctUntilChanged());
65
67
  this.formioOptions$ = combineLatest([
66
68
  this.currentLanguage$,
@@ -80,9 +82,9 @@ export class FormioComponent {
80
82
  language,
81
83
  };
82
84
  }));
85
+ this.tokenSetInLocalStorage$ = this.localStorageService.tokenSetInLocalStorage$;
83
86
  this._subscriptions = new Subscription();
84
87
  this._tokenTimerSubscription = new Subscription();
85
- this._FORMIO_TOKEN_LOCAL_STORAGE_KEY = 'formioToken';
86
88
  }
87
89
  ngOnInit() {
88
90
  Formio.setProjectUrl(location.origin);
@@ -104,7 +106,7 @@ export class FormioComponent {
104
106
  this.unsubscribeFormRefresh();
105
107
  this._tokenRefreshTimerSubscription?.unsubscribe();
106
108
  this._subscriptions.unsubscribe();
107
- this.clearTokenFromLocalStorage();
109
+ this.localStorageService.clearTokenFromLocalStorage();
108
110
  }
109
111
  showErrors(errors) {
110
112
  this.errors$.next(errors);
@@ -150,9 +152,8 @@ export class FormioComponent {
150
152
  setToken(token) {
151
153
  Formio.setUser(jwt_decode(token));
152
154
  Formio.setToken(token);
153
- localStorage.setItem(this._FORMIO_TOKEN_LOCAL_STORAGE_KEY, token);
154
155
  this.setTimerForTokenRefresh(token);
155
- this.tokenSetInLocalStorage$.next(true);
156
+ this.localStorageService.setTokenInLocalStorage(token);
156
157
  this.logger.debug('New token set for form.io.');
157
158
  }
158
159
  setTimerForTokenRefresh(token) {
@@ -191,16 +192,13 @@ export class FormioComponent {
191
192
  }
192
193
  }));
193
194
  }
194
- clearTokenFromLocalStorage() {
195
- localStorage.removeItem(this._FORMIO_TOKEN_LOCAL_STORAGE_KEY);
196
- }
197
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", 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 }); }
198
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormioComponent, selector: "valtimo-form-io", inputs: { options: "options", submission: "submission", form: "form", readOnly: "readOnly", formRefresh$: "formRefresh$" }, outputs: { submit: "submit", change: "change" }, host: { listeners: { "window:beforeunload": "handleBeforeUnload($event)" } }, 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 tokenSetInLocalStorage: tokenSetInLocalStorage$ | 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 && obs.tokenSetInLocalStorage\"\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" }] }); }
195
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormioComponent, deps: [{ token: i1.UserProviderService }, { token: i2.NGXLogger }, { token: i3.FormIoStateService }, { token: i4.ActivatedRoute }, { token: i5.TranslateService }, { token: i6.ValtimoModalService }, { token: i7.FormIoLocalStorageService }], target: i0.ɵɵFactoryTarget.Component }); }
196
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormioComponent, selector: "valtimo-form-io", inputs: { options: "options", submission: "submission", form: "form", readOnly: "readOnly", formRefresh$: "formRefresh$" }, outputs: { submit: "submit", change: "change" }, host: { listeners: { "window:beforeunload": "handleBeforeUnload($event)" } }, providers: [FormIoLocalStorageService], 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 tokenSetInLocalStorage: tokenSetInLocalStorage$ | 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 && obs.tokenSetInLocalStorage\"\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: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i9.FormioComponent, selector: "formio" }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }] }); }
199
197
  }
200
198
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormioComponent, decorators: [{
201
199
  type: Component,
202
- 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 tokenSetInLocalStorage: tokenSetInLocalStorage$ | 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 && obs.tokenSetInLocalStorage\"\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" }]
203
- }], ctorParameters: function () { return [{ type: i1.UserProviderService }, { type: i2.NGXLogger }, { type: i3.FormIoStateService }, { type: i4.ActivatedRoute }, { type: i5.TranslateService }, { type: i6.ValtimoModalService }]; }, propDecorators: { options: [{
200
+ args: [{ selector: 'valtimo-form-io', providers: [FormIoLocalStorageService], 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 tokenSetInLocalStorage: tokenSetInLocalStorage$ | 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 && obs.tokenSetInLocalStorage\"\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" }]
201
+ }], ctorParameters: function () { return [{ type: i1.UserProviderService }, { type: i2.NGXLogger }, { type: i3.FormIoStateService }, { type: i4.ActivatedRoute }, { type: i5.TranslateService }, { type: i6.ValtimoModalService }, { type: i7.FormIoLocalStorageService }]; }, propDecorators: { options: [{
204
202
  type: Input
205
203
  }], submission: [{
206
204
  type: Input
@@ -218,4 +216,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
218
216
  type: HostListener,
219
217
  args: ['window:beforeunload', ['$event']]
220
218
  }] } });
221
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1pby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0taW8vZm9ybS1pby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0taW8vZm9ybS1pby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFDTCxNQUFNLEdBSVAsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLFVBQVUsTUFBTSxZQUFZLENBQUM7QUFFcEMsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQXVCLFlBQVksRUFBRSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUYsT0FBTyxFQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFVMUUsTUFBTSxPQUFPLGVBQWU7SUFDMUIsSUFBYSxPQUFPLENBQUMsWUFBa0M7UUFDckQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNELElBQWEsVUFBVSxDQUFDLGVBQWlDO1FBQ3ZELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFDRCxJQUFhLElBQUksQ0FBQyxTQUFpQjtRQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FB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QUksQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUM3QztJQUNILENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNuQyxNQUFNLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQztZQUM3RCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1lBRXJDLElBQUksc0JBQXNCLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMseUJBQXlCLENBQUMsc0JBQXNCLENBQUMsQ0FBQzthQUNyRTtZQUVELElBQUksVUFBVSxFQUFFO2dCQUNkLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQzdDO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTywwQkFBMEI7UUFDaEMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUNoRSxDQUFDOytHQTdOVSxlQUFlO21HQUFmLGVBQWUsdVVDbEQ1Qiwwa0RBZ0RBOzs0RkRFYSxlQUFlO2tCQUwzQixTQUFTOytCQUNFLGlCQUFpQjtpUUFLZCxPQUFPO3NCQUFuQixLQUFLO2dCQUdPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBR08sSUFBSTtzQkFBaEIsS0FBSztnQkFHTyxRQUFRO3NCQUFwQixLQUFLO2dCQUdHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0ksTUFBTTtzQkFBZixNQUFNO2dCQUVHLE1BQU07c0JBQWYsTUFBTTtnQkFHQyxrQkFBa0I7c0JBRHpCLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyMyBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VmFsdGltb0Zvcm1pb09wdGlvbnN9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge1ZhbHRpbW9Nb2RhbFNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZhbHRpbW8tbW9kYWwuc2VydmljZSc7XG5pbXBvcnQge1VzZXJQcm92aWRlclNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL3NlY3VyaXR5JztcbmltcG9ydCB7XG4gIEZvcm1pbyxcbiAgRm9ybWlvQ29tcG9uZW50IGFzIEZvcm1Jb1NvdXJjZUNvbXBvbmVudCxcbiAgRm9ybWlvU3VibWlzc2lvbixcbiAgRm9ybWlvVXRpbHMsXG59IGZyb20gJ0Bmb3JtaW8vYW5ndWxhcic7XG5pbXBvcnQge0Zvcm1pb1JlZnJlc2hWYWx1ZX0gZnJvbSAnQGZvcm1pby9hbmd1bGFyL2Zvcm1pby5jb21tb24nO1xuaW1wb3J0IGp3dF9kZWNvZGUgZnJvbSAnand0LWRlY29kZSc7XG5pbXBvcnQge05HWExvZ2dlcn0gZnJvbSAnbmd4LWxvZ2dlcic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aW1lcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2Rpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHN3aXRjaE1hcCwgdGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtGb3JtSW9TdGF0ZVNlcnZpY2V9IGZyb20gJy4vc2VydmljZXMvZm9ybS1pby1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWZvcm0taW8nLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1pby5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0taW8uY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtaW9Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQElucHV0KCkgc2V0IG9wdGlvbnMob3B0aW9uc1ZhbHVlOiBWYWx0aW1vRm9ybWlvT3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyQubmV4dChvcHRpb25zVmFsdWUpO1xuICB9XG4gIEBJbnB1dCgpIHNldCBzdWJtaXNzaW9uKHN1Ym1pc3Npb25WYWx1ZTogRm9ybWlvU3VibWlzc2lvbikge1xuICAgIHRoaXMuc3VibWlzc2lvbiQubmV4dChzdWJtaXNzaW9uVmFsdWUpO1xuICB9XG4gIEBJbnB1dCgpIHNldCBmb3JtKGZvcm1WYWx1ZTogb2JqZWN0KSB7XG4gICAgdGhpcy5mb3JtJC5uZXh0KGZvcm1WYWx1ZSk7XG4gIH1cbiAgQElucHV0KCkgc2V0IHJlYWRPbmx5KHJlYWRPbmx5VmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnJlYWRPbmx5JC5uZXh0KHJlYWRPbmx5VmFsdWUpO1xuICB9XG4gIEBJbnB1dCgpIGZvcm1SZWZyZXNoJCE6IFN1YmplY3Q8Rm9ybWlvUmVmcmVzaFZhbHVlPjtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgpIHN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgpIGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpiZWZvcmV1bmxvYWQnLCBbJyRldmVudCddKVxuICBwcml2YXRlIGhhbmRsZUJlZm9yZVVubG9hZCgpIHtcbiAgICB0aGlzLmNsZWFyVG9rZW5Gcm9tTG9jYWxTdG9yYWdlKCk7XG4gIH1cblxuICBwdWJsaWMgcmVmcmVzaEZvcm0gPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1pb1JlZnJlc2hWYWx1ZT4oKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc3VibWlzc2lvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZvcm1pb1N1Ym1pc3Npb24+KHt9KTtcbiAgcHVibGljIHJlYWRvbmx5IGZvcm0kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxvYmplY3Q+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyByZWFkb25seSBvcHRpb25zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VmFsdGltb0Zvcm1pb09wdGlvbnM+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyByZWFkb25seSByZWFkT25seSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IGVycm9ycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PHN0cmluZz4+KFtdKTtcbiAgcHVibGljIHJlYWRvbmx5IHRva2VuU2V0SW5Mb2NhbFN0b3JhZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGN1cnJlbnRMYW5ndWFnZSQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKS5waXBlKFxuICAgIG1hcCgoKSA9PiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZm9ybWlvT3B0aW9ucyQ6IE9ic2VydmFibGU8VmFsdGltb0Zvcm1pb09wdGlvbnM+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UkLFxuICAgIHRoaXMub3B0aW9ucyQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbbGFuZ3VhZ2UsIG9wdGlvbnNdKSA9PiB7XG4gICAgICBjb25zdCBmb3JtaW9UcmFuc2xhdGlvbnMgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnZm9ybWlvVHJhbnNsYXRpb25zJyk7XG4gICAgICByZXR1cm4gdHlwZW9mIGZvcm1pb1RyYW5zbGF0aW9ucyA9PT0gJ29iamVjdCdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgaTE4bjoge1xuICAgICAgICAgICAgICBbbGFuZ3VhZ2VdOiB0aGlzLnN0YXRlU2VydmljZS5mbGF0dGVuVHJhbnNsYXRpb25zT2JqZWN0KGZvcm1pb1RyYW5zbGF0aW9ucyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICB9O1xuICAgIH0pXG4gICk7XG5cbiAgcHJpdmF0ZSBfdG9rZW5SZWZyZXNoVGltZXJTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX2Zvcm1SZWZyZXNoU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b2tlblRpbWVyU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX0ZPUk1JT19UT0tFTl9MT0NBTF9TVE9SQUdFX0tFWSA9ICdmb3JtaW9Ub2tlbic7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyUHJvdmlkZXJTZXJ2aWNlOiBVc2VyUHJvdmlkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBOR1hMb2dnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdGF0ZVNlcnZpY2U6IEZvcm1Jb1N0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBtb2RhbFNlcnZpY2U6IFZhbHRpbW9Nb2RhbFNlcnZpY2VcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBGb3JtaW8uc2V0UHJvamVjdFVybChsb2NhdGlvbi5vcmlnaW4pO1xuICAgIEZvcm1pby5hdXRoVXJsID0gbG9jYXRpb24ub3JpZ2luO1xuXG4gICAgdGhpcy5vcGVuUm91dGVTdWJzY3JpcHRpb24oKTtcbiAgICB0aGlzLmVycm9ycyQubmV4dChbXSk7XG4gICAgdGhpcy5zZXRJbml0aWFsVG9rZW4oKTtcbiAgICB0aGlzLnN1YnNjcmliZUZvcm1SZWZyZXNoKCk7XG4gICAgdGhpcy5vcGVuUmVsb2FkRm9ybVN1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMub3BlblJlbG9hZFN1Ym1pc3Npb25TdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXM/LmZvcm1EZWZpbml0aW9uUmVmcmVzaCQpIHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVGb3JtUmVmcmVzaCgpO1xuICAgICAgdGhpcy5zdWJzY3JpYmVGb3JtUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlRm9ybVJlZnJlc2goKTtcbiAgICB0aGlzLl90b2tlblJlZnJlc2hUaW1lclN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jbGVhclRva2VuRnJvbUxvY2FsU3RvcmFnZSgpO1xuICB9XG5cbiAgcHVibGljIHNob3dFcnJvcnMoZXJyb3JzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHRoaXMuZXJyb3JzJC5uZXh0KGVycm9ycyk7XG4gIH1cblxuICBwdWJsaWMgb25TdWJtaXQoc3VibWlzc2lvbjogRm9ybWlvU3VibWlzc2lvbik6IHZvaWQge1xuICAgIHRoaXMuZXJyb3JzJC5uZXh0KFtdKTtcbiAgICB0aGlzLnN1Ym1pdC5lbWl0KHN1Ym1pc3Npb24pO1xuICB9XG5cbiAgcHVibGljIGZvcm1SZWFkeShmb3JtOiBGb3JtSW9Tb3VyY2VDb21wb25lbnQpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5jdXJyZW50Rm9ybSA9IGZvcm07XG4gIH1cblxuICBwdWJsaWMgb25DaGFuZ2Uob2JqZWN0OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNoYW5nZS5lbWl0KG9iamVjdCk7XG4gIH1cblxuICBwdWJsaWMgbmV4dFBhZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5zY3JvbGxUb1RvcCgpO1xuICB9XG5cbiAgcHVibGljIHByZXZQYWdlKCk6IHZvaWQge1xuICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlblJlbG9hZEZvcm1TdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLmZvcm0kLnN1YnNjcmliZShmb3JtID0+IHtcbiAgICAgICAgdGhpcy5yZWZyZXNoRm9ybS5lbWl0KHtcbiAgICAgICAgICBmb3JtLFxuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlblJlbG9hZFN1Ym1pc3Npb25TdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnN1Ym1pc3Npb24kLnN1YnNjcmliZShzdWJtaXNzaW9uID0+IHtcbiAgICAgICAgdGhpcy5yZWZyZXNoRm9ybS5lbWl0KHtcbiAgICAgICAgICBzdWJtaXNzaW9uLFxuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsVG9Ub3AoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uuc2Nyb2xsVG9Ub3AoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SW5pdGlhbFRva2VuKCk6IHZvaWQge1xuICAgIHRoaXMudXNlclByb3ZpZGVyU2VydmljZS5nZXRUb2tlbigpLnRoZW4oKHRva2VuOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMuc2V0VG9rZW4odG9rZW4pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRUb2tlbih0b2tlbjogc3RyaW5nKTogdm9pZCB7XG4gICAgRm9ybWlvLnNldFVzZXIoand0X2RlY29kZSh0b2tlbikpO1xuICAgIEZvcm1pby5zZXRUb2tlbih0b2tlbik7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5fRk9STUlPX1RPS0VOX0xPQ0FMX1NUT1JBR0VfS0VZLCB0b2tlbik7XG4gICAgdGhpcy5zZXRUaW1lckZvclRva2VuUmVmcmVzaCh0b2tlbik7XG4gICAgdGhpcy50b2tlblNldEluTG9jYWxTdG9yYWdlJC5uZXh0KHRydWUpO1xuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ05ldyB0b2tlbiBzZXQgZm9yIGZvcm0uaW8uJyk7XG4gIH1cblxuICBwcml2YXRlIHNldFRpbWVyRm9yVG9rZW5SZWZyZXNoKHRva2VuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB0b2tlbkV4cCA9IChqd3RfZGVjb2RlKHRva2VuKSBhcyBhbnkpLmV4cCAqIDEwMDA7XG4gICAgY29uc3QgZXhwaXJ5VGltZSA9IHRva2VuRXhwIC0gRGF0ZS5ub3coKSAtIDEwMDA7XG5cbiAgICB0aGlzLl90b2tlblRpbWVyU3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRpbWVyKGV4cGlyeVRpbWUpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnVzZXJQcm92aWRlclNlcnZpY2UudXBkYXRlVG9rZW4oLTEpKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy51c2VyUHJvdmlkZXJTZXJ2aWNlLmdldFRva2VuKCkpLFxuICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyZWZyZXNoZWRUb2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRUb2tlbihyZWZyZXNoZWRUb2tlbik7XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBUaW1lciBmb3IgZm9ybS5pbyB0b2tlbiByZWZyZXNoIHNldCBmb3I6ICR7ZXhwaXJ5VGltZX1tcy5gKTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlRm9ybVJlZnJlc2goKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9ybVJlZnJlc2gkKSB7XG4gICAgICB0aGlzLl9mb3JtUmVmcmVzaFN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybVJlZnJlc2gkLnN1YnNjcmliZShyZWZyZXNoVmFsdWUgPT4ge1xuICAgICAgICBpZiAocmVmcmVzaFZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoRm9ybS5lbWl0KHJlZnJlc2hWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVGb3JtUmVmcmVzaCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZm9ybVJlZnJlc2hTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX2Zvcm1SZWZyZXNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvcGVuUm91dGVTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9IHBhcmFtcy5kb2N1bWVudERlZmluaXRpb25OYW1lO1xuICAgICAgICBjb25zdCBkb2N1bWVudElkID0gcGFyYW1zLmRvY3VtZW50SWQ7XG5cbiAgICAgICAgaWYgKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpIHtcbiAgICAgICAgICB0aGlzLnN0YXRlU2VydmljZS5zZXREb2N1bWVudERlZmluaXRpb25OYW1lKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRvY3VtZW50SWQpIHtcbiAgICAgICAgICB0aGlzLnN0YXRlU2VydmljZS5zZXREb2N1bWVudElkKGRvY3VtZW50SWQpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyVG9rZW5Gcm9tTG9jYWxTdG9yYWdlKCk6IHZvaWQge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuX0ZPUk1JT19UT0tFTl9MT0NBTF9TVE9SQUdFX0tFWSk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPGRpdlxuICAqbmdJZj1cIntcbiAgICBjdXJyZW50TGFuZ3VhZ2U6IGN1cnJlbnRMYW5ndWFnZSQgfCBhc3luYyxcbiAgICBmb3JtaW9PcHRpb25zOiBmb3JtaW9PcHRpb25zJCB8IGFzeW5jLFxuICAgIHN1Ym1pc3Npb246IHN1Ym1pc3Npb24kIHwgYXN5bmMsXG4gICAgcmVhZE9ubHk6IHJlYWRPbmx5JCB8IGFzeW5jLFxuICAgIGZvcm06IGZvcm0kIHwgYXN5bmMsXG4gICAgZXJyb3JzOiBlcnJvcnMkIHwgYXN5bmMsXG4gICAgdG9rZW5TZXRJbkxvY2FsU3RvcmFnZTogdG9rZW5TZXRJbkxvY2FsU3RvcmFnZSQgfCBhc3luY1xuICB9IGFzIG9ic1wiXG4+XG4gIDxkaXYgKm5nSWY9XCJvYnMuZXJyb3JzLmxlbmd0aCA+IDBcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBwdC01IHBiLTUgbWItMlwiPlxuICAgIDxvbD5cbiAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZXJyb3Igb2Ygb2JzLmVycm9yc1wiPlxuICAgICAgICB7eyBlcnJvciB9fVxuICAgICAgPC9saT5cbiAgICA8L29sPlxuICA8L2Rpdj5cbiAgPGZvcm1pb1xuICAgICpuZ0lmPVwib2JzLmZvcm1pb09wdGlvbnMgJiYgb2JzLmZvcm0gJiYgb2JzLnRva2VuU2V0SW5Mb2NhbFN0b3JhZ2VcIlxuICAgIFtzdWJtaXNzaW9uXT1cIm9icy5zdWJtaXNzaW9uXCJcbiAgICBbZm9ybV09XCJvYnMuZm9ybVwiXG4gICAgW3JlZnJlc2hdPVwicmVmcmVzaEZvcm1cIlxuICAgIFtvcHRpb25zXT1cIm9icy5mb3JtaW9PcHRpb25zXCJcbiAgICBbcmVhZE9ubHldPVwib2JzLnJlYWRPbmx5XCJcbiAgICAoc3VibWl0KT1cIm9uU3VibWl0KCRldmVudClcIlxuICAgIChyZWFkeSk9XCJmb3JtUmVhZHkoJGV2ZW50KVwiXG4gICAgKGNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAobmV4dFBhZ2UpPVwibmV4dFBhZ2UoKVwiXG4gICAgKHByZXZQYWdlKT1cInByZXZQYWdlKClcIlxuICA+PC9mb3JtaW8+XG48L2Rpdj5cbiJdfQ==
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1pby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0taW8vZm9ybS1pby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0taW8vZm9ybS1pby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBQyxNQUFNLEVBQTZELE1BQU0saUJBQWlCLENBQUM7QUFFbkcsT0FBTyxVQUFVLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUF1QixZQUFZLEVBQUUsS0FBSyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzlGLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBSTFFLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLDBDQUEwQyxDQUFDOzs7Ozs7Ozs7OztBQVFuRixNQUFNLE9BQU8sZUFBZTtJQUMxQixJQUFhLE9BQU8sQ0FBQyxZQUFrQztRQUNyRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsSUFBYSxVQUFVLENBQUMsZUFBaUM7UUFDdkQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNELElBQWEsSUFBSSxDQUFDLFNBQWlCO1FB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LElBQUksQ0FBQyx3QkFBd0IsRUFBRTtZQUNqQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDN0M7SUFDSCxDQUFDO0lBRU8scUJBQXFCO1FBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbkMsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUM7WUFDN0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztZQUVyQyxJQUFJLHNCQUFzQixFQUFFO2dCQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLHlCQUF5QixDQUFDLHNCQUFzQixDQUFDLENBQUM7YUFDckU7WUFFRCxJQUFJLFVBQVUsRUFBRTtnQkFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUM3QztRQUNILENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOytHQXhOVSxlQUFlO21HQUFmLGVBQWUscVNBRmYsQ0FBQyx5QkFBeUIsQ0FBQywrQ0M3Q3hDLDBrREFnREE7OzRGRERhLGVBQWU7a0JBTjNCLFNBQVM7K0JBQ0UsaUJBQWlCLGFBR2hCLENBQUMseUJBQXlCLENBQUM7eVNBR3pCLE9BQU87c0JBQW5CLEtBQUs7Z0JBR08sVUFBVTtzQkFBdEIsS0FBSztnQkFHTyxJQUFJO3NCQUFoQixLQUFLO2dCQUdPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFHSSxNQUFNO3NCQUFmLE1BQU07Z0JBRUcsTUFBTTtzQkFBZixNQUFNO2dCQUdDLGtCQUFrQjtzQkFEekIsWUFBWTt1QkFBQyxxQkFBcUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtWYWx0aW1vRm9ybWlvT3B0aW9uc30gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7VmFsdGltb01vZGFsU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmFsdGltby1tb2RhbC5zZXJ2aWNlJztcbmltcG9ydCB7VXNlclByb3ZpZGVyU2VydmljZX0gZnJvbSAnQHZhbHRpbW8vc2VjdXJpdHknO1xuaW1wb3J0IHtGb3JtaW8sIEZvcm1pb0NvbXBvbmVudCBhcyBGb3JtSW9Tb3VyY2VDb21wb25lbnQsIEZvcm1pb1N1Ym1pc3Npb259IGZyb20gJ0Bmb3JtaW8vYW5ndWxhcic7XG5pbXBvcnQge0Zvcm1pb1JlZnJlc2hWYWx1ZX0gZnJvbSAnQGZvcm1pby9hbmd1bGFyL2Zvcm1pby5jb21tb24nO1xuaW1wb3J0IGp3dF9kZWNvZGUgZnJvbSAnand0LWRlY29kZSc7XG5pbXBvcnQge05HWExvZ2dlcn0gZnJvbSAnbmd4LWxvZ2dlcic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aW1lcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2Rpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHN3aXRjaE1hcCwgdGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtGb3JtSW9TdGF0ZVNlcnZpY2V9IGZyb20gJy4vc2VydmljZXMvZm9ybS1pby1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtGb3JtSW9Mb2NhbFN0b3JhZ2VTZXJ2aWNlfSBmcm9tICcuL3NlcnZpY2VzL2Zvcm0taW8tbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1mb3JtLWlvJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0taW8uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mb3JtLWlvLmNvbXBvbmVudC5jc3MnXSxcbiAgcHJvdmlkZXJzOiBbRm9ybUlvTG9jYWxTdG9yYWdlU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1pb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBzZXQgb3B0aW9ucyhvcHRpb25zVmFsdWU6IFZhbHRpbW9Gb3JtaW9PcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zJC5uZXh0KG9wdGlvbnNWYWx1ZSk7XG4gIH1cbiAgQElucHV0KCkgc2V0IHN1Ym1pc3Npb24oc3VibWlzc2lvblZhbHVlOiBGb3JtaW9TdWJtaXNzaW9uKSB7XG4gICAgdGhpcy5zdWJtaXNzaW9uJC5uZXh0KHN1Ym1pc3Npb25WYWx1ZSk7XG4gIH1cbiAgQElucHV0KCkgc2V0IGZvcm0oZm9ybVZhbHVlOiBvYmplY3QpIHtcbiAgICB0aGlzLmZvcm0kLm5leHQoZm9ybVZhbHVlKTtcbiAgfVxuICBASW5wdXQoKSBzZXQgcmVhZE9ubHkocmVhZE9ubHlWYWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMucmVhZE9ubHkkLm5leHQocmVhZE9ubHlWYWx1ZSk7XG4gIH1cbiAgQElucHV0KCkgZm9ybVJlZnJlc2gkITogU3ViamVjdDxGb3JtaW9SZWZyZXNoVmFsdWU+O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCkgc3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFsnJGV2ZW50J10pXG4gIHByaXZhdGUgaGFuZGxlQmVmb3JlVW5sb2FkKCkge1xuICAgIHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5jbGVhclRva2VuRnJvbUxvY2FsU3RvcmFnZSgpO1xuICB9XG5cbiAgcHVibGljIHJlZnJlc2hGb3JtID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtaW9SZWZyZXNoVmFsdWU+KCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHN1Ym1pc3Npb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGb3JtaW9TdWJtaXNzaW9uPih7fSk7XG4gIHB1YmxpYyByZWFkb25seSBmb3JtJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8b2JqZWN0Pih1bmRlZmluZWQpO1xuICBwdWJsaWMgcmVhZG9ubHkgb3B0aW9ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFZhbHRpbW9Gb3JtaW9PcHRpb25zPih1bmRlZmluZWQpO1xuICBwdWJsaWMgcmVhZG9ubHkgcmVhZE9ubHkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBlcnJvcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxzdHJpbmc+PihbXSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGN1cnJlbnRMYW5ndWFnZSQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKS5waXBlKFxuICAgIG1hcCgoKSA9PiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZm9ybWlvT3B0aW9ucyQ6IE9ic2VydmFibGU8VmFsdGltb0Zvcm1pb09wdGlvbnM+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UkLFxuICAgIHRoaXMub3B0aW9ucyQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbbGFuZ3VhZ2UsIG9wdGlvbnNdKSA9PiB7XG4gICAgICBjb25zdCBmb3JtaW9UcmFuc2xhdGlvbnMgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnZm9ybWlvVHJhbnNsYXRpb25zJyk7XG4gICAgICByZXR1cm4gdHlwZW9mIGZvcm1pb1RyYW5zbGF0aW9ucyA9PT0gJ29iamVjdCdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgaTE4bjoge1xuICAgICAgICAgICAgICBbbGFuZ3VhZ2VdOiB0aGlzLnN0YXRlU2VydmljZS5mbGF0dGVuVHJhbnNsYXRpb25zT2JqZWN0KGZvcm1pb1RyYW5zbGF0aW9ucyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICB9O1xuICAgIH0pXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHRva2VuU2V0SW5Mb2NhbFN0b3JhZ2UkID0gdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLnRva2VuU2V0SW5Mb2NhbFN0b3JhZ2UkO1xuXG4gIHByaXZhdGUgX3Rva2VuUmVmcmVzaFRpbWVyU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF9mb3JtUmVmcmVzaFN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9rZW5UaW1lclN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXJQcm92aWRlclNlcnZpY2U6IFVzZXJQcm92aWRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IE5HWExvZ2dlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0YXRlU2VydmljZTogRm9ybUlvU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1vZGFsU2VydmljZTogVmFsdGltb01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsU3RvcmFnZVNlcnZpY2U6IEZvcm1Jb0xvY2FsU3RvcmFnZVNlcnZpY2VcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBGb3JtaW8uc2V0UHJvamVjdFVybChsb2NhdGlvbi5vcmlnaW4pO1xuICAgIEZvcm1pby5hdXRoVXJsID0gbG9jYXRpb24ub3JpZ2luO1xuXG4gICAgdGhpcy5vcGVuUm91dGVTdWJzY3JpcHRpb24oKTtcbiAgICB0aGlzLmVycm9ycyQubmV4dChbXSk7XG4gICAgdGhpcy5zZXRJbml0aWFsVG9rZW4oKTtcbiAgICB0aGlzLnN1YnNjcmliZUZvcm1SZWZyZXNoKCk7XG4gICAgdGhpcy5vcGVuUmVsb2FkRm9ybVN1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMub3BlblJlbG9hZFN1Ym1pc3Npb25TdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXM/LmZvcm1EZWZpbml0aW9uUmVmcmVzaCQpIHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVGb3JtUmVmcmVzaCgpO1xuICAgICAgdGhpcy5zdWJzY3JpYmVGb3JtUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlRm9ybVJlZnJlc2goKTtcbiAgICB0aGlzLl90b2tlblJlZnJlc2hUaW1lclN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLmNsZWFyVG9rZW5Gcm9tTG9jYWxTdG9yYWdlKCk7XG4gIH1cblxuICBwdWJsaWMgc2hvd0Vycm9ycyhlcnJvcnM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5lcnJvcnMkLm5leHQoZXJyb3JzKTtcbiAgfVxuXG4gIHB1YmxpYyBvblN1Ym1pdChzdWJtaXNzaW9uOiBGb3JtaW9TdWJtaXNzaW9uKTogdm9pZCB7XG4gICAgdGhpcy5lcnJvcnMkLm5leHQoW10pO1xuICAgIHRoaXMuc3VibWl0LmVtaXQoc3VibWlzc2lvbik7XG4gIH1cblxuICBwdWJsaWMgZm9ybVJlYWR5KGZvcm06IEZvcm1Jb1NvdXJjZUNvbXBvbmVudCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmN1cnJlbnRGb3JtID0gZm9ybTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNoYW5nZShvYmplY3Q6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlLmVtaXQob2JqZWN0KTtcbiAgfVxuXG4gIHB1YmxpYyBuZXh0UGFnZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNjcm9sbFRvVG9wKCk7XG4gIH1cblxuICBwdWJsaWMgcHJldlBhZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5zY3JvbGxUb1RvcCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuUmVsb2FkRm9ybVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuZm9ybSQuc3Vic2NyaWJlKGZvcm0gPT4ge1xuICAgICAgICB0aGlzLnJlZnJlc2hGb3JtLmVtaXQoe1xuICAgICAgICAgIGZvcm0sXG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuUmVsb2FkU3VibWlzc2lvblN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuc3VibWlzc2lvbiQuc3Vic2NyaWJlKHN1Ym1pc3Npb24gPT4ge1xuICAgICAgICB0aGlzLnJlZnJlc2hGb3JtLmVtaXQoe1xuICAgICAgICAgIHN1Ym1pc3Npb24sXG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxUb1RvcCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsU2VydmljZS5zY3JvbGxUb1RvcCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRJbml0aWFsVG9rZW4oKTogdm9pZCB7XG4gICAgdGhpcy51c2VyUHJvdmlkZXJTZXJ2aWNlLmdldFRva2VuKCkudGhlbigodG9rZW46IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5zZXRUb2tlbih0b2tlbik7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldFRva2VuKHRva2VuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBGb3JtaW8uc2V0VXNlcihqd3RfZGVjb2RlKHRva2VuKSk7XG4gICAgRm9ybWlvLnNldFRva2VuKHRva2VuKTtcbiAgICB0aGlzLnNldFRpbWVyRm9yVG9rZW5SZWZyZXNoKHRva2VuKTtcbiAgICB0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2Uuc2V0VG9rZW5JbkxvY2FsU3RvcmFnZSh0b2tlbik7XG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTmV3IHRva2VuIHNldCBmb3IgZm9ybS5pby4nKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VGltZXJGb3JUb2tlblJlZnJlc2godG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHRva2VuRXhwID0gKGp3dF9kZWNvZGUodG9rZW4pIGFzIGFueSkuZXhwICogMTAwMDtcbiAgICBjb25zdCBleHBpcnlUaW1lID0gdG9rZW5FeHAgLSBEYXRlLm5vdygpIC0gMTAwMDtcblxuICAgIHRoaXMuX3Rva2VuVGltZXJTdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGltZXIoZXhwaXJ5VGltZSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMudXNlclByb3ZpZGVyU2VydmljZS51cGRhdGVUb2tlbigtMSkpLFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnVzZXJQcm92aWRlclNlcnZpY2UuZ2V0VG9rZW4oKSksXG4gICAgICAgICAgdGFrZSgxKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlZnJlc2hlZFRva2VuOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB0aGlzLnNldFRva2VuKHJlZnJlc2hlZFRva2VuKTtcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFRpbWVyIGZvciBmb3JtLmlvIHRva2VuIHJlZnJlc2ggc2V0IGZvcjogJHtleHBpcnlUaW1lfW1zLmApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVGb3JtUmVmcmVzaCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtUmVmcmVzaCQpIHtcbiAgICAgIHRoaXMuX2Zvcm1SZWZyZXNoU3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtUmVmcmVzaCQuc3Vic2NyaWJlKHJlZnJlc2hWYWx1ZSA9PiB7XG4gICAgICAgIGlmIChyZWZyZXNoVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnJlZnJlc2hGb3JtLmVtaXQocmVmcmVzaFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZUZvcm1SZWZyZXNoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9mb3JtUmVmcmVzaFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fZm9ybVJlZnJlc2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9wZW5Sb3V0ZVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgICBjb25zdCBkb2N1bWVudERlZmluaXRpb25OYW1lID0gcGFyYW1zLmRvY3VtZW50RGVmaW5pdGlvbk5hbWU7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50SWQgPSBwYXJhbXMuZG9jdW1lbnRJZDtcblxuICAgICAgICBpZiAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSkge1xuICAgICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNldERvY3VtZW50RGVmaW5pdGlvbk5hbWUoZG9jdW1lbnREZWZpbml0aW9uTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZG9jdW1lbnRJZCkge1xuICAgICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNldERvY3VtZW50SWQoZG9jdW1lbnRJZCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjMgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48ZGl2XG4gICpuZ0lmPVwie1xuICAgIGN1cnJlbnRMYW5ndWFnZTogY3VycmVudExhbmd1YWdlJCB8IGFzeW5jLFxuICAgIGZvcm1pb09wdGlvbnM6IGZvcm1pb09wdGlvbnMkIHwgYXN5bmMsXG4gICAgc3VibWlzc2lvbjogc3VibWlzc2lvbiQgfCBhc3luYyxcbiAgICByZWFkT25seTogcmVhZE9ubHkkIHwgYXN5bmMsXG4gICAgZm9ybTogZm9ybSQgfCBhc3luYyxcbiAgICBlcnJvcnM6IGVycm9ycyQgfCBhc3luYyxcbiAgICB0b2tlblNldEluTG9jYWxTdG9yYWdlOiB0b2tlblNldEluTG9jYWxTdG9yYWdlJCB8IGFzeW5jXG4gIH0gYXMgb2JzXCJcbj5cbiAgPGRpdiAqbmdJZj1cIm9icy5lcnJvcnMubGVuZ3RoID4gMFwiIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIHB0LTUgcGItNSBtYi0yXCI+XG4gICAgPG9sPlxuICAgICAgPGxpICpuZ0Zvcj1cImxldCBlcnJvciBvZiBvYnMuZXJyb3JzXCI+XG4gICAgICAgIHt7IGVycm9yIH19XG4gICAgICA8L2xpPlxuICAgIDwvb2w+XG4gIDwvZGl2PlxuICA8Zm9ybWlvXG4gICAgKm5nSWY9XCJvYnMuZm9ybWlvT3B0aW9ucyAmJiBvYnMuZm9ybSAmJiBvYnMudG9rZW5TZXRJbkxvY2FsU3RvcmFnZVwiXG4gICAgW3N1Ym1pc3Npb25dPVwib2JzLnN1Ym1pc3Npb25cIlxuICAgIFtmb3JtXT1cIm9icy5mb3JtXCJcbiAgICBbcmVmcmVzaF09XCJyZWZyZXNoRm9ybVwiXG4gICAgW29wdGlvbnNdPVwib2JzLmZvcm1pb09wdGlvbnNcIlxuICAgIFtyZWFkT25seV09XCJvYnMucmVhZE9ubHlcIlxuICAgIChzdWJtaXQpPVwib25TdWJtaXQoJGV2ZW50KVwiXG4gICAgKHJlYWR5KT1cImZvcm1SZWFkeSgkZXZlbnQpXCJcbiAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIlxuICAgIChuZXh0UGFnZSk9XCJuZXh0UGFnZSgpXCJcbiAgICAocHJldlBhZ2UpPVwicHJldlBhZ2UoKVwiXG4gID48L2Zvcm1pbz5cbjwvZGl2PlxuIl19
@@ -0,0 +1,68 @@
1
+ /*
2
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
3
+ *
4
+ * Licensed under EUPL, Version 1.2 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" basis,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { Injectable } from '@angular/core';
17
+ import { BehaviorSubject } from 'rxjs';
18
+ import * as i0 from "@angular/core";
19
+ export class FormIoLocalStorageService {
20
+ constructor() {
21
+ this._FORMIO_TOKEN_LOCAL_STORAGE_KEY = 'formioToken';
22
+ this._tokenSetInLocalStorage$ = new BehaviorSubject(false);
23
+ }
24
+ get tokenSetInLocalStorage$() {
25
+ return this._tokenSetInLocalStorage$.asObservable();
26
+ }
27
+ setTokenInLocalStorage(token) {
28
+ setTimeout(() => {
29
+ localStorage.setItem(this._FORMIO_TOKEN_LOCAL_STORAGE_KEY, token);
30
+ this.checkIfTokenExistsInLocalStorage();
31
+ });
32
+ }
33
+ clearTokenFromLocalStorage() {
34
+ localStorage.removeItem(this._FORMIO_TOKEN_LOCAL_STORAGE_KEY);
35
+ this.checkIfTokenIsRemovedFromLocalStorage();
36
+ }
37
+ getTokenFromLocalStorage() {
38
+ return localStorage.getItem(this._FORMIO_TOKEN_LOCAL_STORAGE_KEY);
39
+ }
40
+ checkIfTokenExistsInLocalStorage() {
41
+ const maxChecks = 100;
42
+ let checks = 0;
43
+ if (this.getTokenFromLocalStorage()) {
44
+ this._tokenSetInLocalStorage$.next(true);
45
+ }
46
+ else if (checks <= maxChecks) {
47
+ checks++;
48
+ this.checkIfTokenExistsInLocalStorage();
49
+ }
50
+ }
51
+ checkIfTokenIsRemovedFromLocalStorage() {
52
+ const maxChecks = 100;
53
+ let checks = 0;
54
+ if (this.getTokenFromLocalStorage() && checks <= maxChecks) {
55
+ checks++;
56
+ this.checkIfTokenIsRemovedFromLocalStorage();
57
+ }
58
+ else {
59
+ this._tokenSetInLocalStorage$.next(false);
60
+ }
61
+ }
62
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormIoLocalStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
63
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormIoLocalStorageService }); }
64
+ }
65
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormIoLocalStorageService, decorators: [{
66
+ type: Injectable
67
+ }] });
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1pby1sb2NhbC1zdG9yYWdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0taW8vc2VydmljZXMvZm9ybS1pby1sb2NhbC1zdG9yYWdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxlQUFlLEVBQWEsTUFBTSxNQUFNLENBQUM7O0FBR2pELE1BQU0sT0FBTyx5QkFBeUI7SUFEdEM7UUFFbUIsb0NBQStCLEdBQUcsYUFBYSxDQUFDO1FBQ2hELDZCQUF3QixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0tBNkNqRjtJQTNDQyxJQUFXLHVCQUF1QjtRQUNoQyxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0lBRU0sc0JBQXNCLENBQUMsS0FBYTtRQUN6QyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsK0JBQStCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sMEJBQTBCO1FBQy9CLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLHFDQUFxQyxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVPLHdCQUF3QjtRQUM5QixPQUFPLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVPLGdDQUFnQztRQUN0QyxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUM7UUFDdEIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWYsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzFDO2FBQU0sSUFBSSxNQUFNLElBQUksU0FBUyxFQUFFO1lBQzlCLE1BQU0sRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBRU8scUNBQXFDO1FBQzNDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQztRQUN0QixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFZixJQUFJLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLE1BQU0sSUFBSSxTQUFTLEVBQUU7WUFDMUQsTUFBTSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMscUNBQXFDLEVBQUUsQ0FBQztTQUM5QzthQUFNO1lBQ0wsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMzQztJQUNILENBQUM7K0dBOUNVLHlCQUF5QjttSEFBekIseUJBQXlCOzs0RkFBekIseUJBQXlCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEZvcm1Jb0xvY2FsU3RvcmFnZVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF9GT1JNSU9fVE9LRU5fTE9DQUxfU1RPUkFHRV9LRVkgPSAnZm9ybWlvVG9rZW4nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b2tlblNldEluTG9jYWxTdG9yYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyBnZXQgdG9rZW5TZXRJbkxvY2FsU3RvcmFnZSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuU2V0SW5Mb2NhbFN0b3JhZ2UkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIHNldFRva2VuSW5Mb2NhbFN0b3JhZ2UodG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5fRk9STUlPX1RPS0VOX0xPQ0FMX1NUT1JBR0VfS0VZLCB0b2tlbik7XG4gICAgICB0aGlzLmNoZWNrSWZUb2tlbkV4aXN0c0luTG9jYWxTdG9yYWdlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJUb2tlbkZyb21Mb2NhbFN0b3JhZ2UoKTogdm9pZCB7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5fRk9STUlPX1RPS0VOX0xPQ0FMX1NUT1JBR0VfS0VZKTtcbiAgICB0aGlzLmNoZWNrSWZUb2tlbklzUmVtb3ZlZEZyb21Mb2NhbFN0b3JhZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VG9rZW5Gcm9tTG9jYWxTdG9yYWdlKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLl9GT1JNSU9fVE9LRU5fTE9DQUxfU1RPUkFHRV9LRVkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0lmVG9rZW5FeGlzdHNJbkxvY2FsU3RvcmFnZSgpOiB2b2lkIHtcbiAgICBjb25zdCBtYXhDaGVja3MgPSAxMDA7XG4gICAgbGV0IGNoZWNrcyA9IDA7XG5cbiAgICBpZiAodGhpcy5nZXRUb2tlbkZyb21Mb2NhbFN0b3JhZ2UoKSkge1xuICAgICAgdGhpcy5fdG9rZW5TZXRJbkxvY2FsU3RvcmFnZSQubmV4dCh0cnVlKTtcbiAgICB9IGVsc2UgaWYgKGNoZWNrcyA8PSBtYXhDaGVja3MpIHtcbiAgICAgIGNoZWNrcysrO1xuICAgICAgdGhpcy5jaGVja0lmVG9rZW5FeGlzdHNJbkxvY2FsU3RvcmFnZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tJZlRva2VuSXNSZW1vdmVkRnJvbUxvY2FsU3RvcmFnZSgpOiB2b2lkIHtcbiAgICBjb25zdCBtYXhDaGVja3MgPSAxMDA7XG4gICAgbGV0IGNoZWNrcyA9IDA7XG5cbiAgICBpZiAodGhpcy5nZXRUb2tlbkZyb21Mb2NhbFN0b3JhZ2UoKSAmJiBjaGVja3MgPD0gbWF4Q2hlY2tzKSB7XG4gICAgICBjaGVja3MrKztcbiAgICAgIHRoaXMuY2hlY2tJZlRva2VuSXNSZW1vdmVkRnJvbUxvY2FsU3RvcmFnZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl90b2tlblNldEluTG9jYWxTdG9yYWdlJC5uZXh0KGZhbHNlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -37,7 +37,7 @@ import BpmnJS from 'bpmn-js/dist/bpmn-navigated-viewer.production.min.js';
37
37
  import heatmap from 'heatmap.js-fixed/build/heatmap.js';
38
38
  import * as i1$6 from '@valtimo/resource';
39
39
  import { S3Resource, ResourceModule } from '@valtimo/resource';
40
- import * as i8$2 from '@formio/angular';
40
+ import * as i9 from '@formio/angular';
41
41
  import { Formio, Components, FormioModule, FormioAppConfig, createCustomFormioComponent, registerCustomFormioComponentWithClass, registerCustomFormioComponent } from '@formio/angular';
42
42
  import jwt_decode from 'jwt-decode';
43
43
  import Dropzone from 'dropzone';
@@ -5829,6 +5829,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
5829
5829
  }]
5830
5830
  }] });
5831
5831
 
5832
+ /*
5833
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
5834
+ *
5835
+ * Licensed under EUPL, Version 1.2 (the "License");
5836
+ * you may not use this file except in compliance with the License.
5837
+ * You may obtain a copy of the License at
5838
+ *
5839
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
5840
+ *
5841
+ * Unless required by applicable law or agreed to in writing, software
5842
+ * distributed under the License is distributed on an "AS IS" basis,
5843
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5844
+ * See the License for the specific language governing permissions and
5845
+ * limitations under the License.
5846
+ */
5847
+ class FormIoLocalStorageService {
5848
+ constructor() {
5849
+ this._FORMIO_TOKEN_LOCAL_STORAGE_KEY = 'formioToken';
5850
+ this._tokenSetInLocalStorage$ = new BehaviorSubject(false);
5851
+ }
5852
+ get tokenSetInLocalStorage$() {
5853
+ return this._tokenSetInLocalStorage$.asObservable();
5854
+ }
5855
+ setTokenInLocalStorage(token) {
5856
+ setTimeout(() => {
5857
+ localStorage.setItem(this._FORMIO_TOKEN_LOCAL_STORAGE_KEY, token);
5858
+ this.checkIfTokenExistsInLocalStorage();
5859
+ });
5860
+ }
5861
+ clearTokenFromLocalStorage() {
5862
+ localStorage.removeItem(this._FORMIO_TOKEN_LOCAL_STORAGE_KEY);
5863
+ this.checkIfTokenIsRemovedFromLocalStorage();
5864
+ }
5865
+ getTokenFromLocalStorage() {
5866
+ return localStorage.getItem(this._FORMIO_TOKEN_LOCAL_STORAGE_KEY);
5867
+ }
5868
+ checkIfTokenExistsInLocalStorage() {
5869
+ const maxChecks = 100;
5870
+ let checks = 0;
5871
+ if (this.getTokenFromLocalStorage()) {
5872
+ this._tokenSetInLocalStorage$.next(true);
5873
+ }
5874
+ else if (checks <= maxChecks) {
5875
+ checks++;
5876
+ this.checkIfTokenExistsInLocalStorage();
5877
+ }
5878
+ }
5879
+ checkIfTokenIsRemovedFromLocalStorage() {
5880
+ const maxChecks = 100;
5881
+ let checks = 0;
5882
+ if (this.getTokenFromLocalStorage() && checks <= maxChecks) {
5883
+ checks++;
5884
+ this.checkIfTokenIsRemovedFromLocalStorage();
5885
+ }
5886
+ else {
5887
+ this._tokenSetInLocalStorage$.next(false);
5888
+ }
5889
+ }
5890
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormIoLocalStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5891
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormIoLocalStorageService }); }
5892
+ }
5893
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormIoLocalStorageService, decorators: [{
5894
+ type: Injectable
5895
+ }] });
5896
+
5832
5897
  /*
5833
5898
  * Copyright 2015-2023 Ritense BV, the Netherlands.
5834
5899
  *
@@ -5924,15 +5989,16 @@ class FormioComponent {
5924
5989
  this.readOnly$.next(readOnlyValue);
5925
5990
  }
5926
5991
  handleBeforeUnload() {
5927
- this.clearTokenFromLocalStorage();
5992
+ this.localStorageService.clearTokenFromLocalStorage();
5928
5993
  }
5929
- constructor(userProviderService, logger, stateService, route, translateService, modalService) {
5994
+ constructor(userProviderService, logger, stateService, route, translateService, modalService, localStorageService) {
5930
5995
  this.userProviderService = userProviderService;
5931
5996
  this.logger = logger;
5932
5997
  this.stateService = stateService;
5933
5998
  this.route = route;
5934
5999
  this.translateService = translateService;
5935
6000
  this.modalService = modalService;
6001
+ this.localStorageService = localStorageService;
5936
6002
  // eslint-disable-next-line @angular-eslint/no-output-native
5937
6003
  this.submit = new EventEmitter();
5938
6004
  // eslint-disable-next-line @angular-eslint/no-output-native
@@ -5943,7 +6009,6 @@ class FormioComponent {
5943
6009
  this.options$ = new BehaviorSubject(undefined);
5944
6010
  this.readOnly$ = new BehaviorSubject(false);
5945
6011
  this.errors$ = new BehaviorSubject([]);
5946
- this.tokenSetInLocalStorage$ = new BehaviorSubject(false);
5947
6012
  this.currentLanguage$ = this.translateService.stream('key').pipe(map$1(() => this.translateService.currentLang), distinctUntilChanged());
5948
6013
  this.formioOptions$ = combineLatest([
5949
6014
  this.currentLanguage$,
@@ -5963,9 +6028,9 @@ class FormioComponent {
5963
6028
  language,
5964
6029
  };
5965
6030
  }));
6031
+ this.tokenSetInLocalStorage$ = this.localStorageService.tokenSetInLocalStorage$;
5966
6032
  this._subscriptions = new Subscription();
5967
6033
  this._tokenTimerSubscription = new Subscription();
5968
- this._FORMIO_TOKEN_LOCAL_STORAGE_KEY = 'formioToken';
5969
6034
  }
5970
6035
  ngOnInit() {
5971
6036
  Formio.setProjectUrl(location.origin);
@@ -5987,7 +6052,7 @@ class FormioComponent {
5987
6052
  this.unsubscribeFormRefresh();
5988
6053
  this._tokenRefreshTimerSubscription?.unsubscribe();
5989
6054
  this._subscriptions.unsubscribe();
5990
- this.clearTokenFromLocalStorage();
6055
+ this.localStorageService.clearTokenFromLocalStorage();
5991
6056
  }
5992
6057
  showErrors(errors) {
5993
6058
  this.errors$.next(errors);
@@ -6033,9 +6098,8 @@ class FormioComponent {
6033
6098
  setToken(token) {
6034
6099
  Formio.setUser(jwt_decode(token));
6035
6100
  Formio.setToken(token);
6036
- localStorage.setItem(this._FORMIO_TOKEN_LOCAL_STORAGE_KEY, token);
6037
6101
  this.setTimerForTokenRefresh(token);
6038
- this.tokenSetInLocalStorage$.next(true);
6102
+ this.localStorageService.setTokenInLocalStorage(token);
6039
6103
  this.logger.debug('New token set for form.io.');
6040
6104
  }
6041
6105
  setTimerForTokenRefresh(token) {
@@ -6074,16 +6138,13 @@ class FormioComponent {
6074
6138
  }
6075
6139
  }));
6076
6140
  }
6077
- clearTokenFromLocalStorage() {
6078
- localStorage.removeItem(this._FORMIO_TOKEN_LOCAL_STORAGE_KEY);
6079
- }
6080
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormioComponent, deps: [{ token: i8.UserProviderService }, { token: i2$4.NGXLogger }, { token: FormIoStateService }, { token: i1$5.ActivatedRoute }, { token: i1.TranslateService }, { token: ValtimoModalService }], target: i0.ɵɵFactoryTarget.Component }); }
6081
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormioComponent, selector: "valtimo-form-io", inputs: { options: "options", submission: "submission", form: "form", readOnly: "readOnly", formRefresh$: "formRefresh$" }, outputs: { submit: "submit", change: "change" }, host: { listeners: { "window:beforeunload": "handleBeforeUnload($event)" } }, 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 tokenSetInLocalStorage: tokenSetInLocalStorage$ | 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 && obs.tokenSetInLocalStorage\"\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$2.FormioComponent, selector: "formio" }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }] }); }
6141
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormioComponent, deps: [{ token: i8.UserProviderService }, { token: i2$4.NGXLogger }, { token: FormIoStateService }, { token: i1$5.ActivatedRoute }, { token: i1.TranslateService }, { token: ValtimoModalService }, { token: FormIoLocalStorageService }], target: i0.ɵɵFactoryTarget.Component }); }
6142
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormioComponent, selector: "valtimo-form-io", inputs: { options: "options", submission: "submission", form: "form", readOnly: "readOnly", formRefresh$: "formRefresh$" }, outputs: { submit: "submit", change: "change" }, host: { listeners: { "window:beforeunload": "handleBeforeUnload($event)" } }, providers: [FormIoLocalStorageService], 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 tokenSetInLocalStorage: tokenSetInLocalStorage$ | 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 && obs.tokenSetInLocalStorage\"\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: i9.FormioComponent, selector: "formio" }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }] }); }
6082
6143
  }
6083
6144
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormioComponent, decorators: [{
6084
6145
  type: Component,
6085
- 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 tokenSetInLocalStorage: tokenSetInLocalStorage$ | 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 && obs.tokenSetInLocalStorage\"\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" }]
6086
- }], ctorParameters: function () { return [{ type: i8.UserProviderService }, { type: i2$4.NGXLogger }, { type: FormIoStateService }, { type: i1$5.ActivatedRoute }, { type: i1.TranslateService }, { type: ValtimoModalService }]; }, propDecorators: { options: [{
6146
+ args: [{ selector: 'valtimo-form-io', providers: [FormIoLocalStorageService], 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 tokenSetInLocalStorage: tokenSetInLocalStorage$ | 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 && obs.tokenSetInLocalStorage\"\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" }]
6147
+ }], ctorParameters: function () { return [{ type: i8.UserProviderService }, { type: i2$4.NGXLogger }, { type: FormIoStateService }, { type: i1$5.ActivatedRoute }, { type: i1.TranslateService }, { type: ValtimoModalService }, { type: FormIoLocalStorageService }]; }, propDecorators: { options: [{
6087
6148
  type: Input
6088
6149
  }], submission: [{
6089
6150
  type: Input
@@ -6155,7 +6216,7 @@ class FormioBuilderComponent {
6155
6216
  this.change.emit(event);
6156
6217
  }
6157
6218
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormioBuilderComponent, deps: [{ token: i1.TranslateService }, { token: FormIoStateService }], target: i0.ɵɵFactoryTarget.Component }); }
6158
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormioBuilderComponent, selector: "valtimo-form-io-builder", inputs: { form: "form" }, outputs: { change: "change" }, 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 <form-builder\n [form]=\"form\"\n [rebuild]=\"triggerRebuild\"\n [options]=\"formioOptions$ | async\"\n (change)=\"onChange($event)\"\n ></form-builder>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: i8$2.FormBuilderComponent, selector: "form-builder", inputs: ["form", "options", "formbuilder", "noeval", "refresh", "rebuild"], outputs: ["change"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }] }); }
6219
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormioBuilderComponent, selector: "valtimo-form-io-builder", inputs: { form: "form" }, outputs: { change: "change" }, 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 <form-builder\n [form]=\"form\"\n [rebuild]=\"triggerRebuild\"\n [options]=\"formioOptions$ | async\"\n (change)=\"onChange($event)\"\n ></form-builder>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: i9.FormBuilderComponent, selector: "form-builder", inputs: ["form", "options", "formbuilder", "noeval", "refresh", "rebuild"], outputs: ["change"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }] }); }
6159
6220
  }
6160
6221
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormioBuilderComponent, decorators: [{
6161
6222
  type: Component,