@valtimo/form-flow-management 12.14.1 → 13.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/fesm2022/valtimo-form-flow-management.mjs +226 -269
  2. package/fesm2022/valtimo-form-flow-management.mjs.map +1 -1
  3. package/lib/components/delete-form-flow-modal/delete-form-flow-modal.component.d.ts.map +1 -1
  4. package/lib/components/editor/form-flow-editor.component.d.ts +22 -24
  5. package/lib/components/editor/form-flow-editor.component.d.ts.map +1 -1
  6. package/lib/components/new-form-flow-modal/new-form-flow-modal.component.d.ts.map +1 -1
  7. package/lib/components/overview/form-flow-overview.component.d.ts +24 -11
  8. package/lib/components/overview/form-flow-overview.component.d.ts.map +1 -1
  9. package/lib/form-flow-management.module.d.ts +5 -6
  10. package/lib/form-flow-management.module.d.ts.map +1 -1
  11. package/lib/models/form-flow.model.d.ts +6 -2
  12. package/lib/models/form-flow.model.d.ts.map +1 -1
  13. package/lib/services/form-flow-download.service.d.ts +4 -5
  14. package/lib/services/form-flow-download.service.d.ts.map +1 -1
  15. package/lib/services/form-flow.service.d.ts +12 -17
  16. package/lib/services/form-flow.service.d.ts.map +1 -1
  17. package/package.json +4 -6
  18. package/public-api.d.ts +2 -0
  19. package/public-api.d.ts.map +1 -1
  20. package/esm2022/lib/components/delete-form-flow-modal/delete-form-flow-modal.component.mjs +0 -39
  21. package/esm2022/lib/components/editor/form-flow-editor.component.mjs +0 -161
  22. package/esm2022/lib/components/editor/formflow.schema.json +0 -79
  23. package/esm2022/lib/components/new-form-flow-modal/new-form-flow-modal.component.mjs +0 -67
  24. package/esm2022/lib/components/overview/form-flow-overview.component.mjs +0 -80
  25. package/esm2022/lib/form-flow-management-routing.module.mjs +0 -55
  26. package/esm2022/lib/form-flow-management.module.mjs +0 -101
  27. package/esm2022/lib/models/form-flow.model.mjs +0 -17
  28. package/esm2022/lib/models/index.mjs +0 -17
  29. package/esm2022/lib/services/form-flow-download.service.mjs +0 -40
  30. package/esm2022/lib/services/form-flow.service.mjs +0 -66
  31. package/esm2022/lib/services/index.mjs +0 -17
  32. package/esm2022/public-api.mjs +0 -22
  33. package/esm2022/valtimo-form-flow-management.mjs +0 -5
  34. package/lib/form-flow-management-routing.module.d.ts +0 -9
  35. package/lib/form-flow-management-routing.module.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"form-flow.service.d.ts","sourceRoot":"","sources":["../../../../../projects/valtimo/form-flow-management/src/lib/services/form-flow.service.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAC,aAAa,EAAO,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAC,eAAe,EAAc,UAAU,EAA2B,MAAM,MAAM,CAAC;AACvF,OAAO,EAEL,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,WAAW,CAAC;;AAEnB,qBACa,eAAe;IAaxB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAbvB,SAAgB,UAAU,4CAAqD;IAC/E,SAAgB,QAAQ,2BAAuC;IAE/D,OAAO,CAAC,kBAAkB,CAAS;IAEnC,OAAO,KAAK,oBAAoB,GAI/B;gBAGkB,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,UAAU;IAK5B,WAAW,CAAC,UAAU,EAAE,kBAAkB,GAAG,UAAU,CAAC,kBAAkB,CAAC;IAO3E,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC;IAIvD,cAAc,CAAC,YAAY,EAAE,UAAU,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,IAAI;IAqBzE,aAAa,IAAI,IAAI;IAmBrB,qBAAqB,CAAC,EAAE,EAAE,oBAAoB,GAAG,UAAU,CAAC,kBAAkB,CAAC;IAM/E,wBAAwB,CAC7B,GAAG,EAAE,MAAM,EACX,iBAAiB,EAAE,kBAAkB,GACpC,UAAU,CAAC,kBAAkB,CAAC;yCA/EtB,eAAe;6CAAf,eAAe;CAqF3B"}
1
+ {"version":3,"file":"form-flow.service.d.ts","sourceRoot":"","sources":["../../../../../projects/valtimo/form-flow-management/src/lib/services/form-flow.service.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAC,aAAa,EAAE,IAAI,EAAE,cAAc,EAAC,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAA8B,UAAU,EAA2B,MAAM,MAAM,CAAC;AACvF,OAAO,EAAC,kBAAkB,EAAwB,sBAAsB,EAAC,MAAM,WAAW,CAAC;;AAE3F,qBAGa,eAAgB,SAAQ,cAAc;IAE/C,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU;IACzC,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa;gBAD5B,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa;IAK1C,sBAAsB,CAC3B,iBAAiB,EAAE,MAAM,EACzB,cAAc,EAAE,MAAM,GACrB,UAAU,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAQpC,0BAA0B,CAC/B,iBAAiB,EAAE,MAAM,EACzB,cAAc,EAAE,MAAM,EACtB,qBAAqB,EAAE,MAAM,GAC5B,UAAU,CAAC,kBAAkB,CAAC;IAQ1B,wBAAwB,CAC7B,iBAAiB,EAAE,MAAM,EACzB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,kBAAkB,GAC7B,UAAU,CAAC,kBAAkB,CAAC;IAS1B,wBAAwB,CAC7B,iBAAiB,EAAE,MAAM,EACzB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,GACpB,UAAU,CAAC,IAAI,CAAC;IAQZ,wBAAwB,CAC7B,iBAAiB,EAAE,MAAM,EACzB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,EACrB,iBAAiB,EAAE,kBAAkB,GACpC,UAAU,CAAC,kBAAkB,CAAC;yCA7DtB,eAAe;6CAAf,eAAe;CAqE3B"}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@valtimo/form-flow-management",
3
- "version": "12.14.1",
3
+ "version": "13.0.0",
4
4
  "peerDependencies": {
5
- "@angular/common": "^17.2.2",
6
- "@angular/core": "^17.2.2"
5
+ "@angular/common": "^19.2.8",
6
+ "@angular/core": "^19.2.8"
7
7
  },
8
8
  "dependencies": {
9
- "tslib": "2.6.3"
9
+ "tslib": "2.8.1"
10
10
  },
11
11
  "module": "fesm2022/valtimo-form-flow-management.mjs",
12
12
  "typings": "index.d.ts",
@@ -16,8 +16,6 @@
16
16
  },
17
17
  ".": {
18
18
  "types": "./index.d.ts",
19
- "esm2022": "./esm2022/valtimo-form-flow-management.mjs",
20
- "esm": "./esm2022/valtimo-form-flow-management.mjs",
21
19
  "default": "./fesm2022/valtimo-form-flow-management.mjs"
22
20
  }
23
21
  },
package/public-api.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  export * from './lib/models';
2
2
  export * from './lib/services';
3
+ export * from './lib/components/overview/form-flow-overview.component';
4
+ export * from './lib/components/editor/form-flow-editor.component';
3
5
  export * from './lib/form-flow-management.module';
4
6
  //# sourceMappingURL=public-api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../../../projects/valtimo/form-flow-management/src/public-api.ts"],"names":[],"mappings":"AAoBA,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mCAAmC,CAAC"}
