@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.
- package/fesm2022/valtimo-form-flow-management.mjs +226 -269
- package/fesm2022/valtimo-form-flow-management.mjs.map +1 -1
- package/lib/components/delete-form-flow-modal/delete-form-flow-modal.component.d.ts.map +1 -1
- package/lib/components/editor/form-flow-editor.component.d.ts +22 -24
- package/lib/components/editor/form-flow-editor.component.d.ts.map +1 -1
- package/lib/components/new-form-flow-modal/new-form-flow-modal.component.d.ts.map +1 -1
- package/lib/components/overview/form-flow-overview.component.d.ts +24 -11
- package/lib/components/overview/form-flow-overview.component.d.ts.map +1 -1
- package/lib/form-flow-management.module.d.ts +5 -6
- package/lib/form-flow-management.module.d.ts.map +1 -1
- package/lib/models/form-flow.model.d.ts +6 -2
- package/lib/models/form-flow.model.d.ts.map +1 -1
- package/lib/services/form-flow-download.service.d.ts +4 -5
- package/lib/services/form-flow-download.service.d.ts.map +1 -1
- package/lib/services/form-flow.service.d.ts +12 -17
- package/lib/services/form-flow.service.d.ts.map +1 -1
- package/package.json +4 -6
- package/public-api.d.ts +2 -0
- package/public-api.d.ts.map +1 -1
- package/esm2022/lib/components/delete-form-flow-modal/delete-form-flow-modal.component.mjs +0 -39
- package/esm2022/lib/components/editor/form-flow-editor.component.mjs +0 -161
- package/esm2022/lib/components/editor/formflow.schema.json +0 -79
- package/esm2022/lib/components/new-form-flow-modal/new-form-flow-modal.component.mjs +0 -67
- package/esm2022/lib/components/overview/form-flow-overview.component.mjs +0 -80
- package/esm2022/lib/form-flow-management-routing.module.mjs +0 -55
- package/esm2022/lib/form-flow-management.module.mjs +0 -101
- package/esm2022/lib/models/form-flow.model.mjs +0 -17
- package/esm2022/lib/models/index.mjs +0 -17
- package/esm2022/lib/services/form-flow-download.service.mjs +0 -40
- package/esm2022/lib/services/form-flow.service.mjs +0 -66
- package/esm2022/lib/services/index.mjs +0 -17
- package/esm2022/public-api.mjs +0 -22
- package/esm2022/valtimo-form-flow-management.mjs +0 -5
- package/lib/form-flow-management-routing.module.d.ts +0 -9
- 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,
|
|
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": "
|
|
3
|
+
"version": "13.0.0",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@angular/common": "^
|
|
6
|
-
"@angular/core": "^
|
|
5
|
+
"@angular/common": "^19.2.8",
|
|
6
|
+
"@angular/core": "^19.2.8"
|
|
7
7
|
},
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"tslib": "2.
|
|
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
|
package/public-api.d.ts.map
CHANGED
|
@@ -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=
|