1
+ {"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../../../projects/valtimo/form-flow-management/src/public-api.ts"],"names":[],"mappings":"AAoBA,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wDAAwD,CAAC;AACvE,cAAc,oDAAoD,CAAC;AACnE,cAAc,mCAAmC,CAAC"}
@@ -1,39 +0,0 @@
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 { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
17
- import * as i0 from "@angular/core";
18
- import * as i1 from "@valtimo/components";
19
- export class DeleteFormFlowModalComponent {
20
- constructor() {
21
- this.deleteEvent = new EventEmitter();
22
- }
23
- onDelete(formFlowDefinitionKey) {
24
- this.deleteEvent.emit(formFlowDefinitionKey);
25
- }
26
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DeleteFormFlowModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DeleteFormFlowModalComponent, selector: "valtimo-delete-form-flow-modal", inputs: { deleteFormFlowDefinitionKey: "deleteFormFlowDefinitionKey", showDeleteModal$: "showDeleteModal$" }, outputs: { deleteEvent: "deleteEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"formFlow.deleteModalContent\"\n [outputOnConfirm]=\"deleteFormFlowDefinitionKey\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDelete($event)\"\n></valtimo-confirmation-modal>\n", dependencies: [{ kind: "component", type: i1.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
28
- }
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DeleteFormFlowModalComponent, decorators: [{
30
- type: Component,
31
- args: [{ selector: 'valtimo-delete-form-flow-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"formFlow.deleteModalContent\"\n [outputOnConfirm]=\"deleteFormFlowDefinitionKey\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDelete($event)\"\n></valtimo-confirmation-modal>\n" }]
32
- }], propDecorators: { deleteFormFlowDefinitionKey: [{
33
- type: Input
34
- }], showDeleteModal$: [{
35
- type: Input
36
- }], deleteEvent: [{
37
- type: Output
38
- }] } });
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLWZvcm0tZmxvdy1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Zvcm0tZmxvdy1tYW5hZ2VtZW50L3NyYy9saWIvY29tcG9uZW50cy9kZWxldGUtZm9ybS1mbG93LW1vZGFsL2RlbGV0ZS1mb3JtLWZsb3ctbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9mb3JtLWZsb3ctbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvZGVsZXRlLWZvcm0tZmxvdy1tb2RhbC9kZWxldGUtZm9ybS1mbG93LW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQzs7O0FBUTlGLE1BQU0sT0FBTyw0QkFBNEI7SUFMekM7UUFRWSxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7S0FLcEQ7SUFIUSxRQUFRLENBQUMscUJBQTZCO1FBQzNDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDL0MsQ0FBQzsrR0FQVSw0QkFBNEI7bUdBQTVCLDRCQUE0Qiw2TkN4QnpDLG9oQ0F5QkE7OzRGRERhLDRCQUE0QjtrQkFMeEMsU0FBUzsrQkFDRSxnQ0FBZ0MsbUJBRXpCLHVCQUF1QixDQUFDLE1BQU07OEJBR3RDLDJCQUEyQjtzQkFBbkMsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZGVsZXRlLWZvcm0tZmxvdy1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kZWxldGUtZm9ybS1mbG93LW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIERlbGV0ZUZvcm1GbG93TW9kYWxDb21wb25lbnQge1xuICBASW5wdXQoKSBkZWxldGVGb3JtRmxvd0RlZmluaXRpb25LZXk6IHN0cmluZztcbiAgQElucHV0KCkgc2hvd0RlbGV0ZU1vZGFsJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgQE91dHB1dCgpIGRlbGV0ZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgcHVibGljIG9uRGVsZXRlKGZvcm1GbG93RGVmaW5pdGlvbktleTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5kZWxldGVFdmVudC5lbWl0KGZvcm1GbG93RGVmaW5pdGlvbktleSk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPHZhbHRpbW8tY29uZmlybWF0aW9uLW1vZGFsXG4gIGNvbmZpcm1CdXR0b25UZXh0VHJhbnNsYXRpb25LZXk9XCJpbnRlcmZhY2UuZGVsZXRlXCJcbiAgY29uZmlybUJ1dHRvblR5cGU9XCJkYW5nZXJcIlxuICBjb250ZW50VHJhbnNsYXRpb25LZXk9XCJmb3JtRmxvdy5kZWxldGVNb2RhbENvbnRlbnRcIlxuICBbb3V0cHV0T25Db25maXJtXT1cImRlbGV0ZUZvcm1GbG93RGVmaW5pdGlvbktleVwiXG4gIFtzaG93TW9kYWxTdWJqZWN0JF09XCJzaG93RGVsZXRlTW9kYWwkXCJcbiAgdGl0bGVUcmFuc2xhdGlvbktleT1cImludGVyZmFjZS5kZWxldGVcIlxuICAoY29uZmlybUV2ZW50KT1cIm9uRGVsZXRlKCRldmVudClcIlxuPjwvdmFsdGltby1jb25maXJtYXRpb24tbW9kYWw+XG4iXX0=
@@ -1,161 +0,0 @@
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 { ChangeDetectionStrategy, Component } from '@angular/core';
17
- import { BehaviorSubject, combineLatest, filter, finalize, map, of, startWith, switchMap, take, tap, } from 'rxjs';
18
- import { CARBON_CONSTANTS, } from '@valtimo/components';
19
- import { NotificationService } from 'carbon-components-angular';
20
- import formFlowSchemaJson from './formflow.schema.json';
21
- import * as i0 from "@angular/core";
22
- import * as i1 from "../../services/form-flow.service";
23
- import * as i2 from "@angular/router";
24
- import * as i3 from "@valtimo/components";
25
- import * as i4 from "carbon-components-angular";
26
- import * as i5 from "@ngx-translate/core";
27
- import * as i6 from "../../services/form-flow-download.service";
28
- import * as i7 from "@angular/common";
29
- import * as i8 from "../delete-form-flow-modal/delete-form-flow-modal.component";
30
- export class FormFlowEditorComponent {
31
- constructor(formFlowService, route, pageTitleService, router, notificationService, translateService, formFlowDownloadService, pageHeaderService) {
32
- this.formFlowService = formFlowService;
33
- this.route = route;
34
- this.pageTitleService = pageTitleService;
35
- this.router = router;
36
- this.notificationService = notificationService;
37
- this.translateService = translateService;
38
- this.formFlowDownloadService = formFlowDownloadService;
39
- this.pageHeaderService = pageHeaderService;
40
- this.model$ = new BehaviorSubject(null);
41
- this.readOnly$ = new BehaviorSubject(false);
42
- this.valid$ = new BehaviorSubject(false);
43
- this.loading$ = new BehaviorSubject(true);
44
- this.showDeleteModal$ = new BehaviorSubject(false);
45
- this.formFlowDefinitionVersions$ = new BehaviorSubject([1]);
46
- this.formFlowDefinitionId$ = new BehaviorSubject(null);
47
- this.CARBON_THEME = 'g10';
48
- this.formFlowSchemaJson = formFlowSchemaJson;
49
- this._updatedModelValue$ = new BehaviorSubject('');
50
- this.formFlowDefinitionVersionItems$ = combineLatest([this.formFlowDefinitionVersions$, this.formFlowDefinitionId$]).pipe(filter(([versions, formFlowDefinitionId]) => !!versions && !!formFlowDefinitionId), map(([versions, formFlowDefinitionId]) => versions.map(version => ({
51
- formFlowDefinitionId: {
52
- key: formFlowDefinitionId.key,
53
- version,
54
- },
55
- content: `${this.translateService.instant('formFlow.version')}: ${version}`,
56
- selected: version === formFlowDefinitionId.version,
57
- }))), map(formFlowDefinitionVersionItems => ({
58
- value: formFlowDefinitionVersionItems,
59
- isLoading: false,
60
- })), startWith({ isLoading: true }));
61
- this.formFlowDefinition$ = this.formFlowDefinitionId$.pipe(filter(id => !!id), switchMap(id => this.formFlowService.getFormFlowDefinition(id)));
62
- this.compactMode$ = this.pageHeaderService.compactMode$;
63
- }
64
- ngOnInit() {
65
- this.formFlowService.loadFormFlows();
66
- this.openFormFlowDefinitionSubscription();
67
- }
68
- ngOnDestroy() {
69
- this.pageTitleService.enableReset();
70
- this._idSubscription?.unsubscribe();
71
- this._definitionSubscription?.unsubscribe();
72
- }
73
- onValid(valid) {
74
- this.valid$.next(valid !== false);
75
- }
76
- onValueChange(value) {
77
- this._updatedModelValue$.next(value);
78
- }
79
- updateFormFlowDefinition() {
80
- this.loading$.next(true);
81
- combineLatest([this._updatedModelValue$, this.formFlowDefinitionId$])
82
- .pipe(take(1), map(([updatedModelValue, formFlowDefinitionId]) => ({
83
- ...JSON.parse(updatedModelValue),
84
- key: formFlowDefinitionId.key,
85
- version: this.formFlowDefinitionVersions$.value[0] + 1,
86
- })), switchMap(updatedFormFlowDefinition => this.formFlowService.updateFormFlowDefinition(updatedFormFlowDefinition.key, updatedFormFlowDefinition)))
87
- .subscribe({
88
- next: result => {
89
- const id = { key: result.key, version: result.version };
90
- this.showSuccessMessage(result.key);
91
- this.formFlowDefinitionId$.next(id);
92
- this.formFlowDefinitionVersions$.next([id.version].concat(this.formFlowDefinitionVersions$.value));
93
- },
94
- error: () => {
95
- this.loading$.next(false);
96
- },
97
- });
98
- }
99
- onDelete(formFlowDefinitionKey) {
100
- this.loading$.next(true);
101
- this.formFlowService.dispatchAction(this.formFlowService.deleteFormFlowDefinition(formFlowDefinitionKey).pipe(finalize(() => {
102
- this.router.navigate(['/form-flow-management']);
103
- })));
104
- }
105
- showDeleteModal() {
106
- this.showDeleteModal$.next(true);
107
- }
108
- downloadFormFlowDefinition(model) {
109
- this.formFlowDefinitionId$.subscribe(formFlowDefinitionId => this.formFlowDownloadService.downloadJson(JSON.parse(model.value), formFlowDefinitionId));
110
- }
111
- loadFormFlowDefinitionId(formFlowDefinitionId) {
112
- if (!!formFlowDefinitionId) {
113
- this.formFlowDefinitionId$.next(formFlowDefinitionId);
114
- }
115
- }
116
- openFormFlowDefinitionSubscription() {
117
- this.loading$.next(true);
118
- this._idSubscription = this.route.params
119
- .pipe(filter(params => params?.key), map(params => params.key), switchMap(key => combineLatest([
120
- of(key),
121
- this.formFlowService.formFlows$.pipe(map(formFlowDefinitions => formFlowDefinitions.find(definition => definition.key === key)?.versions), filter(versions => !!versions), take(1), tap(versions => this.formFlowDefinitionVersions$.next(versions))),
122
- ])), map(([key, versions]) => ({ key, version: versions[0] })))
123
- .subscribe(formFlowDefinitionId => {
124
- this.pageTitleService.setCustomPageTitle(formFlowDefinitionId.key);
125
- this.formFlowDefinitionId$.next(formFlowDefinitionId);
126
- });
127
- this._definitionSubscription = this.formFlowDefinition$.pipe().subscribe(formFlowDefinition => {
128
- this.readOnly$.next(formFlowDefinition.readOnly === true);
129
- this.setModel(formFlowDefinition);
130
- });
131
- }
132
- setModel(formFlowDefinition) {
133
- const clone = { ...formFlowDefinition };
134
- delete clone.version;
135
- delete clone.readOnly;
136
- this.model$.next({
137
- value: JSON.stringify(clone),
138
- language: 'json',
139
- uri: formFlowDefinition.key + '-' + formFlowDefinition.version + '.formflow.json',
140
- });
141
- this.loading$.next(false);
142
- }
143
- showSuccessMessage(key) {
144
- this.notificationService.showToast({
145
- caption: this.translateService.instant('formFlow.savedSuccessTitleMessage', {
146
- key,
147
- }),
148
- type: 'success',
149
- duration: CARBON_CONSTANTS.notificationDuration,
150
- showClose: true,
151
- title: this.translateService.instant('formFlow.savedSuccessTitle'),
152
- });
153
- }
154
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormFlowEditorComponent, deps: [{ token: i1.FormFlowService }, { token: i2.ActivatedRoute }, { token: i3.PageTitleService }, { token: i2.Router }, { token: i4.NotificationService }, { token: i5.TranslateService }, { token: i6.FormFlowDownloadService }, { token: i3.PageHeaderService }], target: i0.ɵɵFactoryTarget.Component }); }
155
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FormFlowEditorComponent, selector: "ng-component", providers: [NotificationService], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 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<ng-container *ngIf=\"model$ | async as model; else loading\">\n <valtimo-editor\n [disabled]=\"(loading$ | async) === false && readOnly$ | async\"\n [model]=\"model\"\n [jsonSchema]=\"formFlowSchemaJson\"\n (validEvent)=\"onValid($event)\"\n (valueChangeEvent)=\"onValueChange($event)\"\n [fitPage]=\"true\"\n ></valtimo-editor>\n</ng-container>\n\n<ng-container renderInPageHeader>\n <ng-template>\n <div\n class=\"buttons-container\"\n *ngIf=\"{\n model: model$ | async,\n valid: valid$ | async,\n readOnly: readOnly$ | async,\n versions: formFlowDefinitionVersionItems$ | async,\n compactMode: compactMode$ | async,\n } as obs\"\n >\n <cds-dropdown\n [disabled]=\"obs.versions.isLoading || obs.versions.value.length === 1\"\n [dropUp]=\"false\"\n [skeleton]=\"obs.versions.isLoading\"\n (selected)=\"loadFormFlowDefinitionId($event.item.formFlowDefinitionId)\"\n [size]=\"obs.compactMode ? 'sm' : 'md'\"\n >\n <cds-dropdown-list [items]=\"obs.versions.value || []\"></cds-dropdown-list>\n </cds-dropdown>\n\n <div class=\"buttons-container-right\">\n <cds-overflow-menu class=\"overflow-button\">\n <cds-overflow-menu-option\n [disabled]=\"!obs.valid && !obs.readOnly\"\n (selected)=\"downloadFormFlowDefinition(obs.model)\"\n >{{ 'interface.export' | translate }}\n </cds-overflow-menu-option>\n\n <cds-overflow-menu-option\n [disabled]=\"obs.readOnly\"\n type=\"danger\"\n (selected)=\"showDeleteModal()\"\n >{{ 'interface.delete' | translate }}\n </cds-overflow-menu-option>\n </cds-overflow-menu>\n\n <button\n [disabled]=\"!obs.valid || obs.readOnly\"\n cdsButton=\"primary\"\n [size]=\"obs.compactMode ? 'sm' : 'md'\"\n (click)=\"updateFormFlowDefinition()\"\n >\n {{ 'interface.save' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"save\" size=\"16\"></svg>\n </button>\n </div>\n </div>\n </ng-template>\n</ng-container>\n\n<ng-container *ngIf=\"{formFlowDefinitionId: formFlowDefinitionId$ | async} as obs\">\n <valtimo-delete-form-flow-modal\n [deleteFormFlowDefinitionKey]=\"obs.formFlowDefinitionId?.key\"\n [showDeleteModal$]=\"showDeleteModal$\"\n (deleteEvent)=\"onDelete($event)\"\n >\n </valtimo-delete-form-flow-modal>\n</ng-container>\n\n<ng-template #loading>\n <div class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n</ng-template>\n", styles: [".loading-container{display:flex;width:100%;justify-content:center}::ng-deep .page-actions{width:100%}.buttons-container{display:flex;width:100%;justify-content:space-between;align-items:center}.buttons-container button{height:min-content}.buttons-container-right{display:flex;align-items:center}.overflow-button{margin-right:16px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i4.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i3.EditorComponent, selector: "valtimo-editor", inputs: ["editorOptions", "model", "disabled", "formatOnLoad", "widthPx", "heightPx", "heightStyle", "jsonSchema", "fitPage", "fitPageExtraSpace"], outputs: ["validEvent", "valueChangeEvent"] }, { kind: "directive", type: i3.RenderInPageHeaderDirective, selector: "[renderInPageHeader]", inputs: ["fullWidth"] }, { kind: "component", type: i4.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "component", type: i4.OverflowMenu, selector: "cds-overflow-menu, ibm-overflow-menu", inputs: ["buttonLabel", "flip", "placement", "open", "customTrigger", "offset", "wrapperClass", "triggerClass"], outputs: ["openChange"] }, { kind: "component", type: i4.OverflowMenuOption, selector: "cds-overflow-menu-option, ibm-overflow-menu-option", inputs: ["divider", "type", "disabled", "href", "target", "innerClass"], outputs: ["selected"] }, { kind: "component", type: i4.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i4.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: i8.DeleteFormFlowModalComponent, selector: "valtimo-delete-form-flow-modal", inputs: ["deleteFormFlowDefinitionKey", "showDeleteModal$"], outputs: ["deleteEvent"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
156
- }
157
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormFlowEditorComponent, decorators: [{
158
- type: Component,
159
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, providers: [NotificationService], template: "<!--\n ~ Copyright 2015-2024 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<ng-container *ngIf=\"model$ | async as model; else loading\">\n <valtimo-editor\n [disabled]=\"(loading$ | async) === false && readOnly$ | async\"\n [model]=\"model\"\n [jsonSchema]=\"formFlowSchemaJson\"\n (validEvent)=\"onValid($event)\"\n (valueChangeEvent)=\"onValueChange($event)\"\n [fitPage]=\"true\"\n ></valtimo-editor>\n</ng-container>\n\n<ng-container renderInPageHeader>\n <ng-template>\n <div\n class=\"buttons-container\"\n *ngIf=\"{\n model: model$ | async,\n valid: valid$ | async,\n readOnly: readOnly$ | async,\n versions: formFlowDefinitionVersionItems$ | async,\n compactMode: compactMode$ | async,\n } as obs\"\n >\n <cds-dropdown\n [disabled]=\"obs.versions.isLoading || obs.versions.value.length === 1\"\n [dropUp]=\"false\"\n [skeleton]=\"obs.versions.isLoading\"\n (selected)=\"loadFormFlowDefinitionId($event.item.formFlowDefinitionId)\"\n [size]=\"obs.compactMode ? 'sm' : 'md'\"\n >\n <cds-dropdown-list [items]=\"obs.versions.value || []\"></cds-dropdown-list>\n </cds-dropdown>\n\n <div class=\"buttons-container-right\">\n <cds-overflow-menu class=\"overflow-button\">\n <cds-overflow-menu-option\n [disabled]=\"!obs.valid && !obs.readOnly\"\n (selected)=\"downloadFormFlowDefinition(obs.model)\"\n >{{ 'interface.export' | translate }}\n </cds-overflow-menu-option>\n\n <cds-overflow-menu-option\n [disabled]=\"obs.readOnly\"\n type=\"danger\"\n (selected)=\"showDeleteModal()\"\n >{{ 'interface.delete' | translate }}\n </cds-overflow-menu-option>\n </cds-overflow-menu>\n\n <button\n [disabled]=\"!obs.valid || obs.readOnly\"\n cdsButton=\"primary\"\n [size]=\"obs.compactMode ? 'sm' : 'md'\"\n (click)=\"updateFormFlowDefinition()\"\n >\n {{ 'interface.save' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"save\" size=\"16\"></svg>\n </button>\n </div>\n </div>\n </ng-template>\n</ng-container>\n\n<ng-container *ngIf=\"{formFlowDefinitionId: formFlowDefinitionId$ | async} as obs\">\n <valtimo-delete-form-flow-modal\n [deleteFormFlowDefinitionKey]=\"obs.formFlowDefinitionId?.key\"\n [showDeleteModal$]=\"showDeleteModal$\"\n (deleteEvent)=\"onDelete($event)\"\n >\n </valtimo-delete-form-flow-modal>\n</ng-container>\n\n<ng-template #loading>\n <div class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n</ng-template>\n", styles: [".loading-container{display:flex;width:100%;justify-content:center}::ng-deep .page-actions{width:100%}.buttons-container{display:flex;width:100%;justify-content:space-between;align-items:center}.buttons-container button{height:min-content}.buttons-container-right{display:flex;align-items:center}.overflow-button{margin-right:16px}\n/*!\n * Copyright 2015-2024 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"] }]
160
- }], ctorParameters: () => [{ type: i1.FormFlowService }, { type: i2.ActivatedRoute }, { type: i3.PageTitleService }, { type: i2.Router }, { type: i4.NotificationService }, { type: i5.TranslateService }, { type: i6.FormFlowDownloadService }, { type: i3.PageHeaderService }] });
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1mbG93LWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Zvcm0tZmxvdy1tYW5hZ2VtZW50L3NyYy9saWIvY29tcG9uZW50cy9lZGl0b3IvZm9ybS1mbG93LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Zvcm0tZmxvdy1tYW5hZ2VtZW50L3NyYy9saWIvY29tcG9uZW50cy9lZGl0b3IvZm9ybS1mbG93LWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBRXBGLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLE1BQU0sRUFDTixRQUFRLEVBQ1IsR0FBRyxFQUVILEVBQUUsRUFDRixTQUFTLEVBRVQsU0FBUyxFQUNULElBQUksRUFDSixHQUFHLEdBQ0osTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQ0wsZ0JBQWdCLEdBSWpCLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFJOUQsT0FBTyxrQkFBa0IsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7OztBQVF4RCxNQUFNLE9BQU8sdUJBQXVCO0lBOENsQyxZQUNtQixlQUFnQyxFQUNoQyxLQUFxQixFQUNyQixnQkFBa0MsRUFDbEMsTUFBYyxFQUNkLG1CQUF3QyxFQUN4QyxnQkFBa0MsRUFDbEMsdUJBQWdELEVBQ2hELGlCQUFvQztRQVBwQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNs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QUFTO1lBQ2YsUUFBUSxFQUFFLGdCQUFnQixDQUFDLG9CQUFvQjtZQUMvQyxTQUFTLEVBQUUsSUFBSTtZQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLDRCQUE0QixDQUFDO1NBQ25FLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBaE1VLHVCQUF1QjttR0FBdkIsdUJBQXVCLHVDQUZ2QixDQUFDLG1CQUFtQixDQUFDLDBCQ2xEbEMsZ3ZHQThGQTs7NEZEMUNhLHVCQUF1QjtrQkFObkMsU0FBUztzQ0FFUyx1QkFBdUIsQ0FBQyxNQUFNLGFBRXBDLENBQUMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybUZsb3dTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtLWZsb3cuc2VydmljZSc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGZpbHRlcixcbiAgZmluYWxpemUsXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHN0YXJ0V2l0aCxcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBDQVJCT05fQ09OU1RBTlRTLFxuICBFZGl0b3JNb2RlbCxcbiAgUGFnZUhlYWRlclNlcnZpY2UsXG4gIFBhZ2VUaXRsZVNlcnZpY2UsXG59IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtGb3JtRmxvd0RlZmluaXRpb24sIEZvcm1GbG93RGVmaW5pdGlvbklkLCBMb2FkZWRWYWx1ZX0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7Tm90aWZpY2F0aW9uU2VydmljZX0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtGb3JtRmxvd0Rvd25sb2FkU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS1mbG93LWRvd25sb2FkLnNlcnZpY2UnO1xuaW1wb3J0IHtMaXN0SXRlbX0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhci9kcm9wZG93bic7XG5pbXBvcnQgZm9ybUZsb3dTY2hlbWFKc29uIGZyb20gJy4vZm9ybWZsb3cuc2NoZW1hLmpzb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tZmxvdy1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1mbG93LWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtOb3RpZmljYXRpb25TZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUZsb3dFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHB1YmxpYyByZWFkb25seSBtb2RlbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVkaXRvck1vZGVsIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSByZWFkT25seSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IHZhbGlkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwdWJsaWMgcmVhZG9ubHkgc2hvd0RlbGV0ZU1vZGFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgZm9ybUZsb3dEZWZpbml0aW9uVmVyc2lvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxudW1iZXI+PihbMV0pO1xuICBwdWJsaWMgcmVhZG9ubHkgZm9ybUZsb3dEZWZpbml0aW9uSWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGb3JtRmxvd0RlZmluaXRpb25JZCB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIF9pZFN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBfZGVmaW5pdGlvblN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIHJlYWRvbmx5IENBUkJPTl9USEVNRSA9ICdnMTAnO1xuXG4gIHB1YmxpYyByZWFkb25seSBmb3JtRmxvd1NjaGVtYUpzb24gPSBmb3JtRmxvd1NjaGVtYUpzb247XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdXBkYXRlZE1vZGVsVmFsdWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZm9ybUZsb3dEZWZpbml0aW9uVmVyc2lvbkl0ZW1zJDogT2JzZXJ2YWJsZTxMb2FkZWRWYWx1ZTxBcnJheTxMaXN0SXRlbT4+PiA9XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5mb3JtRmxvd0RlZmluaXRpb25WZXJzaW9ucyQsIHRoaXMuZm9ybUZsb3dEZWZpbml0aW9uSWQkXSkucGlwZShcbiAgICAgIGZpbHRlcigoW3ZlcnNpb25zLCBmb3JtRmxvd0RlZmluaXRpb25JZF0pID0+ICEhdmVyc2lvbnMgJiYgISFmb3JtRmxvd0RlZmluaXRpb25JZCksXG4gICAgICBtYXAoKFt2ZXJzaW9ucywgZm9ybUZsb3dEZWZpbml0aW9uSWRdKSA9PlxuICAgICAgICB2ZXJzaW9ucy5tYXAoXG4gICAgICAgICAgdmVyc2lvbiA9PlxuICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgZm9ybUZsb3dEZWZpbml0aW9uSWQ6IHtcbiAgICAgICAgICAgICAgICBrZXk6IGZvcm1GbG93RGVmaW5pdGlvbklkLmtleSxcbiAgICAgICAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgICAgICB9IGFzIEZvcm1GbG93RGVmaW5pdGlvbklkLFxuICAgICAgICAgICAgICBjb250ZW50OiBgJHt0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnZm9ybUZsb3cudmVyc2lvbicpfTogJHt2ZXJzaW9ufWAsXG4gICAgICAgICAgICAgIHNlbGVjdGVkOiB2ZXJzaW9uID09PSBmb3JtRmxvd0RlZmluaXRpb25JZC52ZXJzaW9uLFxuICAgICAgICAgICAgfSkgYXMgTGlzdEl0ZW1cbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIG1hcChmb3JtRmxvd0RlZmluaXRpb25WZXJzaW9uSXRlbXMgPT4gKHtcbiAgICAgICAgdmFsdWU6IGZvcm1GbG93RGVmaW5pdGlvblZlcnNpb25JdGVtcyxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIH0pKSxcbiAgICAgIHN0YXJ0V2l0aCh7aXNMb2FkaW5nOiB0cnVlfSlcbiAgICApO1xuICBwdWJsaWMgcmVhZG9ubHkgZm9ybUZsb3dEZWZpbml0aW9uJDogT2JzZXJ2YWJsZTxGb3JtRmxvd0RlZmluaXRpb24+ID1cbiAgICB0aGlzLmZvcm1GbG93RGVmaW5pdGlvbklkJC5waXBlKFxuICAgICAgZmlsdGVyKGlkID0+ICEhaWQpLFxuICAgICAgc3dpdGNoTWFwKGlkID0+IHRoaXMuZm9ybUZsb3dTZXJ2aWNlLmdldEZvcm1GbG93RGVmaW5pdGlvbihpZCkpXG4gICAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgY29tcGFjdE1vZGUkID0gdGhpcy5wYWdlSGVhZGVyU2VydmljZS5jb21wYWN0TW9kZSQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtRmxvd1NlcnZpY2U6IEZvcm1GbG93U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhZ2VUaXRsZVNlcnZpY2U6IFBhZ2VUaXRsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybUZsb3dEb3dubG9hZFNlcnZpY2U6IEZvcm1GbG93RG93bmxvYWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFnZUhlYWRlclNlcnZpY2U6IFBhZ2VIZWFkZXJTZXJ2aWNlXG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtRmxvd1NlcnZpY2UubG9hZEZvcm1GbG93cygpO1xuICAgIHRoaXMub3BlbkZvcm1GbG93RGVmaW5pdGlvblN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucGFnZVRpdGxlU2VydmljZS5lbmFibGVSZXNldCgpO1xuICAgIHRoaXMuX2lkU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX2RlZmluaXRpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgb25WYWxpZCh2YWxpZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMudmFsaWQkLm5leHQodmFsaWQgIT09IGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyBvblZhbHVlQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl91cGRhdGVkTW9kZWxWYWx1ZSQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRm9ybUZsb3dEZWZpbml0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMubG9hZGluZyQubmV4dCh0cnVlKTtcblxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuX3VwZGF0ZWRNb2RlbFZhbHVlJCwgdGhpcy5mb3JtRmxvd0RlZmluaXRpb25JZCRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIG1hcCgoW3VwZGF0ZWRNb2RlbFZhbHVlLCBmb3JtRmxvd0RlZmluaXRpb25JZF0pID0+ICh7XG4gICAgICAgICAgLi4uKEpTT04ucGFyc2UodXBkYXRlZE1vZGVsVmFsdWUpIGFzIEZvcm1GbG93RGVmaW5pdGlvbiksXG4gICAgICAgICAga2V5OiBmb3JtRmxvd0RlZmluaXRpb25JZC5rZXksXG4gICAgICAgICAgdmVyc2lvbjogdGhpcy5mb3JtRmxvd0RlZmluaXRpb25WZXJzaW9ucyQudmFsdWVbMF0gKyAxLFxuICAgICAgICB9KSksXG4gICAgICAgIHN3aXRjaE1hcCh1cGRhdGVkRm9ybUZsb3dEZWZpbml0aW9uID0+XG4gICAgICAgICAgdGhpcy5mb3JtRmxvd1NlcnZpY2UudXBkYXRlRm9ybUZsb3dEZWZpbml0aW9uKFxuICAgICAgICAgICAgdXBkYXRlZEZvcm1GbG93RGVmaW5pdGlvbi5rZXksXG4gICAgICAgICAgICB1cGRhdGVkRm9ybUZsb3dEZWZpbml0aW9uXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogcmVzdWx0ID0+IHtcbiAgICAgICAgICBjb25zdCBpZCA9IHtrZXk6IHJlc3VsdC5rZXksIHZlcnNpb246IHJlc3VsdC52ZXJzaW9ufTtcbiAgICAgICAgICB0aGlzLnNob3dTdWNjZXNzTWVzc2FnZShyZXN1bHQua2V5KTtcbiAgICAgICAgICB0aGlzLmZvcm1GbG93RGVmaW5pdGlvbklkJC5uZXh0KGlkKTtcbiAgICAgICAgICB0aGlzLmZvcm1GbG93RGVmaW5pdGlvblZlcnNpb25zJC5uZXh0KFxuICAgICAgICAgICAgW2lkLnZlcnNpb25dLmNvbmNhdCh0aGlzLmZvcm1GbG93RGVmaW5pdGlvblZlcnNpb25zJC52YWx1ZSlcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbkRlbGV0ZShmb3JtRmxvd0RlZmluaXRpb25LZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubG9hZGluZyQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmZvcm1GbG93U2VydmljZS5kaXNwYXRjaEFjdGlvbihcbiAgICAgIHRoaXMuZm9ybUZsb3dTZXJ2aWNlLmRlbGV0ZUZvcm1GbG93RGVmaW5pdGlvbihmb3JtRmxvd0RlZmluaXRpb25LZXkpLnBpcGUoXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9mb3JtLWZsb3ctbWFuYWdlbWVudCddKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHNob3dEZWxldGVNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dEZWxldGVNb2RhbCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBkb3dubG9hZEZvcm1GbG93RGVmaW5pdGlvbihtb2RlbDogRWRpdG9yTW9kZWwpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1GbG93RGVmaW5pdGlvbklkJC5zdWJzY3JpYmUoZm9ybUZsb3dEZWZpbml0aW9uSWQgPT5cbiAgICAgIHRoaXMuZm9ybUZsb3dEb3dubG9hZFNlcnZpY2UuZG93bmxvYWRKc29uKEpTT04ucGFyc2UobW9kZWwudmFsdWUpLCBmb3JtRmxvd0RlZmluaXRpb25JZClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGxvYWRGb3JtRmxvd0RlZmluaXRpb25JZChmb3JtRmxvd0RlZmluaXRpb25JZD86IEZvcm1GbG93RGVmaW5pdGlvbklkKSB7XG4gICAgaWYgKCEhZm9ybUZsb3dEZWZpbml0aW9uSWQpIHtcbiAgICAgIHRoaXMuZm9ybUZsb3dEZWZpbml0aW9uSWQkLm5leHQoZm9ybUZsb3dEZWZpbml0aW9uSWQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb3BlbkZvcm1GbG93RGVmaW5pdGlvblN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmckLm5leHQodHJ1ZSk7XG5cbiAgICB0aGlzLl9pZFN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGUucGFyYW1zXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKHBhcmFtcyA9PiBwYXJhbXM/LmtleSksXG4gICAgICAgIG1hcChwYXJhbXMgPT4gcGFyYW1zLmtleSksXG4gICAgICAgIHN3aXRjaE1hcChrZXkgPT5cbiAgICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIG9mKGtleSksXG4gICAgICAgICAgICB0aGlzLmZvcm1GbG93U2VydmljZS5mb3JtRmxvd3MkLnBpcGUoXG4gICAgICAgICAgICAgIG1hcChcbiAgICAgICAgICAgICAgICBmb3JtRmxvd0RlZmluaXRpb25zID0+XG4gICAgICAgICAgICAgICAgICBmb3JtRmxvd0RlZmluaXRpb25zLmZpbmQoZGVmaW5pdGlvbiA9PiBkZWZpbml0aW9uLmtleSA9PT0ga2V5KT8udmVyc2lvbnNcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgZmlsdGVyKHZlcnNpb25zID0+ICEhdmVyc2lvbnMpLFxuICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICB0YXAodmVyc2lvbnMgPT4gdGhpcy5mb3JtRmxvd0RlZmluaXRpb25WZXJzaW9ucyQubmV4dCh2ZXJzaW9ucykpXG4gICAgICAgICAgICApLFxuICAgICAgICAgIF0pXG4gICAgICAgICksXG4gICAgICAgIG1hcCgoW2tleSwgdmVyc2lvbnNdKSA9PiAoe2tleSwgdmVyc2lvbjogdmVyc2lvbnNbMF19KSBhcyBGb3JtRmxvd0RlZmluaXRpb25JZClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoZm9ybUZsb3dEZWZpbml0aW9uSWQgPT4ge1xuICAgICAgICB0aGlzLnBhZ2VUaXRsZVNlcnZpY2Uuc2V0Q3VzdG9tUGFnZVRpdGxlKGZvcm1GbG93RGVmaW5pdGlvbklkLmtleSk7XG4gICAgICAgIHRoaXMuZm9ybUZsb3dEZWZpbml0aW9uSWQkLm5leHQoZm9ybUZsb3dEZWZpbml0aW9uSWQpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl9kZWZpbml0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtRmxvd0RlZmluaXRpb24kLnBpcGUoKS5zdWJzY3JpYmUoZm9ybUZsb3dEZWZpbml0aW9uID0+IHtcbiAgICAgIHRoaXMucmVhZE9ubHkkLm5leHQoZm9ybUZsb3dEZWZpbml0aW9uLnJlYWRPbmx5ID09PSB0cnVlKTtcbiAgICAgIHRoaXMuc2V0TW9kZWwoZm9ybUZsb3dEZWZpbml0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TW9kZWwoZm9ybUZsb3dEZWZpbml0aW9uOiBGb3JtRmxvd0RlZmluaXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBjbG9uZSA9IHsuLi5mb3JtRmxvd0RlZmluaXRpb259O1xuICAgIGRlbGV0ZSBjbG9uZS52ZXJzaW9uO1xuICAgIGRlbGV0ZSBjbG9uZS5yZWFkT25seTtcbiAgICB0aGlzLm1vZGVsJC5uZXh0KHtcbiAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeShjbG9uZSksXG4gICAgICBsYW5ndWFnZTogJ2pzb24nLFxuICAgICAgdXJpOiBmb3JtRmxvd0RlZmluaXRpb24ua2V5ICsgJy0nICsgZm9ybUZsb3dEZWZpbml0aW9uLnZlcnNpb24gKyAnLmZvcm1mbG93Lmpzb24nLFxuICAgIH0pO1xuICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIHNob3dTdWNjZXNzTWVzc2FnZShrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zaG93VG9hc3Qoe1xuICAgICAgY2FwdGlvbjogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2Zvcm1GbG93LnNhdmVkU3VjY2Vzc1RpdGxlTWVzc2FnZScsIHtcbiAgICAgICAga2V5LFxuICAgICAgfSksXG4gICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICBkdXJhdGlvbjogQ0FSQk9OX0NPTlNUQU5UUy5ub3RpZmljYXRpb25EdXJhdGlvbixcbiAgICAgIHNob3dDbG9zZTogdHJ1ZSxcbiAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnZm9ybUZsb3cuc2F2ZWRTdWNjZXNzVGl0bGUnKSxcbiAgICB9KTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwibW9kZWwkIHwgYXN5bmMgYXMgbW9kZWw7IGVsc2UgbG9hZGluZ1wiPlxuICA8dmFsdGltby1lZGl0b3JcbiAgICBbZGlzYWJsZWRdPVwiKGxvYWRpbmckIHwgYXN5bmMpID09PSBmYWxzZSAmJiByZWFkT25seSQgfCBhc3luY1wiXG4gICAgW21vZGVsXT1cIm1vZGVsXCJcbiAgICBbanNvblNjaGVtYV09XCJmb3JtRmxvd1NjaGVtYUpzb25cIlxuICAgICh2YWxpZEV2ZW50KT1cIm9uVmFsaWQoJGV2ZW50KVwiXG4gICAgKHZhbHVlQ2hhbmdlRXZlbnQpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICBbZml0UGFnZV09XCJ0cnVlXCJcbiAgPjwvdmFsdGltby1lZGl0b3I+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciByZW5kZXJJblBhZ2VIZWFkZXI+XG4gIDxuZy10ZW1wbGF0ZT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImJ1dHRvbnMtY29udGFpbmVyXCJcbiAgICAgICpuZ0lmPVwie1xuICAgICAgICBtb2RlbDogbW9kZWwkIHwgYXN5bmMsXG4gICAgICAgIHZhbGlkOiB2YWxpZCQgfCBhc3luYyxcbiAgICAgICAgcmVhZE9ubHk6IHJlYWRPbmx5JCB8IGFzeW5jLFxuICAgICAgICB2ZXJzaW9uczogZm9ybUZsb3dEZWZpbml0aW9uVmVyc2lvbkl0ZW1zJCB8IGFzeW5jLFxuICAgICAgICBjb21wYWN0TW9kZTogY29tcGFjdE1vZGUkIHwgYXN5bmMsXG4gICAgICB9IGFzIG9ic1wiXG4gICAgPlxuICAgICAgPGNkcy1kcm9wZG93blxuICAgICAgICBbZGlzYWJsZWRdPVwib2JzLnZlcnNpb25zLmlzTG9hZGluZyB8fCBvYnMudmVyc2lvbnMudmFsdWUubGVuZ3RoID09PSAxXCJcbiAgICAgICAgW2Ryb3BVcF09XCJmYWxzZVwiXG4gICAgICAgIFtza2VsZXRvbl09XCJvYnMudmVyc2lvbnMuaXNMb2FkaW5nXCJcbiAgICAgICAgKHNlbGVjdGVkKT1cImxvYWRGb3JtRmxvd0RlZmluaXRpb25JZCgkZXZlbnQuaXRlbS5mb3JtRmxvd0RlZmluaXRpb25JZClcIlxuICAgICAgICBbc2l6ZV09XCJvYnMuY29tcGFjdE1vZGUgPyAnc20nIDogJ21kJ1wiXG4gICAgICA+XG4gICAgICAgIDxjZHMtZHJvcGRvd24tbGlzdCBbaXRlbXNdPVwib2JzLnZlcnNpb25zLnZhbHVlIHx8IFtdXCI+PC9jZHMtZHJvcGRvd24tbGlzdD5cbiAgICAgIDwvY2RzLWRyb3Bkb3duPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9ucy1jb250YWluZXItcmlnaHRcIj5cbiAgICAgICAgPGNkcy1vdmVyZmxvdy1tZW51IGNsYXNzPVwib3ZlcmZsb3ctYnV0dG9uXCI+XG4gICAgICAgICAgPGNkcy1vdmVyZmxvdy1tZW51LW9wdGlvblxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFvYnMudmFsaWQgJiYgIW9icy5yZWFkT25seVwiXG4gICAgICAgICAgICAoc2VsZWN0ZWQpPVwiZG93bmxvYWRGb3JtRmxvd0RlZmluaXRpb24ob2JzLm1vZGVsKVwiXG4gICAgICAgICAgICA+e3sgJ2ludGVyZmFjZS5leHBvcnQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9jZHMtb3ZlcmZsb3ctbWVudS1vcHRpb24+XG5cbiAgICAgICAgICA8Y2RzLW92ZXJmbG93LW1lbnUtb3B0aW9uXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLnJlYWRPbmx5XCJcbiAgICAgICAgICAgIHR5cGU9XCJkYW5nZXJcIlxuICAgICAgICAgICAgKHNlbGVjdGVkKT1cInNob3dEZWxldGVNb2RhbCgpXCJcbiAgICAgICAgICAgID57eyAnaW50ZXJmYWNlLmRlbGV0ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2Nkcy1vdmVyZmxvdy1tZW51LW9wdGlvbj5cbiAgICAgICAgPC9jZHMtb3ZlcmZsb3ctbWVudT5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFvYnMudmFsaWQgfHwgb2JzLnJlYWRPbmx5XCJcbiAgICAgICAgICBjZHNCdXR0b249XCJwcmltYXJ5XCJcbiAgICAgICAgICBbc2l6ZV09XCJvYnMuY29tcGFjdE1vZGUgPyAnc20nIDogJ21kJ1wiXG4gICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZUZvcm1GbG93RGVmaW5pdGlvbigpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7ICdpbnRlcmZhY2Uuc2F2ZScgfCB0cmFuc2xhdGUgfX1cblxuICAgICAgICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGNkc0ljb249XCJzYXZlXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIntmb3JtRmxvd0RlZmluaXRpb25JZDogZm9ybUZsb3dEZWZpbml0aW9uSWQkIHwgYXN5bmN9IGFzIG9ic1wiPlxuICA8dmFsdGltby1kZWxldGUtZm9ybS1mbG93LW1vZGFsXG4gICAgW2RlbGV0ZUZvcm1GbG93RGVmaW5pdGlvbktleV09XCJvYnMuZm9ybUZsb3dEZWZpbml0aW9uSWQ/LmtleVwiXG4gICAgW3Nob3dEZWxldGVNb2RhbCRdPVwic2hvd0RlbGV0ZU1vZGFsJFwiXG4gICAgKGRlbGV0ZUV2ZW50KT1cIm9uRGVsZXRlKCRldmVudClcIlxuICA+XG4gIDwvdmFsdGltby1kZWxldGUtZm9ybS1mbG93LW1vZGFsPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZz5cbiAgPGRpdiBjbGFzcz1cImxvYWRpbmctY29udGFpbmVyXCI+XG4gICAgPGNkcy1sb2FkaW5nPjwvY2RzLWxvYWRpbmc+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -1,79 +0,0 @@
1
- {
2
- "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "formflow.schema",
4
- "title": "Form flow definition",
5
- "description": "Representation of a form flow definition",
6
- "type": "object",
7
- "properties": {
8
- "startStep": {
9
- "type": "string",
10
- "description": "This must contain the key of the first step of the form flow"
11
- },
12
- "steps": {
13
- "type": "array",
14
- "description": "This array should contain all the possible steps of the form flow",
15
- "items": {
16
- "type": "object",
17
- "properties": {
18
- "key": {
19
- "type": "string",
20
- "description": "The identifying human readable key of the step"
21
- },
22
- "type": {
23
- "type": "object",
24
- "description": "The type of form that should be displayed",
25
- "properties": {
26
- "name": {
27
- "type": "string",
28
- "description": "This defines the type of the step, for instance: 'form'"
29
- },
30
- "properties": {
31
- "type": "object",
32
- "description": "This object holds additional properties for the specified type"
33
- }
34
- },
35
- "required": ["name", "properties"]
36
- },
37
- "onOpen": {
38
- "type": "array",
39
- "description": "An array of expressions which are executed in order when opening the step",
40
- "items": {
41
- "type": "string",
42
- "description": "An expression that is executed when opening the step"
43
- }
44
- },
45
- "onComplete": {
46
- "type": "array",
47
- "description": "An array of expressions which are executed in order when completing the step",
48
- "items": {
49
- "type": "string",
50
- "description": "An expression that is executed when completing the step"
51
- }
52
- },
53
- "nextSteps": {
54
- "type": "array",
55
- "description": "The possible next steps. A condition must be added on all steps but one. The step without a condition is the default step that will be used when all conditions fail",
56
- "items": {
57
- "type": "object",
58
- "properties": {
59
- "step": {
60
- "type": "string",
61
- "title": "The key of the next step. This should match one of the keys in the steps array"
62
- },
63
- "condition": {
64
- "type": ["string", "null"],
65
- "title": "This should contain an expression telling what condition should be met to go to this next step. If there is no condition this is the default next step."
66
- }
67
- },
68
- "required": ["step"]
69
- }
70
- }
71
- },
72
- "required": ["key", "type"]
73
- },
74
- "minItems": 1,
75
- "uniqueItems": true
76
- }
77
- },
78
- "required": ["startStep", "steps"]
79
- }
@@ -1,67 +0,0 @@
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 { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
17
- import { Validators } from '@angular/forms';
18
- import { CARBON_CONSTANTS } from '@valtimo/components';
19
- import * as i0 from "@angular/core";
20
- import * as i1 from "@angular/forms";
21
- import * as i2 from "carbon-components-angular";
22
- import * as i3 from "@ngx-translate/core";
23
- export class NewFormFlowModalComponent {
24
- get key() {
25
- return this.form?.get('key');
26
- }
27
- constructor(fb) {
28
- this.fb = fb;
29
- this.open = false;
30
- this.closeEvent = new EventEmitter();
31
- this.form = this.fb.group({
32
- key: this.fb.control('', Validators.required),
33
- });
34
- }
35
- onCancel() {
36
- this.closeEvent.emit(null);
37
- this.resetForm();
38
- }
39
- onConfirm() {
40
- if (!this.key) {
41
- return;
42
- }
43
- this.closeEvent.emit({
44
- key: this.key.value,
45
- version: 1,
46
- startStep: 'start-step',
47
- steps: [],
48
- });
49
- this.resetForm();
50
- }
51
- resetForm() {
52
- setTimeout(() => {
53
- this.form.reset();
54
- }, CARBON_CONSTANTS.modalAnimationMs);
55
- }
56
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NewFormFlowModalComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
57
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: NewFormFlowModalComponent, selector: "valtimo-new-form-flow-modal", inputs: { open: "open" }, outputs: { closeEvent: "closeEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal [open]=\"open\" showFooter=\"true\" [title]=\"'formFlow.add' | translate\" valtimoCdsModal>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCancel()\">\n <h3 cdsModalHeaderHeading>\n {{ 'formFlow.add' | translate }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <form [formGroup]=\"form\">\n <cds-label [invalid]=\"key.dirty && key.invalid\">\n {{ 'formFlow.key' | translate }}\n\n <input\n formControlName=\"key\"\n cdsText\n placeholder=\"{{ 'formFlow.key' | translate }}\"\n [attr.modal-primary-focus]=\"true\"\n [invalid]=\"key.dirty && key.invalid\"\n />\n </cds-label>\n </form>\n </section>\n\n <cds-modal-footer>\n <button cdsButton=\"ghost\" (click)=\"onCancel()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button [disabled]=\"this.form.invalid\" (click)=\"onConfirm()\" cdsButton=\"primary\">\n {{ 'interface.create' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n", dependencies: [{ kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i2.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i2.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i2.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i2.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i2.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i2.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
58
- }
59
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NewFormFlowModalComponent, decorators: [{
60
- type: Component,
61
- args: [{ selector: 'valtimo-new-form-flow-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal [open]=\"open\" showFooter=\"true\" [title]=\"'formFlow.add' | translate\" valtimoCdsModal>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCancel()\">\n <h3 cdsModalHeaderHeading>\n {{ 'formFlow.add' | translate }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <form [formGroup]=\"form\">\n <cds-label [invalid]=\"key.dirty && key.invalid\">\n {{ 'formFlow.key' | translate }}\n\n <input\n formControlName=\"key\"\n cdsText\n placeholder=\"{{ 'formFlow.key' | translate }}\"\n [attr.modal-primary-focus]=\"true\"\n [invalid]=\"key.dirty && key.invalid\"\n />\n </cds-label>\n </form>\n </section>\n\n <cds-modal-footer>\n <button cdsButton=\"ghost\" (click)=\"onCancel()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button [disabled]=\"this.form.invalid\" (click)=\"onConfirm()\" cdsButton=\"primary\">\n {{ 'interface.create' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n" }]
62
- }], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { open: [{
63
- type: Input
64
- }], closeEvent: [{
65
- type: Output
66
- }] } });
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LWZvcm0tZmxvdy1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Zvcm0tZmxvdy1tYW5hZ2VtZW50L3NyYy9saWIvY29tcG9uZW50cy9uZXctZm9ybS1mbG93LW1vZGFsL25ldy1mb3JtLWZsb3ctbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9mb3JtLWZsb3ctbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvbmV3LWZvcm0tZmxvdy1tb2RhbC9uZXctZm9ybS1mbG93LW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQWMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7Ozs7O0FBT3JELE1BQU0sT0FBTyx5QkFBeUI7SUFRcEMsSUFBVyxHQUFHO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsWUFBNkIsRUFBZTtRQUFmLE9BQUUsR0FBRixFQUFFLENBQWE7UUFYbkMsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUNaLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBNkIsQ0FBQztRQUU5RCxTQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDMUIsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1NBQzlDLENBQUMsQ0FBQztJQU00QyxDQUFDO0lBRXpDLFFBQVE7UUFDYixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVNLFNBQVM7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2QsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUNuQixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLO1lBQ25CLE9BQU8sRUFBRSxDQUFDO1lBQ1YsU0FBUyxFQUFFLFlBQVk7WUFDdkIsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVPLFNBQVM7UUFDZixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwQixDQUFDLEVBQUUsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN4QyxDQUFDOytHQXJDVSx5QkFBeUI7bUdBQXpCLHlCQUF5QixvSUMxQnRDLGlzREFpREE7OzRGRHZCYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0UsNkJBQTZCLG1CQUV0Qix1QkFBdUIsQ0FBQyxNQUFNO2dGQUd0QyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Rm9ybUZsb3dEZWZpbml0aW9ufSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtDQVJCT05fQ09OU1RBTlRTfSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1uZXctZm9ybS1mbG93LW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25ldy1mb3JtLWZsb3ctbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmV3Rm9ybUZsb3dNb2RhbENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIG9wZW4gPSBmYWxzZTtcbiAgQE91dHB1dCgpIGNsb3NlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1GbG93RGVmaW5pdGlvbiB8IG51bGw+KCk7XG5cbiAgcHVibGljIGZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICBrZXk6IHRoaXMuZmIuY29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gIH0pO1xuXG4gIHB1YmxpYyBnZXQga2V5KCkge1xuICAgIHJldHVybiB0aGlzLmZvcm0/LmdldCgna2V5Jyk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlcikge31cblxuICBwdWJsaWMgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUV2ZW50LmVtaXQobnVsbCk7XG4gICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNvbmZpcm0oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmtleSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2xvc2VFdmVudC5lbWl0KHtcbiAgICAgIGtleTogdGhpcy5rZXkudmFsdWUsXG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgc3RhcnRTdGVwOiAnc3RhcnQtc3RlcCcsXG4gICAgICBzdGVwczogW10sXG4gICAgfSk7XG4gICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRGb3JtKCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgfSwgQ0FSQk9OX0NPTlNUQU5UUy5tb2RhbEFuaW1hdGlvbk1zKTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48Y2RzLW1vZGFsIFtvcGVuXT1cIm9wZW5cIiBzaG93Rm9vdGVyPVwidHJ1ZVwiIFt0aXRsZV09XCInZm9ybUZsb3cuYWRkJyB8IHRyYW5zbGF0ZVwiIHZhbHRpbW9DZHNNb2RhbD5cbiAgPGNkcy1tb2RhbC1oZWFkZXIgW3Nob3dDbG9zZUJ1dHRvbl09XCJ0cnVlXCIgKGNsb3NlU2VsZWN0KT1cIm9uQ2FuY2VsKClcIj5cbiAgICA8aDMgY2RzTW9kYWxIZWFkZXJIZWFkaW5nPlxuICAgICAge3sgJ2Zvcm1GbG93LmFkZCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2gzPlxuICA8L2Nkcy1tb2RhbC1oZWFkZXI+XG5cbiAgPHNlY3Rpb24gY2RzTW9kYWxDb250ZW50PlxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICAgICAgPGNkcy1sYWJlbCBbaW52YWxpZF09XCJrZXkuZGlydHkgJiYga2V5LmludmFsaWRcIj5cbiAgICAgICAge3sgJ2Zvcm1GbG93LmtleScgfCB0cmFuc2xhdGUgfX1cblxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJrZXlcIlxuICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdmb3JtRmxvdy5rZXknIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICBbYXR0ci5tb2RhbC1wcmltYXJ5LWZvY3VzXT1cInRydWVcIlxuICAgICAgICAgIFtpbnZhbGlkXT1cImtleS5kaXJ0eSAmJiBrZXkuaW52YWxpZFwiXG4gICAgICAgIC8+XG4gICAgICA8L2Nkcy1sYWJlbD5cbiAgICA8L2Zvcm0+XG4gIDwvc2VjdGlvbj5cblxuICA8Y2RzLW1vZGFsLWZvb3Rlcj5cbiAgICA8YnV0dG9uIGNkc0J1dHRvbj1cImdob3N0XCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj5cbiAgICAgIHt7ICdpbnRlcmZhY2UuY2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwidGhpcy5mb3JtLmludmFsaWRcIiAoY2xpY2spPVwib25Db25maXJtKClcIiBjZHNCdXR0b249XCJwcmltYXJ5XCI+XG4gICAgICB7eyAnaW50ZXJmYWNlLmNyZWF0ZScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9jZHMtbW9kYWwtZm9vdGVyPlxuPC9jZHMtbW9kYWw+XG4iXX0=