@valtimo/process-link 13.11.0 → 13.13.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 (50) hide show
  1. package/fesm2022/valtimo-process-link.mjs +1928 -352
  2. package/fesm2022/valtimo-process-link.mjs.map +1 -1
  3. package/lib/components/choose-process-link-type/choose-process-link-type.component.d.ts +2 -2
  4. package/lib/components/choose-process-link-type/choose-process-link-type.component.d.ts.map +1 -1
  5. package/lib/components/configure-building-block-mappings/configure-building-block-mappings.component.d.ts +83 -0
  6. package/lib/components/configure-building-block-mappings/configure-building-block-mappings.component.d.ts.map +1 -0
  7. package/lib/components/configure-building-block-plugins/configure-building-block-plugins.component.d.ts +49 -0
  8. package/lib/components/configure-building-block-plugins/configure-building-block-plugins.component.d.ts.map +1 -0
  9. package/lib/components/configure-building-block-plugins/index.d.ts +2 -0
  10. package/lib/components/configure-building-block-plugins/index.d.ts.map +1 -0
  11. package/lib/components/plugin-action-configuration/plugin-action-configuration.component.d.ts.map +1 -1
  12. package/lib/components/process-link-modal/process-link-modal.component.d.ts +3 -3
  13. package/lib/components/process-link-modal/process-link-modal.component.d.ts.map +1 -1
  14. package/lib/components/select-building-block/index.d.ts +2 -0
  15. package/lib/components/select-building-block/index.d.ts.map +1 -0
  16. package/lib/components/select-building-block/select-building-block.component.d.ts +29 -0
  17. package/lib/components/select-building-block/select-building-block.component.d.ts.map +1 -0
  18. package/lib/components/select-form/select-form.component.d.ts.map +1 -1
  19. package/lib/components/select-form-flow/select-form-flow.component.d.ts.map +1 -1
  20. package/lib/components/select-plugin-action/select-plugin-action.component.d.ts.map +1 -1
  21. package/lib/components/select-plugin-configuration/select-plugin-configuration.component.d.ts +12 -4
  22. package/lib/components/select-plugin-configuration/select-plugin-configuration.component.d.ts.map +1 -1
  23. package/lib/components/select-ui-component/select-ui-component.component.d.ts.map +1 -1
  24. package/lib/constants/process.link.d.ts +2 -1
  25. package/lib/constants/process.link.d.ts.map +1 -1
  26. package/lib/models/building-block-field.model.d.ts +23 -0
  27. package/lib/models/building-block-field.model.d.ts.map +1 -0
  28. package/lib/models/index.d.ts +2 -0
  29. package/lib/models/index.d.ts.map +1 -1
  30. package/lib/models/plugin.model.d.ts +10 -0
  31. package/lib/models/plugin.model.d.ts.map +1 -0
  32. package/lib/models/process-link.model.d.ts +65 -10
  33. package/lib/models/process-link.model.d.ts.map +1 -1
  34. package/lib/process-link.module.d.ts +11 -8
  35. package/lib/process-link.module.d.ts.map +1 -1
  36. package/lib/services/building-block-state.service.d.ts +64 -0
  37. package/lib/services/building-block-state.service.d.ts.map +1 -0
  38. package/lib/services/index.d.ts +2 -0
  39. package/lib/services/index.d.ts.map +1 -1
  40. package/lib/services/plugin-state.service.d.ts +3 -1
  41. package/lib/services/plugin-state.service.d.ts.map +1 -1
  42. package/lib/services/process-link-building-block-api.service.d.ts +25 -0
  43. package/lib/services/process-link-building-block-api.service.d.ts.map +1 -0
  44. package/lib/services/process-link-state.service.d.ts +19 -6
  45. package/lib/services/process-link-state.service.d.ts.map +1 -1
  46. package/lib/services/process-link-step.service.d.ts +44 -0
  47. package/lib/services/process-link-step.service.d.ts.map +1 -1
  48. package/lib/services/process-link.service.d.ts +2 -4
  49. package/lib/services/process-link.service.d.ts.map +1 -1
  50. package/package.json +1 -1
@@ -1,33 +1,369 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, InjectionToken, Optional, Inject, Component, EventEmitter, Output, Input, ViewChild, ChangeDetectionStrategy, NgModule, ViewContainerRef } from '@angular/core';
3
- import * as i2 from '@valtimo/shared';
4
- import { BaseApiService, getCaseManagementRouteParams, ROLE_ADMIN } from '@valtimo/shared';
5
- import * as i1 from '@angular/common/http';
6
- import { HttpParams, HttpHeaders } from '@angular/common/http';
7
- import { BehaviorSubject, Subject, switchMap, of, combineLatest, map as map$1, filter, Subscription, startWith, mergeMap, tap, take as take$1 } from 'rxjs';
8
- import { map, take, switchMap as switchMap$1, tap as tap$1 } from 'rxjs/operators';
3
+ import { catchError, of, BehaviorSubject, combineLatest, map, Subject, switchMap, filter, Subscription, startWith, mergeMap, tap, withLatestFrom as withLatestFrom$1, take as take$1, shareReplay, distinctUntilChanged } from 'rxjs';
4
+ import * as i2 from '@angular/common/http';
5
+ import { HttpHeaders, HttpParams } from '@angular/common/http';
6
+ import * as i1 from '@valtimo/shared';
7
+ import { BaseApiService, InterceptorSkip, getCaseManagementRouteParams, getBuildingBlockManagementRouteParams, ROLE_ADMIN } from '@valtimo/shared';
8
+ import { map as map$1, take, switchMap as switchMap$1, withLatestFrom, filter as filter$1, catchError as catchError$1, tap as tap$1 } from 'rxjs/operators';
9
9
  import * as i1$1 from '@valtimo/plugin';
10
10
  import { PluginTranslatePipeModule, PluginConfigurationContainerModule } from '@valtimo/plugin';
11
- import * as i2$1 from '@ngx-translate/core';
11
+ import * as i3 from '@ngx-translate/core';
12
12
  import { TranslateModule } from '@ngx-translate/core';
13
- import * as i3 from '@angular/common';
13
+ import * as i3$1 from '@angular/common';
14
14
  import { CommonModule } from '@angular/common';
15
- import * as i4 from 'carbon-components-angular';
16
- import { ModalModule as ModalModule$1, ProgressIndicatorModule, ButtonModule, IconModule, ComboBoxModule, InputModule, LoadingModule, StructuredListModule, TilesModule, SelectModule, ToggleModule, LayerModule, ToggletipModule } from 'carbon-components-angular';
15
+ import * as i3$2 from 'carbon-components-angular';
16
+ import { ComboBoxModule, RadioModule, InputModule, ButtonModule, IconModule, LayerModule, ModalModule as ModalModule$1, ProgressIndicatorModule, LoadingModule, StructuredListModule, TilesModule, SelectModule as SelectModule$1, ToggleModule, ToggletipModule, NotificationModule } from 'carbon-components-angular';
17
17
  import * as i1$2 from '@angular/forms';
18
- import { FormControl, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
18
+ import { FormControl, Validators, FormGroup, FormArray, ReactiveFormsModule, FormsModule } from '@angular/forms';
19
19
  import { Upload16 } from '@carbon/icons';
20
- import * as i2$2 from '@valtimo/components';
21
- import { FormioOptionsImpl, ModalModule, SearchableDropdownSelectModule, StepperModule, VModalModule, ParagraphModule, TooltipModule, TooltipIconModule, FormIoModule, ValtimoCdsModalDirective, RenderInPageHeaderDirective, CarbonMultiInputModule, RemoveClassnamesDirective } from '@valtimo/components';
20
+ import * as i2$1 from '@valtimo/components';
21
+ import { ValuePathSelectorPrefix, ValuePathSelectorComponent, InputLabelModule, SelectModule, FormioOptionsImpl, ModalModule, SearchableDropdownSelectModule, StepperModule, VModalModule, ParagraphModule, TooltipModule, TooltipIconModule, FormIoModule, ValtimoCdsModalDirective, RenderInPageHeaderDirective, CarbonMultiInputModule, RemoveClassnamesDirective } from '@valtimo/components';
22
22
  import * as i5 from 'carbon-components-angular/dropdown';
23
23
  import BpmnViewer from 'bpmn-js';
24
24
  import * as i1$3 from '@valtimo/process';
25
- import * as i3$1 from '@angular/router';
25
+ import * as i3$3 from '@angular/router';
26
26
  import { RouterModule } from '@angular/router';
27
27
  import { AuthGuardService } from '@valtimo/security';
28
28
  import * as i1$4 from '@valtimo/form';
29
29
  import * as i1$5 from '@valtimo/form-flow-management';
30
30
 
31
+ /*
32
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
33
+ *
34
+ * Licensed under EUPL, Version 1.2 (the "License");
35
+ * you may not use this file except in compliance with the License.
36
+ * You may obtain a copy of the License at
37
+ *
38
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
39
+ *
40
+ * Unless required by applicable law or agreed to in writing, software
41
+ * distributed under the License is distributed on an "AS IS" basis,
42
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
43
+ * See the License for the specific language governing permissions and
44
+ * limitations under the License.
45
+ */
46
+ class ProcessLinkBuildingBlockApiService extends BaseApiService {
47
+ constructor(configService, httpClient) {
48
+ super(httpClient, configService);
49
+ this.configService = configService;
50
+ this.httpClient = httpClient;
51
+ }
52
+ getVersionsForBuildingBlock(key, page = 0, size = 5, all = false) {
53
+ const allParam = all ? 'all=true' : '';
54
+ return this.httpClient.get(this.getApiUrl(`management/v1/building-block/${key}/version?page=${page}&size=${size}${allParam}`));
55
+ }
56
+ getPluginDefinitionsForBuildingBlock(key, versionTag) {
57
+ return this.httpClient.get(this.getApiUrl(`management/v1/building-block/${key}/version/${versionTag}/plugin`));
58
+ }
59
+ getFieldsForBuildingBlock(key, versionTag) {
60
+ return this.httpClient.get(this.getApiUrl(`management/v1/building-block/${key}/version/${versionTag}/fields`));
61
+ }
62
+ getBuildingBlockDefinitions(options) {
63
+ return this.httpClient
64
+ .get(this.getApiUrl('management/v1/building-block'), {
65
+ params: options,
66
+ headers: new HttpHeaders().set(InterceptorSkip, '404'),
67
+ })
68
+ .pipe(catchError((error) => {
69
+ if (error.status === 404)
70
+ return of([]);
71
+ throw error;
72
+ }));
73
+ }
74
+ getMainProcessDefinitionKeyForBuildingBlock(key, versionTag) {
75
+ return this.httpClient.get(this.getApiUrl(`management/v1/building-block/${key}/version/${versionTag}/process-definition/main/key`), {
76
+ responseType: 'text',
77
+ });
78
+ }
79
+ isBuildingBlockProcess(processDefinitionId) {
80
+ return this.httpClient
81
+ .get(this.getApiUrl(`management/v1/building-block/process-definition/${processDefinitionId}/is-building-block`))
82
+ .pipe(catchError(() => of(false)));
83
+ }
84
+ getBuildingBlockDefinition(key, versionTag) {
85
+ return this.httpClient
86
+ .get(this.getApiUrl(`management/v1/building-block/${key}/version/${versionTag}`), {
87
+ headers: new HttpHeaders().set(InterceptorSkip, '404'),
88
+ })
89
+ .pipe(catchError(() => of(null)));
90
+ }
91
+ getCaseDefinition(key, versionTag) {
92
+ return this.httpClient
93
+ .get(this.getApiUrl(`management/v1/case-definition/${key}/version/${versionTag}`), {
94
+ headers: new HttpHeaders().set(InterceptorSkip, '404'),
95
+ })
96
+ .pipe(catchError(() => of(null)));
97
+ }
98
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkBuildingBlockApiService, deps: [{ token: i1.ConfigService }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
99
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkBuildingBlockApiService, providedIn: 'root' }); }
100
+ }
101
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkBuildingBlockApiService, decorators: [{
102
+ type: Injectable,
103
+ args: [{
104
+ providedIn: 'root',
105
+ }]
106
+ }], ctorParameters: () => [{ type: i1.ConfigService }, { type: i2.HttpClient }] });
107
+
108
+ /*
109
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
110
+ *
111
+ * Licensed under EUPL, Version 1.2 (the "License");
112
+ * you may not use this file except in compliance with the License.
113
+ * You may obtain a copy of the License at
114
+ *
115
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
116
+ *
117
+ * Unless required by applicable law or agreed to in writing, software
118
+ * distributed under the License is distributed on an "AS IS" BASIS,
119
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
120
+ * See the License for the specific language governing permissions and
121
+ * limitations under the License.
122
+ */
123
+ class BuildingBlockStateService {
124
+ constructor(processLinkBuildingBlockApiService) {
125
+ this.processLinkBuildingBlockApiService = processLinkBuildingBlockApiService;
126
+ this._definitionKey$ = new BehaviorSubject(null);
127
+ this._definitionVersionTag$ = new BehaviorSubject(null);
128
+ this._versions$ = new BehaviorSubject([]);
129
+ this._requiredPluginKeys$ = new BehaviorSubject([]);
130
+ this._pluginMappings$ = new BehaviorSubject({});
131
+ this._buildingBlockFields$ = new BehaviorSubject([]);
132
+ this._inputMappings$ = new BehaviorSubject([]);
133
+ this._outputMappings$ = new BehaviorSubject([]);
134
+ this._loadingRequirements$ = new BehaviorSubject(false);
135
+ this._loadingFields$ = new BehaviorSubject(false);
136
+ this._pluginDependencies$ = new BehaviorSubject([]);
137
+ this._isNestedBuildingBlock$ = new BehaviorSubject(false);
138
+ }
139
+ get definitionKey$() {
140
+ return this._definitionKey$.asObservable();
141
+ }
142
+ get definitionVersionTag$() {
143
+ return this._definitionVersionTag$.asObservable();
144
+ }
145
+ get versions$() {
146
+ return this._versions$.asObservable();
147
+ }
148
+ get requiredPluginKeys$() {
149
+ return this._requiredPluginKeys$.asObservable();
150
+ }
151
+ get pluginMappings$() {
152
+ return this._pluginMappings$.asObservable();
153
+ }
154
+ get buildingBlockFields$() {
155
+ return this._buildingBlockFields$.asObservable();
156
+ }
157
+ get inputMappings$() {
158
+ return this._inputMappings$.asObservable();
159
+ }
160
+ get outputMappings$() {
161
+ return this._outputMappings$.asObservable();
162
+ }
163
+ get requirementsLoading$() {
164
+ return this._loadingRequirements$.asObservable();
165
+ }
166
+ get fieldsLoading$() {
167
+ return this._loadingFields$.asObservable();
168
+ }
169
+ get pluginDependencies$() {
170
+ return this._pluginDependencies$.asObservable();
171
+ }
172
+ get isNestedBuildingBlock$() {
173
+ return this._isNestedBuildingBlock$.asObservable();
174
+ }
175
+ setIsNestedBuildingBlock(isNested) {
176
+ this._isNestedBuildingBlock$.next(isNested);
177
+ }
178
+ get mappingsComplete$() {
179
+ return combineLatest([
180
+ this.requiredPluginKeys$,
181
+ this.pluginMappings$,
182
+ this.definitionVersionTag$,
183
+ this.isNestedBuildingBlock$,
184
+ ]).pipe(map(([keys, mappings, version, isNested]) => !!version && (isNested || keys.every(key => !!mappings[key]))));
185
+ }
186
+ setDefinitionKey(key, initialVersionTag) {
187
+ this._definitionKey$.next(key);
188
+ this._definitionVersionTag$.next(null);
189
+ this._versions$.next([]);
190
+ this.clearPluginRequirements();
191
+ this.clearMappings();
192
+ this.clearFields();
193
+ this._versionSubscription?.unsubscribe();
194
+ if (!key)
195
+ return;
196
+ this._versionSubscription = this.processLinkBuildingBlockApiService
197
+ .getVersionsForBuildingBlock(key)
198
+ .subscribe({
199
+ next: versions => {
200
+ this._versions$.next(versions.content.map(version => {
201
+ return version.versionTag;
202
+ }) ?? []);
203
+ if (initialVersionTag) {
204
+ this.setDefinitionVersionTag(initialVersionTag, true);
205
+ }
206
+ },
207
+ error: () => {
208
+ this._versions$.next([]);
209
+ },
210
+ });
211
+ }
212
+ setProcessLink(processLink) {
213
+ if (!processLink) {
214
+ this.reset();
215
+ return;
216
+ }
217
+ if (processLink.processLinkType === 'building-block') {
218
+ this.setDefinitionKey(processLink.buildingBlockDefinitionKey ?? null, processLink.buildingBlockDefinitionVersionTag ?? undefined);
219
+ this.setPluginConfigurationMappings(processLink.pluginConfigurationMappings);
220
+ this.setInputMappings(processLink.inputMappings ?? []);
221
+ this.setOutputMappings(processLink.outputMappings ?? []);
222
+ }
223
+ else {
224
+ this.reset();
225
+ }
226
+ }
227
+ setDefinitionVersionTag(versionTag, preserveMappings = false) {
228
+ this._definitionVersionTag$.next(versionTag);
229
+ this.clearPluginRequirements({ preserveMappings });
230
+ this.clearFields();
231
+ this.clearMappings({ preserveMappings });
232
+ const key = this._definitionKey$.getValue();
233
+ if (key && versionTag) {
234
+ this.loadPluginRequirements(key, versionTag);
235
+ this.loadFields(key, versionTag);
236
+ }
237
+ }
238
+ setPluginConfigurationMapping(pluginDefinitionKey, configurationId) {
239
+ const current = this._pluginMappings$.getValue();
240
+ this._pluginMappings$.next({
241
+ ...current,
242
+ [pluginDefinitionKey]: configurationId,
243
+ });
244
+ }
245
+ setPluginConfigurationMappings(mappings) {
246
+ const normalized = {};
247
+ Object.entries(mappings ?? {}).forEach(([key, value]) => {
248
+ normalized[key] = value;
249
+ });
250
+ this._pluginMappings$.next(normalized);
251
+ }
252
+ setInputMappings(mappings) {
253
+ this._inputMappings$.next(mappings ?? []);
254
+ }
255
+ setOutputMappings(mappings) {
256
+ this._outputMappings$.next(mappings ?? []);
257
+ }
258
+ getInputMappingsSnapshot() {
259
+ return [...this._inputMappings$.getValue()];
260
+ }
261
+ getOutputMappingsSnapshot() {
262
+ return [...this._outputMappings$.getValue()];
263
+ }
264
+ getPluginConfigurationMappingsSnapshot() {
265
+ return { ...this._pluginMappings$.getValue() };
266
+ }
267
+ getDefinitionSnapshot() {
268
+ return {
269
+ key: this._definitionKey$.getValue(),
270
+ versionTag: this._definitionVersionTag$.getValue(),
271
+ };
272
+ }
273
+ getBuildingBlockFieldsSnapshot() {
274
+ return [...this._buildingBlockFields$.getValue()];
275
+ }
276
+ reset() {
277
+ this._definitionKey$.next(null);
278
+ this._definitionVersionTag$.next(null);
279
+ this._versions$.next([]);
280
+ this._pluginMappings$.next({});
281
+ this._isNestedBuildingBlock$.next(false);
282
+ this.clearFields();
283
+ this.clearMappings();
284
+ this.clearPluginRequirements();
285
+ }
286
+ ngOnDestroy() {
287
+ this._versionSubscription?.unsubscribe();
288
+ this._requirementsSubscription?.unsubscribe();
289
+ this._fieldsSubscription?.unsubscribe();
290
+ }
291
+ loadPluginRequirements(key, versionTag) {
292
+ this._loadingRequirements$.next(true);
293
+ this._requirementsSubscription?.unsubscribe();
294
+ this._requirementsSubscription = this.processLinkBuildingBlockApiService
295
+ .getPluginDefinitionsForBuildingBlock(key, versionTag)
296
+ .subscribe({
297
+ next: res => {
298
+ const plugins = res?.plugins ?? [];
299
+ const pluginKeys = plugins.map(plugin => plugin.pluginDefinitionKey).filter(Boolean);
300
+ const dependencies = Array.from(new Set(plugins.flatMap(p => p.dependencies ?? []).map(d => d.key)));
301
+ this.applyPluginKeys(pluginKeys ?? []);
302
+ this._pluginDependencies$.next(dependencies);
303
+ this._loadingRequirements$.next(false);
304
+ },
305
+ error: () => {
306
+ this.applyPluginKeys([]);
307
+ this._pluginDependencies$.next([]);
308
+ this._loadingRequirements$.next(false);
309
+ },
310
+ });
311
+ }
312
+ applyPluginKeys(pluginKeys) {
313
+ const currentMappings = this._pluginMappings$.getValue();
314
+ const normalized = {};
315
+ pluginKeys.forEach(key => {
316
+ normalized[key] = currentMappings[key] ?? null;
317
+ });
318
+ this._requiredPluginKeys$.next(pluginKeys);
319
+ this._pluginMappings$.next(normalized);
320
+ }
321
+ loadFields(key, versionTag) {
322
+ this._loadingFields$.next(true);
323
+ this._fieldsSubscription?.unsubscribe();
324
+ this._fieldsSubscription = this.processLinkBuildingBlockApiService
325
+ .getFieldsForBuildingBlock(key, versionTag)
326
+ .subscribe({
327
+ next: fields => {
328
+ this._buildingBlockFields$.next(fields ?? []);
329
+ this._loadingFields$.next(false);
330
+ },
331
+ error: () => {
332
+ this._buildingBlockFields$.next([]);
333
+ this._loadingFields$.next(false);
334
+ },
335
+ });
336
+ }
337
+ clearPluginRequirements(options = {}) {
338
+ this._requirementsSubscription?.unsubscribe();
339
+ this._requiredPluginKeys$.next([]);
340
+ if (!options.preserveMappings) {
341
+ this._pluginMappings$.next({});
342
+ }
343
+ this._loadingRequirements$.next(false);
344
+ }
345
+ clearFields() {
346
+ this._fieldsSubscription?.unsubscribe();
347
+ this._buildingBlockFields$.next([]);
348
+ this._loadingFields$.next(false);
349
+ }
350
+ clearMappings(options = {}) {
351
+ if (options.preserveMappings) {
352
+ return;
353
+ }
354
+ this._inputMappings$.next([]);
355
+ this._outputMappings$.next([]);
356
+ }
357
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: BuildingBlockStateService, deps: [{ token: ProcessLinkBuildingBlockApiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
358
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: BuildingBlockStateService, providedIn: 'root' }); }
359
+ }
360
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: BuildingBlockStateService, decorators: [{
361
+ type: Injectable,
362
+ args: [{
363
+ providedIn: 'root',
364
+ }]
365
+ }], ctorParameters: () => [{ type: ProcessLinkBuildingBlockApiService }] });
366
+
31
367
  /*
32
368
  * Copyright 2015-2025 Ritense BV, the Netherlands.
33
369
  *
@@ -70,15 +406,15 @@ class FormFlowService extends BaseApiService {
70
406
  navigateToStep(instanceId, currentStepInstanceId, targetStepInstanceId, submissionData) {
71
407
  return this.httpClient.post(this.getApiUrl(`v1/form-flow/instance/${instanceId}/step/instance/${currentStepInstanceId}/to/step/instance/${targetStepInstanceId}`), submissionData);
72
408
  }
73
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFlowService, deps: [{ token: i1.HttpClient }, { token: i2.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
74
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFlowService, providedIn: 'root' }); }
409
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormFlowService, deps: [{ token: i2.HttpClient }, { token: i1.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
410
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormFlowService, providedIn: 'root' }); }
75
411
  }
76
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFlowService, decorators: [{
412
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormFlowService, decorators: [{
77
413
  type: Injectable,
78
414
  args: [{
79
415
  providedIn: 'root',
80
416
  }]
81
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.ConfigService }] });
417
+ }], ctorParameters: () => [{ type: i2.HttpClient }, { type: i1.ConfigService }] });
82
418
 
83
419
  /*
84
420
  * Copyright 2015-2025 Ritense BV, the Netherlands.
@@ -118,17 +454,22 @@ class PluginStateService {
118
454
  return this._save$.asObservable();
119
455
  }
120
456
  get functionKey$() {
121
- return this._selectedProcessLink$.pipe(switchMap(processLink => !processLink
122
- ? this._selectedPluginFunction$.pipe(map(pluginFunction => pluginFunction?.key))
123
- : of(processLink?.pluginActionDefinitionKey)));
457
+ // Prioritize user-selected function, fall back to process link's saved action
458
+ return this._selectedPluginFunction$.pipe(map$1(pluginFunction => pluginFunction?.key));
124
459
  }
125
460
  get pluginDefinitionKey$() {
126
461
  return this._selectedProcessLink$.pipe(switchMap(selectedProcesLink => !selectedProcesLink
127
- ? this._selectedPluginConfiguration$.pipe(map(configuration => configuration?.pluginDefinition.key))
462
+ ? combineLatest([
463
+ this._selectedPluginConfiguration$,
464
+ this._selectedPluginDefinition$,
465
+ ]).pipe(map$1(([configuration, definition]) => configuration?.pluginDefinition.key || definition?.key))
128
466
  : combineLatest([
129
467
  this._selectedProcessLink$,
130
468
  this.pluginService.pluginSpecifications$,
131
- ]).pipe(map(([processLink, pluginSpecifications]) => {
469
+ ]).pipe(map$1(([processLink, pluginSpecifications]) => {
470
+ if (processLink?.pluginDefinitionKey) {
471
+ return processLink.pluginDefinitionKey;
472
+ }
132
473
  const pluginSpecification = pluginSpecifications.find(specification => {
133
474
  const functionKeys = specification?.functionConfigurationComponents &&
134
475
  Object.keys(specification.functionConfigurationComponents);
@@ -148,6 +489,60 @@ class PluginStateService {
148
489
  }
149
490
  selectProcessLink(processLink) {
150
491
  this._selectedProcessLink$.next(processLink);
492
+ // When editing a plugin process link, populate the plugin definition
493
+ if (processLink?.processLinkType === 'plugin') {
494
+ this.loadPluginDefinitionForProcessLink(processLink);
495
+ }
496
+ }
497
+ loadPluginDefinitionForProcessLink(processLink) {
498
+ // Get the plugin definition key - either directly or from plugin specifications
499
+ this.getPluginDefinitionKeyForProcessLink(processLink)
500
+ .pipe(take(1))
501
+ .subscribe(pluginDefinitionKey => {
502
+ if (pluginDefinitionKey) {
503
+ // Fetch all plugin definitions and find the one matching the key
504
+ this.pluginManagementService
505
+ .getPluginDefinitions()
506
+ .pipe(take(1), map$1(definitions => definitions.find(d => d.key === pluginDefinitionKey)))
507
+ .subscribe(definition => {
508
+ if (definition) {
509
+ this._selectedPluginDefinition$.next(definition);
510
+ // Also set the selected function if available
511
+ if (processLink.pluginActionDefinitionKey) {
512
+ this._selectedPluginFunction$.next({
513
+ key: processLink.pluginActionDefinitionKey,
514
+ });
515
+ }
516
+ }
517
+ });
518
+ }
519
+ });
520
+ // Load and set the plugin configuration if available
521
+ if (processLink.pluginConfigurationId) {
522
+ this.pluginManagementService
523
+ .getAllPluginConfigurations()
524
+ .pipe(take(1), map$1(configs => configs.find(c => c.id === processLink.pluginConfigurationId)))
525
+ .subscribe(configuration => {
526
+ if (configuration) {
527
+ this._selectedPluginConfiguration$.next(configuration);
528
+ }
529
+ });
530
+ }
531
+ }
532
+ getPluginDefinitionKeyForProcessLink(processLink) {
533
+ // If the key is directly available, use it
534
+ if (processLink.pluginDefinitionKey) {
535
+ return of(processLink.pluginDefinitionKey);
536
+ }
537
+ // Otherwise, derive it from plugin specifications using the action key
538
+ return this.pluginService.pluginSpecifications$.pipe(map$1(pluginSpecifications => {
539
+ const pluginSpecification = pluginSpecifications.find(specification => {
540
+ const functionKeys = specification?.functionConfigurationComponents &&
541
+ Object.keys(specification.functionConfigurationComponents);
542
+ return functionKeys?.includes(processLink.pluginActionDefinitionKey);
543
+ });
544
+ return pluginSpecification?.pluginId;
545
+ }));
151
546
  }
152
547
  deselectProcessLink() {
153
548
  this._selectedProcessLink$.next(undefined);
@@ -155,10 +550,10 @@ class PluginStateService {
155
550
  save() {
156
551
  this._save$.next(null);
157
552
  }
158
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: PluginStateService, deps: [{ token: i1$1.PluginManagementService }, { token: i1$1.PluginService }], target: i0.ɵɵFactoryTarget.Injectable }); }
159
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: PluginStateService, providedIn: 'root' }); }
553
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: PluginStateService, deps: [{ token: i1$1.PluginManagementService }, { token: i1$1.PluginService }], target: i0.ɵɵFactoryTarget.Injectable }); }
554
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: PluginStateService, providedIn: 'root' }); }
160
555
  }
161
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: PluginStateService, decorators: [{
556
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: PluginStateService, decorators: [{
162
557
  type: Injectable,
163
558
  args: [{
164
559
  providedIn: 'root',
@@ -189,7 +584,7 @@ class ProcessLinkService {
189
584
  getTasksWithProcessLinks(processInstanceId) {
190
585
  return this.http
191
586
  .get(`${this.VALTIMO_ENDPOINT_URI}v1/process/${processInstanceId}/tasks/process-link`, {})
192
- .pipe(map$1(res => res || []));
587
+ .pipe(map(res => res || []));
193
588
  }
194
589
  getProcessLink(getProcessLinkRequest) {
195
590
  var params = new HttpParams().set('processDefinitionId', getProcessLinkRequest.processDefinitionId);
@@ -199,15 +594,6 @@ class ProcessLinkService {
199
594
  params,
200
595
  });
201
596
  }
202
- updateProcessLink(updateProcessLinkRequest) {
203
- return this.http.put(`${this.VALTIMO_ENDPOINT_URI}v1/process-link`, this.emptyStringToNull(updateProcessLinkRequest));
204
- }
205
- saveProcessLink(saveProcessLinkRequest) {
206
- return this.http.post(`${this.VALTIMO_ENDPOINT_URI}v1/process-link`, this.emptyStringToNull(saveProcessLinkRequest));
207
- }
208
- deleteProcessLink(id) {
209
- return this.http.delete(`${this.VALTIMO_ENDPOINT_URI}v1/process-link/${id}`);
210
- }
211
597
  getProcessLinkCandidates(activityType) {
212
598
  return this.http.get(`${this.VALTIMO_ENDPOINT_URI}v1/process-link/types?activityType=${activityType}`);
213
599
  }
@@ -233,6 +619,18 @@ class ProcessLinkService {
233
619
  formData.append('startableByUser', String(startableByUser));
234
620
  return this.http.post(`${this.VALTIMO_ENDPOINT_URI}management/v1/case-definition/${caseDefinitionKey}/version/${caseDefinitionVersionTag}/process-definition`, formData);
235
621
  }
622
+ deployProcessWithProcessLinksForBuildingBlock(processLinks = [], processDefinitionId, processXml, buildingBlockKey, buildingBlockVersionTag) {
623
+ const formData = new FormData();
624
+ const processLinksBlob = new Blob([JSON.stringify(processLinks.map(processLink => this.emptyStringToNull(processLink)))], { type: 'application/json' });
625
+ if (processXml) {
626
+ formData.append('file', new File([processXml], `${buildingBlockKey}-${buildingBlockVersionTag}.bpmn`));
627
+ }
628
+ if (processDefinitionId) {
629
+ formData.append('processDefinitionId', processDefinitionId);
630
+ }
631
+ formData.append('processLinks', processLinksBlob);
632
+ return this.http.post(`${this.VALTIMO_ENDPOINT_URI}management/v1/building-block/${buildingBlockKey}/version/${buildingBlockVersionTag}/process-definition/${processDefinitionId}`, formData);
633
+ }
236
634
  submitForm(processLinkId, formData, documentId, taskInstanceId, documentDefinitionName) {
237
635
  let params = new HttpParams();
238
636
  if (documentId) {
@@ -288,85 +686,15 @@ class ProcessLinkService {
288
686
  }
289
687
  return object;
290
688
  }
291
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkService, deps: [{ token: i2.ConfigService }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
292
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkService, providedIn: 'root' }); }
689
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkService, deps: [{ token: i1.ConfigService }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
690
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkService, providedIn: 'root' }); }
293
691
  }
294
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkService, decorators: [{
692
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkService, decorators: [{
295
693
  type: Injectable,
296
694
  args: [{
297
695
  providedIn: 'root',
298
696
  }]
299
- }], ctorParameters: () => [{ type: i2.ConfigService }, { type: i1.HttpClient }] });
300
-
301
- /*
302
- * Copyright 2015-2025 Ritense BV, the Netherlands.
303
- *
304
- * Licensed under EUPL, Version 1.2 (the "License");
305
- * you may not use this file except in compliance with the License.
306
- * You may obtain a copy of the License at
307
- *
308
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
309
- *
310
- * Unless required by applicable law or agreed to in writing, software
311
- * distributed under the License is distributed on an "AS IS" basis,
312
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
313
- * See the License for the specific language governing permissions and
314
- * limitations under the License.
315
- */
316
-
317
- var ProcessLinkEditMode;
318
- (function (ProcessLinkEditMode) {
319
- ProcessLinkEditMode[ProcessLinkEditMode["SAVE_TO_BACKEND"] = 0] = "SAVE_TO_BACKEND";
320
- ProcessLinkEditMode[ProcessLinkEditMode["EMIT_EVENTS"] = 1] = "EMIT_EVENTS";
321
- })(ProcessLinkEditMode || (ProcessLinkEditMode = {}));
322
-
323
- /*
324
- * Copyright 2015-2025 Ritense BV, the Netherlands.
325
- *
326
- * Licensed under EUPL, Version 1.2 (the "License");
327
- * you may not use this file except in compliance with the License.
328
- * You may obtain a copy of the License at
329
- *
330
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
331
- *
332
- * Unless required by applicable law or agreed to in writing, software
333
- * distributed under the License is distributed on an "AS IS" basis,
334
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
335
- * See the License for the specific language governing permissions and
336
- * limitations under the License.
337
- */
338
-
339
- /*
340
- * Copyright 2015-2025 Ritense BV, the Netherlands.
341
- *
342
- * Licensed under EUPL, Version 1.2 (the "License");
343
- * you may not use this file except in compliance with the License.
344
- * You may obtain a copy of the License at
345
- *
346
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
347
- *
348
- * Unless required by applicable law or agreed to in writing, software
349
- * distributed under the License is distributed on an "AS IS" basis,
350
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
351
- * See the License for the specific language governing permissions and
352
- * limitations under the License.
353
- */
354
-
355
- /*
356
- * Copyright 2015-2025 Ritense BV, the Netherlands.
357
- *
358
- * Licensed under EUPL, Version 1.2 (the "License");
359
- * you may not use this file except in compliance with the License.
360
- * You may obtain a copy of the License at
361
- *
362
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
363
- *
364
- * Unless required by applicable law or agreed to in writing, software
365
- * distributed under the License is distributed on an "AS IS" basis,
366
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
367
- * See the License for the specific language governing permissions and
368
- * limitations under the License.
369
- */
697
+ }], ctorParameters: () => [{ type: i1.ConfigService }, { type: i2.HttpClient }] });
370
698
 
371
699
  /*
372
700
  * Copyright 2015-2025 Ritense BV, the Netherlands.
@@ -407,6 +735,7 @@ const formSizeToCarbonModalSizeMap = {
407
735
  medium: 'md',
408
736
  large: 'lg',
409
737
  };
738
+ const UNSUPPORTED_PROCESS_LINK_TYPES_IN_BUILDING_BLOCK = ['form', 'form-flow', 'ui-component'];
410
739
 
411
740
  /*
412
741
  * Copyright 2015-2025 Ritense BV, the Netherlands.
@@ -520,10 +849,10 @@ class ProcessLinkButtonService {
520
849
  this.hideNextButton();
521
850
  this.disableNextButton();
522
851
  }
523
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkButtonService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
524
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkButtonService, providedIn: 'root' }); }
852
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkButtonService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
853
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkButtonService, providedIn: 'root' }); }
525
854
  }
526
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkButtonService, decorators: [{
855
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkButtonService, decorators: [{
527
856
  type: Injectable,
528
857
  args: [{
529
858
  providedIn: 'root',
@@ -551,7 +880,7 @@ class ProcessLinkStepService {
551
880
  this._steps$,
552
881
  this._disableSteps$,
553
882
  this.translateService.stream('key'),
554
- ]).pipe(filter(([steps]) => !!steps), map$1(([steps, disableSteps]) => steps.map(step => ({
883
+ ]).pipe(filter(([steps]) => !!steps), map(([steps, disableSteps]) => steps.map(step => ({
555
884
  ...step,
556
885
  disabled: disableSteps,
557
886
  label: this.translateService.instant(`processLinkSteps.${step.label}`),
@@ -564,7 +893,7 @@ class ProcessLinkStepService {
564
893
  return this._currentStepIndex$.asObservable();
565
894
  }
566
895
  get currentStepId$() {
567
- return combineLatest([this._steps$, this.currentStepIndex$]).pipe(filter(([steps, currentStepIndex]) => !!steps && typeof currentStepIndex === 'number'), map$1(([steps, currentStepIndex]) => steps.length > 0 ? steps[currentStepIndex]?.label : ''));
896
+ return combineLatest([this._steps$, this.currentStepIndex$]).pipe(filter(([steps, currentStepIndex]) => !!steps && typeof currentStepIndex === 'number'), map(([steps, currentStepIndex]) => steps.length > 0 ? steps[currentStepIndex]?.label : ''));
568
897
  }
569
898
  get hasOneProcessLinkType$() {
570
899
  return this._hasOneProcessLinkType$.asObservable();
@@ -578,6 +907,7 @@ class ProcessLinkStepService {
578
907
  this._currentStepIndex$ = new BehaviorSubject(0);
579
908
  this._disableSteps$ = new BehaviorSubject(false);
580
909
  this._hasOneProcessLinkType$ = new BehaviorSubject(false);
910
+ this._context = 'independent';
581
911
  }
582
912
  reset() {
583
913
  this._currentStepIndex$.next(0);
@@ -618,17 +948,19 @@ class ProcessLinkStepService {
618
948
  this._currentStepIndex$.next(0);
619
949
  }
620
950
  setChoosePluginConfigurationSteps() {
951
+ const selectionLabel = this._context === 'buildingBlock' ? 'choosePluginDefinition' : 'choosePluginConfiguration';
621
952
  this._steps$.next([
622
953
  { label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.plugin' },
623
- { label: 'choosePluginConfiguration' },
954
+ { label: selectionLabel },
624
955
  { label: 'choosePluginAction', disabled: true },
625
956
  { label: 'configurePluginAction', disabled: true },
626
957
  ]);
627
958
  this._currentStepIndex$.next(1);
628
959
  }
629
960
  setSingleChoosePluginConfigurationSteps() {
961
+ const selectionLabel = this._context === 'buildingBlock' ? 'choosePluginDefinition' : 'choosePluginConfiguration';
630
962
  this._steps$.next([
631
- { label: 'choosePluginConfiguration' },
963
+ { label: selectionLabel },
632
964
  { label: 'choosePluginAction', disabled: true },
633
965
  { label: 'configurePluginAction', disabled: true },
634
966
  ]);
@@ -638,12 +970,17 @@ class ProcessLinkStepService {
638
970
  combineLatest([
639
971
  this._hasOneProcessLinkType$,
640
972
  this.pluginStateService.selectedPluginConfiguration$,
973
+ this.pluginStateService.selectedPluginDefinition$,
641
974
  ])
642
975
  .pipe(take(1))
643
- .subscribe(([hasOneType, selectedConfiguration]) => {
976
+ .subscribe(([hasOneType, selectedConfiguration, selectedDefinition]) => {
977
+ const selectionLabel = this._context === 'buildingBlock'
978
+ ? 'choosePluginDefinition'
979
+ : 'choosePluginConfiguration';
980
+ const selectedPluginLabel = this.getSelectedPluginLabel(selectedConfiguration, selectedDefinition);
644
981
  if (hasOneType) {
645
982
  this._steps$.next([
646
- { label: 'choosePluginConfiguration', secondaryLabel: selectedConfiguration.title },
983
+ { label: selectionLabel, secondaryLabel: selectedPluginLabel },
647
984
  { label: 'choosePluginAction' },
648
985
  { label: 'configurePluginAction', disabled: true },
649
986
  ]);
@@ -656,7 +993,7 @@ class ProcessLinkStepService {
656
993
  else {
657
994
  this._steps$.next([
658
995
  { label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.plugin' },
659
- { label: 'choosePluginConfiguration', secondaryLabel: selectedConfiguration.title },
996
+ { label: selectionLabel, secondaryLabel: selectedPluginLabel },
660
997
  { label: 'choosePluginAction' },
661
998
  { label: 'configurePluginAction', disabled: true },
662
999
  ]);
@@ -673,13 +1010,21 @@ class ProcessLinkStepService {
673
1010
  this._hasOneProcessLinkType$,
674
1011
  this.pluginStateService.selectedPluginConfiguration$,
675
1012
  this.pluginStateService.selectedPluginFunction$,
1013
+ this.pluginStateService.selectedPluginDefinition$,
676
1014
  ])
677
1015
  .pipe(take(1))
678
- .subscribe(([hasOneType, selectedConfiguration, selectedFunction]) => {
679
- const selectedFunctionTranslation = this.pluginTranslateService.instant(selectedFunction.key, selectedConfiguration.pluginDefinition.key);
1016
+ .subscribe(([hasOneType, selectedConfiguration, selectedFunction, selectedDefinition]) => {
1017
+ const pluginKey = selectedDefinition?.key || selectedConfiguration?.pluginDefinition?.key || '';
1018
+ const selectedFunctionTranslation = pluginKey
1019
+ ? this.pluginTranslateService.instant(selectedFunction.key, pluginKey)
1020
+ : selectedFunction.key;
1021
+ const selectionLabel = this._context === 'buildingBlock'
1022
+ ? 'choosePluginDefinition'
1023
+ : 'choosePluginConfiguration';
1024
+ const selectedPluginLabel = this.getSelectedPluginLabel(selectedConfiguration, selectedDefinition);
680
1025
  if (hasOneType) {
681
1026
  this._steps$.next([
682
- { label: 'choosePluginConfiguration', secondaryLabel: selectedConfiguration.title },
1027
+ { label: selectionLabel, secondaryLabel: selectedPluginLabel },
683
1028
  { label: 'choosePluginAction', secondaryLabel: selectedFunctionTranslation },
684
1029
  { label: 'configurePluginAction' },
685
1030
  ]);
@@ -690,7 +1035,7 @@ class ProcessLinkStepService {
690
1035
  else {
691
1036
  this._steps$.next([
692
1037
  { label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.plugin' },
693
- { label: 'choosePluginConfiguration', secondaryLabel: selectedConfiguration.title },
1038
+ { label: selectionLabel, secondaryLabel: selectedPluginLabel },
694
1039
  { label: 'choosePluginAction', secondaryLabel: selectedFunctionTranslation },
695
1040
  { label: 'configurePluginAction' },
696
1041
  ]);
@@ -700,6 +1045,72 @@ class ProcessLinkStepService {
700
1045
  }
701
1046
  });
702
1047
  }
1048
+ setBuildingBlockSteps() {
1049
+ this._hasOneProcessLinkType$.pipe(take(1)).subscribe(hasOneType => {
1050
+ this._steps$.next([
1051
+ { label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.building-block' },
1052
+ { label: 'selectBuildingBlock' },
1053
+ { label: 'configureBuildingBlockPlugins', disabled: true },
1054
+ { label: 'configureBuildingBlockMappings', disabled: true },
1055
+ ]);
1056
+ this._currentStepIndex$.next(hasOneType ? 0 : 1);
1057
+ this.buttonService.showBackButton();
1058
+ this.buttonService.showNextButton();
1059
+ this.buttonService.hideSaveButton();
1060
+ this.buttonService.disableNextButton();
1061
+ });
1062
+ }
1063
+ setConfigureBuildingBlockPluginsStep(selectionLabel) {
1064
+ this._hasOneProcessLinkType$.pipe(take(1)).subscribe(hasOneType => {
1065
+ const steps = hasOneType
1066
+ ? [
1067
+ { label: 'selectBuildingBlock', secondaryLabel: selectionLabel },
1068
+ { label: 'configureBuildingBlockPlugins' },
1069
+ { label: 'configureBuildingBlockMappings', disabled: true },
1070
+ ]
1071
+ : [
1072
+ { label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.building-block' },
1073
+ { label: 'selectBuildingBlock', secondaryLabel: selectionLabel },
1074
+ { label: 'configureBuildingBlockPlugins' },
1075
+ { label: 'configureBuildingBlockMappings', disabled: true },
1076
+ ];
1077
+ this._steps$.next(steps);
1078
+ this._currentStepIndex$.next(hasOneType ? 1 : 2);
1079
+ this.buttonService.showNextButton();
1080
+ this.buttonService.hideSaveButton();
1081
+ this.buttonService.disableNextButton();
1082
+ this.buttonService.showBackButton();
1083
+ });
1084
+ }
1085
+ setConfigureBuildingBlockMappingsStep(selectionLabel) {
1086
+ this._hasOneProcessLinkType$.pipe(take(1)).subscribe(hasOneType => {
1087
+ const steps = hasOneType
1088
+ ? [
1089
+ { label: 'selectBuildingBlock', secondaryLabel: selectionLabel },
1090
+ { label: 'configureBuildingBlockPlugins' },
1091
+ { label: 'configureBuildingBlockMappings' },
1092
+ ]
1093
+ : [
1094
+ { label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.building-block' },
1095
+ { label: 'selectBuildingBlock', secondaryLabel: selectionLabel },
1096
+ { label: 'configureBuildingBlockPlugins' },
1097
+ { label: 'configureBuildingBlockMappings' },
1098
+ ];
1099
+ this._steps$.next(steps);
1100
+ this._currentStepIndex$.next(hasOneType ? 2 : 3);
1101
+ this.buttonService.hideNextButton();
1102
+ this.buttonService.showSaveButton();
1103
+ this.buttonService.disableSaveButton();
1104
+ this.buttonService.showBackButton();
1105
+ });
1106
+ }
1107
+ updateBuildingBlockSelectionStepLabel(label) {
1108
+ const steps = this._steps$.getValue();
1109
+ if (!steps?.length)
1110
+ return;
1111
+ const updatedSteps = steps.map(step => step.label === 'selectBuildingBlock' ? { ...step, secondaryLabel: label } : step);
1112
+ this._steps$.next(updatedSteps);
1113
+ }
703
1114
  setURLSteps() {
704
1115
  this._steps$.next([
705
1116
  { label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.url' },
@@ -757,6 +1168,9 @@ class ProcessLinkStepService {
757
1168
  this.buttonService.showNextButton();
758
1169
  }
759
1170
  break;
1171
+ case 'building-block':
1172
+ this.setBuildingBlockSteps();
1173
+ break;
760
1174
  case 'url':
761
1175
  if (hasOneOption) {
762
1176
  this.setSingleURLStep();
@@ -784,15 +1198,133 @@ class ProcessLinkStepService {
784
1198
  ]);
785
1199
  this._currentStepIndex$.next(0);
786
1200
  }
787
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkStepService, deps: [{ token: i2$1.TranslateService }, { token: ProcessLinkButtonService }, { token: PluginStateService }, { token: i1$1.PluginTranslationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
788
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkStepService, providedIn: 'root' }); }
1201
+ getSelectedPluginLabel(selectedConfiguration, selectedDefinition) {
1202
+ if (this._context === 'buildingBlock') {
1203
+ const definitionKey = selectedDefinition?.key || selectedConfiguration?.pluginDefinition?.key;
1204
+ return definitionKey ? this.pluginTranslateService.instant('title', definitionKey) : '';
1205
+ }
1206
+ return selectedConfiguration?.title || '';
1207
+ }
1208
+ setContext(context) {
1209
+ this._context = context;
1210
+ }
1211
+ /**
1212
+ * Initialize steps for editing an existing process link.
1213
+ * Sets up configuration steps only (skipping type selection since type can't be changed).
1214
+ * Navigates to the final step.
1215
+ */
1216
+ initializeEditModeSteps(processLinkType) {
1217
+ switch (processLinkType) {
1218
+ case 'form':
1219
+ // Single step for form - just the form selection
1220
+ this._steps$.next([{ label: 'selectForm' }]);
1221
+ this._currentStepIndex$.next(0);
1222
+ break;
1223
+ case 'form-flow':
1224
+ // Single step for form-flow - just the form flow selection
1225
+ this._steps$.next([{ label: 'selectFormFlow' }]);
1226
+ this._currentStepIndex$.next(0);
1227
+ break;
1228
+ case 'plugin':
1229
+ const selectionLabel = this._context === 'buildingBlock' ? 'choosePluginDefinition' : 'choosePluginConfiguration';
1230
+ // Plugin has 3 config steps: select config, select action, configure action
1231
+ this._steps$.next([
1232
+ { label: selectionLabel },
1233
+ { label: 'choosePluginAction' },
1234
+ { label: 'configurePluginAction' },
1235
+ ]);
1236
+ this._currentStepIndex$.next(2); // Start at last step
1237
+ break;
1238
+ case 'building-block':
1239
+ // Building block has 3 config steps: select BB, configure plugins, configure mappings
1240
+ this._steps$.next([
1241
+ { label: 'selectBuildingBlock' },
1242
+ { label: 'configureBuildingBlockPlugins' },
1243
+ { label: 'configureBuildingBlockMappings' },
1244
+ ]);
1245
+ this._currentStepIndex$.next(2); // Start at last step
1246
+ break;
1247
+ case 'ui-component':
1248
+ // Single step for UI component
1249
+ this._steps$.next([{ label: 'uiComponent' }]);
1250
+ this._currentStepIndex$.next(0);
1251
+ break;
1252
+ case 'url':
1253
+ // Single step for URL
1254
+ this._steps$.next([{ label: 'selectURL' }]);
1255
+ this._currentStepIndex$.next(0);
1256
+ break;
1257
+ }
1258
+ }
1259
+ /**
1260
+ * Navigate to a specific step by index (for edit mode navigation)
1261
+ */
1262
+ goToStep(stepIndex) {
1263
+ const steps = this._steps$.getValue();
1264
+ if (steps && stepIndex >= 0 && stepIndex < steps.length) {
1265
+ this._currentStepIndex$.next(stepIndex);
1266
+ }
1267
+ }
1268
+ /**
1269
+ * Navigate to the previous step (for edit mode navigation)
1270
+ * Returns true if navigation was successful, false if already at first step
1271
+ */
1272
+ goToPreviousStep() {
1273
+ const currentIndex = this._currentStepIndex$.getValue();
1274
+ if (currentIndex > 0) {
1275
+ this._currentStepIndex$.next(currentIndex - 1);
1276
+ return true;
1277
+ }
1278
+ return false;
1279
+ }
1280
+ /**
1281
+ * Navigate to the next step (for edit mode navigation)
1282
+ * Returns true if navigation was successful, false if already at last step
1283
+ */
1284
+ goToNextStep() {
1285
+ const steps = this._steps$.getValue();
1286
+ const currentIndex = this._currentStepIndex$.getValue();
1287
+ if (steps && currentIndex < steps.length - 1) {
1288
+ this._currentStepIndex$.next(currentIndex + 1);
1289
+ return true;
1290
+ }
1291
+ return false;
1292
+ }
1293
+ /**
1294
+ * Check if currently at the first step
1295
+ */
1296
+ isFirstStep() {
1297
+ return this._currentStepIndex$.getValue() === 0;
1298
+ }
1299
+ /**
1300
+ * Check if currently at the last step
1301
+ */
1302
+ isLastStep() {
1303
+ const steps = this._steps$.getValue();
1304
+ const currentIndex = this._currentStepIndex$.getValue();
1305
+ return steps ? currentIndex === steps.length - 1 : false;
1306
+ }
1307
+ /**
1308
+ * Get the total number of steps
1309
+ */
1310
+ getStepCount() {
1311
+ return this._steps$.getValue()?.length || 0;
1312
+ }
1313
+ /**
1314
+ * Get the current step index
1315
+ */
1316
+ getCurrentStepIndex() {
1317
+ return this._currentStepIndex$.getValue();
1318
+ }
1319
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkStepService, deps: [{ token: i3.TranslateService }, { token: ProcessLinkButtonService }, { token: PluginStateService }, { token: i1$1.PluginTranslationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1320
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkStepService, providedIn: 'root' }); }
789
1321
  }
790
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkStepService, decorators: [{
1322
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkStepService, decorators: [{
791
1323
  type: Injectable,
792
1324
  args: [{
793
1325
  providedIn: 'root',
794
1326
  }]
795
- }], ctorParameters: () => [{ type: i2$1.TranslateService }, { type: ProcessLinkButtonService }, { type: PluginStateService }, { type: i1$1.PluginTranslationService }] });
1327
+ }], ctorParameters: () => [{ type: i3.TranslateService }, { type: ProcessLinkButtonService }, { type: PluginStateService }, { type: i1$1.PluginTranslationService }] });
796
1328
 
797
1329
  /*
798
1330
  * Copyright 2015-2025 Ritense BV, the Netherlands.
@@ -826,17 +1358,22 @@ class ProcessLinkStateService {
826
1358
  return this._elementName$.asObservable();
827
1359
  }
828
1360
  get availableProcessLinkTypes$() {
829
- return this._availableProcessLinkTypes$.pipe(map$1(types => (!this.formCustomComponentConfig
1361
+ return combineLatest([this._availableProcessLinkTypes$, this._context$]).pipe(map(([types, context]) => (!this.formCustomComponentConfig
830
1362
  ? types.map(type => ({
831
1363
  ...type,
832
1364
  enabled: type.processLinkType === 'ui-component' ? false : type.enabled,
833
1365
  }))
834
- : types).filter(type => type.processLinkType !== 'url')));
1366
+ : types)
1367
+ .filter(type => type.processLinkType !== 'url')
1368
+ .map(type => context === 'buildingBlock' &&
1369
+ UNSUPPORTED_PROCESS_LINK_TYPES_IN_BUILDING_BLOCK.includes(type.processLinkType)
1370
+ ? { ...type, enabled: false }
1371
+ : type)));
835
1372
  }
836
1373
  get hideProgressIndicator$() {
837
1374
  return this._availableProcessLinkTypes$
838
1375
  .asObservable()
839
- .pipe(map$1(availableTypes => Array.isArray(availableTypes) &&
1376
+ .pipe(map(availableTypes => Array.isArray(availableTypes) &&
840
1377
  availableTypes.length === 1 &&
841
1378
  (availableTypes[0]?.processLinkType === 'form' ||
842
1379
  availableTypes[0]?.processLinkType === 'form-flow')));
@@ -854,10 +1391,7 @@ class ProcessLinkStateService {
854
1391
  return this._selectedProcessLink$.asObservable();
855
1392
  }
856
1393
  get typeOfSelectedProcessLink$() {
857
- return this.selectedProcessLink$.pipe(map$1(processLink => processLink?.processLinkType || ''));
858
- }
859
- get processLinkEditMode() {
860
- return this._processLinkEditMode$.getValue();
1394
+ return this.selectedProcessLink$.pipe(map(processLink => processLink?.processLinkType || ''));
861
1395
  }
862
1396
  get viewModelEnabled$() {
863
1397
  return this._viewModelEnabled$.asObservable();
@@ -865,10 +1399,17 @@ class ProcessLinkStateService {
865
1399
  get url$() {
866
1400
  return this._url$.asObservable();
867
1401
  }
868
- constructor(processLinkStepService, buttonService, pluginStateService, formCustomComponentConfig) {
1402
+ get context$() {
1403
+ return this._context$.asObservable();
1404
+ }
1405
+ get isEditing$() {
1406
+ return this._isEditing$.asObservable();
1407
+ }
1408
+ constructor(processLinkStepService, buttonService, pluginStateService, buildingBlockStateService, formCustomComponentConfig) {
869
1409
  this.processLinkStepService = processLinkStepService;
870
1410
  this.buttonService = buttonService;
871
1411
  this.pluginStateService = pluginStateService;
1412
+ this.buildingBlockStateService = buildingBlockStateService;
872
1413
  this.formCustomComponentConfig = formCustomComponentConfig;
873
1414
  this._showModal$ = new BehaviorSubject(false);
874
1415
  this._availableProcessLinkTypes$ = new BehaviorSubject([]);
@@ -879,14 +1420,18 @@ class ProcessLinkStateService {
879
1420
  this._saving$ = new BehaviorSubject(false);
880
1421
  this._modalParams$ = new BehaviorSubject(undefined);
881
1422
  this._selectedProcessLink$ = new BehaviorSubject(undefined);
882
- this._processLinkEditMode$ = new BehaviorSubject(ProcessLinkEditMode.SAVE_TO_BACKEND);
1423
+ this._isEditing$ = new BehaviorSubject(false);
883
1424
  this._processLinkUpdateEvents$ = new Subject();
884
1425
  this._processLinkCreateEvents$ = new Subject();
885
1426
  this._processLinkDeleteEvents$ = new Subject();
1427
+ this._context$ = new BehaviorSubject('independent');
886
1428
  this.openAvailableProcessLinkTypesSubscription();
1429
+ this.openEditModeNavigationSubscriptions();
887
1430
  }
888
1431
  ngOnDestroy() {
889
1432
  this._availableProcessLinkTypesSubscription?.unsubscribe();
1433
+ this._backButtonSubscription?.unsubscribe();
1434
+ this._nextButtonSubscription?.unsubscribe();
890
1435
  }
891
1436
  setAvailableProcessLinkTypes(processLinkTypes) {
892
1437
  const hasOneOption = processLinkTypes.length === 1;
@@ -934,20 +1479,28 @@ class ProcessLinkStateService {
934
1479
  setModalParams(params) {
935
1480
  this._modalParams$.next(params);
936
1481
  }
1482
+ setContext(context) {
1483
+ this._context$.next(context);
1484
+ this.processLinkStepService.setContext(context);
1485
+ }
937
1486
  selectProcessLink(processLink) {
938
1487
  if (!processLink)
939
1488
  return;
940
1489
  this._selectedProcessLink$.next(processLink);
1490
+ this._isEditing$.next(true);
941
1491
  this.pluginStateService.selectProcessLink(processLink);
1492
+ this.buildingBlockStateService.setProcessLink(processLink);
942
1493
  this.setViewModelEnabled(processLink.viewModelEnabled ?? false);
943
1494
  this._url$.next(processLink.url ?? '');
1495
+ // Initialize stepper for editing mode - navigate to last step
1496
+ this.processLinkStepService.initializeEditModeSteps(processLink.processLinkType);
1497
+ // Set button visibility based on current step position
1498
+ this.updateButtonsForCurrentStep();
944
1499
  }
945
1500
  deselectProcessLink() {
946
1501
  this._selectedProcessLink$.next(undefined);
947
1502
  this.pluginStateService.deselectProcessLink();
948
- }
949
- setEditMode(editMode) {
950
- this._processLinkEditMode$.next(editMode);
1503
+ this.resetBuildingBlockState();
951
1504
  }
952
1505
  sendProcessLinkUpdateEvent(event) {
953
1506
  this._processLinkUpdateEvents$.next(event);
@@ -965,6 +1518,59 @@ class ProcessLinkStateService {
965
1518
  }
966
1519
  });
967
1520
  }
1521
+ openEditModeNavigationSubscriptions() {
1522
+ // Handle back button in edit mode
1523
+ this._backButtonSubscription = this.buttonService.backButtonClick$.subscribe(() => {
1524
+ if (this._isEditing$.getValue()) {
1525
+ this.navigateBackInEditMode();
1526
+ }
1527
+ });
1528
+ // Handle next button in edit mode
1529
+ this._nextButtonSubscription = this.buttonService.nextButtonClick$.subscribe(() => {
1530
+ if (this._isEditing$.getValue()) {
1531
+ this.navigateForwardInEditMode();
1532
+ }
1533
+ });
1534
+ }
1535
+ navigateBackInEditMode() {
1536
+ const navigated = this.processLinkStepService.goToPreviousStep();
1537
+ if (navigated) {
1538
+ this.updateButtonsForCurrentStep();
1539
+ }
1540
+ }
1541
+ navigateForwardInEditMode() {
1542
+ const navigated = this.processLinkStepService.goToNextStep();
1543
+ if (navigated) {
1544
+ this.updateButtonsForCurrentStep();
1545
+ }
1546
+ }
1547
+ updateButtonsForCurrentStep() {
1548
+ const isFirstStep = this.processLinkStepService.isFirstStep();
1549
+ const isLastStep = this.processLinkStepService.isLastStep();
1550
+ // Back button visibility
1551
+ if (isFirstStep) {
1552
+ this.buttonService.hideBackButton();
1553
+ }
1554
+ else {
1555
+ this.buttonService.showBackButton();
1556
+ }
1557
+ // Next/Save button visibility
1558
+ if (isLastStep) {
1559
+ this.buttonService.hideNextButton();
1560
+ this.buttonService.showSaveButton();
1561
+ }
1562
+ else {
1563
+ this.buttonService.showNextButton();
1564
+ this.buttonService.enableNextButton();
1565
+ this.buttonService.hideSaveButton();
1566
+ }
1567
+ }
1568
+ isBuildingBlockContext() {
1569
+ return this._context$.getValue() === 'buildingBlock';
1570
+ }
1571
+ resetBuildingBlockState() {
1572
+ this.buildingBlockStateService.reset();
1573
+ }
968
1574
  reset() {
969
1575
  this.setAvailableProcessLinkTypes([]);
970
1576
  this.processLinkStepService.reset();
@@ -972,16 +1578,18 @@ class ProcessLinkStateService {
972
1578
  this.buttonService.resetButtons();
973
1579
  this.clearSelectedProcessLinkType();
974
1580
  this.deselectProcessLink();
1581
+ this.resetBuildingBlockState();
1582
+ this._isEditing$.next(false);
975
1583
  }
976
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkStateService, deps: [{ token: ProcessLinkStepService }, { token: ProcessLinkButtonService }, { token: PluginStateService }, { token: FORM_CUSTOM_COMPONENT_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
977
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkStateService, providedIn: 'root' }); }
1584
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkStateService, deps: [{ token: ProcessLinkStepService }, { token: ProcessLinkButtonService }, { token: PluginStateService }, { token: BuildingBlockStateService }, { token: FORM_CUSTOM_COMPONENT_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
1585
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkStateService, providedIn: 'root' }); }
978
1586
  }
979
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkStateService, decorators: [{
1587
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkStateService, decorators: [{
980
1588
  type: Injectable,
981
1589
  args: [{
982
1590
  providedIn: 'root',
983
1591
  }]
984
- }], ctorParameters: () => [{ type: ProcessLinkStepService }, { type: ProcessLinkButtonService }, { type: PluginStateService }, { type: undefined, decorators: [{
1592
+ }], ctorParameters: () => [{ type: ProcessLinkStepService }, { type: ProcessLinkButtonService }, { type: PluginStateService }, { type: BuildingBlockStateService }, { type: undefined, decorators: [{
985
1593
  type: Optional
986
1594
  }, {
987
1595
  type: Inject,
@@ -1015,10 +1623,10 @@ class FormFlowComponentService {
1015
1623
  setSupportedComponents(supportedComponents) {
1016
1624
  this._supportedComponents$.next(supportedComponents);
1017
1625
  }
1018
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFlowComponentService, deps: [{ token: FORM_FLOW_COMPONENT_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable }); }
1019
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFlowComponentService, providedIn: 'root' }); }
1626
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormFlowComponentService, deps: [{ token: FORM_FLOW_COMPONENT_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable }); }
1627
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormFlowComponentService, providedIn: 'root' }); }
1020
1628
  }
1021
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFlowComponentService, decorators: [{
1629
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormFlowComponentService, decorators: [{
1022
1630
  type: Injectable,
1023
1631
  args: [{
1024
1632
  providedIn: 'root',
@@ -1052,10 +1660,10 @@ class UrlResolverService {
1052
1660
  });
1053
1661
  return resolvingUrl;
1054
1662
  }
1055
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: UrlResolverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1056
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: UrlResolverService }); }
1663
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: UrlResolverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1664
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: UrlResolverService }); }
1057
1665
  }
1058
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: UrlResolverService, decorators: [{
1666
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: UrlResolverService, decorators: [{
1059
1667
  type: Injectable
1060
1668
  }] });
1061
1669
 
@@ -1075,10 +1683,10 @@ class UrlValidatorService {
1075
1683
  }
1076
1684
  };
1077
1685
  }
1078
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: UrlValidatorService, deps: [{ token: UrlResolverService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1079
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: UrlValidatorService }); }
1686
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: UrlValidatorService, deps: [{ token: UrlResolverService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1687
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: UrlValidatorService }); }
1080
1688
  }
1081
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: UrlValidatorService, decorators: [{
1689
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: UrlValidatorService, decorators: [{
1082
1690
  type: Injectable
1083
1691
  }], ctorParameters: () => [{ type: UrlResolverService }] });
1084
1692
 
@@ -1114,21 +1722,65 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
1114
1722
  * limitations under the License.
1115
1723
  */
1116
1724
  class SelectPluginConfigurationComponent {
1117
- constructor(pluginManagementService, pluginStateService, pluginService, stateService, buttonService, stepService) {
1725
+ constructor(pluginManagementService, pluginStateService, pluginService, stateService, buttonService, stepService, pluginTranslationService) {
1118
1726
  this.pluginManagementService = pluginManagementService;
1119
1727
  this.pluginStateService = pluginStateService;
1120
1728
  this.pluginService = pluginService;
1121
1729
  this.stateService = stateService;
1122
1730
  this.buttonService = buttonService;
1123
1731
  this.stepService = stepService;
1124
- this.pluginConfigurations$ = this.stateService.modalParams$.pipe(switchMap$1(modalData => combineLatest([
1125
- modalData?.element?.type
1126
- ? this.pluginManagementService.getAllPluginConfigurationsWithLogos(modalData?.element?.activityListenerType)
1127
- : of(undefined),
1128
- this.pluginService.availablePluginIds$,
1129
- ]).pipe(map(([pluginConfigurations, availablePluginIds]) => pluginConfigurations?.filter(configuration => availablePluginIds.includes(configuration.pluginDefinition.key))))));
1732
+ this.pluginTranslationService = pluginTranslationService;
1733
+ this.isBuildingBlockContext$ = this.stateService.context$.pipe(map$1(context => context === 'buildingBlock'));
1734
+ this.listItems$ = combineLatest([
1735
+ this.isBuildingBlockContext$,
1736
+ this.stateService.modalParams$,
1737
+ ]).pipe(switchMap$1(([isBuildingBlock, modalData]) => isBuildingBlock
1738
+ ? combineLatest([
1739
+ this.pluginManagementService.getPluginDefinitions(modalData?.element?.activityListenerType),
1740
+ this.pluginService.pluginSpecifications$,
1741
+ ]).pipe(map$1(([definitions, specs]) => {
1742
+ const limitedDefinitions = definitions?.filter(definition => specs.some(spec => spec.pluginId === definition.key)) ?? [];
1743
+ const enriched = limitedDefinitions.map(definition => {
1744
+ const spec = specs.find(item => item.pluginId === definition.key);
1745
+ return {
1746
+ id: definition.key,
1747
+ title: this.pluginTranslationService.instant('title', definition.key) ||
1748
+ definition.title,
1749
+ description: this.pluginTranslationService.instant('description', definition.key) ||
1750
+ definition.description,
1751
+ logo: spec?.pluginLogoBase64 ?? null,
1752
+ payload: definition.key,
1753
+ isDefinition: true,
1754
+ };
1755
+ });
1756
+ this.pluginDefinitionsCache = limitedDefinitions;
1757
+ return enriched;
1758
+ }))
1759
+ : combineLatest([
1760
+ modalData?.element?.type
1761
+ ? this.pluginManagementService.getAllPluginConfigurationsWithLogos(modalData?.element?.activityListenerType)
1762
+ : of(undefined),
1763
+ this.pluginService.availablePluginIds$,
1764
+ ]).pipe(map$1(([configs, availablePluginIds]) => configs
1765
+ ?.filter(configuration => availablePluginIds.includes(configuration.pluginDefinition.key))
1766
+ ?.map(configuration => ({
1767
+ id: configuration.id ?? configuration.title,
1768
+ title: configuration.title,
1769
+ description: this.pluginTranslationService.instant('description', configuration.pluginDefinition.key),
1770
+ logo: configuration.pluginLogoBase64 ?? null,
1771
+ payload: configuration,
1772
+ isDefinition: false,
1773
+ }))))));
1774
+ this.pageHeaderText$ = this.isBuildingBlockContext$.pipe(map$1(isBuildingBlock => isBuildingBlock
1775
+ ? 'processLinkConfiguration.choosePluginDefinitionDescription'
1776
+ : 'processLinkConfiguration.choosePluginConfigurationDescription'));
1777
+ this.columnHeaderText$ = this.isBuildingBlockContext$.pipe(map$1(isBuildingBlock => isBuildingBlock
1778
+ ? 'pluginManagement.labels.pluginName'
1779
+ : 'pluginManagement.labels.configurationName'));
1130
1780
  this.selectedPluginConfiguration$ = this.pluginStateService.selectedPluginConfiguration$;
1781
+ this.selectedPluginDefinition$ = this.pluginStateService.selectedPluginDefinition$;
1131
1782
  this._subscriptions = new Subscription();
1783
+ this.pluginDefinitionsCache = [];
1132
1784
  }
1133
1785
  ngOnInit() {
1134
1786
  this.openBackButtonSubscription();
@@ -1138,30 +1790,53 @@ class SelectPluginConfigurationComponent {
1138
1790
  this._subscriptions.unsubscribe();
1139
1791
  }
1140
1792
  selected(event) {
1141
- this.selectConfiguration(event.value);
1142
- this.buttonService.enableNextButton();
1793
+ this.isBuildingBlockContext$.pipe(take(1)).subscribe(isBuildingBlock => {
1794
+ if (isBuildingBlock) {
1795
+ const definitionKey = event.value;
1796
+ const definition = this.pluginDefinitionsCache.find(def => def.key === definitionKey);
1797
+ this.selectDefinition(definition);
1798
+ }
1799
+ else {
1800
+ this.selectConfiguration(event.value);
1801
+ }
1802
+ this.buttonService.enableNextButton();
1803
+ });
1143
1804
  }
1144
1805
  selectConfiguration(configuration) {
1145
- this.pluginStateService.selectPluginDefinition({ key: configuration.pluginDefinition.key });
1806
+ if (!configuration)
1807
+ return;
1808
+ if (configuration.pluginDefinition) {
1809
+ this.pluginStateService.selectPluginDefinition(configuration.pluginDefinition);
1810
+ }
1146
1811
  this.pluginStateService.selectPluginConfiguration(configuration);
1147
1812
  }
1813
+ selectDefinition(definition) {
1814
+ if (!definition)
1815
+ return;
1816
+ this.pluginStateService.selectPluginDefinition(definition);
1817
+ this.pluginStateService.selectPluginConfiguration(undefined);
1818
+ }
1148
1819
  openBackButtonSubscription() {
1149
- this._subscriptions.add(this.buttonService.backButtonClick$.subscribe(() => {
1820
+ this._subscriptions.add(this.buttonService.backButtonClick$
1821
+ .pipe(withLatestFrom(this.stateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
1822
+ .subscribe(() => {
1150
1823
  this.stateService.setInitial();
1151
1824
  }));
1152
1825
  }
1153
1826
  openNextButtonSubscription() {
1154
- this._subscriptions.add(this.buttonService.nextButtonClick$.subscribe(() => {
1827
+ this._subscriptions.add(this.buttonService.nextButtonClick$
1828
+ .pipe(withLatestFrom(this.stateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
1829
+ .subscribe(() => {
1155
1830
  this.stepService.setChoosePluginActionSteps();
1156
1831
  }));
1157
1832
  }
1158
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SelectPluginConfigurationComponent, deps: [{ token: i1$1.PluginManagementService }, { token: PluginStateService }, { token: i1$1.PluginService }, { token: ProcessLinkStateService }, { token: ProcessLinkButtonService }, { token: ProcessLinkStepService }], target: i0.ɵɵFactoryTarget.Component }); }
1159
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: SelectPluginConfigurationComponent, isStandalone: false, selector: "valtimo-select-plugin-configuration", ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 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=\"pluginConfigurations$ | async as pluginConfigurations; else loading\">\n <p class=\"step-description\">\n {{ 'processLinkConfiguration.choosePluginConfigurationDescription' | translate }}\n </p>\n <div class=\"list-container\">\n <cds-structured-list (selected)=\"selected($event)\" selection=\"true\">\n <cds-list-header>\n <cds-list-column nowrap=\"true\"></cds-list-column>\n <cds-list-column nowrap=\"true\">{{\n 'pluginManagement.labels.configurationName' | translate\n }}</cds-list-column>\n <cds-list-column>{{\n 'processLinkConfiguration.pluginDescription' | translate\n }}</cds-list-column>\n </cds-list-header>\n <cds-list-row\n *ngFor=\"let pluginConfiguration of pluginConfigurations\"\n [value]=\"pluginConfiguration\"\n >\n <cds-list-column>\n <div *ngIf=\"pluginConfiguration.pluginLogoBase64\">\n <img\n [src]=\"pluginConfiguration.pluginLogoBase64\"\n [title]=\"'title' | pluginTranslate: pluginConfiguration.pluginDefinition.key | async\"\n class=\"plugin-configuration-logo\"\n /></div\n ></cds-list-column>\n <cds-list-column>{{ pluginConfiguration.title }}</cds-list-column>\n <cds-list-column>\n {{ 'description' | pluginTranslate: pluginConfiguration.pluginDefinition.key | async }}\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n </div>\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: [".btn-back{position:absolute}.cards-container{display:flex;flex-flow:row wrap;width:100%}.card{width:calc(33.3% - 20px);margin-right:30px}.card:nth-child(3n+3){margin-right:0}.card-header{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.plugin-configuration-logo{object-fit:contain;height:60px;width:100%;margin-bottom:-.5rem}.loading-container{display:flex;justify-content:center;margin-top:40px;flex-direction:row}.list-container{margin-top:32px;margin-bottom:32px}::ng-deep .list-container .cds--structured-list-td{vertical-align:top}\n/*!\n * Copyright 2015-2025 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: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "component", type: i4.StructuredList, selector: "cds-structured-list, ibm-structured-list", inputs: ["selection", "flushed", "condensed", "name", "skeleton"], outputs: ["selected"] }, { kind: "component", type: i4.ListRow, selector: "cds-list-row, ibm-list-row", inputs: ["selected", "label", "value"], outputs: ["change"] }, { kind: "component", type: i4.ListHeader, selector: "cds-list-header, ibm-list-header", inputs: ["skeleton"] }, { kind: "component", type: i4.ListColumn, selector: "cds-list-column, ibm-list-column", inputs: ["skeleton", "nowrap"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }, { kind: "pipe", type: i1$1.PluginTranslatePipe, name: "pluginTranslate" }] }); }
1833
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectPluginConfigurationComponent, deps: [{ token: i1$1.PluginManagementService }, { token: PluginStateService }, { token: i1$1.PluginService }, { token: ProcessLinkStateService }, { token: ProcessLinkButtonService }, { token: ProcessLinkStepService }, { token: i1$1.PluginTranslationService }], target: i0.ɵɵFactoryTarget.Component }); }
1834
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: SelectPluginConfigurationComponent, isStandalone: false, selector: "valtimo-select-plugin-configuration", ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 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=\"listItems$ | async as items; else loading\">\n <p class=\"step-description\">\n {{ pageHeaderText$ | async | translate }}\n </p>\n <div class=\"list-container\">\n <cds-structured-list (selected)=\"selected($event)\" selection=\"true\">\n <cds-list-header>\n <cds-list-column nowrap=\"true\"></cds-list-column>\n <cds-list-column nowrap=\"true\">\n {{ columnHeaderText$ | async | translate }}\n </cds-list-column>\n <cds-list-column>\n {{ 'processLinkConfiguration.pluginDescription' | translate }}\n </cds-list-column>\n </cds-list-header>\n <cds-list-row *ngFor=\"let item of items\" [value]=\"item.payload\">\n <cds-list-column>\n <div *ngIf=\"item.logo\">\n <img [src]=\"item.logo\" [title]=\"item.title\" class=\"plugin-configuration-logo\" />\n </div>\n </cds-list-column>\n <cds-list-column>{{ item.title }}</cds-list-column>\n <cds-list-column>{{ item.description }}</cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n </div>\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: [".btn-back{position:absolute}.plugin-configuration-logo{object-fit:contain;height:60px;width:100%;margin-bottom:-.5rem}.loading-container{display:flex;justify-content:center;margin-top:40px;flex-direction:row}.list-container{margin-top:32px;margin-bottom:32px}::ng-deep .list-container .cds--structured-list-td{vertical-align:top}\n/*!\n * Copyright 2015-2025 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: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$2.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "component", type: i3$2.StructuredList, selector: "cds-structured-list, ibm-structured-list", inputs: ["selection", "flushed", "condensed", "name", "skeleton"], outputs: ["selected"] }, { kind: "component", type: i3$2.ListRow, selector: "cds-list-row, ibm-list-row", inputs: ["selected", "label", "value"], outputs: ["change"] }, { kind: "component", type: i3$2.ListHeader, selector: "cds-list-header, ibm-list-header", inputs: ["skeleton"] }, { kind: "component", type: i3$2.ListColumn, selector: "cds-list-column, ibm-list-column", inputs: ["skeleton", "nowrap"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
1160
1835
  }
1161
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SelectPluginConfigurationComponent, decorators: [{
1836
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectPluginConfigurationComponent, decorators: [{
1162
1837
  type: Component,
1163
- args: [{ standalone: false, selector: 'valtimo-select-plugin-configuration', template: "<!--\n ~ Copyright 2015-2025 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=\"pluginConfigurations$ | async as pluginConfigurations; else loading\">\n <p class=\"step-description\">\n {{ 'processLinkConfiguration.choosePluginConfigurationDescription' | translate }}\n </p>\n <div class=\"list-container\">\n <cds-structured-list (selected)=\"selected($event)\" selection=\"true\">\n <cds-list-header>\n <cds-list-column nowrap=\"true\"></cds-list-column>\n <cds-list-column nowrap=\"true\">{{\n 'pluginManagement.labels.configurationName' | translate\n }}</cds-list-column>\n <cds-list-column>{{\n 'processLinkConfiguration.pluginDescription' | translate\n }}</cds-list-column>\n </cds-list-header>\n <cds-list-row\n *ngFor=\"let pluginConfiguration of pluginConfigurations\"\n [value]=\"pluginConfiguration\"\n >\n <cds-list-column>\n <div *ngIf=\"pluginConfiguration.pluginLogoBase64\">\n <img\n [src]=\"pluginConfiguration.pluginLogoBase64\"\n [title]=\"'title' | pluginTranslate: pluginConfiguration.pluginDefinition.key | async\"\n class=\"plugin-configuration-logo\"\n /></div\n ></cds-list-column>\n <cds-list-column>{{ pluginConfiguration.title }}</cds-list-column>\n <cds-list-column>\n {{ 'description' | pluginTranslate: pluginConfiguration.pluginDefinition.key | async }}\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n </div>\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: [".btn-back{position:absolute}.cards-container{display:flex;flex-flow:row wrap;width:100%}.card{width:calc(33.3% - 20px);margin-right:30px}.card:nth-child(3n+3){margin-right:0}.card-header{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.plugin-configuration-logo{object-fit:contain;height:60px;width:100%;margin-bottom:-.5rem}.loading-container{display:flex;justify-content:center;margin-top:40px;flex-direction:row}.list-container{margin-top:32px;margin-bottom:32px}::ng-deep .list-container .cds--structured-list-td{vertical-align:top}\n/*!\n * Copyright 2015-2025 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"] }]
1164
- }], ctorParameters: () => [{ type: i1$1.PluginManagementService }, { type: PluginStateService }, { type: i1$1.PluginService }, { type: ProcessLinkStateService }, { type: ProcessLinkButtonService }, { type: ProcessLinkStepService }] });
1838
+ args: [{ standalone: false, selector: 'valtimo-select-plugin-configuration', template: "<!--\n ~ Copyright 2015-2025 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=\"listItems$ | async as items; else loading\">\n <p class=\"step-description\">\n {{ pageHeaderText$ | async | translate }}\n </p>\n <div class=\"list-container\">\n <cds-structured-list (selected)=\"selected($event)\" selection=\"true\">\n <cds-list-header>\n <cds-list-column nowrap=\"true\"></cds-list-column>\n <cds-list-column nowrap=\"true\">\n {{ columnHeaderText$ | async | translate }}\n </cds-list-column>\n <cds-list-column>\n {{ 'processLinkConfiguration.pluginDescription' | translate }}\n </cds-list-column>\n </cds-list-header>\n <cds-list-row *ngFor=\"let item of items\" [value]=\"item.payload\">\n <cds-list-column>\n <div *ngIf=\"item.logo\">\n <img [src]=\"item.logo\" [title]=\"item.title\" class=\"plugin-configuration-logo\" />\n </div>\n </cds-list-column>\n <cds-list-column>{{ item.title }}</cds-list-column>\n <cds-list-column>{{ item.description }}</cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n </div>\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: [".btn-back{position:absolute}.plugin-configuration-logo{object-fit:contain;height:60px;width:100%;margin-bottom:-.5rem}.loading-container{display:flex;justify-content:center;margin-top:40px;flex-direction:row}.list-container{margin-top:32px;margin-bottom:32px}::ng-deep .list-container .cds--structured-list-td{vertical-align:top}\n/*!\n * Copyright 2015-2025 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"] }]
1839
+ }], ctorParameters: () => [{ type: i1$1.PluginManagementService }, { type: PluginStateService }, { type: i1$1.PluginService }, { type: ProcessLinkStateService }, { type: ProcessLinkButtonService }, { type: ProcessLinkStepService }, { type: i1$1.PluginTranslationService }] });
1165
1840
 
1166
1841
  /*
1167
1842
  * Copyright 2015-2025 Ritense BV, the Netherlands.
@@ -1214,20 +1889,22 @@ class SelectPluginActionComponent {
1214
1889
  }
1215
1890
  openBackButtonSubscription() {
1216
1891
  this.buttonService.backButtonClick$
1217
- .pipe(switchMap$1(() => this.stepService.hasOneProcessLinkType$), take(1))
1892
+ .pipe(withLatestFrom(this.processLinkStateService.isEditing$), filter$1(([, isEditing]) => !isEditing), switchMap$1(() => this.stepService.hasOneProcessLinkType$), take(1))
1218
1893
  .subscribe((hasOneOption) => {
1219
1894
  this.stepService.setProcessLinkTypeSteps('plugin', hasOneOption);
1220
1895
  });
1221
1896
  }
1222
1897
  openNextButtonSubscription() {
1223
- this._subscriptions.add(this.buttonService.nextButtonClick$.subscribe(() => {
1898
+ this._subscriptions.add(this.buttonService.nextButtonClick$
1899
+ .pipe(withLatestFrom(this.processLinkStateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
1900
+ .subscribe(() => {
1224
1901
  this.stepService.setConfigurePluginActionSteps();
1225
1902
  }));
1226
1903
  }
1227
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SelectPluginActionComponent, deps: [{ token: ProcessLinkButtonService }, { token: i1$1.PluginManagementService }, { token: PluginStateService }, { token: ProcessLinkStepService }, { token: ProcessLinkStateService }], target: i0.ɵɵFactoryTarget.Component }); }
1228
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: SelectPluginActionComponent, isStandalone: false, selector: "valtimo-select-plugin-action", ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 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=\"pluginFunctions$ | async as pluginFunctions; else loading\">\n <div class=\"choose-plugin-action\" *ngIf=\"pluginFunctions?.length > 0\">\n <p class=\"step-description\">\n {{ 'processLinkConfiguration.choosePluginActionDescription' | translate }}\n </p>\n <div class=\"action-tiles\">\n <cds-tile-group\n [multiple]=\"false\"\n *ngIf=\"{selectedPluginDefinition: selectedPluginDefinition$ | async} as obs\"\n (selected)=\"selected($event)\"\n >\n <cds-selection-tile\n *ngFor=\"let pluginFunction of pluginFunctions\"\n [value]=\"stringify(pluginFunction)\"\n [selected]=\"false\"\n >{{\n pluginFunction.key | pluginTranslate: obs.selectedPluginDefinition.key | async\n }}</cds-selection-tile\n >\n </cds-tile-group>\n </div>\n </div>\n <ng-container *ngIf=\"!pluginFunctions || pluginFunctions?.length === 0\">\n <ng-container *ngTemplateOutlet=\"noPluginFunctionsTemplate\"> </ng-container>\n </ng-container>\n</ng-container>\n\n<ng-template #noPluginFunctionsTemplate>\n <p class=\"step-description\">\n {{ 'processLink.noPluginFunctions' | translate }}\n </p>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n</ng-template>\n", styles: [".btn-back{position:absolute}.cards-container{display:flex;flex-flow:row wrap;width:100%}.card{width:calc(33.3% - 20px);margin-right:30px}.card:nth-child(3n+3){margin-right:0}.card-header{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.loading-container{display:flex;justify-content:center;margin-top:40px;flex-direction:row}.action-tiles{margin-top:24px;width:calc(100% + 8px);margin-left:-8px}::ng-deep .choose-plugin-action cds-selection-tile{display:flex;width:calc(33.3% - 8px)}::ng-deep .choose-plugin-action .cds--tile{width:100%}::ng-deep .choose-plugin-action cds-tile-group fieldset{display:flex;flex-direction:row;flex-wrap:wrap}::ng-deep .choose-plugin-action cds-selection-tile{margin-left:8px}::ng-deep .choose-plugin-action cds-selection-tile:nth-child(n+4){margin-top:8px}::ng-deep .action-tiles .cds--tile{background-color:var(--cds-layer-02, #ffffff)}::ng-deep .action-tiles .cds--tile:hover{background:var(--cds-layer-hover)}\n/*!\n * Copyright 2015-2025 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: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "component", type: i4.SelectionTile, selector: "cds-selection-tile, ibm-selection-tile", inputs: ["theme", "id", "selected", "value", "disabled"], outputs: ["change"] }, { kind: "component", type: i4.TileGroup, selector: "cds-tile-group, ibm-tile-group", inputs: ["name", "multiple", "legend"], outputs: ["selected"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }, { kind: "pipe", type: i1$1.PluginTranslatePipe, name: "pluginTranslate" }] }); }
1904
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectPluginActionComponent, deps: [{ token: ProcessLinkButtonService }, { token: i1$1.PluginManagementService }, { token: PluginStateService }, { token: ProcessLinkStepService }, { token: ProcessLinkStateService }], target: i0.ɵɵFactoryTarget.Component }); }
1905
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: SelectPluginActionComponent, isStandalone: false, selector: "valtimo-select-plugin-action", ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 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=\"pluginFunctions$ | async as pluginFunctions; else loading\">\n <div class=\"choose-plugin-action\" *ngIf=\"pluginFunctions?.length > 0\">\n <p class=\"step-description\">\n {{ 'processLinkConfiguration.choosePluginActionDescription' | translate }}\n </p>\n <div class=\"action-tiles\">\n <cds-tile-group\n [multiple]=\"false\"\n *ngIf=\"{selectedPluginDefinition: selectedPluginDefinition$ | async} as obs\"\n (selected)=\"selected($event)\"\n >\n <cds-selection-tile\n *ngFor=\"let pluginFunction of pluginFunctions\"\n [value]=\"stringify(pluginFunction)\"\n [selected]=\"false\"\n >{{\n pluginFunction.key | pluginTranslate: obs.selectedPluginDefinition.key | async\n }}</cds-selection-tile\n >\n </cds-tile-group>\n </div>\n </div>\n <ng-container *ngIf=\"!pluginFunctions || pluginFunctions?.length === 0\">\n <ng-container *ngTemplateOutlet=\"noPluginFunctionsTemplate\"> </ng-container>\n </ng-container>\n</ng-container>\n\n<ng-template #noPluginFunctionsTemplate>\n <p class=\"step-description\">\n {{ 'processLink.noPluginFunctions' | translate }}\n </p>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n</ng-template>\n", styles: [".btn-back{position:absolute}.cards-container{display:flex;flex-flow:row wrap;width:100%}.card{width:calc(33.3% - 20px);margin-right:30px}.card:nth-child(3n+3){margin-right:0}.card-header{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.loading-container{display:flex;justify-content:center;margin-top:40px;flex-direction:row}.action-tiles{margin-top:24px;width:calc(100% + 8px);margin-left:-8px}::ng-deep .choose-plugin-action cds-selection-tile{display:flex;width:calc(33.3% - 8px)}::ng-deep .choose-plugin-action .cds--tile{width:100%}::ng-deep .choose-plugin-action cds-tile-group fieldset{display:flex;flex-direction:row;flex-wrap:wrap}::ng-deep .choose-plugin-action cds-selection-tile{margin-left:8px}::ng-deep .choose-plugin-action cds-selection-tile:nth-child(n+4){margin-top:8px}::ng-deep .action-tiles .cds--tile{background-color:var(--cds-layer-02, #ffffff)}::ng-deep .action-tiles .cds--tile:hover{background:var(--cds-layer-hover)}\n/*!\n * Copyright 2015-2025 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: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3$2.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "component", type: i3$2.SelectionTile, selector: "cds-selection-tile, ibm-selection-tile", inputs: ["theme", "id", "selected", "value", "disabled"], outputs: ["change"] }, { kind: "component", type: i3$2.TileGroup, selector: "cds-tile-group, ibm-tile-group", inputs: ["name", "multiple", "legend"], outputs: ["selected"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: i1$1.PluginTranslatePipe, name: "pluginTranslate" }] }); }
1229
1906
  }
1230
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SelectPluginActionComponent, decorators: [{
1907
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectPluginActionComponent, decorators: [{
1231
1908
  type: Component,
1232
1909
  args: [{ standalone: false, selector: 'valtimo-select-plugin-action', template: "<!--\n ~ Copyright 2015-2025 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=\"pluginFunctions$ | async as pluginFunctions; else loading\">\n <div class=\"choose-plugin-action\" *ngIf=\"pluginFunctions?.length > 0\">\n <p class=\"step-description\">\n {{ 'processLinkConfiguration.choosePluginActionDescription' | translate }}\n </p>\n <div class=\"action-tiles\">\n <cds-tile-group\n [multiple]=\"false\"\n *ngIf=\"{selectedPluginDefinition: selectedPluginDefinition$ | async} as obs\"\n (selected)=\"selected($event)\"\n >\n <cds-selection-tile\n *ngFor=\"let pluginFunction of pluginFunctions\"\n [value]=\"stringify(pluginFunction)\"\n [selected]=\"false\"\n >{{\n pluginFunction.key | pluginTranslate: obs.selectedPluginDefinition.key | async\n }}</cds-selection-tile\n >\n </cds-tile-group>\n </div>\n </div>\n <ng-container *ngIf=\"!pluginFunctions || pluginFunctions?.length === 0\">\n <ng-container *ngTemplateOutlet=\"noPluginFunctionsTemplate\"> </ng-container>\n </ng-container>\n</ng-container>\n\n<ng-template #noPluginFunctionsTemplate>\n <p class=\"step-description\">\n {{ 'processLink.noPluginFunctions' | translate }}\n </p>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n</ng-template>\n", styles: [".btn-back{position:absolute}.cards-container{display:flex;flex-flow:row wrap;width:100%}.card{width:calc(33.3% - 20px);margin-right:30px}.card:nth-child(3n+3){margin-right:0}.card-header{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.loading-container{display:flex;justify-content:center;margin-top:40px;flex-direction:row}.action-tiles{margin-top:24px;width:calc(100% + 8px);margin-left:-8px}::ng-deep .choose-plugin-action cds-selection-tile{display:flex;width:calc(33.3% - 8px)}::ng-deep .choose-plugin-action .cds--tile{width:100%}::ng-deep .choose-plugin-action cds-tile-group fieldset{display:flex;flex-direction:row;flex-wrap:wrap}::ng-deep .choose-plugin-action cds-selection-tile{margin-left:8px}::ng-deep .choose-plugin-action cds-selection-tile:nth-child(n+4){margin-top:8px}::ng-deep .action-tiles .cds--tile{background-color:var(--cds-layer-02, #ffffff)}::ng-deep .action-tiles .cds--tile:hover{background:var(--cds-layer-hover)}\n/*!\n * Copyright 2015-2025 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"] }]
1233
1910
  }], ctorParameters: () => [{ type: ProcessLinkButtonService }, { type: i1$1.PluginManagementService }, { type: PluginStateService }, { type: ProcessLinkStepService }, { type: ProcessLinkStateService }] });
@@ -1278,7 +1955,7 @@ class ImportPluginConfigurationComponent {
1278
1955
  this.processListItems$ = combineLatest([
1279
1956
  this._compatiblePluginProcessLinksSubject$,
1280
1957
  this.process.valueChanges.pipe(startWith('')),
1281
- ]).pipe(map$1(([compatibleProcessLinks, processValue]) => compatibleProcessLinks?.map(compatibleProcessLink => ({
1958
+ ]).pipe(map(([compatibleProcessLinks, processValue]) => compatibleProcessLinks?.map(compatibleProcessLink => ({
1282
1959
  content: compatibleProcessLink.processDefinitionKey,
1283
1960
  selected: processValue === compatibleProcessLink.processDefinitionKey,
1284
1961
  })) || []));
@@ -1286,7 +1963,7 @@ class ImportPluginConfigurationComponent {
1286
1963
  this._compatiblePluginProcessLinksSubject$,
1287
1964
  this.process.valueChanges.pipe(startWith('')),
1288
1965
  this.version.valueChanges.pipe(startWith('')),
1289
- ]).pipe(map$1(([compatibleProcessLinks, processValue, versionValue]) => !processValue
1966
+ ]).pipe(map(([compatibleProcessLinks, processValue, versionValue]) => !processValue
1290
1967
  ? []
1291
1968
  : compatibleProcessLinks
1292
1969
  .find(compatibleLinks => compatibleLinks.processDefinitionKey === processValue)
@@ -1300,7 +1977,7 @@ class ImportPluginConfigurationComponent {
1300
1977
  this.process.valueChanges.pipe(startWith('')),
1301
1978
  this.version.valueChanges.pipe(startWith('')),
1302
1979
  this.activity.valueChanges.pipe(startWith('')),
1303
- ]).pipe(map$1(([compatibleProcessLinks, processValue, versionValue, activityValue]) => !processValue || !versionValue
1980
+ ]).pipe(map(([compatibleProcessLinks, processValue, versionValue, activityValue]) => !processValue || !versionValue
1304
1981
  ? []
1305
1982
  : compatibleProcessLinks
1306
1983
  .find(compatibleLinks => compatibleLinks.processDefinitionKey === processValue)
@@ -1341,13 +2018,13 @@ class ImportPluginConfigurationComponent {
1341
2018
  activitySelected(event) {
1342
2019
  this.activity.setValue(event?.item?.content);
1343
2020
  }
1344
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ImportPluginConfigurationComponent, deps: [{ token: i1$2.FormBuilder }, { token: ProcessLinkService }, { token: i4.IconService }, { token: i2$2.CdsThemeService }], target: i0.ɵɵFactoryTarget.Component }); }
1345
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: ImportPluginConfigurationComponent, isStandalone: false, selector: "valtimo-import-plugin-configuration", inputs: { pluginActionKey: "pluginActionKey" }, outputs: { configurationEvent: "configurationEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 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-toggletip align=\"right-bottom\" [autoAlign]=\"true\" [isOpen]=\"open$ | async\">\n <button\n class=\"process-link-configuration-import-button\"\n [disabled]=\"((compatiblePluginProcessLinks$ | async) || []).length === 0\"\n cdsToggletipButton\n [removeClassnames]=\"['cds--toggletip-button']\"\n cdsButton=\"ghost\"\n >\n {{ 'processLinkConfiguration.importConfiguration' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"upload\" size=\"16\"></svg>\n </button>\n\n <div\n cdsToggletipContent\n [attr.data-carbon-theme]=\"toggletipTheme$ | async\"\n class=\"process-link-configuration-select\"\n >\n <cds-dropdown\n [label]=\"'processLinkConfiguration.process' | translate\"\n [placeholder]=\"'processLinkConfiguration.selectProcess' | translate\"\n (selected)=\"processSelected($event)\"\n [appendInline]=\"true\"\n [cdsLayer]=\"1\"\n >\n <cds-dropdown-list\n [items]=\"processListItems$ | async\"\n onclick=\"event.stopPropagation()\"\n ></cds-dropdown-list>\n </cds-dropdown>\n\n <cds-dropdown\n [label]=\"'processLinkConfiguration.version' | translate\"\n [placeholder]=\"'processLinkConfiguration.selectVersion' | translate\"\n [disabled]=\"!process.value\"\n (selected)=\"versionSelected($event)\"\n [appendInline]=\"true\"\n [cdsLayer]=\"1\"\n >\n <cds-dropdown-list\n [items]=\"versionListItems$ | async\"\n onclick=\"event.stopPropagation()\"\n ></cds-dropdown-list>\n </cds-dropdown>\n\n <cds-dropdown\n [label]=\"'processLinkConfiguration.activity' | translate\"\n [placeholder]=\"'processLinkConfiguration.selectActivity' | translate\"\n [disabled]=\"!process.value || !version.value\"\n (selected)=\"activitySelected($event)\"\n [appendInline]=\"true\"\n [cdsLayer]=\"1\"\n >\n <cds-dropdown-list\n [items]=\"activityListItems$ | async\"\n onclick=\"event.stopPropagation()\"\n ></cds-dropdown-list>\n </cds-dropdown>\n\n <button cdsButton [disabled]=\"!importPluginForm.valid\" (click)=\"onSubmit()\" [cdsLayer]=\"1\">\n {{ 'processLinkConfiguration.importConfiguration' | translate }}\n </button>\n </div>\n</cds-toggletip>\n", styles: [":host ::ng-deep .cds--popover-content{max-inline-size:unset}.process-link-configuration-import-button{margin-bottom:16px}.process-link-configuration-select{width:400px;max-inline-size:400px;display:flex;flex-direction:column;gap:16px}.process-link-configuration-select .cds--btn{width:100%;max-width:unset}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i4.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: i5.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "readonly", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp", "fluid"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i5.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "directive", type: i4.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "component", type: i4.Toggletip, selector: "cds-toggletip, ibm-toggletip", inputs: ["id", "isOpen"] }, { kind: "directive", type: i4.ToggletipButton, selector: "[cdsToggletipButton], [ibmToggletipButton]", inputs: ["ariaLabel"] }, { kind: "directive", type: i4.ToggletipContent, selector: "[cdsToggletipContent], [ibmToggletipContent]" }, { kind: "directive", type: i2$2.RemoveClassnamesDirective, selector: "[removeClassnames]", inputs: ["removeClassnames"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
2021
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ImportPluginConfigurationComponent, deps: [{ token: i1$2.FormBuilder }, { token: ProcessLinkService }, { token: i3$2.IconService }, { token: i2$1.CdsThemeService }], target: i0.ɵɵFactoryTarget.Component }); }
2022
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: ImportPluginConfigurationComponent, isStandalone: false, selector: "valtimo-import-plugin-configuration", inputs: { pluginActionKey: "pluginActionKey" }, outputs: { configurationEvent: "configurationEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 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-toggletip align=\"right-bottom\" [autoAlign]=\"true\" [isOpen]=\"open$ | async\">\n <button\n class=\"process-link-configuration-import-button\"\n [disabled]=\"((compatiblePluginProcessLinks$ | async) || []).length === 0\"\n cdsToggletipButton\n [removeClassnames]=\"['cds--toggletip-button']\"\n cdsButton=\"ghost\"\n >\n {{ 'processLinkConfiguration.importConfiguration' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"upload\" size=\"16\"></svg>\n </button>\n\n <div\n cdsToggletipContent\n [attr.data-carbon-theme]=\"toggletipTheme$ | async\"\n class=\"process-link-configuration-select\"\n >\n <cds-dropdown\n [label]=\"'processLinkConfiguration.process' | translate\"\n [placeholder]=\"'processLinkConfiguration.selectProcess' | translate\"\n (selected)=\"processSelected($event)\"\n [appendInline]=\"true\"\n [cdsLayer]=\"1\"\n >\n <cds-dropdown-list\n [items]=\"processListItems$ | async\"\n onclick=\"event.stopPropagation()\"\n ></cds-dropdown-list>\n </cds-dropdown>\n\n <cds-dropdown\n [label]=\"'processLinkConfiguration.version' | translate\"\n [placeholder]=\"'processLinkConfiguration.selectVersion' | translate\"\n [disabled]=\"!process.value\"\n (selected)=\"versionSelected($event)\"\n [appendInline]=\"true\"\n [cdsLayer]=\"1\"\n >\n <cds-dropdown-list\n [items]=\"versionListItems$ | async\"\n onclick=\"event.stopPropagation()\"\n ></cds-dropdown-list>\n </cds-dropdown>\n\n <cds-dropdown\n [label]=\"'processLinkConfiguration.activity' | translate\"\n [placeholder]=\"'processLinkConfiguration.selectActivity' | translate\"\n [disabled]=\"!process.value || !version.value\"\n (selected)=\"activitySelected($event)\"\n [appendInline]=\"true\"\n [cdsLayer]=\"1\"\n >\n <cds-dropdown-list\n [items]=\"activityListItems$ | async\"\n onclick=\"event.stopPropagation()\"\n ></cds-dropdown-list>\n </cds-dropdown>\n\n <button cdsButton [disabled]=\"!importPluginForm.valid\" (click)=\"onSubmit()\" [cdsLayer]=\"1\">\n {{ 'processLinkConfiguration.importConfiguration' | translate }}\n </button>\n </div>\n</cds-toggletip>\n", styles: [":host ::ng-deep .cds--popover-content{max-inline-size:unset}.process-link-configuration-import-button{margin-bottom:16px}.process-link-configuration-select{width:400px;max-inline-size:400px;display:flex;flex-direction:column;gap:16px}.process-link-configuration-select .cds--btn{width:100%;max-width:unset}\n/*!\n * Copyright 2015-2025 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: i3$2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i3$2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i5.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "readonly", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp", "fluid"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i5.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "directive", type: i3$2.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "component", type: i3$2.Toggletip, selector: "cds-toggletip, ibm-toggletip", inputs: ["id", "isOpen"] }, { kind: "directive", type: i3$2.ToggletipButton, selector: "[cdsToggletipButton], [ibmToggletipButton]", inputs: ["ariaLabel"] }, { kind: "directive", type: i3$2.ToggletipContent, selector: "[cdsToggletipContent], [ibmToggletipContent]" }, { kind: "directive", type: i2$1.RemoveClassnamesDirective, selector: "[removeClassnames]", inputs: ["removeClassnames"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
1346
2023
  }
1347
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ImportPluginConfigurationComponent, decorators: [{
2024
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ImportPluginConfigurationComponent, decorators: [{
1348
2025
  type: Component,
1349
2026
  args: [{ standalone: false, selector: 'valtimo-import-plugin-configuration', template: "<!--\n ~ Copyright 2015-2025 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-toggletip align=\"right-bottom\" [autoAlign]=\"true\" [isOpen]=\"open$ | async\">\n <button\n class=\"process-link-configuration-import-button\"\n [disabled]=\"((compatiblePluginProcessLinks$ | async) || []).length === 0\"\n cdsToggletipButton\n [removeClassnames]=\"['cds--toggletip-button']\"\n cdsButton=\"ghost\"\n >\n {{ 'processLinkConfiguration.importConfiguration' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"upload\" size=\"16\"></svg>\n </button>\n\n <div\n cdsToggletipContent\n [attr.data-carbon-theme]=\"toggletipTheme$ | async\"\n class=\"process-link-configuration-select\"\n >\n <cds-dropdown\n [label]=\"'processLinkConfiguration.process' | translate\"\n [placeholder]=\"'processLinkConfiguration.selectProcess' | translate\"\n (selected)=\"processSelected($event)\"\n [appendInline]=\"true\"\n [cdsLayer]=\"1\"\n >\n <cds-dropdown-list\n [items]=\"processListItems$ | async\"\n onclick=\"event.stopPropagation()\"\n ></cds-dropdown-list>\n </cds-dropdown>\n\n <cds-dropdown\n [label]=\"'processLinkConfiguration.version' | translate\"\n [placeholder]=\"'processLinkConfiguration.selectVersion' | translate\"\n [disabled]=\"!process.value\"\n (selected)=\"versionSelected($event)\"\n [appendInline]=\"true\"\n [cdsLayer]=\"1\"\n >\n <cds-dropdown-list\n [items]=\"versionListItems$ | async\"\n onclick=\"event.stopPropagation()\"\n ></cds-dropdown-list>\n </cds-dropdown>\n\n <cds-dropdown\n [label]=\"'processLinkConfiguration.activity' | translate\"\n [placeholder]=\"'processLinkConfiguration.selectActivity' | translate\"\n [disabled]=\"!process.value || !version.value\"\n (selected)=\"activitySelected($event)\"\n [appendInline]=\"true\"\n [cdsLayer]=\"1\"\n >\n <cds-dropdown-list\n [items]=\"activityListItems$ | async\"\n onclick=\"event.stopPropagation()\"\n ></cds-dropdown-list>\n </cds-dropdown>\n\n <button cdsButton [disabled]=\"!importPluginForm.valid\" (click)=\"onSubmit()\" [cdsLayer]=\"1\">\n {{ 'processLinkConfiguration.importConfiguration' | translate }}\n </button>\n </div>\n</cds-toggletip>\n", styles: [":host ::ng-deep .cds--popover-content{max-inline-size:unset}.process-link-configuration-import-button{margin-bottom:16px}.process-link-configuration-select{width:400px;max-inline-size:400px;display:flex;flex-direction:column;gap:16px}.process-link-configuration-select .cds--btn{width:100%;max-width:unset}\n/*!\n * Copyright 2015-2025 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"] }]
1350
- }], ctorParameters: () => [{ type: i1$2.FormBuilder }, { type: ProcessLinkService }, { type: i4.IconService }, { type: i2$2.CdsThemeService }], propDecorators: { pluginActionKey: [{
2027
+ }], ctorParameters: () => [{ type: i1$2.FormBuilder }, { type: ProcessLinkService }, { type: i3$2.IconService }, { type: i2$1.CdsThemeService }], propDecorators: { pluginActionKey: [{
1351
2028
  type: Input
1352
2029
  }], configurationEvent: [{
1353
2030
  type: Output
@@ -1382,11 +2059,25 @@ class PluginActionConfigurationComponent {
1382
2059
  this.save$ = this.pluginStateService.save$;
1383
2060
  this.saving$ = this.stateService.saving$;
1384
2061
  this._prefillConfigurationSubject$ = new BehaviorSubject(null);
1385
- this._prefillConfiguration$ = this.stateService.selectedProcessLink$.pipe(map(processLink => (processLink ? processLink?.actionProperties : undefined)));
2062
+ // Only prefill if the action key hasn't changed from what's saved in the process link
2063
+ this._prefillConfiguration$ = combineLatest([
2064
+ this.stateService.selectedProcessLink$,
2065
+ this.pluginStateService.selectedPluginFunction$,
2066
+ ]).pipe(map$1(([processLink, selectedFunction]) => {
2067
+ if (!processLink)
2068
+ return undefined;
2069
+ // Only prefill if the action hasn't been changed
2070
+ const savedActionKey = processLink.pluginActionDefinitionKey;
2071
+ const currentActionKey = selectedFunction?.key;
2072
+ if (currentActionKey && savedActionKey !== currentActionKey) {
2073
+ return undefined; // Action changed, don't prefill old configuration
2074
+ }
2075
+ return processLink.actionProperties;
2076
+ }));
1386
2077
  this.prefillConfiguration$ = combineLatest([
1387
2078
  this._prefillConfigurationSubject$,
1388
2079
  this._prefillConfiguration$,
1389
- ]).pipe(map(([prefillConfigurationSubjectValue, prefillConfiguration]) => prefillConfigurationSubjectValue || prefillConfiguration));
2080
+ ]).pipe(map$1(([prefillConfigurationSubjectValue, prefillConfiguration]) => prefillConfigurationSubjectValue || prefillConfiguration));
1390
2081
  this._subscriptions = new Subscription();
1391
2082
  }
1392
2083
  ngOnInit() {
@@ -1417,23 +2108,29 @@ class PluginActionConfigurationComponent {
1417
2108
  this._prefillConfigurationSubject$.next(configuration);
1418
2109
  }
1419
2110
  updateProcessLink(configuration) {
1420
- this.stateService.selectedProcessLink$.pipe(take(1)).subscribe(selectedProcessLink => {
2111
+ combineLatest([
2112
+ this.stateService.selectedProcessLink$,
2113
+ this.pluginStateService.selectedPluginFunction$,
2114
+ ])
2115
+ .pipe(take(1))
2116
+ .subscribe(([selectedProcessLink, selectedFunction]) => {
2117
+ const inferredReferenceType = selectedProcessLink.referenceType ||
2118
+ (selectedProcessLink.pluginDefinitionKey ? 'BUILDING_BLOCK' : 'FIXED');
2119
+ const pluginConfigurationId = inferredReferenceType === 'FIXED'
2120
+ ? (selectedProcessLink.pluginConfigurationId ?? '')
2121
+ : undefined;
2122
+ // Use the currently selected function key (user may have changed it)
2123
+ const actionKey = selectedFunction?.key ?? selectedProcessLink.pluginActionDefinitionKey ?? '';
1421
2124
  const updateProcessLinkRequest = {
1422
2125
  id: selectedProcessLink.id,
1423
- pluginConfigurationId: selectedProcessLink.pluginConfigurationId ?? '',
1424
- pluginActionDefinitionKey: selectedProcessLink.pluginActionDefinitionKey ?? '',
2126
+ pluginConfigurationId,
2127
+ pluginActionDefinitionKey: actionKey,
1425
2128
  actionProperties: configuration,
1426
2129
  activityId: selectedProcessLink.activityId,
2130
+ referenceType: inferredReferenceType,
2131
+ pluginDefinitionKey: selectedProcessLink.pluginDefinitionKey,
1427
2132
  };
1428
- if (this.stateService.processLinkEditMode === ProcessLinkEditMode.EMIT_EVENTS) {
1429
- this.stateService.sendProcessLinkUpdateEvent(updateProcessLinkRequest);
1430
- return;
1431
- }
1432
- this.processLinkService.updateProcessLink(updateProcessLinkRequest).subscribe(() => {
1433
- this.stateService.closeModal();
1434
- }, () => {
1435
- this.stateService.stopSaving();
1436
- });
2133
+ this.stateService.sendProcessLinkUpdateEvent(updateProcessLinkRequest);
1437
2134
  });
1438
2135
  }
1439
2136
  saveNewProcessLink(configuration) {
@@ -1442,31 +2139,41 @@ class PluginActionConfigurationComponent {
1442
2139
  this.pluginStateService.selectedPluginConfiguration$,
1443
2140
  this.pluginStateService.selectedPluginFunction$,
1444
2141
  this.stateService.selectedProcessLinkTypeId$,
2142
+ this.pluginStateService.selectedPluginDefinition$,
1445
2143
  ])
1446
2144
  .pipe(take(1))
1447
- .subscribe(([modalData, selectedConfiguration, selectedFunction, selectedProcessLinkTypeId]) => {
2145
+ .subscribe(([modalData, selectedConfiguration, selectedFunction, selectedProcessLinkTypeId, selectedDefinition,]) => {
2146
+ const isBuildingBlock = this.stateService.isBuildingBlockContext();
2147
+ const pluginDefinitionKey = selectedConfiguration?.pluginDefinition?.key || selectedDefinition?.key;
2148
+ if (!selectedFunction || (isBuildingBlock && !pluginDefinitionKey)) {
2149
+ this.stateService.stopSaving();
2150
+ return;
2151
+ }
2152
+ if (!isBuildingBlock && !selectedConfiguration) {
2153
+ this.stateService.stopSaving();
2154
+ return;
2155
+ }
2156
+ const referenceType = isBuildingBlock
2157
+ ? 'BUILDING_BLOCK'
2158
+ : 'FIXED';
1448
2159
  const processLinkRequest = {
1449
2160
  actionProperties: configuration,
1450
2161
  activityId: modalData?.element?.id,
1451
2162
  activityType: modalData?.element?.activityListenerType ?? '',
1452
- pluginConfigurationId: selectedConfiguration.id,
2163
+ pluginConfigurationId: isBuildingBlock ? undefined : selectedConfiguration?.id,
1453
2164
  processDefinitionId: modalData?.processDefinitionId,
1454
2165
  pluginActionDefinitionKey: selectedFunction.key,
1455
2166
  processLinkType: selectedProcessLinkTypeId,
2167
+ referenceType,
2168
+ pluginDefinitionKey,
1456
2169
  };
1457
- if (this.stateService.processLinkEditMode === ProcessLinkEditMode.EMIT_EVENTS) {
1458
- this.stateService.sendProcessLinkCreateEvent(processLinkRequest);
1459
- return;
1460
- }
1461
- this.processLinkService.saveProcessLink(processLinkRequest).subscribe(() => {
1462
- this.stateService.closeModal();
1463
- }, () => {
1464
- this.stateService.stopSaving();
1465
- });
2170
+ this.stateService.sendProcessLinkCreateEvent(processLinkRequest);
1466
2171
  });
1467
2172
  }
1468
2173
  openBackButtonSubscription() {
1469
- this._subscriptions.add(this.buttonService.backButtonClick$.subscribe(() => {
2174
+ this._subscriptions.add(this.buttonService.backButtonClick$
2175
+ .pipe(withLatestFrom(this.stateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
2176
+ .subscribe(() => {
1470
2177
  this.stepService.setChoosePluginActionSteps();
1471
2178
  }));
1472
2179
  }
@@ -1475,10 +2182,10 @@ class PluginActionConfigurationComponent {
1475
2182
  this.pluginStateService.save();
1476
2183
  }));
1477
2184
  }
1478
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: PluginActionConfigurationComponent, deps: [{ token: ProcessLinkStateService }, { token: PluginStateService }, { token: ProcessLinkButtonService }, { token: ProcessLinkStepService }, { token: ProcessLinkService }], target: i0.ɵɵFactoryTarget.Component }); }
1479
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: PluginActionConfigurationComponent, isStandalone: false, selector: "valtimo-plugin-action-configuration", inputs: { selectedPluginConfiguration$: "selectedPluginConfiguration$" }, outputs: { valid: "valid", configuration: "configuration" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 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-import-plugin-configuration\n [pluginActionKey]=\"functionKey$ | async\"\n (configurationEvent)=\"onImportConfiguration($event)\"\n></valtimo-import-plugin-configuration>\n\n<valtimo-plugin-configuration-container\n [pluginDefinitionKey]=\"pluginDefinitionKey$ | async\"\n [functionKey]=\"functionKey$ | async\"\n [save$]=\"save$\"\n [disabled$]=\"saving$\"\n [selectedPluginConfiguration$]=\"selectedPluginConfiguration$\"\n [prefillConfiguration$]=\"prefillConfiguration$\"\n (valid)=\"onValid($event)\"\n (configuration)=\"onConfiguration($event)\"\n type=\"function\"\n></valtimo-plugin-configuration-container>\n", styles: ["/*!\n * Copyright 2015-2025 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: "component", type: i1$1.PluginConfigurationContainerComponent, selector: "valtimo-plugin-configuration-container", inputs: ["type", "pluginDefinitionKey", "functionKey", "save$", "disabled$", "selectedPluginConfiguration$", "prefillConfiguration$"], outputs: ["valid", "configuration"] }, { kind: "component", type: ImportPluginConfigurationComponent, selector: "valtimo-import-plugin-configuration", inputs: ["pluginActionKey"], outputs: ["configurationEvent"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
2185
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: PluginActionConfigurationComponent, deps: [{ token: ProcessLinkStateService }, { token: PluginStateService }, { token: ProcessLinkButtonService }, { token: ProcessLinkStepService }, { token: ProcessLinkService }], target: i0.ɵɵFactoryTarget.Component }); }
2186
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: PluginActionConfigurationComponent, isStandalone: false, selector: "valtimo-plugin-action-configuration", inputs: { selectedPluginConfiguration$: "selectedPluginConfiguration$" }, outputs: { valid: "valid", configuration: "configuration" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 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-import-plugin-configuration\n [pluginActionKey]=\"functionKey$ | async\"\n (configurationEvent)=\"onImportConfiguration($event)\"\n></valtimo-import-plugin-configuration>\n\n<valtimo-plugin-configuration-container\n [pluginDefinitionKey]=\"pluginDefinitionKey$ | async\"\n [functionKey]=\"functionKey$ | async\"\n [save$]=\"save$\"\n [disabled$]=\"saving$\"\n [selectedPluginConfiguration$]=\"selectedPluginConfiguration$\"\n [prefillConfiguration$]=\"prefillConfiguration$\"\n (valid)=\"onValid($event)\"\n (configuration)=\"onConfiguration($event)\"\n type=\"function\"\n></valtimo-plugin-configuration-container>\n", styles: ["/*!\n * Copyright 2015-2025 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: "component", type: i1$1.PluginConfigurationContainerComponent, selector: "valtimo-plugin-configuration-container", inputs: ["type", "pluginDefinitionKey", "functionKey", "save$", "disabled$", "selectedPluginConfiguration$", "prefillConfiguration$"], outputs: ["valid", "configuration"] }, { kind: "component", type: ImportPluginConfigurationComponent, selector: "valtimo-import-plugin-configuration", inputs: ["pluginActionKey"], outputs: ["configurationEvent"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }] }); }
1480
2187
  }
1481
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: PluginActionConfigurationComponent, decorators: [{
2188
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: PluginActionConfigurationComponent, decorators: [{
1482
2189
  type: Component,
1483
2190
  args: [{ standalone: false, selector: 'valtimo-plugin-action-configuration', template: "<!--\n ~ Copyright 2015-2025 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-import-plugin-configuration\n [pluginActionKey]=\"functionKey$ | async\"\n (configurationEvent)=\"onImportConfiguration($event)\"\n></valtimo-import-plugin-configuration>\n\n<valtimo-plugin-configuration-container\n [pluginDefinitionKey]=\"pluginDefinitionKey$ | async\"\n [functionKey]=\"functionKey$ | async\"\n [save$]=\"save$\"\n [disabled$]=\"saving$\"\n [selectedPluginConfiguration$]=\"selectedPluginConfiguration$\"\n [prefillConfiguration$]=\"prefillConfiguration$\"\n (valid)=\"onValid($event)\"\n (configuration)=\"onConfiguration($event)\"\n type=\"function\"\n></valtimo-plugin-configuration-container>\n", styles: ["/*!\n * Copyright 2015-2025 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"] }]
1484
2191
  }], ctorParameters: () => [{ type: ProcessLinkStateService }, { type: PluginStateService }, { type: ProcessLinkButtonService }, { type: ProcessLinkStepService }, { type: ProcessLinkService }], propDecorators: { selectedPluginConfiguration$: [{
@@ -1516,7 +2223,7 @@ class FormLinkProcessDiagramComponent {
1516
2223
  ngOnInit() {
1517
2224
  this.pageTitleService.disableReset();
1518
2225
  combineLatest([this.route.queryParams, this.processService.getProcessDefinitions()])
1519
- .pipe(map(([queryParams, processDefinitions]) => ({ queryParams, processDefinitions })))
2226
+ .pipe(map$1(([queryParams, processDefinitions]) => ({ queryParams, processDefinitions })))
1520
2227
  .subscribe(response => {
1521
2228
  this.processDefinitions = response.processDefinitions;
1522
2229
  if (response.queryParams.process) {
@@ -1613,13 +2320,13 @@ class FormLinkProcessDiagramComponent {
1613
2320
  }
1614
2321
  this.version = +version;
1615
2322
  }
1616
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormLinkProcessDiagramComponent, deps: [{ token: i1$3.ProcessService }, { token: i3$1.ActivatedRoute }, { token: i2$2.PageTitleService }], target: i0.ɵɵFactoryTarget.Component }); }
1617
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: FormLinkProcessDiagramComponent, isStandalone: false, selector: "valtimo-form-link-process-diagram", outputs: { bpmnElementModalOpen: "bpmnElementModalOpen", bpmnElementModalClose: "bpmnElementModalClose" }, viewQueries: [{ propertyName: "el", first: true, predicate: ["ref"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"container-fluid\">\n <div class=\"row p-4 bg-white\">\n <div class=\"col\">\n <div #ref class=\"diagram-container\"></div>\n </div>\n </div>\n</div>\n<div class=\"p-4 text-center legenda-holder\">\n <span>Click on a User Task to specify a form definition for that User Task.</span>\n</div>\n\n<ng-container renderInPageHeader [fullWidth]=\"true\">\n <ng-template>\n <div class=\"form-link-dossier-actions\">\n <cds-select [label]=\"'Process'\" (change)=\"setProcessDefinitionKey($event.target.value)\"\n ><option\n *ngFor=\"let processDefinition of processDefinitions\"\n [value]=\"processDefinition.key\"\n [selected]=\"processDefinitionKey === processDefinition.key\"\n >\n {{ processDefinition.name }}\n </option>\n </cds-select>\n <cds-select [label]=\"'Version'\" (change)=\"setProcessDefinitionVersion($event.target.value)\">\n <option\n *ngFor=\"let processDefinitionVersion of processDefinitionVersions\"\n [value]=\"processDefinitionVersion.version\"\n [selected]=\"processDefinitionVersion.version === version\"\n >\n {{ processDefinitionVersion.version }}\n </option>\n </cds-select>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".diagram-container-switch-holder{width:100%;z-index:1000}.diagram-container{height:58vh}.container-fluid{border:1px solid #dee2e6}.options{border-bottom:1px solid #dee2e6}.form-link-dossier-actions{display:flex;flex-direction:row;gap:8px}\n/*!\n * Copyright 2015-2025 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: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$2.RenderInPageHeaderDirective, selector: "[renderInPageHeader]", inputs: ["fullWidth"] }, { kind: "component", type: i4.Select, selector: "cds-select, ibm-select", inputs: ["value", "display", "label", "helperText", "invalidText", "warn", "warnText", "id", "size", "disabled", "skeleton", "invalid", "readonly", "theme", "ariaLabel", "fluid"], outputs: ["valueChange"] }, { kind: "directive", type: i4.Option, selector: "option" }] }); }
2323
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormLinkProcessDiagramComponent, deps: [{ token: i1$3.ProcessService }, { token: i3$3.ActivatedRoute }, { token: i2$1.PageTitleService }], target: i0.ɵɵFactoryTarget.Component }); }
2324
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: FormLinkProcessDiagramComponent, isStandalone: false, selector: "valtimo-form-link-process-diagram", outputs: { bpmnElementModalOpen: "bpmnElementModalOpen", bpmnElementModalClose: "bpmnElementModalClose" }, viewQueries: [{ propertyName: "el", first: true, predicate: ["ref"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"container-fluid\">\n <div class=\"row p-4 bg-white\">\n <div class=\"col\">\n <div #ref class=\"diagram-container\"></div>\n </div>\n </div>\n</div>\n<div class=\"p-4 text-center legenda-holder\">\n <span>Click on a User Task to specify a form definition for that User Task.</span>\n</div>\n\n<ng-container renderInPageHeader [fullWidth]=\"true\">\n <ng-template>\n <div class=\"form-link-dossier-actions\">\n <cds-select [label]=\"'Process'\" (change)=\"setProcessDefinitionKey($event.target.value)\"\n ><option\n *ngFor=\"let processDefinition of processDefinitions\"\n [value]=\"processDefinition.key\"\n [selected]=\"processDefinitionKey === processDefinition.key\"\n >\n {{ processDefinition.name }}\n </option>\n </cds-select>\n <cds-select [label]=\"'Version'\" (change)=\"setProcessDefinitionVersion($event.target.value)\">\n <option\n *ngFor=\"let processDefinitionVersion of processDefinitionVersions\"\n [value]=\"processDefinitionVersion.version\"\n [selected]=\"processDefinitionVersion.version === version\"\n >\n {{ processDefinitionVersion.version }}\n </option>\n </cds-select>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".diagram-container-switch-holder{width:100%;z-index:1000}.diagram-container{height:58vh}.container-fluid{border:1px solid #dee2e6}.options{border-bottom:1px solid #dee2e6}.form-link-dossier-actions{display:flex;flex-direction:row;gap:8px}\n/*!\n * Copyright 2015-2025 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: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$1.RenderInPageHeaderDirective, selector: "[renderInPageHeader]", inputs: ["fullWidth"] }, { kind: "component", type: i3$2.Select, selector: "cds-select, ibm-select", inputs: ["value", "display", "label", "helperText", "invalidText", "warn", "warnText", "id", "size", "disabled", "skeleton", "invalid", "readonly", "theme", "ariaLabel", "fluid"], outputs: ["valueChange"] }, { kind: "directive", type: i3$2.Option, selector: "option" }] }); }
1618
2325
  }
1619
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormLinkProcessDiagramComponent, decorators: [{
2326
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormLinkProcessDiagramComponent, decorators: [{
1620
2327
  type: Component,
1621
2328
  args: [{ standalone: false, selector: 'valtimo-form-link-process-diagram', template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"container-fluid\">\n <div class=\"row p-4 bg-white\">\n <div class=\"col\">\n <div #ref class=\"diagram-container\"></div>\n </div>\n </div>\n</div>\n<div class=\"p-4 text-center legenda-holder\">\n <span>Click on a User Task to specify a form definition for that User Task.</span>\n</div>\n\n<ng-container renderInPageHeader [fullWidth]=\"true\">\n <ng-template>\n <div class=\"form-link-dossier-actions\">\n <cds-select [label]=\"'Process'\" (change)=\"setProcessDefinitionKey($event.target.value)\"\n ><option\n *ngFor=\"let processDefinition of processDefinitions\"\n [value]=\"processDefinition.key\"\n [selected]=\"processDefinitionKey === processDefinition.key\"\n >\n {{ processDefinition.name }}\n </option>\n </cds-select>\n <cds-select [label]=\"'Version'\" (change)=\"setProcessDefinitionVersion($event.target.value)\">\n <option\n *ngFor=\"let processDefinitionVersion of processDefinitionVersions\"\n [value]=\"processDefinitionVersion.version\"\n [selected]=\"processDefinitionVersion.version === version\"\n >\n {{ processDefinitionVersion.version }}\n </option>\n </cds-select>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".diagram-container-switch-holder{width:100%;z-index:1000}.diagram-container{height:58vh}.container-fluid{border:1px solid #dee2e6}.options{border-bottom:1px solid #dee2e6}.form-link-dossier-actions{display:flex;flex-direction:row;gap:8px}\n/*!\n * Copyright 2015-2025 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"] }]
1622
- }], ctorParameters: () => [{ type: i1$3.ProcessService }, { type: i3$1.ActivatedRoute }, { type: i2$2.PageTitleService }], propDecorators: { el: [{
2329
+ }], ctorParameters: () => [{ type: i1$3.ProcessService }, { type: i3$3.ActivatedRoute }, { type: i2$1.PageTitleService }], propDecorators: { el: [{
1623
2330
  type: ViewChild,
1624
2331
  args: ['ref']
1625
2332
  }], bpmnElementModalOpen: [{
@@ -1629,7 +2336,469 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
1629
2336
  }] } });
1630
2337
 
1631
2338
  /*
1632
- * Copyright 2015-2025 Ritense BV, the Netherlands.
2339
+ * Copyright 2015-2026 Ritense BV, the Netherlands.
2340
+ *
2341
+ * Licensed under EUPL, Version 1.2 (the "License");
2342
+ * you may not use this file except in compliance with the License.
2343
+ * You may obtain a copy of the License at
2344
+ *
2345
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2346
+ *
2347
+ * Unless required by applicable law or agreed to in writing, software
2348
+ * distributed under the License is distributed on an "AS IS" basis,
2349
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2350
+ * See the License for the specific language governing permissions and
2351
+ * limitations under the License.
2352
+ */
2353
+ class ConfigureBuildingBlockMappingsComponent {
2354
+ getBuildingBlockFieldItemsForRow$(group) {
2355
+ const cached = this._rowItemsCache.get(group);
2356
+ if (cached)
2357
+ return cached;
2358
+ const stream = combineLatest([
2359
+ this.buildingBlockFieldItems$,
2360
+ this.inputsForm.valueChanges.pipe(startWith(this.inputsForm.value)),
2361
+ group.valueChanges.pipe(startWith(group.value)),
2362
+ ]).pipe(map$1(([buildingBlockFieldItems, inputsFormValue, groupValue]) => {
2363
+ const usedInputTargets = inputsFormValue.inputs?.map(input => input.target).filter(Boolean) ?? [];
2364
+ return buildingBlockFieldItems.filter(item => {
2365
+ if (item.id === groupValue.target)
2366
+ return true;
2367
+ return !usedInputTargets.includes(`${item.id}`);
2368
+ });
2369
+ }));
2370
+ this._rowItemsCache.set(group, stream);
2371
+ return stream;
2372
+ }
2373
+ getUsedCaseTargetsForRow$(group) {
2374
+ const cached = this._outputTargetFiltersCache.get(group);
2375
+ if (cached)
2376
+ return cached;
2377
+ const stream = combineLatest([
2378
+ this.outputsForm.valueChanges.pipe(startWith(this.outputsForm.value)),
2379
+ group.valueChanges.pipe(startWith(group.value)),
2380
+ ]).pipe(map$1(([outputsFormValue, groupValue]) => {
2381
+ const allTargets = outputsFormValue.outputs?.map(output => output.target).filter(Boolean) ?? [];
2382
+ return allTargets.filter(target => target !== groupValue.target);
2383
+ }));
2384
+ this._outputTargetFiltersCache.set(group, stream);
2385
+ return stream;
2386
+ }
2387
+ get inputs() {
2388
+ return this.inputsForm.controls.inputs;
2389
+ }
2390
+ get outputs() {
2391
+ return this.outputsForm.controls.outputs;
2392
+ }
2393
+ constructor(fb, buildingBlockStateService, buttonService, stepService, processLinkService, processLinkStateService, translateService, route, changeDetectorRef, buildingBlockApiService, stateService) {
2394
+ this.fb = fb;
2395
+ this.buildingBlockStateService = buildingBlockStateService;
2396
+ this.buttonService = buttonService;
2397
+ this.stepService = stepService;
2398
+ this.processLinkService = processLinkService;
2399
+ this.processLinkStateService = processLinkStateService;
2400
+ this.translateService = translateService;
2401
+ this.route = route;
2402
+ this.changeDetectorRef = changeDetectorRef;
2403
+ this.buildingBlockApiService = buildingBlockApiService;
2404
+ this.stateService = stateService;
2405
+ this.buildingBlockFields$ = this.buildingBlockStateService.buildingBlockFields$;
2406
+ this.buildingBlockFieldItems$ = this.buildingBlockFields$.pipe(map$1(buildingBlockFields => buildingBlockFields.map(buildingBlockField => {
2407
+ return {
2408
+ id: buildingBlockField.name,
2409
+ text: `doc:${buildingBlockField.name}`,
2410
+ };
2411
+ })));
2412
+ this.inputsForm = new FormGroup({
2413
+ inputs: new FormArray([]),
2414
+ });
2415
+ this.outputsForm = new FormGroup({
2416
+ outputs: new FormArray([]),
2417
+ });
2418
+ this._rowItemsCache = new WeakMap();
2419
+ this._outputTargetFiltersCache = new WeakMap();
2420
+ this.syncTimingItems = [
2421
+ {
2422
+ id: 'CONTINUOUS',
2423
+ labelKey: 'processLinkConfiguration.buildingBlock.sync.continuous',
2424
+ },
2425
+ {
2426
+ id: 'END',
2427
+ labelKey: 'processLinkConfiguration.buildingBlock.sync.end',
2428
+ },
2429
+ ];
2430
+ this.params$ = getCaseManagementRouteParams(this.route);
2431
+ this.buildingBlockParams$ = getBuildingBlockManagementRouteParams(this.route);
2432
+ this.ValuePathSelectorPrefix = ValuePathSelectorPrefix;
2433
+ this.sourceIsCase$ = new BehaviorSubject(true);
2434
+ /**
2435
+ * Returns the name of the source/target context in mappings.
2436
+ * When in a building block context, shows the parent building block name.
2437
+ * When in a case context, shows the case name.
2438
+ */
2439
+ this.sourceContextName$ = combineLatest([
2440
+ this.params$,
2441
+ this.buildingBlockParams$,
2442
+ ]).pipe(switchMap$1(([caseParams, bbParams]) => {
2443
+ if (bbParams?.buildingBlockDefinitionKey && bbParams?.buildingBlockDefinitionVersionTag) {
2444
+ this.sourceIsCase$.next(false);
2445
+ // We're in a building block context - fetch the parent building block name
2446
+ return this.buildingBlockApiService
2447
+ .getBuildingBlockDefinition(bbParams.buildingBlockDefinitionKey, bbParams.buildingBlockDefinitionVersionTag)
2448
+ .pipe(map$1(def => def?.name ?? bbParams.buildingBlockDefinitionKey));
2449
+ }
2450
+ else if (caseParams?.caseDefinitionKey && caseParams?.caseDefinitionVersionTag) {
2451
+ this.sourceIsCase$.next(true);
2452
+ // We're in a case context - fetch the case name
2453
+ return this.buildingBlockApiService
2454
+ .getCaseDefinition(caseParams.caseDefinitionKey, caseParams.caseDefinitionVersionTag)
2455
+ .pipe(map$1(def => def?.name ?? caseParams.caseDefinitionKey));
2456
+ }
2457
+ return of(this.translateService.instant('processLinkConfiguration.buildingBlock.case'));
2458
+ }));
2459
+ /**
2460
+ * Returns the name of the building block being configured.
2461
+ */
2462
+ this.targetBuildingBlockName$ = combineLatest([
2463
+ this.buildingBlockStateService.definitionKey$,
2464
+ this.buildingBlockStateService.definitionVersionTag$,
2465
+ ]).pipe(switchMap$1(([key, versionTag]) => {
2466
+ if (key && versionTag) {
2467
+ return this.buildingBlockApiService
2468
+ .getBuildingBlockDefinition(key, versionTag)
2469
+ .pipe(map$1(def => def?.name ?? key));
2470
+ }
2471
+ return of(this.translateService.instant('processLinkConfiguration.buildingBlock.buildingBlock'));
2472
+ }));
2473
+ this._subscriptions = new Subscription();
2474
+ this._syncingFromState = false;
2475
+ this._suppressValidation = false;
2476
+ this.allInputsMapped$ = combineLatest([
2477
+ this.buildingBlockFields$,
2478
+ this.inputsForm.valueChanges.pipe(startWith(this.inputsForm.value)),
2479
+ ]).pipe(map$1(([fields, inputsFormValue]) => {
2480
+ const allTargets = inputsFormValue.inputs?.map(input => input.target).filter((t) => !!t) ?? [];
2481
+ if (!fields || fields.length === 0) {
2482
+ return false;
2483
+ }
2484
+ return fields.every(field => allTargets.includes(field.name));
2485
+ }));
2486
+ }
2487
+ ngOnInit() {
2488
+ combineLatest([this.buildingBlockFields$, this.buildingBlockStateService.inputMappings$])
2489
+ .pipe(take(1))
2490
+ .subscribe(([fields, mappings]) => {
2491
+ this.syncInputsFromState(fields, mappings);
2492
+ });
2493
+ this.buildingBlockStateService.outputMappings$.pipe(take(1)).subscribe(mappings => {
2494
+ this.syncOutputsFromState(mappings);
2495
+ });
2496
+ this._subscriptions.add(combineLatest([this.inputsForm.statusChanges, this.outputsForm.statusChanges]).subscribe(() => {
2497
+ this.triggerValidation();
2498
+ }));
2499
+ this.triggerValidation();
2500
+ this._subscriptions.add(this.buttonService.backButtonClick$
2501
+ .pipe(withLatestFrom(this.stateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
2502
+ .subscribe(() => {
2503
+ this.stepService.setConfigureBuildingBlockPluginsStep();
2504
+ }));
2505
+ this._subscriptions.add(this.buttonService.saveButtonClick$.subscribe(() => {
2506
+ this.persistProcessLink();
2507
+ }));
2508
+ this._subscriptions.add(this.outputsForm.valueChanges.subscribe(() => {
2509
+ this.persistOutputFormState();
2510
+ }));
2511
+ this._subscriptions.add(this.inputsForm.valueChanges.subscribe(() => {
2512
+ this.persistInputFormState();
2513
+ }));
2514
+ }
2515
+ ngOnDestroy() {
2516
+ this._subscriptions.unsubscribe();
2517
+ }
2518
+ createInputGroup(mapping) {
2519
+ return new FormGroup({
2520
+ source: new FormControl(mapping?.source ?? '', {
2521
+ nonNullable: true,
2522
+ validators: [Validators.required],
2523
+ }),
2524
+ target: new FormControl(mapping?.target ?? '', {
2525
+ nonNullable: true,
2526
+ validators: [Validators.required],
2527
+ }),
2528
+ });
2529
+ }
2530
+ createOutputGroup(mapping, sourceOverride) {
2531
+ return new FormGroup({
2532
+ source: new FormControl(sourceOverride ?? mapping?.source ?? '', {
2533
+ nonNullable: true,
2534
+ validators: [Validators.required],
2535
+ }),
2536
+ target: new FormControl(mapping?.target ?? '', {
2537
+ nonNullable: true,
2538
+ validators: [Validators.required],
2539
+ }),
2540
+ syncTiming: new FormControl(mapping?.syncTiming ?? 'END', { nonNullable: true, validators: [Validators.required] }),
2541
+ });
2542
+ }
2543
+ addInput() {
2544
+ this.inputs.push(this.createInputGroup());
2545
+ this.persistInputFormState();
2546
+ this.changeDetectorRef.detectChanges();
2547
+ }
2548
+ deleteInput(index) {
2549
+ this.inputs.removeAt(index);
2550
+ this.persistInputFormState();
2551
+ this.changeDetectorRef.detectChanges();
2552
+ }
2553
+ addOutput(source) {
2554
+ this.outputs.push(this.createOutputGroup(undefined, source));
2555
+ this.persistOutputFormState();
2556
+ this.changeDetectorRef.detectChanges();
2557
+ }
2558
+ deleteOutput(index) {
2559
+ this.outputs.removeAt(index);
2560
+ this.persistOutputFormState();
2561
+ }
2562
+ syncInputsFromState(fields, mappings) {
2563
+ this._syncingFromState = true;
2564
+ const requiredTargets = fields.filter(f => f.required).map(f => f.name);
2565
+ const allMappings = [
2566
+ ...requiredTargets.map(target => mappings.find(m => m.target === target) || { target: target, source: '' }),
2567
+ ...mappings.filter(mapping => !requiredTargets.includes(mapping.target)),
2568
+ ];
2569
+ this.inputs.clear();
2570
+ allMappings.forEach(mapping => {
2571
+ this.inputs.push(this.createInputGroup(mapping));
2572
+ });
2573
+ this._syncingFromState = false;
2574
+ this.triggerValidation();
2575
+ }
2576
+ isSyncTimingSelected(group, value) {
2577
+ return group.controls.syncTiming.value === value;
2578
+ }
2579
+ syncOutputsFromState(mappings) {
2580
+ this._syncingFromState = true;
2581
+ this.outputs.clear();
2582
+ (mappings || []).forEach(mapping => {
2583
+ this.outputs.push(this.createOutputGroup(mapping));
2584
+ });
2585
+ this._syncingFromState = false;
2586
+ this.triggerValidation();
2587
+ }
2588
+ persistInputFormState() {
2589
+ if (this._syncingFromState) {
2590
+ return;
2591
+ }
2592
+ const mapped = this.inputs.controls.map(group => {
2593
+ return { source: group.value.source, target: group.value.target };
2594
+ });
2595
+ this.buildingBlockStateService.setInputMappings(mapped);
2596
+ this.triggerValidation();
2597
+ }
2598
+ persistOutputFormState() {
2599
+ if (this._syncingFromState) {
2600
+ return;
2601
+ }
2602
+ const mapped = this.outputs.controls.map(group => {
2603
+ return {
2604
+ source: group.value.source,
2605
+ target: group.value.target,
2606
+ syncTiming: (group.value.syncTiming ?? 'END'),
2607
+ };
2608
+ });
2609
+ this.buildingBlockStateService.setOutputMappings(mapped);
2610
+ this.triggerValidation();
2611
+ }
2612
+ isValid() {
2613
+ const fields = this.buildingBlockStateService.getBuildingBlockFieldsSnapshot();
2614
+ this.clearCustomErrors();
2615
+ const inputsValid = this.validateInputs(fields);
2616
+ const outputsValid = this.validateOutputs();
2617
+ const overall = this.inputsForm.valid && this.outputsForm.valid && inputsValid && outputsValid;
2618
+ this.buttonService[overall ? 'enableSaveButton' : 'disableSaveButton']();
2619
+ return overall;
2620
+ }
2621
+ validateInputs(fields) {
2622
+ let valid = true;
2623
+ const requiredTargets = new Set(fields.filter(f => f.required).map(f => f.name));
2624
+ const targetCounts = {};
2625
+ this.inputs.controls.forEach(group => {
2626
+ const target = group.controls.target.value || '';
2627
+ const source = group.controls.source.value || '';
2628
+ if (target) {
2629
+ targetCounts[target] = (targetCounts[target] || 0) + 1;
2630
+ }
2631
+ if (!source) {
2632
+ group.controls.source.setErrors({ required: true });
2633
+ valid = false;
2634
+ }
2635
+ if (!target) {
2636
+ group.controls.target.setErrors({ required: true });
2637
+ valid = false;
2638
+ }
2639
+ });
2640
+ Object.entries(targetCounts).forEach(([target, count]) => {
2641
+ if (count > 1) {
2642
+ this.inputs.controls
2643
+ .filter(g => g.controls.target.value === target)
2644
+ .forEach(g => g.controls.target.setErrors({ duplicateTarget: true }));
2645
+ valid = false;
2646
+ }
2647
+ });
2648
+ requiredTargets.forEach(reqTarget => {
2649
+ const match = this.inputs.controls.find(g => g.controls.target.value === reqTarget);
2650
+ if (!match || !match.controls.source.value) {
2651
+ valid = false;
2652
+ }
2653
+ });
2654
+ return valid;
2655
+ }
2656
+ validateOutputs() {
2657
+ let valid = true;
2658
+ const targetCounts = {};
2659
+ this.outputs.controls.forEach(group => {
2660
+ const target = group.controls.target.value || '';
2661
+ const source = group.controls.source.value || '';
2662
+ const syncTiming = group.controls.syncTiming.value;
2663
+ if (target) {
2664
+ targetCounts[target] = (targetCounts[target] || 0) + 1;
2665
+ }
2666
+ if (!source) {
2667
+ group.controls.source.setErrors({ required: true });
2668
+ valid = false;
2669
+ }
2670
+ if (!target) {
2671
+ group.controls.target.setErrors({ required: true });
2672
+ valid = false;
2673
+ }
2674
+ if (!syncTiming) {
2675
+ group.controls.syncTiming.setErrors({ required: true });
2676
+ valid = false;
2677
+ }
2678
+ });
2679
+ Object.entries(targetCounts).forEach(([target, count]) => {
2680
+ if (count > 1) {
2681
+ this.outputs.controls
2682
+ .filter(g => g.controls.target.value === target)
2683
+ .forEach(g => g.controls.target.setErrors({ duplicateTarget: true }));
2684
+ valid = false;
2685
+ }
2686
+ });
2687
+ return valid;
2688
+ }
2689
+ clearCustomErrors() {
2690
+ this.inputs.controls.forEach(group => {
2691
+ group.controls.source.setErrors(null);
2692
+ group.controls.target.setErrors(null);
2693
+ });
2694
+ this.outputs.controls.forEach(group => {
2695
+ group.controls.source.setErrors(null);
2696
+ group.controls.target.setErrors(null);
2697
+ group.controls.syncTiming.setErrors(null);
2698
+ });
2699
+ }
2700
+ triggerValidation() {
2701
+ if (this._suppressValidation)
2702
+ return;
2703
+ this._suppressValidation = true;
2704
+ Promise.resolve().then(() => {
2705
+ this.isValid();
2706
+ this._suppressValidation = false;
2707
+ });
2708
+ }
2709
+ persistProcessLink() {
2710
+ if (!this.isValid()) {
2711
+ this.buttonService.disableSaveButton();
2712
+ return;
2713
+ }
2714
+ this.buttonService.disableSaveButton();
2715
+ this.processLinkStateService.startSaving();
2716
+ this.processLinkStateService.selectedProcessLink$
2717
+ .pipe(take(1))
2718
+ .subscribe(selectedProcessLink => {
2719
+ if (selectedProcessLink && selectedProcessLink.processLinkType === 'building-block') {
2720
+ this.updateProcessLink(selectedProcessLink);
2721
+ }
2722
+ else {
2723
+ this.createProcessLink();
2724
+ }
2725
+ });
2726
+ }
2727
+ createProcessLink() {
2728
+ this.processLinkStateService.modalParams$.pipe(take(1)).subscribe(modalParams => {
2729
+ const { key, versionTag } = this.buildingBlockStateService.getDefinitionSnapshot();
2730
+ if (!modalParams || !key || !versionTag) {
2731
+ this.processLinkStateService.stopSaving();
2732
+ return;
2733
+ }
2734
+ const activityId = modalParams.element?.id;
2735
+ if (!activityId) {
2736
+ this.processLinkStateService.stopSaving();
2737
+ return;
2738
+ }
2739
+ const request = {
2740
+ processDefinitionId: modalParams.processDefinitionId ?? '-',
2741
+ activityId,
2742
+ activityType: modalParams.element?.activityListenerType ?? '',
2743
+ processLinkType: 'building-block',
2744
+ buildingBlockDefinitionKey: key,
2745
+ buildingBlockDefinitionVersionTag: versionTag,
2746
+ pluginConfigurationMappings: this.buildingBlockStateService.getPluginConfigurationMappingsSnapshot(),
2747
+ inputMappings: this.buildingBlockStateService.getInputMappingsSnapshot(),
2748
+ outputMappings: this.buildingBlockStateService.getOutputMappingsSnapshot(),
2749
+ };
2750
+ this.processLinkStateService.sendProcessLinkCreateEvent(request);
2751
+ });
2752
+ }
2753
+ updateProcessLink(processLink) {
2754
+ this.processLinkStateService.modalParams$.pipe(take(1)).subscribe(modalParams => {
2755
+ const { key, versionTag } = this.buildingBlockStateService.getDefinitionSnapshot();
2756
+ if (!modalParams || !key || !versionTag) {
2757
+ this.processLinkStateService.stopSaving();
2758
+ return;
2759
+ }
2760
+ const activityId = modalParams.element?.id;
2761
+ const request = {
2762
+ id: processLink.id,
2763
+ activityId: activityId,
2764
+ processLinkType: 'building-block',
2765
+ buildingBlockDefinitionKey: key,
2766
+ buildingBlockDefinitionVersionTag: versionTag,
2767
+ pluginConfigurationMappings: this.buildingBlockStateService.getPluginConfigurationMappingsSnapshot(),
2768
+ inputMappings: this.buildingBlockStateService.getInputMappingsSnapshot(),
2769
+ outputMappings: this.buildingBlockStateService.getOutputMappingsSnapshot(),
2770
+ };
2771
+ this.processLinkStateService.sendProcessLinkUpdateEvent(request);
2772
+ });
2773
+ }
2774
+ isRequiredTarget(fields, target) {
2775
+ if (!fields)
2776
+ return false;
2777
+ return fields.some(field => field.required && field.name === target);
2778
+ }
2779
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ConfigureBuildingBlockMappingsComponent, deps: [{ token: i1$2.FormBuilder }, { token: BuildingBlockStateService }, { token: ProcessLinkButtonService }, { token: ProcessLinkStepService }, { token: ProcessLinkService }, { token: ProcessLinkStateService }, { token: i3.TranslateService }, { token: i3$3.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: ProcessLinkBuildingBlockApiService }, { token: ProcessLinkStateService }], target: i0.ɵɵFactoryTarget.Component }); }
2780
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.18", type: ConfigureBuildingBlockMappingsComponent, isStandalone: true, selector: "valtimo-configure-building-block-mappings", ngImport: i0, template: "<!--\n ~ Copyright 2015-2026 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@let obs =\n {\n fields: (buildingBlockFields$ | async),\n fieldItems: (buildingBlockFieldItems$ | async),\n params: (params$ | async),\n buildingBlockParams: (buildingBlockParams$ | async),\n sourceContextName: (sourceContextName$ | async),\n targetBuildingBlockName: (targetBuildingBlockName$ | async),\n sourceIsCase: (sourceIsCase$ | async),\n caseLabelTranslation: ('Case' | translate),\n buildingBlockLabelTranslation:\n ('processLinkConfiguration.buildingBlock.selectLabel' | translate),\n };\n\n<div class=\"mapping-step\">\n <section class=\"mapping-section\">\n <h4 class=\"section-header\">\n {{ 'processLinkConfiguration.buildingBlock.inputTitle' | translate }}\n </h4>\n\n <div class=\"mapping-table\" [formGroup]=\"inputsForm\">\n <div class=\"mapping-header input\">\n <v-input-label\n [title]=\"\n (obs.sourceIsCase ? obs.caseLabelTranslation : obs.buildingBlockLabelTranslation) +\n ': ' +\n obs.sourceContextName\n \"\n />\n\n <v-input-label\n [title]=\"obs.buildingBlockLabelTranslation + ': ' + obs.targetBuildingBlockName\"\n />\n </div>\n\n <div formArrayName=\"inputs\">\n @for (group of inputs.controls; let inputIndex = $index; track inputIndex) {\n <div class=\"mapping-row input\" [formGroup]=\"group\">\n <div class=\"mapping-part\">\n <valtimo-value-path-selector\n [cdsLayer]=\"2\"\n [prefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [caseDefinitionKey]=\"obs.params?.caseDefinitionKey\"\n [caseDefinitionVersionTag]=\"obs.params?.caseDefinitionVersionTag\"\n [buildingBlockDefinitionKey]=\"obs.buildingBlockParams?.buildingBlockDefinitionKey\"\n [buildingBlockDefinitionVersionTag]=\"\n obs.buildingBlockParams?.buildingBlockDefinitionVersionTag\n \"\n [appendInline]=\"false\"\n [dropUp]=\"false\"\n [formControl]=\"group.get('source')\"\n ></valtimo-value-path-selector>\n\n <div class=\"arrow\">\u2192</div>\n </div>\n\n <div class=\"mapping-part\">\n <div class=\"mapping-cell\">\n @if (isRequiredTarget(obs.fields, group.get('target')?.value)) {\n <div class=\"required-target\">\n {{ 'doc:' + group.get('target')?.value }}\n </div>\n } @else {\n <v-select\n [cdsLayer]=\"2\"\n [appendInline]=\"false\"\n formControlName=\"target\"\n [placeholder]=\"\n 'processLinkConfiguration.buildingBlock.selectedBuildingBlockFieldPlaceholder'\n | translate\n \"\n [items]=\"getBuildingBlockFieldItemsForRow$(group) | async\"\n [dropUp]=\"false\"\n >\n </v-select>\n }\n </div>\n\n <div class=\"mapping-cell-actions\">\n @if (!isRequiredTarget(obs.fields, group.get('target')?.value)) {\n <button\n cdsButton=\"danger--ghost\"\n iconOnly\n size=\"sm\"\n (click)=\"deleteInput(inputIndex)\"\n >\n <svg cdsIcon=\"trash-can\" class=\"cds--btn__icon\" size=\"16\"></svg>\n </button>\n } @else {\n <div class=\"required-indicator\">*</div>\n\n <div>\n {{ 'interface.required' | translate }}\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <button\n cdsButton=\"tertiary\"\n size=\"sm\"\n (click)=\"addInput()\"\n [title]=\"'processLinkConfiguration.buildingBlock.addInput' | translate\"\n [disabled]=\"allInputsMapped$ | async\"\n >\n {{ 'processLinkConfiguration.buildingBlock.addInput' | translate }}\n\n <svg cdsIcon=\"add\" class=\"cds--btn__icon\" size=\"16\"></svg>\n </button>\n </section>\n\n <section class=\"mapping-section\">\n <h4 class=\"section-header\">\n {{ 'processLinkConfiguration.buildingBlock.outputTitle' | translate }}\n </h4>\n\n <div class=\"mapping-table\" [formGroup]=\"outputsForm\">\n <div class=\"mapping-header output\">\n <v-input-label\n [title]=\"obs.buildingBlockLabelTranslation + ': ' + obs.targetBuildingBlockName\"\n />\n\n <v-input-label\n [title]=\"\n (obs.sourceIsCase ? obs.caseLabelTranslation : obs.buildingBlockLabelTranslation) +\n ': ' +\n obs.sourceContextName\n \"\n />\n\n <div class=\"sync-options\" [style.display]=\"'none'\">\n <v-input-label\n [title]=\"'processLinkConfiguration.buildingBlock.sync.title' | translate\"\n />\n </div>\n </div>\n\n <div formArrayName=\"outputs\">\n @for (group of outputs.controls; let outputIndex = $index; track outputIndex) {\n <div class=\"mapping-row output\" [formGroup]=\"group\">\n <div class=\"mapping-part\">\n <div class=\"mapping-cell\">\n <v-select\n [cdsLayer]=\"2\"\n [appendInline]=\"false\"\n formControlName=\"source\"\n [items]=\"obs.fieldItems || []\"\n [placeholder]=\"\n 'processLinkConfiguration.buildingBlock.selectedBuildingBlockFieldPlaceholder'\n | translate\n \"\n [dropUp]=\"true\"\n >\n </v-select>\n </div>\n\n <div class=\"arrow\">\u2192</div>\n </div>\n\n <div class=\"mapping-part\">\n <valtimo-value-path-selector\n [cdsLayer]=\"2\"\n [prefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [caseDefinitionKey]=\"obs.params?.caseDefinitionKey\"\n [caseDefinitionVersionTag]=\"obs.params?.caseDefinitionVersionTag\"\n [buildingBlockDefinitionKey]=\"obs.buildingBlockParams?.buildingBlockDefinitionKey\"\n [buildingBlockDefinitionVersionTag]=\"\n obs.buildingBlockParams?.buildingBlockDefinitionVersionTag\n \"\n [formControl]=\"group.get('target')\"\n [appendInline]=\"false\"\n [filterItems]=\"getUsedCaseTargetsForRow$(group) | async\"\n [dropUp]=\"true\"\n ></valtimo-value-path-selector>\n </div>\n\n <div class=\"mapping-part\">\n <div class=\"mapping-cell\" [style.display]=\"'none'\">\n <cds-radio-group\n class=\"sync-radio-group\"\n formControlName=\"syncTiming\"\n [attr.name]=\"'syncTiming-' + outputIndex\"\n >\n @for (item of syncTimingItems; track item.id) {\n <cds-radio [value]=\"item.id\" [checked]=\"isSyncTimingSelected(group, item.id)\">\n {{ item.labelKey | translate }}\n </cds-radio>\n }\n </cds-radio-group>\n </div>\n\n <div class=\"mapping-cell-actions\">\n <button\n cdsButton=\"danger--ghost\"\n iconOnly\n size=\"sm\"\n (click)=\"deleteOutput(outputIndex)\"\n >\n <svg cdsIcon=\"trash-can\" class=\"cds--btn__icon\" size=\"16\"></svg>\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <button\n cdsButton=\"tertiary\"\n size=\"sm\"\n (click)=\"addOutput()\"\n [title]=\"'processLinkConfiguration.buildingBlock.addOutput' | translate\"\n >\n {{ 'processLinkConfiguration.buildingBlock.addOutput' | translate }}\n\n <svg cdsIcon=\"add\" class=\"cds--btn__icon\" size=\"16\"></svg>\n </button>\n </section>\n</div>\n", styles: [".section-header{font-size:14px;line-height:18px;font-weight:600}.mapping-section{margin-bottom:16px}.mapping-row,.mapping-header{display:grid;align-items:center}.mapping-row.input,.mapping-header.input{grid-template-columns:1fr 1fr}.mapping-row.output,.mapping-header.output{grid-template-columns:5fr 6fr 58px}.mapping-header .output .sync-options{padding-left:10px;display:flex}.mapping-row{margin-bottom:8px;padding:8px;background-color:var(--cds-layer)}.mapping-row .mapping-part{display:flex}.mapping-row .arrow{text-align:center;width:40px;line-height:40px;font-size:large}.mapping-row .mapping-cell{flex:1;min-width:0}.mapping-row .mapping-cell-actions{display:flex;align-self:flex-end;text-transform:capitalize;margin-left:10px}.mapping-row .mapping-cell-actions .required-indicator{margin:0 5px;color:var(--cds-text-error)}.mapping-row .mapping-cell-actions button{margin-bottom:5px}.mapping-row .mapping-cell-actions button ::ng-deep .cds--btn__icon{margin:0!important}.mapping-row .sync-radio-group{padding-left:10px;margin-top:8px}.mapping-row .sync-radio-group .sync-radio:first-child{margin-right:0}.mapping-row .sync-radio-group ::ng-deep .cds--radio-button__label{justify-content:normal}::ng-deep .process-link-modal-container .cds--modal-container{max-width:1280px}\n/*!\n * Copyright 2015-2026 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: "ngmodule", type: CommonModule }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: ComboBoxModule }, { kind: "ngmodule", type: RadioModule }, { kind: "component", type: i3$2.Radio, selector: "cds-radio, ibm-radio", inputs: ["checked", "name", "disabled", "labelPlacement", "ariaLabelledby", "ariaLabel", "required", "value", "skeleton", "id"], outputs: ["change"] }, { kind: "component", type: i3$2.RadioGroup, selector: "cds-radio-group, ibm-radio-group", inputs: ["selected", "value", "name", "disabled", "skeleton", "orientation", "labelPlacement", "legend", "ariaLabel", "ariaLabelledby", "helperText", "invalid", "invalidText", "warn", "warnText"], outputs: ["change"] }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: ValuePathSelectorComponent, selector: "valtimo-value-path-selector", inputs: ["name", "appendInline", "margin", "marginLg", "marginXl", "disabled", "caseDefinitionKey", "caseDefinitionVersionTag", "buildingBlockDefinitionKey", "buildingBlockDefinitionVersionTag", "prefixes", "label", "tooltip", "required", "showCaseDefinitionSelector", "notation", "dropUp", "defaultValue", "type", "parentItem", "filterItems"], outputs: ["valueChangeEvent", "collectionSelected"] }, { kind: "ngmodule", type: InputLabelModule }, { kind: "component", type: i2$1.InputLabelComponent, selector: "v-input-label", inputs: ["name", "tooltip", "tooltipTranslationKey", "largeMargin", "small", "noMargin", "title", "titleTranslationKey", "required", "disabled", "carbonTheme"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3$2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i3$2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i2$1.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "disabled", "dropUp", "invalid", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "clearText", "clearable", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder", "smallMargin", "carbonTheme", "appendInline", "warn", "warnText", "dataTestId"], outputs: ["selectedChange"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i3$2.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2781
+ }
2782
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ConfigureBuildingBlockMappingsComponent, decorators: [{
2783
+ type: Component,
2784
+ args: [{ standalone: true, selector: 'valtimo-configure-building-block-mappings', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
2785
+ CommonModule,
2786
+ ReactiveFormsModule,
2787
+ ComboBoxModule,
2788
+ RadioModule,
2789
+ InputModule,
2790
+ ValuePathSelectorComponent,
2791
+ InputLabelModule,
2792
+ TranslateModule,
2793
+ ButtonModule,
2794
+ IconModule,
2795
+ SelectModule,
2796
+ LayerModule,
2797
+ ], template: "<!--\n ~ Copyright 2015-2026 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@let obs =\n {\n fields: (buildingBlockFields$ | async),\n fieldItems: (buildingBlockFieldItems$ | async),\n params: (params$ | async),\n buildingBlockParams: (buildingBlockParams$ | async),\n sourceContextName: (sourceContextName$ | async),\n targetBuildingBlockName: (targetBuildingBlockName$ | async),\n sourceIsCase: (sourceIsCase$ | async),\n caseLabelTranslation: ('Case' | translate),\n buildingBlockLabelTranslation:\n ('processLinkConfiguration.buildingBlock.selectLabel' | translate),\n };\n\n<div class=\"mapping-step\">\n <section class=\"mapping-section\">\n <h4 class=\"section-header\">\n {{ 'processLinkConfiguration.buildingBlock.inputTitle' | translate }}\n </h4>\n\n <div class=\"mapping-table\" [formGroup]=\"inputsForm\">\n <div class=\"mapping-header input\">\n <v-input-label\n [title]=\"\n (obs.sourceIsCase ? obs.caseLabelTranslation : obs.buildingBlockLabelTranslation) +\n ': ' +\n obs.sourceContextName\n \"\n />\n\n <v-input-label\n [title]=\"obs.buildingBlockLabelTranslation + ': ' + obs.targetBuildingBlockName\"\n />\n </div>\n\n <div formArrayName=\"inputs\">\n @for (group of inputs.controls; let inputIndex = $index; track inputIndex) {\n <div class=\"mapping-row input\" [formGroup]=\"group\">\n <div class=\"mapping-part\">\n <valtimo-value-path-selector\n [cdsLayer]=\"2\"\n [prefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [caseDefinitionKey]=\"obs.params?.caseDefinitionKey\"\n [caseDefinitionVersionTag]=\"obs.params?.caseDefinitionVersionTag\"\n [buildingBlockDefinitionKey]=\"obs.buildingBlockParams?.buildingBlockDefinitionKey\"\n [buildingBlockDefinitionVersionTag]=\"\n obs.buildingBlockParams?.buildingBlockDefinitionVersionTag\n \"\n [appendInline]=\"false\"\n [dropUp]=\"false\"\n [formControl]=\"group.get('source')\"\n ></valtimo-value-path-selector>\n\n <div class=\"arrow\">\u2192</div>\n </div>\n\n <div class=\"mapping-part\">\n <div class=\"mapping-cell\">\n @if (isRequiredTarget(obs.fields, group.get('target')?.value)) {\n <div class=\"required-target\">\n {{ 'doc:' + group.get('target')?.value }}\n </div>\n } @else {\n <v-select\n [cdsLayer]=\"2\"\n [appendInline]=\"false\"\n formControlName=\"target\"\n [placeholder]=\"\n 'processLinkConfiguration.buildingBlock.selectedBuildingBlockFieldPlaceholder'\n | translate\n \"\n [items]=\"getBuildingBlockFieldItemsForRow$(group) | async\"\n [dropUp]=\"false\"\n >\n </v-select>\n }\n </div>\n\n <div class=\"mapping-cell-actions\">\n @if (!isRequiredTarget(obs.fields, group.get('target')?.value)) {\n <button\n cdsButton=\"danger--ghost\"\n iconOnly\n size=\"sm\"\n (click)=\"deleteInput(inputIndex)\"\n >\n <svg cdsIcon=\"trash-can\" class=\"cds--btn__icon\" size=\"16\"></svg>\n </button>\n } @else {\n <div class=\"required-indicator\">*</div>\n\n <div>\n {{ 'interface.required' | translate }}\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <button\n cdsButton=\"tertiary\"\n size=\"sm\"\n (click)=\"addInput()\"\n [title]=\"'processLinkConfiguration.buildingBlock.addInput' | translate\"\n [disabled]=\"allInputsMapped$ | async\"\n >\n {{ 'processLinkConfiguration.buildingBlock.addInput' | translate }}\n\n <svg cdsIcon=\"add\" class=\"cds--btn__icon\" size=\"16\"></svg>\n </button>\n </section>\n\n <section class=\"mapping-section\">\n <h4 class=\"section-header\">\n {{ 'processLinkConfiguration.buildingBlock.outputTitle' | translate }}\n </h4>\n\n <div class=\"mapping-table\" [formGroup]=\"outputsForm\">\n <div class=\"mapping-header output\">\n <v-input-label\n [title]=\"obs.buildingBlockLabelTranslation + ': ' + obs.targetBuildingBlockName\"\n />\n\n <v-input-label\n [title]=\"\n (obs.sourceIsCase ? obs.caseLabelTranslation : obs.buildingBlockLabelTranslation) +\n ': ' +\n obs.sourceContextName\n \"\n />\n\n <div class=\"sync-options\" [style.display]=\"'none'\">\n <v-input-label\n [title]=\"'processLinkConfiguration.buildingBlock.sync.title' | translate\"\n />\n </div>\n </div>\n\n <div formArrayName=\"outputs\">\n @for (group of outputs.controls; let outputIndex = $index; track outputIndex) {\n <div class=\"mapping-row output\" [formGroup]=\"group\">\n <div class=\"mapping-part\">\n <div class=\"mapping-cell\">\n <v-select\n [cdsLayer]=\"2\"\n [appendInline]=\"false\"\n formControlName=\"source\"\n [items]=\"obs.fieldItems || []\"\n [placeholder]=\"\n 'processLinkConfiguration.buildingBlock.selectedBuildingBlockFieldPlaceholder'\n | translate\n \"\n [dropUp]=\"true\"\n >\n </v-select>\n </div>\n\n <div class=\"arrow\">\u2192</div>\n </div>\n\n <div class=\"mapping-part\">\n <valtimo-value-path-selector\n [cdsLayer]=\"2\"\n [prefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [caseDefinitionKey]=\"obs.params?.caseDefinitionKey\"\n [caseDefinitionVersionTag]=\"obs.params?.caseDefinitionVersionTag\"\n [buildingBlockDefinitionKey]=\"obs.buildingBlockParams?.buildingBlockDefinitionKey\"\n [buildingBlockDefinitionVersionTag]=\"\n obs.buildingBlockParams?.buildingBlockDefinitionVersionTag\n \"\n [formControl]=\"group.get('target')\"\n [appendInline]=\"false\"\n [filterItems]=\"getUsedCaseTargetsForRow$(group) | async\"\n [dropUp]=\"true\"\n ></valtimo-value-path-selector>\n </div>\n\n <div class=\"mapping-part\">\n <div class=\"mapping-cell\" [style.display]=\"'none'\">\n <cds-radio-group\n class=\"sync-radio-group\"\n formControlName=\"syncTiming\"\n [attr.name]=\"'syncTiming-' + outputIndex\"\n >\n @for (item of syncTimingItems; track item.id) {\n <cds-radio [value]=\"item.id\" [checked]=\"isSyncTimingSelected(group, item.id)\">\n {{ item.labelKey | translate }}\n </cds-radio>\n }\n </cds-radio-group>\n </div>\n\n <div class=\"mapping-cell-actions\">\n <button\n cdsButton=\"danger--ghost\"\n iconOnly\n size=\"sm\"\n (click)=\"deleteOutput(outputIndex)\"\n >\n <svg cdsIcon=\"trash-can\" class=\"cds--btn__icon\" size=\"16\"></svg>\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <button\n cdsButton=\"tertiary\"\n size=\"sm\"\n (click)=\"addOutput()\"\n [title]=\"'processLinkConfiguration.buildingBlock.addOutput' | translate\"\n >\n {{ 'processLinkConfiguration.buildingBlock.addOutput' | translate }}\n\n <svg cdsIcon=\"add\" class=\"cds--btn__icon\" size=\"16\"></svg>\n </button>\n </section>\n</div>\n", styles: [".section-header{font-size:14px;line-height:18px;font-weight:600}.mapping-section{margin-bottom:16px}.mapping-row,.mapping-header{display:grid;align-items:center}.mapping-row.input,.mapping-header.input{grid-template-columns:1fr 1fr}.mapping-row.output,.mapping-header.output{grid-template-columns:5fr 6fr 58px}.mapping-header .output .sync-options{padding-left:10px;display:flex}.mapping-row{margin-bottom:8px;padding:8px;background-color:var(--cds-layer)}.mapping-row .mapping-part{display:flex}.mapping-row .arrow{text-align:center;width:40px;line-height:40px;font-size:large}.mapping-row .mapping-cell{flex:1;min-width:0}.mapping-row .mapping-cell-actions{display:flex;align-self:flex-end;text-transform:capitalize;margin-left:10px}.mapping-row .mapping-cell-actions .required-indicator{margin:0 5px;color:var(--cds-text-error)}.mapping-row .mapping-cell-actions button{margin-bottom:5px}.mapping-row .mapping-cell-actions button ::ng-deep .cds--btn__icon{margin:0!important}.mapping-row .sync-radio-group{padding-left:10px;margin-top:8px}.mapping-row .sync-radio-group .sync-radio:first-child{margin-right:0}.mapping-row .sync-radio-group ::ng-deep .cds--radio-button__label{justify-content:normal}::ng-deep .process-link-modal-container .cds--modal-container{max-width:1280px}\n/*!\n * Copyright 2015-2026 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"] }]
2798
+ }], ctorParameters: () => [{ type: i1$2.FormBuilder }, { type: BuildingBlockStateService }, { type: ProcessLinkButtonService }, { type: ProcessLinkStepService }, { type: ProcessLinkService }, { type: ProcessLinkStateService }, { type: i3.TranslateService }, { type: i3$3.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: ProcessLinkBuildingBlockApiService }, { type: ProcessLinkStateService }] });
2799
+
2800
+ /*
2801
+ * Copyright 2015-2026 Ritense BV, the Netherlands.
1633
2802
  *
1634
2803
  * Licensed under EUPL, Version 1.2 (the "License");
1635
2804
  * you may not use this file except in compliance with the License.
@@ -1648,15 +2817,22 @@ class ChooseProcessLinkTypeComponent {
1648
2817
  this.processLinkStateService = processLinkStateService;
1649
2818
  this.availableProcessLinkTypes$ = this.processLinkStateService.availableProcessLinkTypes$;
1650
2819
  }
2820
+ getTooltipKey(processLinkTypeId) {
2821
+ if (this.processLinkStateService.isBuildingBlockContext() &&
2822
+ UNSUPPORTED_PROCESS_LINK_TYPES_IN_BUILDING_BLOCK.includes(processLinkTypeId)) {
2823
+ return 'processLinkTypeDisabledTooltip.buildingBlockUnsupported';
2824
+ }
2825
+ return 'processLinkTypeDisabledTooltip.' + processLinkTypeId;
2826
+ }
1651
2827
  selectProcessLinkType(processLinkTypeId) {
1652
2828
  this.processLinkStateService.selectProcessLinkType(processLinkTypeId);
1653
2829
  }
1654
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ChooseProcessLinkTypeComponent, deps: [{ token: ProcessLinkStateService }], target: i0.ɵɵFactoryTarget.Component }); }
1655
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: ChooseProcessLinkTypeComponent, isStandalone: false, selector: "valtimo-choose-process-link-type", ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 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\n *ngIf=\"{\n availableProcessLinkTypes: availableProcessLinkTypes$ | async,\n } as obs\"\n>\n <p class=\"step-description\">\n {{ 'processLinkConfiguration.chooseProcessLinkTypeDescription' | translate }}\n </p>\n <div class=\"process-link-grid\">\n <div\n class=\"process-link-item\"\n *ngFor=\"let availableProcessLinkType of obs.availableProcessLinkTypes\"\n >\n <ng-container *ngIf=\"availableProcessLinkType.processLinkType as processLinkTypeId\">\n <button\n (click)=\"selectProcessLinkType(processLinkTypeId)\"\n cdsButton=\"secondary\"\n size=\"xl\"\n class=\"process-link-type-button\"\n [disabled]=\"!availableProcessLinkType.enabled\"\n [vTooltip]=\"'processLinkTypeDisabledTooltip.' + processLinkTypeId | translate\"\n [onBottom]=\"true\"\n [tooltipDisabled]=\"availableProcessLinkType.enabled\"\n >\n {{ 'processLinkType.' + processLinkTypeId | translate }}\n <svg\n *ngIf=\"processLinkTypeId === 'plugin'\"\n class=\"cds--btn__icon\"\n cdsIcon=\"link\"\n size=\"16\"\n ></svg>\n <svg\n *ngIf=\"processLinkTypeId === 'form'\"\n class=\"cds--btn__icon\"\n cdsIcon=\"receipt\"\n size=\"16\"\n ></svg>\n <svg\n *ngIf=\"processLinkTypeId === 'form-flow'\"\n class=\"cds--btn__icon\"\n cdsIcon=\"flow--data\"\n size=\"16\"\n ></svg>\n <svg\n *ngIf=\"processLinkTypeId === 'ui-component'\"\n class=\"cds--btn__icon\"\n cdsIcon=\"receipt\"\n size=\"16\"\n ></svg>\n </button>\n </ng-container>\n </div>\n </div>\n</ng-container>\n", styles: [".process-link-type-button{width:100%}.process-link-grid{margin-top:24px;display:flex;justify-content:flex-start;width:100%;flex-wrap:wrap;gap:8px}.process-link-item{flex-basis:calc(33.3% - 5.3333333333px)}\n/*!\n * Copyright 2015-2025 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: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.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: "directive", type: i2$2.TooltipDirective, selector: "[vTooltip]", inputs: ["vTooltip", "onBottom", "tooltipDisabled"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
2830
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ChooseProcessLinkTypeComponent, deps: [{ token: ProcessLinkStateService }], target: i0.ɵɵFactoryTarget.Component }); }
2831
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: ChooseProcessLinkTypeComponent, isStandalone: false, selector: "valtimo-choose-process-link-type", ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 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\n *ngIf=\"{\n availableProcessLinkTypes: availableProcessLinkTypes$ | async,\n } as obs\"\n>\n <p class=\"step-description\">\n {{ 'processLinkConfiguration.chooseProcessLinkTypeDescription' | translate }}\n </p>\n <div class=\"process-link-grid\">\n <div\n class=\"process-link-item\"\n *ngFor=\"let availableProcessLinkType of obs.availableProcessLinkTypes\"\n >\n <ng-container *ngIf=\"availableProcessLinkType.processLinkType as processLinkTypeId\">\n <button\n (click)=\"selectProcessLinkType(processLinkTypeId)\"\n cdsButton=\"secondary\"\n size=\"xl\"\n class=\"process-link-type-button\"\n [disabled]=\"!availableProcessLinkType.enabled\"\n [vTooltip]=\"getTooltipKey(processLinkTypeId) | translate\"\n [onBottom]=\"true\"\n [tooltipDisabled]=\"availableProcessLinkType.enabled\"\n >\n {{ 'processLinkType.' + processLinkTypeId | translate }}\n <svg\n *ngIf=\"processLinkTypeId === 'plugin'\"\n class=\"cds--btn__icon\"\n cdsIcon=\"link\"\n size=\"16\"\n ></svg>\n <svg\n *ngIf=\"processLinkTypeId === 'form'\"\n class=\"cds--btn__icon\"\n cdsIcon=\"receipt\"\n size=\"16\"\n ></svg>\n <svg\n *ngIf=\"processLinkTypeId === 'form-flow'\"\n class=\"cds--btn__icon\"\n cdsIcon=\"flow--data\"\n size=\"16\"\n ></svg>\n <svg\n *ngIf=\"processLinkTypeId === 'ui-component'\"\n class=\"cds--btn__icon\"\n cdsIcon=\"receipt\"\n size=\"16\"\n ></svg>\n </button>\n </ng-container>\n </div>\n </div>\n</ng-container>\n", styles: [".process-link-type-button{width:100%}.process-link-grid{margin-top:24px;display:flex;justify-content:flex-start;width:100%;flex-wrap:wrap;gap:8px}.process-link-item{flex-basis:calc(33.3% - 5.3333333333px)}\n/*!\n * Copyright 2015-2025 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: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i3$2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "directive", type: i2$1.TooltipDirective, selector: "[vTooltip]", inputs: ["vTooltip", "onBottom", "tooltipDisabled"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
1656
2832
  }
1657
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ChooseProcessLinkTypeComponent, decorators: [{
2833
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ChooseProcessLinkTypeComponent, decorators: [{
1658
2834
  type: Component,
1659
- args: [{ standalone: false, selector: 'valtimo-choose-process-link-type', template: "<!--\n ~ Copyright 2015-2025 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\n *ngIf=\"{\n availableProcessLinkTypes: availableProcessLinkTypes$ | async,\n } as obs\"\n>\n <p class=\"step-description\">\n {{ 'processLinkConfiguration.chooseProcessLinkTypeDescription' | translate }}\n </p>\n <div class=\"process-link-grid\">\n <div\n class=\"process-link-item\"\n *ngFor=\"let availableProcessLinkType of obs.availableProcessLinkTypes\"\n >\n <ng-container *ngIf=\"availableProcessLinkType.processLinkType as processLinkTypeId\">\n <button\n (click)=\"selectProcessLinkType(processLinkTypeId)\"\n cdsButton=\"secondary\"\n size=\"xl\"\n class=\"process-link-type-button\"\n [disabled]=\"!availableProcessLinkType.enabled\"\n [vTooltip]=\"'processLinkTypeDisabledTooltip.' + processLinkTypeId | translate\"\n [onBottom]=\"true\"\n [tooltipDisabled]=\"availableProcessLinkType.enabled\"\n >\n {{ 'processLinkType.' + processLinkTypeId | translate }}\n <svg\n *ngIf=\"processLinkTypeId === 'plugin'\"\n class=\"cds--btn__icon\"\n cdsIcon=\"link\"\n size=\"16\"\n ></svg>\n <svg\n *ngIf=\"processLinkTypeId === 'form'\"\n class=\"cds--btn__icon\"\n cdsIcon=\"receipt\"\n size=\"16\"\n ></svg>\n <svg\n *ngIf=\"processLinkTypeId === 'form-flow'\"\n class=\"cds--btn__icon\"\n cdsIcon=\"flow--data\"\n size=\"16\"\n ></svg>\n <svg\n *ngIf=\"processLinkTypeId === 'ui-component'\"\n class=\"cds--btn__icon\"\n cdsIcon=\"receipt\"\n size=\"16\"\n ></svg>\n </button>\n </ng-container>\n </div>\n </div>\n</ng-container>\n", styles: [".process-link-type-button{width:100%}.process-link-grid{margin-top:24px;display:flex;justify-content:flex-start;width:100%;flex-wrap:wrap;gap:8px}.process-link-item{flex-basis:calc(33.3% - 5.3333333333px)}\n/*!\n * Copyright 2015-2025 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"] }]
2835
+ args: [{ standalone: false, selector: 'valtimo-choose-process-link-type', template: "<!--\n ~ Copyright 2015-2025 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\n *ngIf=\"{\n availableProcessLinkTypes: availableProcessLinkTypes$ | async,\n } as obs\"\n>\n <p class=\"step-description\">\n {{ 'processLinkConfiguration.chooseProcessLinkTypeDescription' | translate }}\n </p>\n <div class=\"process-link-grid\">\n <div\n class=\"process-link-item\"\n *ngFor=\"let availableProcessLinkType of obs.availableProcessLinkTypes\"\n >\n <ng-container *ngIf=\"availableProcessLinkType.processLinkType as processLinkTypeId\">\n <button\n (click)=\"selectProcessLinkType(processLinkTypeId)\"\n cdsButton=\"secondary\"\n size=\"xl\"\n class=\"process-link-type-button\"\n [disabled]=\"!availableProcessLinkType.enabled\"\n [vTooltip]=\"getTooltipKey(processLinkTypeId) | translate\"\n [onBottom]=\"true\"\n [tooltipDisabled]=\"availableProcessLinkType.enabled\"\n >\n {{ 'processLinkType.' + processLinkTypeId | translate }}\n <svg\n *ngIf=\"processLinkTypeId === 'plugin'\"\n class=\"cds--btn__icon\"\n cdsIcon=\"link\"\n size=\"16\"\n ></svg>\n <svg\n *ngIf=\"processLinkTypeId === 'form'\"\n class=\"cds--btn__icon\"\n cdsIcon=\"receipt\"\n size=\"16\"\n ></svg>\n <svg\n *ngIf=\"processLinkTypeId === 'form-flow'\"\n class=\"cds--btn__icon\"\n cdsIcon=\"flow--data\"\n size=\"16\"\n ></svg>\n <svg\n *ngIf=\"processLinkTypeId === 'ui-component'\"\n class=\"cds--btn__icon\"\n cdsIcon=\"receipt\"\n size=\"16\"\n ></svg>\n </button>\n </ng-container>\n </div>\n </div>\n</ng-container>\n", styles: [".process-link-type-button{width:100%}.process-link-grid{margin-top:24px;display:flex;justify-content:flex-start;width:100%;flex-wrap:wrap;gap:8px}.process-link-item{flex-basis:calc(33.3% - 5.3333333333px)}\n/*!\n * Copyright 2015-2025 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"] }]
1660
2836
  }], ctorParameters: () => [{ type: ProcessLinkStateService }] });
1661
2837
 
1662
2838
  /*
@@ -1685,7 +2861,7 @@ class FormDisplayConfigurationComponent {
1685
2861
  this.formDisplayValue$ = new BehaviorSubject(null);
1686
2862
  this.formSizeValue$ = new BehaviorSubject(null);
1687
2863
  this._subtitles$ = new BehaviorSubject([]);
1688
- this.subtitles$ = this._subtitles$.pipe(map(subtitles => subtitles.map(subtitle => ({ value: subtitle }))));
2864
+ this.subtitles$ = this._subtitles$.pipe(map$1(subtitles => subtitles.map(subtitle => ({ value: subtitle }))));
1689
2865
  this.disableFormSizeInput$ = new BehaviorSubject(true);
1690
2866
  this.saving$ = this.stateService.saving$;
1691
2867
  this.isUserTask$ = new BehaviorSubject(false);
@@ -1695,7 +2871,7 @@ class FormDisplayConfigurationComponent {
1695
2871
  this.formDisplayTypeListItems$ = combineLatest([
1696
2872
  this.formDisplayValue$,
1697
2873
  this.translateService.stream('key'),
1698
- ]).pipe(map(([formDisplayValue]) => this._DISPLAY_TYPE_OPTIONS.map((key) => ({
2874
+ ]).pipe(map$1(([formDisplayValue]) => this._DISPLAY_TYPE_OPTIONS.map((key) => ({
1699
2875
  content: this.translateService.instant(`processLinkSteps.displayType.options.${key}`),
1700
2876
  key: key,
1701
2877
  selected: this.formDisplayValue$.getValue() === key,
@@ -1703,7 +2879,7 @@ class FormDisplayConfigurationComponent {
1703
2879
  this.formSizeListItems$ = combineLatest([
1704
2880
  this.formSizeValue$,
1705
2881
  this.translateService.stream('key'),
1706
- ]).pipe(map(([formSizeValue]) => this._FORM_SIZE_OPTIONS.map((key) => ({
2882
+ ]).pipe(map$1(([formSizeValue]) => this._FORM_SIZE_OPTIONS.map((key) => ({
1707
2883
  content: this.translateService.instant(`processLinkSteps.formSize.options.${key}`),
1708
2884
  key: key,
1709
2885
  selected: this.formSizeValue$.getValue() === key,
@@ -1761,13 +2937,13 @@ class FormDisplayConfigurationComponent {
1761
2937
  else
1762
2938
  this.buttonService.disableSaveButton();
1763
2939
  }
1764
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormDisplayConfigurationComponent, deps: [{ token: ProcessLinkButtonService }, { token: ProcessLinkStateService }, { token: i2$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
1765
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.17", type: FormDisplayConfigurationComponent, isStandalone: false, selector: "valtimo-form-display-configuration", inputs: { selectedFormDefinition: "selectedFormDefinition" }, outputs: { formDisplayValue: "formDisplayValue", formSizeValue: "formSizeValue", subtitlesValue: "subtitlesValue" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 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\n *ngIf=\"{\n formDisplayValue: formDisplayValue$ | async,\n formDisplayTypeListItems: formDisplayTypeListItems$ | async,\n formSizeListItems: formSizeListItems$ | async,\n disableFormSizeInput: disableFormSizeInput$ | async,\n subtitles: subtitles$ | async,\n isUserTask: isUserTask$ | async,\n saving: saving$ | async,\n } as obs\"\n>\n @if (obs.isUserTask) {\n <cds-combo-box\n [placeholder]=\"'processLinkSteps.displayType.placeholder' | translate\"\n [label]=\"'processLinkSteps.displayType.label' | translate\"\n [disabled]=\"obs.saving\"\n (selected)=\"selectFormDisplayType($event)\"\n >\n <cds-dropdown-list [items]=\"obs.formDisplayTypeListItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n\n <br />\n\n <cds-combo-box\n [placeholder]=\"'processLinkSteps.formSize.placeholder' | translate\"\n [label]=\"'processLinkSteps.formSize.label' | translate\"\n [disabled]=\"obs.disableFormSizeInput || obs.saving\"\n (selected)=\"selectFormSize($event)\"\n >\n <cds-dropdown-list [items]=\"obs.formSizeListItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n\n <br />\n\n <valtimo-carbon-multi-input\n type=\"value\"\n titleTranslationKey=\"processLinkSteps.subtitles\"\n addRowTranslationKey=\"processLinkSteps.addSubtitle\"\n [disabled]=\"obs.saving\"\n [fullWidth]=\"true\"\n [minimumAmountOfRows]=\"0\"\n [initialAmountOfRows]=\"0\"\n [defaultValues]=\"obs.subtitles\"\n (valueChange)=\"onSubtitlesChange($event)\"\n ></valtimo-carbon-multi-input>\n }\n</ng-container>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: ["placeholder", "openMenuAria", "closeMenuAria", "clearSelectionsTitle", "clearSelectionsAria", "clearSelectionTitle", "clearSelectionAria", "id", "labelId", "items", "type", "size", "itemValueKey", "label", "hideLabel", "helperText", "appendInline", "invalid", "invalidText", "warn", "warnText", "maxLength", "theme", "selectionFeedback", "autocomplete", "dropUp", "disabled", "readonly", "fluid"], outputs: ["selected", "submit", "close", "search", "clear"] }, { kind: "component", type: i5.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: i2$2.CarbonMultiInputComponent, selector: "valtimo-carbon-multi-input", inputs: ["addRowText", "addButtonType", "addRowTranslationKey", "arbitraryAmountTitles", "arbitraryValueAmount", "defaultValues", "deleteRowText", "deleteRowTranslationKey", "disabled", "dropdownColumnTitle", "dropdownItems", "dropdownWidth", "fullWidth", "hideAddButton", "hideDeleteButton", "initialAmountOfRows", "keyColumnTitle", "margin", "maxRows", "minimumAmountOfRows", "name", "required", "title", "titleTranslationKey", "tooltip", "type", "valueColumnTitle", "valuePathSelectorCaseDefinitionKey", "valuePathSelectorPrefixes", "valuePathSelectorShowCaseDefinitionSelector", "valuePathSelectorNotation", "keyColumnFlex", "dropdownColumnFlex", "valueColumnFlex"], outputs: ["valueChange", "allValuesValidEvent"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
2940
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormDisplayConfigurationComponent, deps: [{ token: ProcessLinkButtonService }, { token: ProcessLinkStateService }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
2941
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.18", type: FormDisplayConfigurationComponent, isStandalone: false, selector: "valtimo-form-display-configuration", inputs: { selectedFormDefinition: "selectedFormDefinition" }, outputs: { formDisplayValue: "formDisplayValue", formSizeValue: "formSizeValue", subtitlesValue: "subtitlesValue" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 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\n *ngIf=\"{\n formDisplayValue: formDisplayValue$ | async,\n formDisplayTypeListItems: formDisplayTypeListItems$ | async,\n formSizeListItems: formSizeListItems$ | async,\n disableFormSizeInput: disableFormSizeInput$ | async,\n subtitles: subtitles$ | async,\n isUserTask: isUserTask$ | async,\n saving: saving$ | async,\n } as obs\"\n>\n @if (obs.isUserTask) {\n <cds-combo-box\n [placeholder]=\"'processLinkSteps.displayType.placeholder' | translate\"\n [label]=\"'processLinkSteps.displayType.label' | translate\"\n [disabled]=\"obs.saving\"\n (selected)=\"selectFormDisplayType($event)\"\n >\n <cds-dropdown-list [items]=\"obs.formDisplayTypeListItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n\n <br />\n\n <cds-combo-box\n [placeholder]=\"'processLinkSteps.formSize.placeholder' | translate\"\n [label]=\"'processLinkSteps.formSize.label' | translate\"\n [disabled]=\"obs.disableFormSizeInput || obs.saving\"\n (selected)=\"selectFormSize($event)\"\n >\n <cds-dropdown-list [items]=\"obs.formSizeListItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n\n <br />\n\n <valtimo-carbon-multi-input\n type=\"value\"\n titleTranslationKey=\"processLinkSteps.subtitles\"\n addRowTranslationKey=\"processLinkSteps.addSubtitle\"\n [disabled]=\"obs.saving\"\n [fullWidth]=\"true\"\n [minimumAmountOfRows]=\"0\"\n [initialAmountOfRows]=\"0\"\n [defaultValues]=\"obs.subtitles\"\n (valueChange)=\"onSubtitlesChange($event)\"\n ></valtimo-carbon-multi-input>\n }\n</ng-container>\n", dependencies: [{ kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$2.ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: ["placeholder", "openMenuAria", "closeMenuAria", "clearSelectionsTitle", "clearSelectionsAria", "clearSelectionTitle", "clearSelectionAria", "id", "labelId", "items", "type", "size", "itemValueKey", "label", "hideLabel", "helperText", "appendInline", "invalid", "invalidText", "warn", "warnText", "maxLength", "theme", "selectionFeedback", "autocomplete", "dropUp", "disabled", "readonly", "fluid"], outputs: ["selected", "submit", "close", "search", "clear"] }, { kind: "component", type: i5.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: i2$1.CarbonMultiInputComponent, selector: "valtimo-carbon-multi-input", inputs: ["addRowText", "addButtonType", "addRowTranslationKey", "arbitraryAmountTitles", "arbitraryValueAmount", "defaultValues", "deleteRowText", "deleteRowTranslationKey", "disabled", "dropdownColumnTitle", "dropdownItems", "dropdownWidth", "fullWidth", "hideAddButton", "hideDeleteButton", "initialAmountOfRows", "keyColumnTitle", "margin", "maxRows", "minimumAmountOfRows", "name", "required", "title", "titleTranslationKey", "tooltip", "type", "valueColumnTitle", "valuePathSelectorCaseDefinitionKey", "valuePathSelectorPrefixes", "valuePathSelectorShowCaseDefinitionSelector", "valuePathSelectorNotation", "keyColumnFlex", "dropdownColumnFlex", "valueColumnFlex"], outputs: ["valueChange", "allValuesValidEvent"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
1766
2942
  }
1767
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormDisplayConfigurationComponent, decorators: [{
2943
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormDisplayConfigurationComponent, decorators: [{
1768
2944
  type: Component,
1769
2945
  args: [{ standalone: false, selector: 'valtimo-form-display-configuration', template: "<!--\n ~ Copyright 2015-2025 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\n *ngIf=\"{\n formDisplayValue: formDisplayValue$ | async,\n formDisplayTypeListItems: formDisplayTypeListItems$ | async,\n formSizeListItems: formSizeListItems$ | async,\n disableFormSizeInput: disableFormSizeInput$ | async,\n subtitles: subtitles$ | async,\n isUserTask: isUserTask$ | async,\n saving: saving$ | async,\n } as obs\"\n>\n @if (obs.isUserTask) {\n <cds-combo-box\n [placeholder]=\"'processLinkSteps.displayType.placeholder' | translate\"\n [label]=\"'processLinkSteps.displayType.label' | translate\"\n [disabled]=\"obs.saving\"\n (selected)=\"selectFormDisplayType($event)\"\n >\n <cds-dropdown-list [items]=\"obs.formDisplayTypeListItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n\n <br />\n\n <cds-combo-box\n [placeholder]=\"'processLinkSteps.formSize.placeholder' | translate\"\n [label]=\"'processLinkSteps.formSize.label' | translate\"\n [disabled]=\"obs.disableFormSizeInput || obs.saving\"\n (selected)=\"selectFormSize($event)\"\n >\n <cds-dropdown-list [items]=\"obs.formSizeListItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n\n <br />\n\n <valtimo-carbon-multi-input\n type=\"value\"\n titleTranslationKey=\"processLinkSteps.subtitles\"\n addRowTranslationKey=\"processLinkSteps.addSubtitle\"\n [disabled]=\"obs.saving\"\n [fullWidth]=\"true\"\n [minimumAmountOfRows]=\"0\"\n [initialAmountOfRows]=\"0\"\n [defaultValues]=\"obs.subtitles\"\n (valueChange)=\"onSubtitlesChange($event)\"\n ></valtimo-carbon-multi-input>\n }\n</ng-container>\n" }]
1770
- }], ctorParameters: () => [{ type: ProcessLinkButtonService }, { type: ProcessLinkStateService }, { type: i2$1.TranslateService }], propDecorators: { selectedFormDefinition: [{
2946
+ }], ctorParameters: () => [{ type: ProcessLinkButtonService }, { type: ProcessLinkStateService }, { type: i3.TranslateService }], propDecorators: { selectedFormDefinition: [{
1771
2947
  type: Input
1772
2948
  }], formDisplayValue: [{
1773
2949
  type: Output
@@ -1808,7 +2984,7 @@ class SelectFormComponent {
1808
2984
  }
1809
2985
  return this.formService.getAllUnlinkedFormDefinitions();
1810
2986
  }));
1811
- this.formDefinitionListItems$ = combineLatest([this.stateService.selectedProcessLink$, this.formDefinitions$]).pipe(map$1(([selectedProcessLink, formDefinitions]) => formDefinitions.map(definition => ({
2987
+ this.formDefinitionListItems$ = combineLatest([this.stateService.selectedProcessLink$, this.formDefinitions$]).pipe(map(([selectedProcessLink, formDefinitions]) => formDefinitions.map(definition => ({
1812
2988
  content: definition.name,
1813
2989
  id: definition.id,
1814
2990
  selected: selectedProcessLink
@@ -1859,7 +3035,9 @@ class SelectFormComponent {
1859
3035
  this.subtitlesValue = subtitles;
1860
3036
  }
1861
3037
  openBackButtonSubscription() {
1862
- this._subscriptions.add(this.buttonService.backButtonClick$.subscribe(() => {
3038
+ this._subscriptions.add(this.buttonService.backButtonClick$
3039
+ .pipe(withLatestFrom(this.stateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
3040
+ .subscribe(() => {
1863
3041
  this.stateService.setInitial();
1864
3042
  }));
1865
3043
  }
@@ -1898,18 +3076,7 @@ class SelectFormComponent {
1898
3076
  ...(isUserTask && { formSize: this.formSizeValue || this._DEFAULT_FORM_DISPLAY_TYPE }),
1899
3077
  ...(isUserTask && { subtitles: this.subtitlesValue }),
1900
3078
  };
1901
- if (this.stateService.processLinkEditMode === ProcessLinkEditMode.EMIT_EVENTS) {
1902
- this.stateService.sendProcessLinkUpdateEvent(updateProcessLinkRequest);
1903
- return;
1904
- }
1905
- this.processLinkService.updateProcessLink(updateProcessLinkRequest).subscribe({
1906
- next: () => {
1907
- this.stateService.closeModal();
1908
- },
1909
- error: () => {
1910
- this.stateService.stopSaving();
1911
- },
1912
- });
3079
+ this.stateService.sendProcessLinkUpdateEvent(updateProcessLinkRequest);
1913
3080
  });
1914
3081
  }
1915
3082
  saveNewProcessLink() {
@@ -1938,27 +3105,16 @@ class SelectFormComponent {
1938
3105
  subtitles: this.subtitlesValue,
1939
3106
  }),
1940
3107
  };
1941
- if (this.stateService.processLinkEditMode === ProcessLinkEditMode.EMIT_EVENTS) {
1942
- this.stateService.sendProcessLinkCreateEvent(createRequest);
1943
- return;
1944
- }
1945
- this.processLinkService.saveProcessLink(createRequest).subscribe({
1946
- next: () => {
1947
- this.stateService.closeModal();
1948
- },
1949
- error: () => {
1950
- this.stateService.stopSaving();
1951
- },
1952
- });
3108
+ this.stateService.sendProcessLinkCreateEvent(createRequest);
1953
3109
  });
1954
3110
  }
1955
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SelectFormComponent, deps: [{ token: i1$4.FormService }, { token: ProcessLinkStateService }, { token: ProcessLinkService }, { token: ProcessLinkButtonService }, { token: i3$1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
1956
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: SelectFormComponent, isStandalone: false, selector: "valtimo-select-form", ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 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\n *ngIf=\"{\n formDefinitions: formDefinitionListItems$ | async,\n saving: saving$ | async,\n } as obs\"\n>\n <p class=\"step-description\">\n {{ 'processLinkConfiguration.chooseFormDescription' | translate }}\n </p>\n <div class=\"select-form\">\n <cds-combo-box\n [appendInline]=\"true\"\n [disabled]=\"!obs.formDefinitions || obs.saving\"\n [items]=\"obs.formDefinitions || []\"\n [placeholder]=\"'interface.typeToSearch' | translate\"\n (selected)=\"selectFormDefinition($event)\"\n [label]=\"'processLinkSteps.selectForm' | translate\"\n ><cds-dropdown-list></cds-dropdown-list\n ></cds-combo-box>\n <br />\n\n <valtimo-form-display-configuration\n [selectedFormDefinition]=\"selectedFormDefinition\"\n (formDisplayValue)=\"selectedFormDisplayValue($event)\"\n (formSizeValue)=\"selectedFormSizeValue($event)\"\n (subtitlesValue)=\"selectedSubtitlesValue($event)\"\n ></valtimo-form-display-configuration>\n </div>\n</ng-container>\n", styles: [".label-with-tooltip{display:flex;align-items:center}.select-form{display:flex;flex-direction:column;width:100%;margin-top:24px}\n/*!\n * Copyright 2015-2025 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: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: ["placeholder", "openMenuAria", "closeMenuAria", "clearSelectionsTitle", "clearSelectionsAria", "clearSelectionTitle", "clearSelectionAria", "id", "labelId", "items", "type", "size", "itemValueKey", "label", "hideLabel", "helperText", "appendInline", "invalid", "invalidText", "warn", "warnText", "maxLength", "theme", "selectionFeedback", "autocomplete", "dropUp", "disabled", "readonly", "fluid"], outputs: ["selected", "submit", "close", "search", "clear"] }, { kind: "component", type: i5.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: FormDisplayConfigurationComponent, selector: "valtimo-form-display-configuration", inputs: ["selectedFormDefinition"], outputs: ["formDisplayValue", "formSizeValue", "subtitlesValue"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
3111
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectFormComponent, deps: [{ token: i1$4.FormService }, { token: ProcessLinkStateService }, { token: ProcessLinkService }, { token: ProcessLinkButtonService }, { token: i3$3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
3112
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: SelectFormComponent, isStandalone: false, selector: "valtimo-select-form", ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 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\n *ngIf=\"{\n formDefinitions: formDefinitionListItems$ | async,\n saving: saving$ | async,\n } as obs\"\n>\n <p class=\"step-description\">\n {{ 'processLinkConfiguration.chooseFormDescription' | translate }}\n </p>\n <div class=\"select-form\">\n <cds-combo-box\n [appendInline]=\"true\"\n [disabled]=\"!obs.formDefinitions || obs.saving\"\n [items]=\"obs.formDefinitions || []\"\n [placeholder]=\"'interface.typeToSearch' | translate\"\n (selected)=\"selectFormDefinition($event)\"\n [label]=\"'processLinkSteps.selectForm' | translate\"\n ><cds-dropdown-list></cds-dropdown-list\n ></cds-combo-box>\n <br />\n\n <valtimo-form-display-configuration\n [selectedFormDefinition]=\"selectedFormDefinition\"\n (formDisplayValue)=\"selectedFormDisplayValue($event)\"\n (formSizeValue)=\"selectedFormSizeValue($event)\"\n (subtitlesValue)=\"selectedSubtitlesValue($event)\"\n ></valtimo-form-display-configuration>\n </div>\n</ng-container>\n", styles: [".label-with-tooltip{display:flex;align-items:center}.select-form{display:flex;flex-direction:column;width:100%;margin-top:24px}\n/*!\n * Copyright 2015-2025 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: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$2.ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: ["placeholder", "openMenuAria", "closeMenuAria", "clearSelectionsTitle", "clearSelectionsAria", "clearSelectionTitle", "clearSelectionAria", "id", "labelId", "items", "type", "size", "itemValueKey", "label", "hideLabel", "helperText", "appendInline", "invalid", "invalidText", "warn", "warnText", "maxLength", "theme", "selectionFeedback", "autocomplete", "dropUp", "disabled", "readonly", "fluid"], outputs: ["selected", "submit", "close", "search", "clear"] }, { kind: "component", type: i5.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: FormDisplayConfigurationComponent, selector: "valtimo-form-display-configuration", inputs: ["selectedFormDefinition"], outputs: ["formDisplayValue", "formSizeValue", "subtitlesValue"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
1957
3113
  }
1958
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SelectFormComponent, decorators: [{
3114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectFormComponent, decorators: [{
1959
3115
  type: Component,
1960
3116
  args: [{ standalone: false, selector: 'valtimo-select-form', template: "<!--\n ~ Copyright 2015-2025 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\n *ngIf=\"{\n formDefinitions: formDefinitionListItems$ | async,\n saving: saving$ | async,\n } as obs\"\n>\n <p class=\"step-description\">\n {{ 'processLinkConfiguration.chooseFormDescription' | translate }}\n </p>\n <div class=\"select-form\">\n <cds-combo-box\n [appendInline]=\"true\"\n [disabled]=\"!obs.formDefinitions || obs.saving\"\n [items]=\"obs.formDefinitions || []\"\n [placeholder]=\"'interface.typeToSearch' | translate\"\n (selected)=\"selectFormDefinition($event)\"\n [label]=\"'processLinkSteps.selectForm' | translate\"\n ><cds-dropdown-list></cds-dropdown-list\n ></cds-combo-box>\n <br />\n\n <valtimo-form-display-configuration\n [selectedFormDefinition]=\"selectedFormDefinition\"\n (formDisplayValue)=\"selectedFormDisplayValue($event)\"\n (formSizeValue)=\"selectedFormSizeValue($event)\"\n (subtitlesValue)=\"selectedSubtitlesValue($event)\"\n ></valtimo-form-display-configuration>\n </div>\n</ng-container>\n", styles: [".label-with-tooltip{display:flex;align-items:center}.select-form{display:flex;flex-direction:column;width:100%;margin-top:24px}\n/*!\n * Copyright 2015-2025 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"] }]
1961
- }], ctorParameters: () => [{ type: i1$4.FormService }, { type: ProcessLinkStateService }, { type: ProcessLinkService }, { type: ProcessLinkButtonService }, { type: i3$1.ActivatedRoute }] });
3117
+ }], ctorParameters: () => [{ type: i1$4.FormService }, { type: ProcessLinkStateService }, { type: ProcessLinkService }, { type: ProcessLinkButtonService }, { type: i3$3.ActivatedRoute }] });
1962
3118
 
1963
3119
  /*
1964
3120
  * Copyright 2015-2025 Ritense BV, the Netherlands.
@@ -1984,8 +3140,8 @@ class SelectFormFlowComponent {
1984
3140
  this.route = route;
1985
3141
  this.subtitlesValue = [];
1986
3142
  this.saving$ = this.stateService.saving$;
1987
- this.formFlowDefinitions$ = getCaseManagementRouteParams(this.route).pipe(switchMap$1((params) => this.formFlowService.getFormFlowDefinitions(params?.caseDefinitionKey ?? '', params?.caseDefinitionVersionTag ?? '')), map$1((formFlowDefinitions) => formFlowDefinitions.content));
1988
- this.formFlowDefinitionListItems$ = combineLatest([this.stateService.selectedProcessLink$, this.formFlowDefinitions$]).pipe(map$1(([selectedProcessLink, formFlowDefinitions]) => formFlowDefinitions.map(definition => ({
3143
+ this.formFlowDefinitions$ = getCaseManagementRouteParams(this.route).pipe(switchMap$1((params) => this.formFlowService.getFormFlowDefinitions(params?.caseDefinitionKey ?? '', params?.caseDefinitionVersionTag ?? '')), map((formFlowDefinitions) => formFlowDefinitions.content));
3144
+ this.formFlowDefinitionListItems$ = combineLatest([this.stateService.selectedProcessLink$, this.formFlowDefinitions$]).pipe(map(([selectedProcessLink, formFlowDefinitions]) => formFlowDefinitions.map(definition => ({
1989
3145
  content: definition.key,
1990
3146
  id: definition.key,
1991
3147
  selected: selectedProcessLink
@@ -2038,7 +3194,9 @@ class SelectFormFlowComponent {
2038
3194
  this.subtitlesValue = subtitles;
2039
3195
  }
2040
3196
  openBackButtonSubscription() {
2041
- this._subscriptions.add(this.buttonService.backButtonClick$.subscribe(() => {
3197
+ this._subscriptions.add(this.buttonService.backButtonClick$
3198
+ .pipe(withLatestFrom(this.stateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
3199
+ .subscribe(() => {
2042
3200
  this.stateService.setInitial();
2043
3201
  }));
2044
3202
  }
@@ -2070,18 +3228,7 @@ class SelectFormFlowComponent {
2070
3228
  ...(isUserTask && { formSize: this.formSizeValue || this._DEFAULT_FORM_DISPLAY_SIZE }),
2071
3229
  ...(isUserTask && { subtitles: this.subtitlesValue }),
2072
3230
  };
2073
- if (this.stateService.processLinkEditMode === ProcessLinkEditMode.EMIT_EVENTS) {
2074
- this.stateService.sendProcessLinkUpdateEvent(updateProcessLinkRequest);
2075
- return;
2076
- }
2077
- this.processLinkService.updateProcessLink(updateProcessLinkRequest).subscribe({
2078
- next: () => {
2079
- this.stateService.closeModal();
2080
- },
2081
- error: () => {
2082
- this.stateService.stopSaving();
2083
- },
2084
- });
3231
+ this.stateService.sendProcessLinkUpdateEvent(updateProcessLinkRequest);
2085
3232
  });
2086
3233
  }
2087
3234
  saveNewProcessLink() {
@@ -2104,27 +3251,16 @@ class SelectFormFlowComponent {
2104
3251
  ...(isUserTask && { formSize: this.formSizeValue || this._DEFAULT_FORM_DISPLAY_SIZE }),
2105
3252
  ...(isUserTask && { subtitles: this.subtitlesValue }),
2106
3253
  };
2107
- if (this.stateService.processLinkEditMode === ProcessLinkEditMode.EMIT_EVENTS) {
2108
- this.stateService.sendProcessLinkCreateEvent(createRequest);
2109
- return;
2110
- }
2111
- this.processLinkService.saveProcessLink(createRequest).subscribe({
2112
- next: () => {
2113
- this.stateService.closeModal();
2114
- },
2115
- error: () => {
2116
- this.stateService.stopSaving();
2117
- },
2118
- });
3254
+ this.stateService.sendProcessLinkCreateEvent(createRequest);
2119
3255
  });
2120
3256
  }
2121
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SelectFormFlowComponent, deps: [{ token: i1$5.FormFlowService }, { token: ProcessLinkStateService }, { token: ProcessLinkService }, { token: ProcessLinkButtonService }, { token: i3$1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
2122
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: SelectFormFlowComponent, isStandalone: false, selector: "valtimo-select-form-flow", ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 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\n *ngIf=\"{\n formFlowDefinitions: formFlowDefinitionListItems$ | async,\n saving: saving$ | async,\n } as obs\"\n>\n <p class=\"step-description\">\n {{ 'processLinkConfiguration.chooseFormFlowDescription' | translate }}\n </p>\n\n <div class=\"select-form-flow\">\n <cds-combo-box\n [appendInline]=\"true\"\n [disabled]=\"!obs.formFlowDefinitions || obs.saving\"\n [items]=\"obs.formFlowDefinitions || []\"\n [placeholder]=\"'interface.typeToSearch' | translate\"\n (selected)=\"selectFormFlowDefinition($event)\"\n [label]=\"'processLinkSteps.selectFormFlow' | translate\"\n ><cds-dropdown-list></cds-dropdown-list\n ></cds-combo-box>\n\n <br />\n\n <valtimo-form-display-configuration\n [selectedFormDefinition]=\"selectedFormFlowDefinitionId\"\n (formDisplayValue)=\"selectedFormDisplayValue($event)\"\n (formSizeValue)=\"selectedFormSizeValue($event)\"\n (subtitlesValue)=\"selectedSubtitlesValue($event)\"\n ></valtimo-form-display-configuration>\n </div>\n</ng-container>\n", styles: [".label-with-tooltip{display:flex;align-items:center}.select-form-flow{display:flex;flex-direction:column;width:100%;margin-top:24px}\n/*!\n * Copyright 2015-2025 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: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: ["placeholder", "openMenuAria", "closeMenuAria", "clearSelectionsTitle", "clearSelectionsAria", "clearSelectionTitle", "clearSelectionAria", "id", "labelId", "items", "type", "size", "itemValueKey", "label", "hideLabel", "helperText", "appendInline", "invalid", "invalidText", "warn", "warnText", "maxLength", "theme", "selectionFeedback", "autocomplete", "dropUp", "disabled", "readonly", "fluid"], outputs: ["selected", "submit", "close", "search", "clear"] }, { kind: "component", type: i5.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: FormDisplayConfigurationComponent, selector: "valtimo-form-display-configuration", inputs: ["selectedFormDefinition"], outputs: ["formDisplayValue", "formSizeValue", "subtitlesValue"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
3257
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectFormFlowComponent, deps: [{ token: i1$5.FormFlowService }, { token: ProcessLinkStateService }, { token: ProcessLinkService }, { token: ProcessLinkButtonService }, { token: i3$3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
3258
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: SelectFormFlowComponent, isStandalone: false, selector: "valtimo-select-form-flow", ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 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\n *ngIf=\"{\n formFlowDefinitions: formFlowDefinitionListItems$ | async,\n saving: saving$ | async,\n } as obs\"\n>\n <p class=\"step-description\">\n {{ 'processLinkConfiguration.chooseFormFlowDescription' | translate }}\n </p>\n\n <div class=\"select-form-flow\">\n <cds-combo-box\n [appendInline]=\"true\"\n [disabled]=\"!obs.formFlowDefinitions || obs.saving\"\n [items]=\"obs.formFlowDefinitions || []\"\n [placeholder]=\"'interface.typeToSearch' | translate\"\n (selected)=\"selectFormFlowDefinition($event)\"\n [label]=\"'processLinkSteps.selectFormFlow' | translate\"\n ><cds-dropdown-list></cds-dropdown-list\n ></cds-combo-box>\n\n <br />\n\n <valtimo-form-display-configuration\n [selectedFormDefinition]=\"selectedFormFlowDefinitionId\"\n (formDisplayValue)=\"selectedFormDisplayValue($event)\"\n (formSizeValue)=\"selectedFormSizeValue($event)\"\n (subtitlesValue)=\"selectedSubtitlesValue($event)\"\n ></valtimo-form-display-configuration>\n </div>\n</ng-container>\n", styles: [".label-with-tooltip{display:flex;align-items:center}.select-form-flow{display:flex;flex-direction:column;width:100%;margin-top:24px}\n/*!\n * Copyright 2015-2025 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: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$2.ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: ["placeholder", "openMenuAria", "closeMenuAria", "clearSelectionsTitle", "clearSelectionsAria", "clearSelectionTitle", "clearSelectionAria", "id", "labelId", "items", "type", "size", "itemValueKey", "label", "hideLabel", "helperText", "appendInline", "invalid", "invalidText", "warn", "warnText", "maxLength", "theme", "selectionFeedback", "autocomplete", "dropUp", "disabled", "readonly", "fluid"], outputs: ["selected", "submit", "close", "search", "clear"] }, { kind: "component", type: i5.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: FormDisplayConfigurationComponent, selector: "valtimo-form-display-configuration", inputs: ["selectedFormDefinition"], outputs: ["formDisplayValue", "formSizeValue", "subtitlesValue"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
2123
3259
  }
2124
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SelectFormFlowComponent, decorators: [{
3260
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectFormFlowComponent, decorators: [{
2125
3261
  type: Component,
2126
3262
  args: [{ standalone: false, selector: 'valtimo-select-form-flow', template: "<!--\n ~ Copyright 2015-2025 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\n *ngIf=\"{\n formFlowDefinitions: formFlowDefinitionListItems$ | async,\n saving: saving$ | async,\n } as obs\"\n>\n <p class=\"step-description\">\n {{ 'processLinkConfiguration.chooseFormFlowDescription' | translate }}\n </p>\n\n <div class=\"select-form-flow\">\n <cds-combo-box\n [appendInline]=\"true\"\n [disabled]=\"!obs.formFlowDefinitions || obs.saving\"\n [items]=\"obs.formFlowDefinitions || []\"\n [placeholder]=\"'interface.typeToSearch' | translate\"\n (selected)=\"selectFormFlowDefinition($event)\"\n [label]=\"'processLinkSteps.selectFormFlow' | translate\"\n ><cds-dropdown-list></cds-dropdown-list\n ></cds-combo-box>\n\n <br />\n\n <valtimo-form-display-configuration\n [selectedFormDefinition]=\"selectedFormFlowDefinitionId\"\n (formDisplayValue)=\"selectedFormDisplayValue($event)\"\n (formSizeValue)=\"selectedFormSizeValue($event)\"\n (subtitlesValue)=\"selectedSubtitlesValue($event)\"\n ></valtimo-form-display-configuration>\n </div>\n</ng-container>\n", styles: [".label-with-tooltip{display:flex;align-items:center}.select-form-flow{display:flex;flex-direction:column;width:100%;margin-top:24px}\n/*!\n * Copyright 2015-2025 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"] }]
2127
- }], ctorParameters: () => [{ type: i1$5.FormFlowService }, { type: ProcessLinkStateService }, { type: ProcessLinkService }, { type: ProcessLinkButtonService }, { type: i3$1.ActivatedRoute }] });
3263
+ }], ctorParameters: () => [{ type: i1$5.FormFlowService }, { type: ProcessLinkStateService }, { type: ProcessLinkService }, { type: ProcessLinkButtonService }, { type: i3$3.ActivatedRoute }] });
2128
3264
 
2129
3265
  /*
2130
3266
  * Copyright 2015-2025 Ritense BV, the Netherlands.
@@ -2151,7 +3287,7 @@ class SelectUIComponentComponent {
2151
3287
  this.formCustomComponentListItems$ = combineLatest([
2152
3288
  this.stateService.selectedProcessLink$,
2153
3289
  this._formCustomComponentConfig$,
2154
- ]).pipe(map$1(([selectedProcessLink, formCustomComponentConfigs]) => Object.keys(formCustomComponentConfigs).map(key => ({
3290
+ ]).pipe(map(([selectedProcessLink, formCustomComponentConfigs]) => Object.keys(formCustomComponentConfigs).map(key => ({
2155
3291
  content: key,
2156
3292
  selected: selectedProcessLink ? selectedProcessLink?.componentKey === key : false,
2157
3293
  }))), tap(formCustomComponentListItems => {
@@ -2177,7 +3313,9 @@ class SelectUIComponentComponent {
2177
3313
  : this.buttonService.disableSaveButton();
2178
3314
  }
2179
3315
  openBackButtonSubscription() {
2180
- this._subscriptions.add(this.buttonService.backButtonClick$.subscribe(() => {
3316
+ this._subscriptions.add(this.buttonService.backButtonClick$
3317
+ .pipe(withLatestFrom$1(this.stateService.isEditing$), filter(([, isEditing]) => !isEditing))
3318
+ .subscribe(() => {
2181
3319
  this.stateService.setInitial();
2182
3320
  }));
2183
3321
  }
@@ -2199,14 +3337,7 @@ class SelectUIComponentComponent {
2199
3337
  componentKey: this._selectedCustomComponent.content,
2200
3338
  activityId: selectedProcessLink.activityId,
2201
3339
  };
2202
- if (this.stateService.processLinkEditMode === ProcessLinkEditMode.EMIT_EVENTS) {
2203
- this.stateService.sendProcessLinkUpdateEvent(updateRequest);
2204
- return;
2205
- }
2206
- this.processLinkService.updateProcessLink(updateRequest).subscribe({
2207
- next: () => this.stateService.closeModal(),
2208
- error: () => this.stateService.stopSaving(),
2209
- });
3340
+ this.stateService.sendProcessLinkUpdateEvent(updateRequest);
2210
3341
  });
2211
3342
  }
2212
3343
  saveNewProcessLink() {
@@ -2219,21 +3350,18 @@ class SelectUIComponentComponent {
2219
3350
  processLinkType: processLinkTypeId,
2220
3351
  activityId: modalParams.element.id,
2221
3352
  };
2222
- if (this.stateService.processLinkEditMode === ProcessLinkEditMode.EMIT_EVENTS) {
2223
- this.stateService.sendProcessLinkCreateEvent(createRequest);
2224
- return [];
2225
- }
2226
- return this.processLinkService.saveProcessLink(createRequest);
3353
+ this.stateService.sendProcessLinkCreateEvent(createRequest);
3354
+ return [];
2227
3355
  }))
2228
3356
  .subscribe({
2229
3357
  next: () => this.stateService.closeModal(),
2230
3358
  error: () => this.stateService.stopSaving(),
2231
3359
  });
2232
3360
  }
2233
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SelectUIComponentComponent, deps: [{ token: ProcessLinkStateService }, { token: ProcessLinkButtonService }, { token: ProcessLinkService }, { token: FORM_CUSTOM_COMPONENT_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
2234
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: SelectUIComponentComponent, isStandalone: false, selector: "valtimo-select-ui-component", ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 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<cds-combo-box\n [dropUp]=\"false\"\n formControlName=\"contentKey\"\n [items]=\"formCustomComponentListItems$ | async\"\n itemValueKey=\"contentKey\"\n [label]=\"'processLinkSteps.uiComponent' | translate\"\n (selected)=\"selectCustomComponent($event)\"\n>\n <cds-dropdown-list></cds-dropdown-list>\n</cds-combo-box>\n", styles: [".custom-widget{padding:24px}.custom-widget__header{display:flex;align-items:center;justify-content:space-between}.custom-widget__title{color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}\n/*!\n * Copyright 2015-2025 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: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: ["placeholder", "openMenuAria", "closeMenuAria", "clearSelectionsTitle", "clearSelectionsAria", "clearSelectionTitle", "clearSelectionAria", "id", "labelId", "items", "type", "size", "itemValueKey", "label", "hideLabel", "helperText", "appendInline", "invalid", "invalidText", "warn", "warnText", "maxLength", "theme", "selectionFeedback", "autocomplete", "dropUp", "disabled", "readonly", "fluid"], outputs: ["selected", "submit", "close", "search", "clear"] }, { kind: "component", type: i5.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3361
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectUIComponentComponent, deps: [{ token: ProcessLinkStateService }, { token: ProcessLinkButtonService }, { token: ProcessLinkService }, { token: FORM_CUSTOM_COMPONENT_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
3362
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: SelectUIComponentComponent, isStandalone: false, selector: "valtimo-select-ui-component", ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 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<cds-combo-box\n [dropUp]=\"false\"\n formControlName=\"contentKey\"\n [items]=\"formCustomComponentListItems$ | async\"\n itemValueKey=\"contentKey\"\n [label]=\"'processLinkSteps.uiComponent' | translate\"\n (selected)=\"selectCustomComponent($event)\"\n>\n <cds-dropdown-list></cds-dropdown-list>\n</cds-combo-box>\n", styles: [".custom-widget{padding:24px}.custom-widget__header{display:flex;align-items:center;justify-content:space-between}.custom-widget__title{color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}\n/*!\n * Copyright 2015-2025 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: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3$2.ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: ["placeholder", "openMenuAria", "closeMenuAria", "clearSelectionsTitle", "clearSelectionsAria", "clearSelectionTitle", "clearSelectionAria", "id", "labelId", "items", "type", "size", "itemValueKey", "label", "hideLabel", "helperText", "appendInline", "invalid", "invalidText", "warn", "warnText", "maxLength", "theme", "selectionFeedback", "autocomplete", "dropUp", "disabled", "readonly", "fluid"], outputs: ["selected", "submit", "close", "search", "clear"] }, { kind: "component", type: i5.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2235
3363
  }
2236
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SelectUIComponentComponent, decorators: [{
3364
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectUIComponentComponent, decorators: [{
2237
3365
  type: Component,
2238
3366
  args: [{ standalone: false, selector: 'valtimo-select-ui-component', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2025 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<cds-combo-box\n [dropUp]=\"false\"\n formControlName=\"contentKey\"\n [items]=\"formCustomComponentListItems$ | async\"\n itemValueKey=\"contentKey\"\n [label]=\"'processLinkSteps.uiComponent' | translate\"\n (selected)=\"selectCustomComponent($event)\"\n>\n <cds-dropdown-list></cds-dropdown-list>\n</cds-combo-box>\n", styles: [".custom-widget{padding:24px}.custom-widget__header{display:flex;align-items:center;justify-content:space-between}.custom-widget__title{color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}\n/*!\n * Copyright 2015-2025 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"] }]
2239
3367
  }], ctorParameters: () => [{ type: ProcessLinkStateService }, { type: ProcessLinkButtonService }, { type: ProcessLinkService }, { type: undefined, decorators: [{
@@ -2243,6 +3371,348 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
2243
3371
  args: [FORM_CUSTOM_COMPONENT_TOKEN]
2244
3372
  }] }] });
2245
3373
 
3374
+ /*
3375
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
3376
+ *
3377
+ * Licensed under EUPL, Version 1.2 (the "License");
3378
+ * you may not use this file except in compliance with the License.
3379
+ * You may obtain a copy of the License at
3380
+ *
3381
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
3382
+ *
3383
+ * Unless required by applicable law or agreed to in writing, software
3384
+ * distributed under the License is distributed on an "AS IS" BASIS,
3385
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3386
+ * See the License for the specific language governing permissions and
3387
+ * limitations under the License.
3388
+ */
3389
+ class SelectBuildingBlockComponent {
3390
+ constructor(processLinkBuildingBlockApiService, stateService, buildingBlockStateService, buttonService, stepService) {
3391
+ this.processLinkBuildingBlockApiService = processLinkBuildingBlockApiService;
3392
+ this.stateService = stateService;
3393
+ this.buildingBlockStateService = buildingBlockStateService;
3394
+ this.buttonService = buttonService;
3395
+ this.stepService = stepService;
3396
+ this.buildingBlocks$ = this.processLinkBuildingBlockApiService
3397
+ .getBuildingBlockDefinitions({ includeArtwork: true })
3398
+ .pipe(map(definitions => [...(definitions ?? [])]), map(definitions => definitions.sort((a, b) => (a.name || a.key).localeCompare(b.name || b.key))), catchError(() => of([])), tap(() => {
3399
+ this.loading = false;
3400
+ }), shareReplay(1));
3401
+ this.loading = true;
3402
+ this.selectedKey = null;
3403
+ this.subscriptions = new Subscription();
3404
+ this.buildingBlocks = [];
3405
+ }
3406
+ ngOnInit() {
3407
+ this.buttonService.disableNextButton();
3408
+ this.subscriptions.add(this.buildingBlocks$.subscribe(definitions => {
3409
+ this.buildingBlocks = definitions ?? [];
3410
+ if (this.selectedKey) {
3411
+ this.stepService.updateBuildingBlockSelectionStepLabel(this.getDefinitionLabel(this.findDefinitionByKey(this.selectedKey)));
3412
+ }
3413
+ }));
3414
+ this.subscriptions.add(this.buildingBlockStateService.definitionKey$.subscribe(key => {
3415
+ this.selectedKey = key;
3416
+ if (key) {
3417
+ this.stepService.updateBuildingBlockSelectionStepLabel(this.getDefinitionLabel(this.findDefinitionByKey(key)));
3418
+ this.buttonService.enableNextButton();
3419
+ }
3420
+ else {
3421
+ this.buttonService.disableNextButton();
3422
+ }
3423
+ }));
3424
+ this.subscriptions.add(this.buttonService.backButtonClick$
3425
+ .pipe(withLatestFrom$1(this.stateService.isEditing$), filter(([, isEditing]) => !isEditing))
3426
+ .subscribe(() => {
3427
+ this.stateService.setInitial();
3428
+ }));
3429
+ this.subscriptions.add(this.buttonService.nextButtonClick$
3430
+ .pipe(withLatestFrom$1(this.stateService.isEditing$), filter(([, isEditing]) => !isEditing))
3431
+ .subscribe(() => {
3432
+ this.stepService.setConfigureBuildingBlockPluginsStep(this.getDefinitionLabel(this.findDefinitionByKey(this.selectedKey)));
3433
+ }));
3434
+ }
3435
+ ngOnDestroy() {
3436
+ this.subscriptions.unsubscribe();
3437
+ }
3438
+ onSelectionChange(event) {
3439
+ const definition = event?.value;
3440
+ this.selectedKey = definition?.key ?? null;
3441
+ this.buildingBlockStateService.setDefinitionKey(definition?.key ?? null);
3442
+ this.stepService.updateBuildingBlockSelectionStepLabel(this.getDefinitionLabel(definition));
3443
+ if (definition?.key) {
3444
+ this.buttonService.enableNextButton();
3445
+ }
3446
+ else {
3447
+ this.buttonService.disableNextButton();
3448
+ }
3449
+ }
3450
+ trackByKey(_, definition) {
3451
+ return definition.key;
3452
+ }
3453
+ findDefinitionByKey(key) {
3454
+ if (!key)
3455
+ return undefined;
3456
+ return this.buildingBlocks.find(definition => definition.key === key);
3457
+ }
3458
+ getDefinitionLabel(definition) {
3459
+ if (!definition)
3460
+ return '';
3461
+ const name = definition.name || definition.key;
3462
+ return name;
3463
+ }
3464
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectBuildingBlockComponent, deps: [{ token: ProcessLinkBuildingBlockApiService }, { token: ProcessLinkStateService }, { token: BuildingBlockStateService }, { token: ProcessLinkButtonService }, { token: ProcessLinkStepService }], target: i0.ɵɵFactoryTarget.Component }); }
3465
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: SelectBuildingBlockComponent, isStandalone: false, selector: "valtimo-select-building-block", ngImport: i0, template: "<!--\n Copyright 2015-2025 Ritense BV\n Licensed under the EUPL, Version 1.2\n-->\n\n<div class=\"select-building-block\" *ngIf=\"!loading; else loadingState\">\n <ng-container *ngIf=\"buildingBlocks$ | async as buildingBlocks\">\n <ng-container *ngIf=\"buildingBlocks.length; else emptyState\">\n <div class=\"list-container\">\n <cds-structured-list (selected)=\"onSelectionChange($event)\" selection=\"true\">\n <cds-list-header>\n <cds-list-column nowrap=\"true\"></cds-list-column>\n <cds-list-column nowrap=\"true\">\n {{ 'processLinkConfiguration.buildingBlock.name' | translate }}\n </cds-list-column>\n <cds-list-column>\n {{ 'processLinkConfiguration.buildingBlock.description' | translate }}\n </cds-list-column>\n </cds-list-header>\n <cds-list-row *ngFor=\"let buildingBlock of buildingBlocks\" [value]=\"buildingBlock\">\n <cds-list-column>\n <div *ngIf=\"buildingBlock.imageBase64\">\n <img\n class=\"building-block-artwork\"\n [src]=\"'data:image/png;base64,' + buildingBlock.imageBase64\"\n [title]=\"buildingBlock.name\"\n />\n </div>\n </cds-list-column>\n <cds-list-column>{{ buildingBlock.name }}</cds-list-column>\n <cds-list-column>{{ buildingBlock.description }}</cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n </div>\n </ng-container>\n </ng-container>\n</div>\n\n<ng-template #loadingState>\n <div class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n</ng-template>\n\n<ng-template #emptyState>\n <div class=\"empty-state\">\n {{ 'processLinkConfiguration.buildingBlock.emptyState' | translate }}\n </div>\n</ng-template>\n", styles: [".loading-container{display:flex;justify-content:center;padding:16px 0}.empty-state{padding:1rem;border:1px solid #e0e0e0;border-radius:4px;background-color:#f4f4f4;color:#8d8d8d}.building-block-artwork{object-fit:contain;height:60px;width:100%;margin-bottom:-.5rem}::ng-deep .list-container .cds--structured-list-td{vertical-align:top}\n"], dependencies: [{ kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$2.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "component", type: i3$2.StructuredList, selector: "cds-structured-list, ibm-structured-list", inputs: ["selection", "flushed", "condensed", "name", "skeleton"], outputs: ["selected"] }, { kind: "component", type: i3$2.ListRow, selector: "cds-list-row, ibm-list-row", inputs: ["selected", "label", "value"], outputs: ["change"] }, { kind: "component", type: i3$2.ListHeader, selector: "cds-list-header, ibm-list-header", inputs: ["skeleton"] }, { kind: "component", type: i3$2.ListColumn, selector: "cds-list-column, ibm-list-column", inputs: ["skeleton", "nowrap"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
3466
+ }
3467
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectBuildingBlockComponent, decorators: [{
3468
+ type: Component,
3469
+ args: [{ standalone: false, selector: 'valtimo-select-building-block', template: "<!--\n Copyright 2015-2025 Ritense BV\n Licensed under the EUPL, Version 1.2\n-->\n\n<div class=\"select-building-block\" *ngIf=\"!loading; else loadingState\">\n <ng-container *ngIf=\"buildingBlocks$ | async as buildingBlocks\">\n <ng-container *ngIf=\"buildingBlocks.length; else emptyState\">\n <div class=\"list-container\">\n <cds-structured-list (selected)=\"onSelectionChange($event)\" selection=\"true\">\n <cds-list-header>\n <cds-list-column nowrap=\"true\"></cds-list-column>\n <cds-list-column nowrap=\"true\">\n {{ 'processLinkConfiguration.buildingBlock.name' | translate }}\n </cds-list-column>\n <cds-list-column>\n {{ 'processLinkConfiguration.buildingBlock.description' | translate }}\n </cds-list-column>\n </cds-list-header>\n <cds-list-row *ngFor=\"let buildingBlock of buildingBlocks\" [value]=\"buildingBlock\">\n <cds-list-column>\n <div *ngIf=\"buildingBlock.imageBase64\">\n <img\n class=\"building-block-artwork\"\n [src]=\"'data:image/png;base64,' + buildingBlock.imageBase64\"\n [title]=\"buildingBlock.name\"\n />\n </div>\n </cds-list-column>\n <cds-list-column>{{ buildingBlock.name }}</cds-list-column>\n <cds-list-column>{{ buildingBlock.description }}</cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n </div>\n </ng-container>\n </ng-container>\n</div>\n\n<ng-template #loadingState>\n <div class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n</ng-template>\n\n<ng-template #emptyState>\n <div class=\"empty-state\">\n {{ 'processLinkConfiguration.buildingBlock.emptyState' | translate }}\n </div>\n</ng-template>\n", styles: [".loading-container{display:flex;justify-content:center;padding:16px 0}.empty-state{padding:1rem;border:1px solid #e0e0e0;border-radius:4px;background-color:#f4f4f4;color:#8d8d8d}.building-block-artwork{object-fit:contain;height:60px;width:100%;margin-bottom:-.5rem}::ng-deep .list-container .cds--structured-list-td{vertical-align:top}\n"] }]
3470
+ }], ctorParameters: () => [{ type: ProcessLinkBuildingBlockApiService }, { type: ProcessLinkStateService }, { type: BuildingBlockStateService }, { type: ProcessLinkButtonService }, { type: ProcessLinkStepService }] });
3471
+
3472
+ /*
3473
+ * Copyright 2015-2026 Ritense BV, the Netherlands.
3474
+ *
3475
+ * Licensed under EUPL, Version 1.2 (the "License");
3476
+ * you may not use this file except in compliance with the License.
3477
+ * You may obtain a copy of the License at
3478
+ *
3479
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
3480
+ *
3481
+ * Unless required by applicable law or agreed to in writing, software
3482
+ * distributed under the License is distributed on an "AS IS" basis,
3483
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3484
+ * See the License for the specific language governing permissions and
3485
+ * limitations under the License.
3486
+ */
3487
+ class ConfigureBuildingBlockPluginsComponent {
3488
+ constructor(stateService, buildingBlockStateService, buttonService, stepService, pluginManagementService, pluginTranslationService, processLinkService, translateService, processLinkBuildingBlockApiService) {
3489
+ this.stateService = stateService;
3490
+ this.buildingBlockStateService = buildingBlockStateService;
3491
+ this.buttonService = buttonService;
3492
+ this.stepService = stepService;
3493
+ this.pluginManagementService = pluginManagementService;
3494
+ this.pluginTranslationService = pluginTranslationService;
3495
+ this.processLinkService = processLinkService;
3496
+ this.translateService = translateService;
3497
+ this.processLinkBuildingBlockApiService = processLinkBuildingBlockApiService;
3498
+ this.pluginKeys$ = this.buildingBlockStateService.requiredPluginKeys$;
3499
+ this.isNestedBuildingBlock$ = this.buildingBlockStateService.isNestedBuildingBlock$;
3500
+ this._pluginDependenciesWarningTranslationKey$ = this.buildingBlockStateService.pluginDependencies$.pipe(map$1(dependencies => {
3501
+ if (!dependencies || !dependencies.length)
3502
+ return '';
3503
+ const zaakInstanceLinkDependency = dependencies.includes('ZAAK_INSTANCE_LINK');
3504
+ const zaakTypeLinkDependency = dependencies.includes('ZAAK_TYPE_LINK');
3505
+ if (zaakInstanceLinkDependency && zaakTypeLinkDependency) {
3506
+ return 'processLinkConfiguration.buildingBlock.pluginDependenciesWarning.zaakInstanceAndTypeLink';
3507
+ }
3508
+ else if (zaakInstanceLinkDependency) {
3509
+ return 'processLinkConfiguration.buildingBlock.pluginDependenciesWarning.zaakInstanceLink';
3510
+ }
3511
+ else if (zaakTypeLinkDependency) {
3512
+ return 'processLinkConfiguration.buildingBlock.pluginDependenciesWarning.zaakTypeLink';
3513
+ }
3514
+ return '';
3515
+ }));
3516
+ this.dependenciesNotificationObject$ = combineLatest([
3517
+ this._pluginDependenciesWarningTranslationKey$,
3518
+ this.translateService.stream('key'),
3519
+ ]).pipe(map$1(([warningTranslationKey]) => !warningTranslationKey
3520
+ ? null
3521
+ : {
3522
+ type: 'warning',
3523
+ lowContrast: true,
3524
+ title: this.translateService.instant('processLinkConfiguration.buildingBlock.pluginDependenciesWarning.title'),
3525
+ message: this.translateService.instant(warningTranslationKey),
3526
+ showClose: false,
3527
+ }));
3528
+ this.loading$ = this.buildingBlockStateService.requirementsLoading$;
3529
+ this.versions$ = this.buildingBlockStateService.versions$;
3530
+ this.definitionVersionTag$ = this.buildingBlockStateService.definitionVersionTag$;
3531
+ this.versionPlaceholder$ = this.translateService.stream('processLinkConfiguration.buildingBlock.versionPlaceholder');
3532
+ this.configurationPlaceholder$ = this.translateService.stream('processLinkConfiguration.buildingBlock.configurationPlaceholder');
3533
+ this.versionItems$ = combineLatest([
3534
+ this.versions$,
3535
+ this.definitionVersionTag$,
3536
+ this.versionPlaceholder$,
3537
+ ]).pipe(map$1(([versions, selectedVersion, placeholder]) => {
3538
+ const normalizedSelectedVersion = selectedVersion || '';
3539
+ return [
3540
+ {
3541
+ id: '',
3542
+ content: placeholder,
3543
+ selected: normalizedSelectedVersion === '',
3544
+ },
3545
+ ...(versions || []).map(version => ({
3546
+ id: version,
3547
+ content: version,
3548
+ selected: normalizedSelectedVersion === version,
3549
+ })),
3550
+ ];
3551
+ }));
3552
+ this.pluginConfigurationViewModels$ = combineLatest([
3553
+ this.pluginKeys$,
3554
+ this.buildingBlockStateService.pluginMappings$,
3555
+ this.configurationPlaceholder$,
3556
+ ]).pipe(switchMap$1(([pluginKeys, pluginMappings, placeholder]) => {
3557
+ if (!pluginKeys?.length) {
3558
+ return of([]);
3559
+ }
3560
+ return combineLatest(pluginKeys.map(pluginKey => this.getConfigurationOptions(pluginKey).pipe(map$1(options => ({
3561
+ key: pluginKey,
3562
+ label: this.pluginLabel(pluginKey),
3563
+ dropdownItems: this.buildDropdownItems(options, pluginMappings?.[pluginKey], placeholder),
3564
+ hasOptions: options.length > 0,
3565
+ })))));
3566
+ }));
3567
+ this._subscriptions = new Subscription();
3568
+ this._configurationOptionsCache = new Map();
3569
+ }
3570
+ ngOnInit() {
3571
+ // Check if we're configuring from within a building block process (nested building block)
3572
+ this._subscriptions.add(this.stateService.modalParams$
3573
+ .pipe(map$1(params => params?.processDefinitionId), distinctUntilChanged())
3574
+ .subscribe(processDefinitionId => {
3575
+ if (processDefinitionId) {
3576
+ this.processLinkBuildingBlockApiService
3577
+ .isBuildingBlockProcess(processDefinitionId)
3578
+ .subscribe(isNested => {
3579
+ this.buildingBlockStateService.setIsNestedBuildingBlock(isNested);
3580
+ });
3581
+ }
3582
+ }));
3583
+ this._subscriptions.add(combineLatest([
3584
+ this.buildingBlockStateService.requiredPluginKeys$,
3585
+ this.buildingBlockStateService.mappingsComplete$,
3586
+ this.buildingBlockStateService.requirementsLoading$,
3587
+ this.definitionVersionTag$,
3588
+ ]).subscribe(([keys, complete, loading, version]) => {
3589
+ if (loading || !version) {
3590
+ this.buttonService.disableNextButton();
3591
+ return;
3592
+ }
3593
+ if (keys.length === 0 || complete) {
3594
+ this.buttonService.enableNextButton();
3595
+ }
3596
+ else {
3597
+ this.buttonService.disableNextButton();
3598
+ }
3599
+ }));
3600
+ this._subscriptions.add(this.buttonService.backButtonClick$
3601
+ .pipe(withLatestFrom(this.stateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
3602
+ .subscribe(() => {
3603
+ this.stepService.setBuildingBlockSteps();
3604
+ }));
3605
+ this._subscriptions.add(this.buttonService.nextButtonClick$
3606
+ .pipe(withLatestFrom(this.stateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
3607
+ .subscribe(() => {
3608
+ this.stepService.setConfigureBuildingBlockMappingsStep(this.buildingBlockStateService.getDefinitionSnapshot().key ?? undefined);
3609
+ }));
3610
+ }
3611
+ ngOnDestroy() {
3612
+ this._subscriptions.unsubscribe();
3613
+ }
3614
+ getConfigurationOptions(pluginDefinitionKey) {
3615
+ if (!this._configurationOptionsCache.has(pluginDefinitionKey)) {
3616
+ this._configurationOptionsCache.set(pluginDefinitionKey, this.pluginManagementService
3617
+ .getPluginConfigurationsByPluginDefinitionKey(pluginDefinitionKey)
3618
+ .pipe(catchError$1(() => of([])), shareReplay(1)));
3619
+ }
3620
+ return this._configurationOptionsCache.get(pluginDefinitionKey) ?? of([]);
3621
+ }
3622
+ onMappingChange(pluginDefinitionKey, configurationId) {
3623
+ const normalizedValue = configurationId || null;
3624
+ this.buildingBlockStateService.setPluginConfigurationMapping(pluginDefinitionKey, normalizedValue);
3625
+ }
3626
+ pluginLabel(pluginDefinitionKey) {
3627
+ return (this.pluginTranslationService.instant('title', pluginDefinitionKey) || pluginDefinitionKey);
3628
+ }
3629
+ buildDropdownItems(options, selectedId, placeholder) {
3630
+ return [
3631
+ {
3632
+ id: '',
3633
+ content: placeholder,
3634
+ selected: !selectedId,
3635
+ },
3636
+ ...options.map(option => ({
3637
+ id: option.id,
3638
+ content: option.title,
3639
+ selected: selectedId === option.id || (options.length === 1 && !selectedId),
3640
+ })),
3641
+ ];
3642
+ }
3643
+ checkSingleBuildingBlockType(types) {
3644
+ if (!types?.length)
3645
+ return false;
3646
+ return types.length === 1 && types[0]?.processLinkType === 'building-block' && types[0].enabled;
3647
+ }
3648
+ onVersionChange(versionTag) {
3649
+ const normalizedValue = versionTag || null;
3650
+ this.buildingBlockStateService.setPluginConfigurationMappings(undefined);
3651
+ this.buildingBlockStateService.setDefinitionVersionTag(normalizedValue);
3652
+ }
3653
+ createProcessLink() {
3654
+ this.stateService.modalParams$.pipe(take(1)).subscribe(modalParams => {
3655
+ const { key, versionTag } = this.buildingBlockStateService.getDefinitionSnapshot();
3656
+ if (!modalParams || !key || !versionTag) {
3657
+ this.stateService.stopSaving();
3658
+ return;
3659
+ }
3660
+ const activityId = modalParams.element?.id;
3661
+ if (!activityId) {
3662
+ this.stateService.stopSaving();
3663
+ return;
3664
+ }
3665
+ const request = {
3666
+ processDefinitionId: modalParams.processDefinitionId ?? '-',
3667
+ activityId,
3668
+ activityType: modalParams.element?.activityListenerType ?? '',
3669
+ processLinkType: 'building-block',
3670
+ buildingBlockDefinitionKey: key,
3671
+ buildingBlockDefinitionVersionTag: versionTag,
3672
+ pluginConfigurationMappings: this.getMappingsForPayload(),
3673
+ inputMappings: [],
3674
+ outputMappings: [],
3675
+ };
3676
+ this.stateService.sendProcessLinkCreateEvent(request);
3677
+ });
3678
+ }
3679
+ updateProcessLink(processLink) {
3680
+ this.stateService.modalParams$.pipe(take(1)).subscribe(modalParams => {
3681
+ const { key, versionTag } = this.buildingBlockStateService.getDefinitionSnapshot();
3682
+ if (!modalParams || !key || !versionTag) {
3683
+ this.stateService.stopSaving();
3684
+ return;
3685
+ }
3686
+ const activityId = modalParams.element?.id;
3687
+ const request = {
3688
+ id: processLink.id,
3689
+ activityId: activityId,
3690
+ processLinkType: 'building-block',
3691
+ buildingBlockDefinitionKey: key,
3692
+ buildingBlockDefinitionVersionTag: versionTag,
3693
+ pluginConfigurationMappings: this.getMappingsForPayload(),
3694
+ inputMappings: [],
3695
+ outputMappings: [],
3696
+ };
3697
+ this.stateService.sendProcessLinkUpdateEvent(request);
3698
+ });
3699
+ }
3700
+ getMappingsForPayload() {
3701
+ const mappings = this.buildingBlockStateService.getPluginConfigurationMappingsSnapshot();
3702
+ return Object.entries(mappings).reduce((acc, [pluginKey, configurationId]) => {
3703
+ if (configurationId)
3704
+ acc[pluginKey] = configurationId;
3705
+ return acc;
3706
+ }, {});
3707
+ }
3708
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ConfigureBuildingBlockPluginsComponent, deps: [{ token: ProcessLinkStateService }, { token: BuildingBlockStateService }, { token: ProcessLinkButtonService }, { token: ProcessLinkStepService }, { token: i1$1.PluginManagementService }, { token: i1$1.PluginTranslationService }, { token: ProcessLinkService }, { token: i3.TranslateService }, { token: ProcessLinkBuildingBlockApiService }], target: i0.ɵɵFactoryTarget.Component }); }
3709
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.18", type: ConfigureBuildingBlockPluginsComponent, isStandalone: false, selector: "valtimo-configure-building-block-plugins", ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"configure-building-block-plugins\">\n <div\n *ngIf=\"dependenciesNotificationObject$ | async as dependenciesNotificationObject\"\n class=\"configure-building-block-plugins__warning\"\n >\n <cds-notification [notificationObj]=\"dependenciesNotificationObject\"> </cds-notification>\n </div>\n\n @if (versionItems$ | async; as versionItems) {\n @let versionPlaceholder = versionPlaceholder$ | async;\n <div class=\"version-select\">\n <cds-combo-box\n cdsLayer\n size=\"lg\"\n [appendInline]=\"true\"\n [label]=\"'processLinkConfiguration.buildingBlock.versionLabel' | translate\"\n [placeholder]=\"versionPlaceholder || ''\"\n (selected)=\"onVersionChange($event?.id || '')\"\n (clear)=\"onVersionChange('')\"\n >\n <cds-dropdown-list [items]=\"versionItems\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n\n @if (loading$ | async) {\n <div class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n } @else {\n <div class=\"plugin-list\">\n @if (definitionVersionTag$ | async) {\n @if (isNestedBuildingBlock$ | async) {\n <div class=\"empty-state\">\n {{ 'processLinkConfiguration.buildingBlock.nestedBuildingBlockInfo' | translate }}\n </div>\n } @else {\n @if (pluginConfigurationViewModels$ | async; as pluginConfigurationViewModels) {\n @if (pluginConfigurationViewModels.length === 0) {\n <div class=\"empty-state\">\n {{ 'processLinkConfiguration.buildingBlock.noRequirements' | translate }}\n </div>\n } @else {\n @let configurationPlaceholder = configurationPlaceholder$ | async;\n\n <div class=\"plugin-row\">\n <v-input-label\n [title]=\"'processLinkConfiguration.buildingBlock.pluginLabel' | translate\"\n >\n </v-input-label>\n <v-input-label\n [title]=\"'processLinkConfiguration.buildingBlock.configurationLabel' | translate\"\n required=\"true\"\n >\n </v-input-label>\n </div>\n\n @for (plugin of pluginConfigurationViewModels; track plugin.key) {\n <div class=\"plugin-row\">\n <div class=\"plugin-label\">\n {{ plugin.label }}\n </div>\n\n <cds-combo-box\n cdsLayer\n size=\"lg\"\n [appendInline]=\"true\"\n [placeholder]=\"configurationPlaceholder || ''\"\n (selected)=\"onMappingChange(plugin.key, $event?.id || '')\"\n (clear)=\"onMappingChange(plugin.key, '')\"\n >\n <cds-dropdown-list [items]=\"plugin.dropdownItems\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n }\n }\n }\n }\n </div>\n }\n</div>\n", styles: [".loading-container{display:flex;justify-content:center;padding:2rem 0}.empty-state{padding:1rem;border:1px solid #e0e0e0;border-radius:4px;background-color:#f4f4f4;color:#8d8d8d}.plugin-row{display:grid;align-items:center;grid-template-columns:1fr 1fr;margin-bottom:15px}.plugin-row .plugin-label{padding-left:16px;border-block-end:1px solid var(--cds-border-strong);height:100%;margin-right:15px;display:grid;align-items:center}.plugin-list{margin-top:30px}.configure-building-block-plugins__warning{display:flex;width:100%;margin-bottom:24px}.configure-building-block-plugins__warning ::ng-deep cds-notification{max-inline-size:100%;min-inline-size:100%}\n"], dependencies: [{ kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$2.ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: ["placeholder", "openMenuAria", "closeMenuAria", "clearSelectionsTitle", "clearSelectionsAria", "clearSelectionTitle", "clearSelectionAria", "id", "labelId", "items", "type", "size", "itemValueKey", "label", "hideLabel", "helperText", "appendInline", "invalid", "invalidText", "warn", "warnText", "maxLength", "theme", "selectionFeedback", "autocomplete", "dropUp", "disabled", "readonly", "fluid"], outputs: ["selected", "submit", "close", "search", "clear"] }, { kind: "component", type: i5.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: i3$2.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "directive", type: i3$2.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "component", type: i2$1.InputLabelComponent, selector: "v-input-label", inputs: ["name", "tooltip", "tooltipTranslationKey", "largeMargin", "small", "noMargin", "title", "titleTranslationKey", "required", "disabled", "carbonTheme"] }, { kind: "component", type: i3$2.Notification, selector: "cds-notification, cds-inline-notification, ibm-notification, ibm-inline-notification", inputs: ["notificationObj"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
3710
+ }
3711
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ConfigureBuildingBlockPluginsComponent, decorators: [{
3712
+ type: Component,
3713
+ args: [{ standalone: false, selector: 'valtimo-configure-building-block-plugins', template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"configure-building-block-plugins\">\n <div\n *ngIf=\"dependenciesNotificationObject$ | async as dependenciesNotificationObject\"\n class=\"configure-building-block-plugins__warning\"\n >\n <cds-notification [notificationObj]=\"dependenciesNotificationObject\"> </cds-notification>\n </div>\n\n @if (versionItems$ | async; as versionItems) {\n @let versionPlaceholder = versionPlaceholder$ | async;\n <div class=\"version-select\">\n <cds-combo-box\n cdsLayer\n size=\"lg\"\n [appendInline]=\"true\"\n [label]=\"'processLinkConfiguration.buildingBlock.versionLabel' | translate\"\n [placeholder]=\"versionPlaceholder || ''\"\n (selected)=\"onVersionChange($event?.id || '')\"\n (clear)=\"onVersionChange('')\"\n >\n <cds-dropdown-list [items]=\"versionItems\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n\n @if (loading$ | async) {\n <div class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n } @else {\n <div class=\"plugin-list\">\n @if (definitionVersionTag$ | async) {\n @if (isNestedBuildingBlock$ | async) {\n <div class=\"empty-state\">\n {{ 'processLinkConfiguration.buildingBlock.nestedBuildingBlockInfo' | translate }}\n </div>\n } @else {\n @if (pluginConfigurationViewModels$ | async; as pluginConfigurationViewModels) {\n @if (pluginConfigurationViewModels.length === 0) {\n <div class=\"empty-state\">\n {{ 'processLinkConfiguration.buildingBlock.noRequirements' | translate }}\n </div>\n } @else {\n @let configurationPlaceholder = configurationPlaceholder$ | async;\n\n <div class=\"plugin-row\">\n <v-input-label\n [title]=\"'processLinkConfiguration.buildingBlock.pluginLabel' | translate\"\n >\n </v-input-label>\n <v-input-label\n [title]=\"'processLinkConfiguration.buildingBlock.configurationLabel' | translate\"\n required=\"true\"\n >\n </v-input-label>\n </div>\n\n @for (plugin of pluginConfigurationViewModels; track plugin.key) {\n <div class=\"plugin-row\">\n <div class=\"plugin-label\">\n {{ plugin.label }}\n </div>\n\n <cds-combo-box\n cdsLayer\n size=\"lg\"\n [appendInline]=\"true\"\n [placeholder]=\"configurationPlaceholder || ''\"\n (selected)=\"onMappingChange(plugin.key, $event?.id || '')\"\n (clear)=\"onMappingChange(plugin.key, '')\"\n >\n <cds-dropdown-list [items]=\"plugin.dropdownItems\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n }\n }\n }\n }\n </div>\n }\n</div>\n", styles: [".loading-container{display:flex;justify-content:center;padding:2rem 0}.empty-state{padding:1rem;border:1px solid #e0e0e0;border-radius:4px;background-color:#f4f4f4;color:#8d8d8d}.plugin-row{display:grid;align-items:center;grid-template-columns:1fr 1fr;margin-bottom:15px}.plugin-row .plugin-label{padding-left:16px;border-block-end:1px solid var(--cds-border-strong);height:100%;margin-right:15px;display:grid;align-items:center}.plugin-list{margin-top:30px}.configure-building-block-plugins__warning{display:flex;width:100%;margin-bottom:24px}.configure-building-block-plugins__warning ::ng-deep cds-notification{max-inline-size:100%;min-inline-size:100%}\n"] }]
3714
+ }], ctorParameters: () => [{ type: ProcessLinkStateService }, { type: BuildingBlockStateService }, { type: ProcessLinkButtonService }, { type: ProcessLinkStepService }, { type: i1$1.PluginManagementService }, { type: i1$1.PluginTranslationService }, { type: ProcessLinkService }, { type: i3.TranslateService }, { type: ProcessLinkBuildingBlockApiService }] });
3715
+
2246
3716
  /*
2247
3717
  * Copyright 2015-2025 Ritense BV, the Netherlands.
2248
3718
  *
@@ -2259,12 +3729,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
2259
3729
  * limitations under the License.
2260
3730
  */
2261
3731
  class ProcessLinkModalComponent {
2262
- constructor(stateService, stepService, buttonService, pluginStateService, processLinkService, processLinkStateService, configService) {
3732
+ constructor(stateService, stepService, buttonService, pluginStateService, processLinkStateService, configService) {
2263
3733
  this.stateService = stateService;
2264
3734
  this.stepService = stepService;
2265
3735
  this.buttonService = buttonService;
2266
3736
  this.pluginStateService = pluginStateService;
2267
- this.processLinkService = processLinkService;
2268
3737
  this.processLinkStateService = processLinkStateService;
2269
3738
  this.configService = configService;
2270
3739
  this.showModal$ = this.stateService.showModal$;
@@ -2281,6 +3750,7 @@ class ProcessLinkModalComponent {
2281
3750
  this.saving$ = this.stateService.saving$;
2282
3751
  this.typeOfSelectedProcessLink$ = this.stateService.typeOfSelectedProcessLink$;
2283
3752
  this.viewModelEnabled$ = this.stateService.viewModelEnabled$;
3753
+ this.isEditing$ = this.stateService.isEditing$;
2284
3754
  this.selectedPluginConfiguration$ = this.pluginStateService.selectedPluginConfiguration$;
2285
3755
  this.showViewModelToggle = this.configService.config.featureToggles.enableFormViewModel;
2286
3756
  }
@@ -2298,30 +3768,21 @@ class ProcessLinkModalComponent {
2298
3768
  }
2299
3769
  unlinkButtonClick() {
2300
3770
  this.stateService.selectedProcessLink$.pipe(take(1)).subscribe(selectedProcessLink => {
2301
- if (this.processLinkStateService.processLinkEditMode === ProcessLinkEditMode.EMIT_EVENTS) {
2302
- this.processLinkStateService.sendProcessLinkDeleteEvent({
2303
- activityId: selectedProcessLink.activityId,
2304
- });
2305
- return;
2306
- }
2307
- this.stateService.startSaving();
2308
- this.processLinkService.deleteProcessLink(selectedProcessLink.id).subscribe(() => {
2309
- this.stateService.closeModal();
2310
- }, () => {
2311
- this.stateService.stopSaving();
3771
+ this.processLinkStateService.sendProcessLinkDeleteEvent({
3772
+ activityId: selectedProcessLink.activityId,
2312
3773
  });
2313
3774
  });
2314
3775
  }
2315
3776
  toggleCheckedChange(value) {
2316
3777
  this.processLinkStateService.setViewModelEnabled(value);
2317
3778
  }
2318
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkModalComponent, deps: [{ token: ProcessLinkStateService }, { token: ProcessLinkStepService }, { token: ProcessLinkButtonService }, { token: PluginStateService }, { token: ProcessLinkService }, { token: ProcessLinkStateService }, { token: i2.ConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
2319
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: ProcessLinkModalComponent, isStandalone: false, selector: "valtimo-process-link-modal", ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n class=\"process-link-modal-container\"\n *ngIf=\"{\n showModal: showModal$ | async,\n processStepName: processStepName$ | async,\n steps: steps$ | async,\n currentStepIndex: currentStepIndex$ | async,\n currentStepId: currentStepId$ | async,\n showSaveButton: showSaveButton$ | async,\n enableSaveButton: enableSaveButton$ | async,\n showBackButton: showBackButton$ | async,\n showNextButton: showNextButton$ | async,\n enableNextButton: enableNextButton$ | async,\n saving: saving$ | async,\n hideProgressIndicator: hideProgressIndicator$ | async,\n typeOfSelectedProgressLink: typeOfSelectedProcessLink$ | async,\n } as obs\"\n>\n <cds-modal valtimoCdsModal [open]=\"obs.showModal\" size=\"lg\" (close)=\"closeModal()\">\n <cds-modal-header (closeSelect)=\"closeModal()\">\n <h2 cdsModalHeaderLabel>{{ 'processLinkConfiguration.configureStep' | translate }}</h2>\n <h3 cdsModalHeaderHeading>\n {{\n 'processLinkConfiguration.modalTitle'\n | translate: {processStepName: obs.processStepName || '-'}\n }}\n </h3>\n <div class=\"process-link-progress\" *ngIf=\"!obs.typeOfSelectedProgressLink\">\n <ng-container *ngTemplateOutlet=\"progressIndicator; context: {obs: obs}\"></ng-container>\n </div>\n </cds-modal-header>\n <section cdsModalContent [cdsLayer]=\"1\">\n <ng-container *ngTemplateOutlet=\"stepContent; context: {obs: obs}\"></ng-container>\n </section>\n <ng-template *ngTemplateOutlet=\"footer; context: {obs: obs}\"></ng-template>\n </cds-modal>\n</div>\n\n<ng-template #progressIndicator let-obs=\"obs\">\n <cds-progress-indicator\n *ngIf=\"obs.steps && !obs.hideProgressIndicator\"\n [steps]=\"obs.steps\"\n [current]=\"obs.currentStepIndex\"\n spacing=\"equal\"\n ></cds-progress-indicator>\n</ng-template>\n\n<ng-template #stepContent let-obs=\"obs\">\n <div class=\"cds-loading-container\" *ngIf=\"obs.saving\">\n <cds-loading></cds-loading>\n </div>\n <div [ngClass]=\"{hidden: obs.saving}\">\n <ng-container>\n <ng-container *ngIf=\"obs.currentStepId === 'chooseProcessLinkType'\">\n <valtimo-choose-process-link-type></valtimo-choose-process-link-type>\n </ng-container>\n <ng-container\n *ngIf=\"obs.currentStepId === 'selectForm' || obs.typeOfSelectedProgressLink === 'form'\"\n >\n <valtimo-select-form></valtimo-select-form>\n <br />\n <cds-toggle\n *ngIf=\"showViewModelToggle\"\n [label]=\"'processLinkConfiguration.toggleViewModel.title' | translate\"\n [onText]=\"'processLinkConfiguration.toggleViewModel.checkboxDescription' | translate\"\n [offText]=\"'processLinkConfiguration.toggleViewModel.checkboxDescription' | translate\"\n [checked]=\"viewModelEnabled$ | async\"\n (checkedChange)=\"toggleCheckedChange($event)\"\n ></cds-toggle>\n </ng-container>\n <ng-container\n *ngIf=\"\n obs.currentStepId === 'selectFormFlow' || obs.typeOfSelectedProgressLink === 'form-flow'\n \"\n >\n <valtimo-select-form-flow></valtimo-select-form-flow>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'choosePluginConfiguration'\">\n <valtimo-select-plugin-configuration></valtimo-select-plugin-configuration>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'choosePluginAction'\">\n <valtimo-select-plugin-action></valtimo-select-plugin-action>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n obs.currentStepId === 'configurePluginAction' ||\n obs.typeOfSelectedProgressLink === 'plugin'\n \"\n >\n <valtimo-plugin-action-configuration\n [selectedPluginConfiguration$]=\"selectedPluginConfiguration$\"\n ></valtimo-plugin-action-configuration>\n </ng-container>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n obs.currentStepId === 'uiComponent' || obs.typeOfSelectedProgressLink === 'ui-component'\n \"\n >\n <valtimo-select-ui-component></valtimo-select-ui-component>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #footer let-obs=\"obs\">\n <cds-modal-footer *ngIf=\"!obs.saving\">\n <div class=\"cancel-button\">\n <button cdsButton=\"ghost\" (click)=\"closeModal()\" [disabled]=\"obs.disabled\">\n {{ 'processLinkConfiguration.cancel' | translate }}\n </button>\n </div>\n <div class=\"navigation-buttons\">\n <button\n *ngIf=\"obs.showBackButton && !obs.saving\"\n cdsButton=\"secondary\"\n (click)=\"backButtonClick()\"\n >\n {{ 'processLinkConfiguration.back' | translate }}\n </button>\n <button\n cdsButton=\"primary\"\n *ngIf=\"obs.showNextButton && !obs.saving\"\n [disabled]=\"!obs.enableNextButton\"\n (click)=\"nextButtonClick()\"\n >\n {{ 'processLinkConfiguration.next' | translate }}\n </button>\n <button\n cdsButton=\"danger--primary\"\n *ngIf=\"obs.typeOfSelectedProgressLink\"\n (click)=\"unlinkButtonClick()\"\n >\n {{ 'processLinkConfiguration.unlink' | translate }}\n </button>\n <button\n cdsButton=\"primary\"\n *ngIf=\"(obs.showSaveButton && !obs.saving) || obs.typeOfSelectedProgressLink\"\n [disabled]=\"!obs.enableSaveButton\"\n (click)=\"saveButtonClick()\"\n >\n {{ 'processLinkConfiguration.complete' | translate }}\n </button>\n </div>\n </cds-modal-footer>\n</ng-template>\n", styles: ["::ng-deep .process-link-modal-container .cds--modal-container{max-width:960px;min-height:70%}::ng-deep .process-link-modal-container .cds--modal-footer{justify-content:space-between}.cds-loading-container{position:absolute;top:50px;padding-bottom:50px;left:0;width:100%;height:calc(100% - 50px);display:flex;justify-content:center;align-items:center;background:var(--cds-layer);z-index:99;box-sizing:border-box}.navigation-buttons{justify-content:flex-end}.navigation-buttons,.cancel-button{max-width:50%;display:flex;flex-direction:row;flex-grow:1}.navigation-buttons button,.cancel-button button{min-width:50%}.cancel-button{max-width:25%}.cancel-button button{min-width:100%}.process-link-progress{width:100%;margin-top:32px;margin-bottom:40px}.hidden{visibility:hidden}\n/*!\n * Copyright 2015-2025 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: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i4.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i4.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i4.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i4.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "directive", type: i4.ModalHeaderLabel, selector: "[cdsModalHeaderLabel], [ibmModalHeaderLabel]" }, { kind: "component", type: i4.ProgressIndicator, selector: "cds-progress-indicator, ibm-progress-indicator", inputs: ["current", "steps", "translations", "orientation", "skeleton", "spacing"], outputs: ["stepSelected"] }, { kind: "directive", type: i4.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i4.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "directive", type: i2$2.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }, { kind: "component", type: i4.Toggle, selector: "cds-toggle, ibm-toggle", inputs: ["offText", "onText", "label", "size", "hideLabel", "ariaLabel", "skeleton"] }, { kind: "directive", type: i4.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "component", type: SelectPluginConfigurationComponent, selector: "valtimo-select-plugin-configuration" }, { kind: "component", type: SelectPluginActionComponent, selector: "valtimo-select-plugin-action" }, { kind: "component", type: PluginActionConfigurationComponent, selector: "valtimo-plugin-action-configuration", inputs: ["selectedPluginConfiguration$"], outputs: ["valid", "configuration"] }, { kind: "component", type: ChooseProcessLinkTypeComponent, selector: "valtimo-choose-process-link-type" }, { kind: "component", type: SelectFormComponent, selector: "valtimo-select-form" }, { kind: "component", type: SelectFormFlowComponent, selector: "valtimo-select-form-flow" }, { kind: "component", type: SelectUIComponentComponent, selector: "valtimo-select-ui-component" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
3779
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkModalComponent, deps: [{ token: ProcessLinkStateService }, { token: ProcessLinkStepService }, { token: ProcessLinkButtonService }, { token: PluginStateService }, { token: ProcessLinkStateService }, { token: i1.ConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
3780
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: ProcessLinkModalComponent, isStandalone: false, selector: "valtimo-process-link-modal", ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n class=\"process-link-modal-container\"\n *ngIf=\"{\n showModal: showModal$ | async,\n processStepName: processStepName$ | async,\n steps: steps$ | async,\n currentStepIndex: currentStepIndex$ | async,\n currentStepId: currentStepId$ | async,\n showSaveButton: showSaveButton$ | async,\n enableSaveButton: enableSaveButton$ | async,\n showBackButton: showBackButton$ | async,\n showNextButton: showNextButton$ | async,\n enableNextButton: enableNextButton$ | async,\n saving: saving$ | async,\n hideProgressIndicator: hideProgressIndicator$ | async,\n typeOfSelectedProgressLink: typeOfSelectedProcessLink$ | async,\n isEditing: isEditing$ | async,\n } as obs\"\n>\n <cds-modal valtimoCdsModal [open]=\"obs.showModal\" size=\"lg\" (close)=\"closeModal()\">\n <cds-modal-header (closeSelect)=\"closeModal()\">\n <h2 cdsModalHeaderLabel>{{ 'processLinkConfiguration.configureStep' | translate }}</h2>\n <h3 cdsModalHeaderHeading>\n {{\n 'processLinkConfiguration.modalTitle'\n | translate: {processStepName: obs.processStepName || '-'}\n }}\n </h3>\n <div class=\"process-link-progress\">\n <ng-container *ngTemplateOutlet=\"progressIndicator; context: {obs: obs}\"></ng-container>\n </div>\n </cds-modal-header>\n <section cdsModalContent [cdsLayer]=\"1\">\n <ng-container *ngTemplateOutlet=\"stepContent; context: {obs: obs}\"></ng-container>\n </section>\n <ng-template *ngTemplateOutlet=\"footer; context: {obs: obs}\"></ng-template>\n </cds-modal>\n</div>\n\n<ng-template #progressIndicator let-obs=\"obs\">\n <cds-progress-indicator\n *ngIf=\"obs.steps && !obs.hideProgressIndicator\"\n [steps]=\"obs.steps\"\n [current]=\"obs.currentStepIndex\"\n spacing=\"equal\"\n ></cds-progress-indicator>\n</ng-template>\n\n<ng-template #stepContent let-obs=\"obs\">\n <div class=\"cds-loading-container\" *ngIf=\"obs.saving\">\n <cds-loading></cds-loading>\n </div>\n <div [ngClass]=\"{hidden: obs.saving}\">\n <ng-container>\n <ng-container *ngIf=\"obs.currentStepId === 'chooseProcessLinkType'\">\n <valtimo-choose-process-link-type></valtimo-choose-process-link-type>\n </ng-container>\n <ng-container *ngIf=\"obs.currentStepId === 'selectForm'\">\n <valtimo-select-form></valtimo-select-form>\n <br />\n <cds-toggle\n *ngIf=\"showViewModelToggle\"\n [label]=\"'processLinkConfiguration.toggleViewModel.title' | translate\"\n [onText]=\"'processLinkConfiguration.toggleViewModel.checkboxDescription' | translate\"\n [offText]=\"'processLinkConfiguration.toggleViewModel.checkboxDescription' | translate\"\n [checked]=\"viewModelEnabled$ | async\"\n (checkedChange)=\"toggleCheckedChange($event)\"\n ></cds-toggle>\n </ng-container>\n <ng-container *ngIf=\"obs.currentStepId === 'selectFormFlow'\">\n <valtimo-select-form-flow></valtimo-select-form-flow>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n obs.currentStepId === 'choosePluginConfiguration' ||\n obs.currentStepId === 'choosePluginDefinition'\n \"\n >\n <valtimo-select-plugin-configuration></valtimo-select-plugin-configuration>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'selectBuildingBlock'\">\n <valtimo-select-building-block></valtimo-select-building-block>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'choosePluginAction'\">\n <valtimo-select-plugin-action></valtimo-select-plugin-action>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'configurePluginAction'\">\n <valtimo-plugin-action-configuration\n [selectedPluginConfiguration$]=\"selectedPluginConfiguration$\"\n ></valtimo-plugin-action-configuration>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'configureBuildingBlockPlugins'\">\n <valtimo-configure-building-block-plugins></valtimo-configure-building-block-plugins>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'configureBuildingBlockMappings'\">\n <valtimo-configure-building-block-mappings></valtimo-configure-building-block-mappings>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'uiComponent'\">\n <valtimo-select-ui-component></valtimo-select-ui-component>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #footer let-obs=\"obs\">\n <cds-modal-footer *ngIf=\"!obs.saving\">\n <div class=\"cancel-button\">\n <button cdsButton=\"ghost\" (click)=\"closeModal()\" [disabled]=\"obs.disabled\">\n {{ 'processLinkConfiguration.cancel' | translate }}\n </button>\n </div>\n <div class=\"footer-spacer\"></div>\n <div class=\"action-buttons\">\n <button\n cdsButton=\"danger--primary\"\n *ngIf=\"obs.isEditing\"\n (click)=\"unlinkButtonClick()\"\n >\n {{ 'processLinkConfiguration.unlink' | translate }}\n </button>\n <button\n *ngIf=\"obs.showBackButton && !obs.saving\"\n cdsButton=\"secondary\"\n (click)=\"backButtonClick()\"\n >\n {{ 'processLinkConfiguration.back' | translate }}\n </button>\n <button\n cdsButton=\"primary\"\n *ngIf=\"obs.showNextButton && !obs.saving\"\n [disabled]=\"!obs.enableNextButton\"\n (click)=\"nextButtonClick()\"\n >\n {{ 'processLinkConfiguration.next' | translate }}\n </button>\n <button\n cdsButton=\"primary\"\n *ngIf=\"obs.showSaveButton && !obs.saving\"\n [disabled]=\"!obs.enableSaveButton\"\n (click)=\"saveButtonClick()\"\n >\n {{ 'processLinkConfiguration.complete' | translate }}\n </button>\n </div>\n </cds-modal-footer>\n</ng-template>\n", styles: ["::ng-deep .process-link-modal-container .cds--modal-container{max-width:960px;min-height:70%}::ng-deep .process-link-modal-container .cds--modal-footer{display:flex;flex-direction:row}.cds-loading-container{position:absolute;top:50px;padding-bottom:50px;left:0;width:100%;height:calc(100% - 50px);display:flex;justify-content:center;align-items:center;background:var(--cds-layer);z-index:99;box-sizing:border-box}.cancel-button{width:20%;display:flex}.cancel-button button{width:100%}.footer-spacer{width:20%}.action-buttons{width:60%;display:flex;flex-direction:row;justify-content:flex-end}.action-buttons button{flex:1;max-width:33.33%}.process-link-progress{width:100%;margin-top:32px;margin-bottom:16px}.hidden{visibility:hidden}\n/*!\n * Copyright 2015-2026 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: i3$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3$2.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i3$2.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i3$2.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i3$2.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i3$2.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "directive", type: i3$2.ModalHeaderLabel, selector: "[cdsModalHeaderLabel], [ibmModalHeaderLabel]" }, { kind: "component", type: i3$2.ProgressIndicator, selector: "cds-progress-indicator, ibm-progress-indicator", inputs: ["current", "steps", "translations", "orientation", "skeleton", "spacing"], outputs: ["stepSelected"] }, { kind: "directive", type: i3$2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i3$2.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "directive", type: i2$1.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }, { kind: "component", type: i3$2.Toggle, selector: "cds-toggle, ibm-toggle", inputs: ["offText", "onText", "label", "size", "hideLabel", "ariaLabel", "skeleton"] }, { kind: "directive", type: i3$2.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "component", type: ConfigureBuildingBlockMappingsComponent, selector: "valtimo-configure-building-block-mappings" }, { kind: "component", type: SelectPluginConfigurationComponent, selector: "valtimo-select-plugin-configuration" }, { kind: "component", type: SelectPluginActionComponent, selector: "valtimo-select-plugin-action" }, { kind: "component", type: PluginActionConfigurationComponent, selector: "valtimo-plugin-action-configuration", inputs: ["selectedPluginConfiguration$"], outputs: ["valid", "configuration"] }, { kind: "component", type: ChooseProcessLinkTypeComponent, selector: "valtimo-choose-process-link-type" }, { kind: "component", type: SelectFormComponent, selector: "valtimo-select-form" }, { kind: "component", type: SelectFormFlowComponent, selector: "valtimo-select-form-flow" }, { kind: "component", type: SelectUIComponentComponent, selector: "valtimo-select-ui-component" }, { kind: "component", type: SelectBuildingBlockComponent, selector: "valtimo-select-building-block" }, { kind: "component", type: ConfigureBuildingBlockPluginsComponent, selector: "valtimo-configure-building-block-plugins" }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
2320
3781
  }
2321
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkModalComponent, decorators: [{
3782
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkModalComponent, decorators: [{
2322
3783
  type: Component,
2323
- args: [{ standalone: false, selector: 'valtimo-process-link-modal', template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n class=\"process-link-modal-container\"\n *ngIf=\"{\n showModal: showModal$ | async,\n processStepName: processStepName$ | async,\n steps: steps$ | async,\n currentStepIndex: currentStepIndex$ | async,\n currentStepId: currentStepId$ | async,\n showSaveButton: showSaveButton$ | async,\n enableSaveButton: enableSaveButton$ | async,\n showBackButton: showBackButton$ | async,\n showNextButton: showNextButton$ | async,\n enableNextButton: enableNextButton$ | async,\n saving: saving$ | async,\n hideProgressIndicator: hideProgressIndicator$ | async,\n typeOfSelectedProgressLink: typeOfSelectedProcessLink$ | async,\n } as obs\"\n>\n <cds-modal valtimoCdsModal [open]=\"obs.showModal\" size=\"lg\" (close)=\"closeModal()\">\n <cds-modal-header (closeSelect)=\"closeModal()\">\n <h2 cdsModalHeaderLabel>{{ 'processLinkConfiguration.configureStep' | translate }}</h2>\n <h3 cdsModalHeaderHeading>\n {{\n 'processLinkConfiguration.modalTitle'\n | translate: {processStepName: obs.processStepName || '-'}\n }}\n </h3>\n <div class=\"process-link-progress\" *ngIf=\"!obs.typeOfSelectedProgressLink\">\n <ng-container *ngTemplateOutlet=\"progressIndicator; context: {obs: obs}\"></ng-container>\n </div>\n </cds-modal-header>\n <section cdsModalContent [cdsLayer]=\"1\">\n <ng-container *ngTemplateOutlet=\"stepContent; context: {obs: obs}\"></ng-container>\n </section>\n <ng-template *ngTemplateOutlet=\"footer; context: {obs: obs}\"></ng-template>\n </cds-modal>\n</div>\n\n<ng-template #progressIndicator let-obs=\"obs\">\n <cds-progress-indicator\n *ngIf=\"obs.steps && !obs.hideProgressIndicator\"\n [steps]=\"obs.steps\"\n [current]=\"obs.currentStepIndex\"\n spacing=\"equal\"\n ></cds-progress-indicator>\n</ng-template>\n\n<ng-template #stepContent let-obs=\"obs\">\n <div class=\"cds-loading-container\" *ngIf=\"obs.saving\">\n <cds-loading></cds-loading>\n </div>\n <div [ngClass]=\"{hidden: obs.saving}\">\n <ng-container>\n <ng-container *ngIf=\"obs.currentStepId === 'chooseProcessLinkType'\">\n <valtimo-choose-process-link-type></valtimo-choose-process-link-type>\n </ng-container>\n <ng-container\n *ngIf=\"obs.currentStepId === 'selectForm' || obs.typeOfSelectedProgressLink === 'form'\"\n >\n <valtimo-select-form></valtimo-select-form>\n <br />\n <cds-toggle\n *ngIf=\"showViewModelToggle\"\n [label]=\"'processLinkConfiguration.toggleViewModel.title' | translate\"\n [onText]=\"'processLinkConfiguration.toggleViewModel.checkboxDescription' | translate\"\n [offText]=\"'processLinkConfiguration.toggleViewModel.checkboxDescription' | translate\"\n [checked]=\"viewModelEnabled$ | async\"\n (checkedChange)=\"toggleCheckedChange($event)\"\n ></cds-toggle>\n </ng-container>\n <ng-container\n *ngIf=\"\n obs.currentStepId === 'selectFormFlow' || obs.typeOfSelectedProgressLink === 'form-flow'\n \"\n >\n <valtimo-select-form-flow></valtimo-select-form-flow>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'choosePluginConfiguration'\">\n <valtimo-select-plugin-configuration></valtimo-select-plugin-configuration>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'choosePluginAction'\">\n <valtimo-select-plugin-action></valtimo-select-plugin-action>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n obs.currentStepId === 'configurePluginAction' ||\n obs.typeOfSelectedProgressLink === 'plugin'\n \"\n >\n <valtimo-plugin-action-configuration\n [selectedPluginConfiguration$]=\"selectedPluginConfiguration$\"\n ></valtimo-plugin-action-configuration>\n </ng-container>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n obs.currentStepId === 'uiComponent' || obs.typeOfSelectedProgressLink === 'ui-component'\n \"\n >\n <valtimo-select-ui-component></valtimo-select-ui-component>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #footer let-obs=\"obs\">\n <cds-modal-footer *ngIf=\"!obs.saving\">\n <div class=\"cancel-button\">\n <button cdsButton=\"ghost\" (click)=\"closeModal()\" [disabled]=\"obs.disabled\">\n {{ 'processLinkConfiguration.cancel' | translate }}\n </button>\n </div>\n <div class=\"navigation-buttons\">\n <button\n *ngIf=\"obs.showBackButton && !obs.saving\"\n cdsButton=\"secondary\"\n (click)=\"backButtonClick()\"\n >\n {{ 'processLinkConfiguration.back' | translate }}\n </button>\n <button\n cdsButton=\"primary\"\n *ngIf=\"obs.showNextButton && !obs.saving\"\n [disabled]=\"!obs.enableNextButton\"\n (click)=\"nextButtonClick()\"\n >\n {{ 'processLinkConfiguration.next' | translate }}\n </button>\n <button\n cdsButton=\"danger--primary\"\n *ngIf=\"obs.typeOfSelectedProgressLink\"\n (click)=\"unlinkButtonClick()\"\n >\n {{ 'processLinkConfiguration.unlink' | translate }}\n </button>\n <button\n cdsButton=\"primary\"\n *ngIf=\"(obs.showSaveButton && !obs.saving) || obs.typeOfSelectedProgressLink\"\n [disabled]=\"!obs.enableSaveButton\"\n (click)=\"saveButtonClick()\"\n >\n {{ 'processLinkConfiguration.complete' | translate }}\n </button>\n </div>\n </cds-modal-footer>\n</ng-template>\n", styles: ["::ng-deep .process-link-modal-container .cds--modal-container{max-width:960px;min-height:70%}::ng-deep .process-link-modal-container .cds--modal-footer{justify-content:space-between}.cds-loading-container{position:absolute;top:50px;padding-bottom:50px;left:0;width:100%;height:calc(100% - 50px);display:flex;justify-content:center;align-items:center;background:var(--cds-layer);z-index:99;box-sizing:border-box}.navigation-buttons{justify-content:flex-end}.navigation-buttons,.cancel-button{max-width:50%;display:flex;flex-direction:row;flex-grow:1}.navigation-buttons button,.cancel-button button{min-width:50%}.cancel-button{max-width:25%}.cancel-button button{min-width:100%}.process-link-progress{width:100%;margin-top:32px;margin-bottom:40px}.hidden{visibility:hidden}\n/*!\n * Copyright 2015-2025 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"] }]
2324
- }], ctorParameters: () => [{ type: ProcessLinkStateService }, { type: ProcessLinkStepService }, { type: ProcessLinkButtonService }, { type: PluginStateService }, { type: ProcessLinkService }, { type: ProcessLinkStateService }, { type: i2.ConfigService }] });
3784
+ args: [{ standalone: false, selector: 'valtimo-process-link-modal', template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n class=\"process-link-modal-container\"\n *ngIf=\"{\n showModal: showModal$ | async,\n processStepName: processStepName$ | async,\n steps: steps$ | async,\n currentStepIndex: currentStepIndex$ | async,\n currentStepId: currentStepId$ | async,\n showSaveButton: showSaveButton$ | async,\n enableSaveButton: enableSaveButton$ | async,\n showBackButton: showBackButton$ | async,\n showNextButton: showNextButton$ | async,\n enableNextButton: enableNextButton$ | async,\n saving: saving$ | async,\n hideProgressIndicator: hideProgressIndicator$ | async,\n typeOfSelectedProgressLink: typeOfSelectedProcessLink$ | async,\n isEditing: isEditing$ | async,\n } as obs\"\n>\n <cds-modal valtimoCdsModal [open]=\"obs.showModal\" size=\"lg\" (close)=\"closeModal()\">\n <cds-modal-header (closeSelect)=\"closeModal()\">\n <h2 cdsModalHeaderLabel>{{ 'processLinkConfiguration.configureStep' | translate }}</h2>\n <h3 cdsModalHeaderHeading>\n {{\n 'processLinkConfiguration.modalTitle'\n | translate: {processStepName: obs.processStepName || '-'}\n }}\n </h3>\n <div class=\"process-link-progress\">\n <ng-container *ngTemplateOutlet=\"progressIndicator; context: {obs: obs}\"></ng-container>\n </div>\n </cds-modal-header>\n <section cdsModalContent [cdsLayer]=\"1\">\n <ng-container *ngTemplateOutlet=\"stepContent; context: {obs: obs}\"></ng-container>\n </section>\n <ng-template *ngTemplateOutlet=\"footer; context: {obs: obs}\"></ng-template>\n </cds-modal>\n</div>\n\n<ng-template #progressIndicator let-obs=\"obs\">\n <cds-progress-indicator\n *ngIf=\"obs.steps && !obs.hideProgressIndicator\"\n [steps]=\"obs.steps\"\n [current]=\"obs.currentStepIndex\"\n spacing=\"equal\"\n ></cds-progress-indicator>\n</ng-template>\n\n<ng-template #stepContent let-obs=\"obs\">\n <div class=\"cds-loading-container\" *ngIf=\"obs.saving\">\n <cds-loading></cds-loading>\n </div>\n <div [ngClass]=\"{hidden: obs.saving}\">\n <ng-container>\n <ng-container *ngIf=\"obs.currentStepId === 'chooseProcessLinkType'\">\n <valtimo-choose-process-link-type></valtimo-choose-process-link-type>\n </ng-container>\n <ng-container *ngIf=\"obs.currentStepId === 'selectForm'\">\n <valtimo-select-form></valtimo-select-form>\n <br />\n <cds-toggle\n *ngIf=\"showViewModelToggle\"\n [label]=\"'processLinkConfiguration.toggleViewModel.title' | translate\"\n [onText]=\"'processLinkConfiguration.toggleViewModel.checkboxDescription' | translate\"\n [offText]=\"'processLinkConfiguration.toggleViewModel.checkboxDescription' | translate\"\n [checked]=\"viewModelEnabled$ | async\"\n (checkedChange)=\"toggleCheckedChange($event)\"\n ></cds-toggle>\n </ng-container>\n <ng-container *ngIf=\"obs.currentStepId === 'selectFormFlow'\">\n <valtimo-select-form-flow></valtimo-select-form-flow>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n obs.currentStepId === 'choosePluginConfiguration' ||\n obs.currentStepId === 'choosePluginDefinition'\n \"\n >\n <valtimo-select-plugin-configuration></valtimo-select-plugin-configuration>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'selectBuildingBlock'\">\n <valtimo-select-building-block></valtimo-select-building-block>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'choosePluginAction'\">\n <valtimo-select-plugin-action></valtimo-select-plugin-action>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'configurePluginAction'\">\n <valtimo-plugin-action-configuration\n [selectedPluginConfiguration$]=\"selectedPluginConfiguration$\"\n ></valtimo-plugin-action-configuration>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'configureBuildingBlockPlugins'\">\n <valtimo-configure-building-block-plugins></valtimo-configure-building-block-plugins>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'configureBuildingBlockMappings'\">\n <valtimo-configure-building-block-mappings></valtimo-configure-building-block-mappings>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'uiComponent'\">\n <valtimo-select-ui-component></valtimo-select-ui-component>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #footer let-obs=\"obs\">\n <cds-modal-footer *ngIf=\"!obs.saving\">\n <div class=\"cancel-button\">\n <button cdsButton=\"ghost\" (click)=\"closeModal()\" [disabled]=\"obs.disabled\">\n {{ 'processLinkConfiguration.cancel' | translate }}\n </button>\n </div>\n <div class=\"footer-spacer\"></div>\n <div class=\"action-buttons\">\n <button\n cdsButton=\"danger--primary\"\n *ngIf=\"obs.isEditing\"\n (click)=\"unlinkButtonClick()\"\n >\n {{ 'processLinkConfiguration.unlink' | translate }}\n </button>\n <button\n *ngIf=\"obs.showBackButton && !obs.saving\"\n cdsButton=\"secondary\"\n (click)=\"backButtonClick()\"\n >\n {{ 'processLinkConfiguration.back' | translate }}\n </button>\n <button\n cdsButton=\"primary\"\n *ngIf=\"obs.showNextButton && !obs.saving\"\n [disabled]=\"!obs.enableNextButton\"\n (click)=\"nextButtonClick()\"\n >\n {{ 'processLinkConfiguration.next' | translate }}\n </button>\n <button\n cdsButton=\"primary\"\n *ngIf=\"obs.showSaveButton && !obs.saving\"\n [disabled]=\"!obs.enableSaveButton\"\n (click)=\"saveButtonClick()\"\n >\n {{ 'processLinkConfiguration.complete' | translate }}\n </button>\n </div>\n </cds-modal-footer>\n</ng-template>\n", styles: ["::ng-deep .process-link-modal-container .cds--modal-container{max-width:960px;min-height:70%}::ng-deep .process-link-modal-container .cds--modal-footer{display:flex;flex-direction:row}.cds-loading-container{position:absolute;top:50px;padding-bottom:50px;left:0;width:100%;height:calc(100% - 50px);display:flex;justify-content:center;align-items:center;background:var(--cds-layer);z-index:99;box-sizing:border-box}.cancel-button{width:20%;display:flex}.cancel-button button{width:100%}.footer-spacer{width:20%}.action-buttons{width:60%;display:flex;flex-direction:row;justify-content:flex-end}.action-buttons button{flex:1;max-width:33.33%}.process-link-progress{width:100%;margin-top:32px;margin-bottom:16px}.hidden{visibility:hidden}\n/*!\n * Copyright 2015-2026 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"] }]
3785
+ }], ctorParameters: () => [{ type: ProcessLinkStateService }, { type: ProcessLinkStepService }, { type: ProcessLinkButtonService }, { type: PluginStateService }, { type: ProcessLinkStateService }, { type: i1.ConfigService }] });
2325
3786
 
2326
3787
  /*
2327
3788
  * Copyright 2015-2025 Ritense BV, the Netherlands.
@@ -2376,13 +3837,13 @@ class ProcessLinkComponent {
2376
3837
  .subscribe();
2377
3838
  }
2378
3839
  }
2379
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkComponent, deps: [{ token: ProcessLinkService }, { token: ProcessLinkStateService }, { token: i2$2.ModalService }], target: i0.ɵɵFactoryTarget.Component }); }
2380
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: ProcessLinkComponent, isStandalone: false, selector: "valtimo-process-link", providers: [ProcessLinkStateService, ProcessLinkStepService, ProcessLinkButtonService], ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"main-content\">\n <div class=\"container-fluid\">\n <valtimo-form-link-process-diagram\n (bpmnElementModalOpen)=\"openModal($event)\"\n ></valtimo-form-link-process-diagram>\n </div>\n</div>\n\n<valtimo-process-link-modal></valtimo-process-link-modal>\n", styles: ["/*!\n * Copyright 2015-2025 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: "component", type: FormLinkProcessDiagramComponent, selector: "valtimo-form-link-process-diagram", outputs: ["bpmnElementModalOpen", "bpmnElementModalClose"] }, { kind: "component", type: ProcessLinkModalComponent, selector: "valtimo-process-link-modal" }] }); }
3840
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkComponent, deps: [{ token: ProcessLinkService }, { token: ProcessLinkStateService }, { token: i2$1.ModalService }], target: i0.ɵɵFactoryTarget.Component }); }
3841
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: ProcessLinkComponent, isStandalone: false, selector: "valtimo-process-link", providers: [ProcessLinkStateService, ProcessLinkStepService, ProcessLinkButtonService], ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"main-content\">\n <div class=\"container-fluid\">\n <valtimo-form-link-process-diagram\n (bpmnElementModalOpen)=\"openModal($event)\"\n ></valtimo-form-link-process-diagram>\n </div>\n</div>\n\n<valtimo-process-link-modal></valtimo-process-link-modal>\n", styles: ["/*!\n * Copyright 2015-2025 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: "component", type: FormLinkProcessDiagramComponent, selector: "valtimo-form-link-process-diagram", outputs: ["bpmnElementModalOpen", "bpmnElementModalClose"] }, { kind: "component", type: ProcessLinkModalComponent, selector: "valtimo-process-link-modal" }] }); }
2381
3842
  }
2382
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkComponent, decorators: [{
3843
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkComponent, decorators: [{
2383
3844
  type: Component,
2384
3845
  args: [{ standalone: false, selector: 'valtimo-process-link', providers: [ProcessLinkStateService, ProcessLinkStepService, ProcessLinkButtonService], template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"main-content\">\n <div class=\"container-fluid\">\n <valtimo-form-link-process-diagram\n (bpmnElementModalOpen)=\"openModal($event)\"\n ></valtimo-form-link-process-diagram>\n </div>\n</div>\n\n<valtimo-process-link-modal></valtimo-process-link-modal>\n", styles: ["/*!\n * Copyright 2015-2025 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"] }]
2385
- }], ctorParameters: () => [{ type: ProcessLinkService }, { type: ProcessLinkStateService }, { type: i2$2.ModalService }] });
3846
+ }], ctorParameters: () => [{ type: ProcessLinkService }, { type: ProcessLinkStateService }, { type: i2$1.ModalService }] });
2386
3847
 
2387
3848
  /*
2388
3849
  * Copyright 2015-2025 Ritense BV, the Netherlands.
@@ -2408,11 +3869,11 @@ const routes = [
2408
3869
  },
2409
3870
  ];
2410
3871
  class ProcessLinkRoutingModule {
2411
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2412
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkRoutingModule, imports: [i3$1.RouterModule], exports: [RouterModule] }); }
2413
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkRoutingModule, imports: [RouterModule.forChild(routes), RouterModule] }); }
3872
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
3873
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkRoutingModule, imports: [i3$3.RouterModule], exports: [RouterModule] }); }
3874
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkRoutingModule, imports: [RouterModule.forChild(routes), RouterModule] }); }
2414
3875
  }
2415
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkRoutingModule, decorators: [{
3876
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkRoutingModule, decorators: [{
2416
3877
  type: NgModule,
2417
3878
  args: [{
2418
3879
  imports: [RouterModule.forChild(routes)],
@@ -2534,10 +3995,10 @@ class FormFlowConfigurationContainerComponent {
2534
3995
  }
2535
3996
  }));
2536
3997
  }
2537
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFlowConfigurationContainerComponent, deps: [{ token: FormFlowComponentService }], target: i0.ɵɵFactoryTarget.Component }); }
2538
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: FormFlowConfigurationContainerComponent, isStandalone: false, selector: "valtimo-form-flow-configuration-container", inputs: { disabled: "disabled", componentId: "componentId", formFlowInstanceId: "formFlowInstanceId" }, outputs: { changeEvent: "changeEvent", submitEvent: "submitEvent" }, viewQueries: [{ propertyName: "_dynamicContainer", first: true, predicate: ["formFlowConfigurationComponent"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 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-template #formFlowConfigurationComponent></ng-template>\n" }); }
3998
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormFlowConfigurationContainerComponent, deps: [{ token: FormFlowComponentService }], target: i0.ɵɵFactoryTarget.Component }); }
3999
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: FormFlowConfigurationContainerComponent, isStandalone: false, selector: "valtimo-form-flow-configuration-container", inputs: { disabled: "disabled", componentId: "componentId", formFlowInstanceId: "formFlowInstanceId" }, outputs: { changeEvent: "changeEvent", submitEvent: "submitEvent" }, viewQueries: [{ propertyName: "_dynamicContainer", first: true, predicate: ["formFlowConfigurationComponent"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 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-template #formFlowConfigurationComponent></ng-template>\n" }); }
2539
4000
  }
2540
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFlowConfigurationContainerComponent, decorators: [{
4001
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormFlowConfigurationContainerComponent, decorators: [{
2541
4002
  type: Component,
2542
4003
  args: [{ standalone: false, selector: 'valtimo-form-flow-configuration-container', template: "<!--\n ~ Copyright 2015-2025 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-template #formFlowConfigurationComponent></ng-template>\n" }]
2543
4004
  }], ctorParameters: () => [{ type: FormFlowComponentService }], propDecorators: { _dynamicContainer: [{
@@ -2668,7 +4129,7 @@ class FormFlowComponent {
2668
4129
  this.formFlowService.getBreadcrumbs(this.formFlowInstanceId$.getValue()),
2669
4130
  this.translateService.stream('key'),
2670
4131
  ])
2671
- .pipe(map(([breadcrumbs]) => breadcrumbs))
4132
+ .pipe(map$1(([breadcrumbs]) => breadcrumbs))
2672
4133
  .subscribe(breadcrumbs => {
2673
4134
  const classElement = document.getElementsByClassName('cds--progress-step--current');
2674
4135
  this.currentStepIndex$.next(breadcrumbs.currentStepIndex);
@@ -2730,13 +4191,13 @@ class FormFlowComponent {
2730
4191
  enable() {
2731
4192
  this.disabled$.next(false);
2732
4193
  }
2733
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFlowComponent, deps: [{ token: FormFlowService }, { token: i2$2.ValtimoModalService }, { token: i2$1.TranslateService }, { token: i2.ConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
2734
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: FormFlowComponent, isStandalone: false, selector: "valtimo-form-flow", inputs: { formIoFormData: "formIoFormData", formFlowInstanceId: "formFlowInstanceId" }, outputs: { formFlowComplete: "formFlowComplete", formFlowChange: "formFlowChange" }, viewQueries: [{ propertyName: "form", first: true, predicate: ["form"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n *ngIf=\"{\n breadcrumbs: breadcrumbs$ | async,\n currentStepIndex: currentStepIndex$ | async,\n enableFormFlowBreadcrumbs: enableFormFlowBreadcrumbs$ | async,\n formFlowInstanceId: formFlowInstanceId$ | async,\n } as obs\"\n>\n <div *ngIf=\"formDefinition && (formFlowStepType$ | async) === 'form'\">\n <div *ngIf=\"obs.enableFormFlowBreadcrumbs\" class=\"form-flow__progress-bar-indicator\">\n <cds-progress-indicator\n [spacing]=\"'equal'\"\n [skeleton]=\"obs.breadcrumbs.length === 0\"\n [current]=\"obs.currentStepIndex\"\n [steps]=\"obs.breadcrumbs\"\n (stepSelected)=\"onStepSelected($event)\"\n >\n </cds-progress-indicator>\n </div>\n\n <valtimo-form-io\n #form\n [form]=\"formDefinition\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n (event)=\"onEvent($event)\"\n [options]=\"formioOptions\"\n ></valtimo-form-io>\n </div>\n\n <div *ngIf=\"(formFlowStepType$ | async) === 'custom-component'\">\n <valtimo-form-flow-configuration-container\n [componentId]=\"FormFlowCustomComponentId$ | async\"\n [formFlowInstanceId]=\"obs.formFlowInstanceId\"\n [disabled]=\"disabled$ | async\"\n (submitEvent)=\"onSubmit($event)\"\n (changeEvent)=\"onChange($event)\"\n >\n </valtimo-form-flow-configuration-container>\n </div>\n</div>\n", styles: [".form-flow__progress-bar-indicator{height:64px;overflow-x:auto;-ms-overflow-style:none;scrollbar-width:none}.form-flow__progress-bar-indicator ::-webkit-scrollbar{display:none}\n/*!\n * Copyright 2015-2025 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: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.ProgressIndicator, selector: "cds-progress-indicator, ibm-progress-indicator", inputs: ["current", "steps", "translations", "orientation", "skeleton", "spacing"], outputs: ["stepSelected"] }, { kind: "component", type: i2$2.FormioComponent, selector: "valtimo-form-io", inputs: ["options", "submission", "form", "readOnly", "formRefresh$"], outputs: ["submit", "change", "event"] }, { kind: "component", type: FormFlowConfigurationContainerComponent, selector: "valtimo-form-flow-configuration-container", inputs: ["disabled", "componentId", "formFlowInstanceId"], outputs: ["changeEvent", "submitEvent"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
4194
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormFlowComponent, deps: [{ token: FormFlowService }, { token: i2$1.ValtimoModalService }, { token: i3.TranslateService }, { token: i1.ConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
4195
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: FormFlowComponent, isStandalone: false, selector: "valtimo-form-flow", inputs: { formIoFormData: "formIoFormData", formFlowInstanceId: "formFlowInstanceId" }, outputs: { formFlowComplete: "formFlowComplete", formFlowChange: "formFlowChange" }, viewQueries: [{ propertyName: "form", first: true, predicate: ["form"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n *ngIf=\"{\n breadcrumbs: breadcrumbs$ | async,\n currentStepIndex: currentStepIndex$ | async,\n enableFormFlowBreadcrumbs: enableFormFlowBreadcrumbs$ | async,\n formFlowInstanceId: formFlowInstanceId$ | async,\n } as obs\"\n>\n <div *ngIf=\"formDefinition && (formFlowStepType$ | async) === 'form'\">\n <div *ngIf=\"obs.enableFormFlowBreadcrumbs\" class=\"form-flow__progress-bar-indicator\">\n <cds-progress-indicator\n [spacing]=\"'equal'\"\n [skeleton]=\"obs.breadcrumbs.length === 0\"\n [current]=\"obs.currentStepIndex\"\n [steps]=\"obs.breadcrumbs\"\n (stepSelected)=\"onStepSelected($event)\"\n >\n </cds-progress-indicator>\n </div>\n\n <valtimo-form-io\n #form\n [form]=\"formDefinition\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n (event)=\"onEvent($event)\"\n [options]=\"formioOptions\"\n ></valtimo-form-io>\n </div>\n\n <div *ngIf=\"(formFlowStepType$ | async) === 'custom-component'\">\n <valtimo-form-flow-configuration-container\n [componentId]=\"FormFlowCustomComponentId$ | async\"\n [formFlowInstanceId]=\"obs.formFlowInstanceId\"\n [disabled]=\"disabled$ | async\"\n (submitEvent)=\"onSubmit($event)\"\n (changeEvent)=\"onChange($event)\"\n >\n </valtimo-form-flow-configuration-container>\n </div>\n</div>\n", styles: [".form-flow__progress-bar-indicator{height:64px;overflow-x:auto;-ms-overflow-style:none;scrollbar-width:none}.form-flow__progress-bar-indicator ::-webkit-scrollbar{display:none}\n/*!\n * Copyright 2015-2025 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: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$2.ProgressIndicator, selector: "cds-progress-indicator, ibm-progress-indicator", inputs: ["current", "steps", "translations", "orientation", "skeleton", "spacing"], outputs: ["stepSelected"] }, { kind: "component", type: i2$1.FormioComponent, selector: "valtimo-form-io", inputs: ["options", "submission", "form", "readOnly", "formRefresh$"], outputs: ["submit", "change", "event"] }, { kind: "component", type: FormFlowConfigurationContainerComponent, selector: "valtimo-form-flow-configuration-container", inputs: ["disabled", "componentId", "formFlowInstanceId"], outputs: ["changeEvent", "submitEvent"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }] }); }
2735
4196
  }
2736
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFlowComponent, decorators: [{
4197
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormFlowComponent, decorators: [{
2737
4198
  type: Component,
2738
4199
  args: [{ standalone: false, selector: 'valtimo-form-flow', template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n *ngIf=\"{\n breadcrumbs: breadcrumbs$ | async,\n currentStepIndex: currentStepIndex$ | async,\n enableFormFlowBreadcrumbs: enableFormFlowBreadcrumbs$ | async,\n formFlowInstanceId: formFlowInstanceId$ | async,\n } as obs\"\n>\n <div *ngIf=\"formDefinition && (formFlowStepType$ | async) === 'form'\">\n <div *ngIf=\"obs.enableFormFlowBreadcrumbs\" class=\"form-flow__progress-bar-indicator\">\n <cds-progress-indicator\n [spacing]=\"'equal'\"\n [skeleton]=\"obs.breadcrumbs.length === 0\"\n [current]=\"obs.currentStepIndex\"\n [steps]=\"obs.breadcrumbs\"\n (stepSelected)=\"onStepSelected($event)\"\n >\n </cds-progress-indicator>\n </div>\n\n <valtimo-form-io\n #form\n [form]=\"formDefinition\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n (event)=\"onEvent($event)\"\n [options]=\"formioOptions\"\n ></valtimo-form-io>\n </div>\n\n <div *ngIf=\"(formFlowStepType$ | async) === 'custom-component'\">\n <valtimo-form-flow-configuration-container\n [componentId]=\"FormFlowCustomComponentId$ | async\"\n [formFlowInstanceId]=\"obs.formFlowInstanceId\"\n [disabled]=\"disabled$ | async\"\n (submitEvent)=\"onSubmit($event)\"\n (changeEvent)=\"onChange($event)\"\n >\n </valtimo-form-flow-configuration-container>\n </div>\n</div>\n", styles: [".form-flow__progress-bar-indicator{height:64px;overflow-x:auto;-ms-overflow-style:none;scrollbar-width:none}.form-flow__progress-bar-indicator ::-webkit-scrollbar{display:none}\n/*!\n * Copyright 2015-2025 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"] }]
2739
- }], ctorParameters: () => [{ type: FormFlowService }, { type: i2$2.ValtimoModalService }, { type: i2$1.TranslateService }, { type: i2.ConfigService }], propDecorators: { form: [{
4200
+ }], ctorParameters: () => [{ type: FormFlowService }, { type: i2$1.ValtimoModalService }, { type: i3.TranslateService }, { type: i1.ConfigService }], propDecorators: { form: [{
2740
4201
  type: ViewChild,
2741
4202
  args: ['form']
2742
4203
  }], formIoFormData: [{
@@ -2797,8 +4258,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
2797
4258
  * limitations under the License.
2798
4259
  */
2799
4260
  class ProcessLinkModule {
2800
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2801
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkModule, declarations: [ProcessLinkComponent,
4261
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
4262
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkModule, declarations: [ProcessLinkComponent,
2802
4263
  FormLinkProcessDiagramComponent,
2803
4264
  SelectPluginConfigurationComponent,
2804
4265
  SelectPluginActionComponent,
@@ -2811,7 +4272,9 @@ class ProcessLinkModule {
2811
4272
  FormFlowConfigurationContainerComponent,
2812
4273
  FormDisplayConfigurationComponent,
2813
4274
  SelectUIComponentComponent,
2814
- ImportPluginConfigurationComponent], imports: [CommonModule,
4275
+ ImportPluginConfigurationComponent,
4276
+ SelectBuildingBlockComponent,
4277
+ ConfigureBuildingBlockPluginsComponent], imports: [CommonModule,
2815
4278
  ProcessLinkRoutingModule,
2816
4279
  FormsModule,
2817
4280
  ReactiveFormsModule,
@@ -2837,7 +4300,7 @@ class ProcessLinkModule {
2837
4300
  StructuredListModule,
2838
4301
  TilesModule,
2839
4302
  RenderInPageHeaderDirective,
2840
- SelectModule,
4303
+ SelectModule$1,
2841
4304
  ToggleModule,
2842
4305
  CarbonMultiInputModule,
2843
4306
  LayerModule,
@@ -2847,13 +4310,18 @@ class ProcessLinkModule {
2847
4310
  LayerModule,
2848
4311
  ToggletipModule,
2849
4312
  RemoveClassnamesDirective,
2850
- ReactiveFormsModule], exports: [ProcessLinkComponent,
4313
+ ReactiveFormsModule,
4314
+ InputLabelModule,
4315
+ RadioModule,
4316
+ ValuePathSelectorComponent,
4317
+ ConfigureBuildingBlockMappingsComponent,
4318
+ NotificationModule], exports: [ProcessLinkComponent,
2851
4319
  SelectPluginConfigurationComponent,
2852
4320
  SelectPluginActionComponent,
2853
4321
  PluginActionConfigurationComponent,
2854
4322
  ProcessLinkModalComponent,
2855
4323
  FormFlowComponent] }); }
2856
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkModule, providers: [UrlValidatorService, UrlResolverService], imports: [CommonModule,
4324
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkModule, providers: [UrlValidatorService, UrlResolverService], imports: [CommonModule,
2857
4325
  ProcessLinkRoutingModule,
2858
4326
  FormsModule,
2859
4327
  ReactiveFormsModule,
@@ -2877,7 +4345,7 @@ class ProcessLinkModule {
2877
4345
  FormIoModule,
2878
4346
  StructuredListModule,
2879
4347
  TilesModule,
2880
- SelectModule,
4348
+ SelectModule$1,
2881
4349
  ToggleModule,
2882
4350
  CarbonMultiInputModule,
2883
4351
  LayerModule,
@@ -2886,9 +4354,14 @@ class ProcessLinkModule {
2886
4354
  TranslateModule,
2887
4355
  LayerModule,
2888
4356
  ToggletipModule,
2889
- ReactiveFormsModule] }); }
4357
+ ReactiveFormsModule,
4358
+ InputLabelModule,
4359
+ RadioModule,
4360
+ ValuePathSelectorComponent,
4361
+ ConfigureBuildingBlockMappingsComponent,
4362
+ NotificationModule] }); }
2890
4363
  }
2891
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkModule, decorators: [{
4364
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkModule, decorators: [{
2892
4365
  type: NgModule,
2893
4366
  args: [{
2894
4367
  declarations: [
@@ -2906,6 +4379,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
2906
4379
  FormDisplayConfigurationComponent,
2907
4380
  SelectUIComponentComponent,
2908
4381
  ImportPluginConfigurationComponent,
4382
+ SelectBuildingBlockComponent,
4383
+ ConfigureBuildingBlockPluginsComponent,
2909
4384
  ],
2910
4385
  imports: [
2911
4386
  CommonModule,
@@ -2934,7 +4409,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
2934
4409
  StructuredListModule,
2935
4410
  TilesModule,
2936
4411
  RenderInPageHeaderDirective,
2937
- SelectModule,
4412
+ SelectModule$1,
2938
4413
  ToggleModule,
2939
4414
  CarbonMultiInputModule,
2940
4415
  LayerModule,
@@ -2945,6 +4420,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
2945
4420
  ToggletipModule,
2946
4421
  RemoveClassnamesDirective,
2947
4422
  ReactiveFormsModule,
4423
+ InputLabelModule,
4424
+ RadioModule,
4425
+ ValuePathSelectorComponent,
4426
+ ConfigureBuildingBlockMappingsComponent,
4427
+ NotificationModule,
2948
4428
  ],
2949
4429
  exports: [
2950
4430
  ProcessLinkComponent,
@@ -2958,6 +4438,102 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
2958
4438
  }]
2959
4439
  }] });
2960
4440
 
4441
+ /*
4442
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
4443
+ *
4444
+ * Licensed under EUPL, Version 1.2 (the "License");
4445
+ * you may not use this file except in compliance with the License.
4446
+ * You may obtain a copy of the License at
4447
+ *
4448
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
4449
+ *
4450
+ * Unless required by applicable law or agreed to in writing, software
4451
+ * distributed under the License is distributed on an "AS IS" basis,
4452
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4453
+ * See the License for the specific language governing permissions and
4454
+ * limitations under the License.
4455
+ */
4456
+
4457
+ /*
4458
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
4459
+ *
4460
+ * Licensed under EUPL, Version 1.2 (the "License");
4461
+ * you may not use this file except in compliance with the License.
4462
+ * You may obtain a copy of the License at
4463
+ *
4464
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
4465
+ *
4466
+ * Unless required by applicable law or agreed to in writing, software
4467
+ * distributed under the License is distributed on an "AS IS" basis,
4468
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4469
+ * See the License for the specific language governing permissions and
4470
+ * limitations under the License.
4471
+ */
4472
+
4473
+ /*
4474
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
4475
+ *
4476
+ * Licensed under EUPL, Version 1.2 (the "License");
4477
+ * you may not use this file except in compliance with the License.
4478
+ * You may obtain a copy of the License at
4479
+ *
4480
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
4481
+ *
4482
+ * Unless required by applicable law or agreed to in writing, software
4483
+ * distributed under the License is distributed on an "AS IS" basis,
4484
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4485
+ * See the License for the specific language governing permissions and
4486
+ * limitations under the License.
4487
+ */
4488
+
4489
+ /*
4490
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
4491
+ *
4492
+ * Licensed under EUPL, Version 1.2 (the "License");
4493
+ * you may not use this file except in compliance with the License.
4494
+ * You may obtain a copy of the License at
4495
+ *
4496
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
4497
+ *
4498
+ * Unless required by applicable law or agreed to in writing, software
4499
+ * distributed under the License is distributed on an "AS IS" BASIS,
4500
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4501
+ * See the License for the specific language governing permissions and
4502
+ * limitations under the License.
4503
+ */
4504
+
4505
+ /*
4506
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
4507
+ *
4508
+ * Licensed under EUPL, Version 1.2 (the "License");
4509
+ * you may not use this file except in compliance with the License.
4510
+ * You may obtain a copy of the License at
4511
+ *
4512
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
4513
+ *
4514
+ * Unless required by applicable law or agreed to in writing, software
4515
+ * distributed under the License is distributed on an "AS IS" basis,
4516
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4517
+ * See the License for the specific language governing permissions and
4518
+ * limitations under the License.
4519
+ */
4520
+
4521
+ /*
4522
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
4523
+ *
4524
+ * Licensed under EUPL, Version 1.2 (the "License");
4525
+ * you may not use this file except in compliance with the License.
4526
+ * You may obtain a copy of the License at
4527
+ *
4528
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
4529
+ *
4530
+ * Unless required by applicable law or agreed to in writing, software
4531
+ * distributed under the License is distributed on an "AS IS" basis,
4532
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4533
+ * See the License for the specific language governing permissions and
4534
+ * limitations under the License.
4535
+ */
4536
+
2961
4537
  /*
2962
4538
  * Copyright 2015-2025 Ritense BV, the Netherlands.
2963
4539
  *
@@ -2981,5 +4557,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
2981
4557
  * Generated bundle index. Do not edit.
2982
4558
  */
2983
4559
 
2984
- export { ChooseProcessLinkTypeComponent, FORM_CUSTOM_COMPONENT_TOKEN, FORM_FLOW_COMPONENT_TOKEN, FormFlowComponent, FormFlowComponentService, FormFlowService, PluginActionConfigurationComponent, PluginStateService, ProcessLinkButtonService, ProcessLinkComponent, ProcessLinkEditMode, ProcessLinkModalComponent, ProcessLinkModule, ProcessLinkService, ProcessLinkStateService, ProcessLinkStepService, SelectPluginActionComponent, SelectPluginConfigurationComponent, UrlResolverService, UrlValidatorService, formSizeToCarbonModalSizeMap };
4560
+ export { BuildingBlockStateService, ChooseProcessLinkTypeComponent, FORM_CUSTOM_COMPONENT_TOKEN, FORM_FLOW_COMPONENT_TOKEN, FormFlowComponent, FormFlowComponentService, FormFlowService, PluginActionConfigurationComponent, PluginStateService, ProcessLinkBuildingBlockApiService, ProcessLinkButtonService, ProcessLinkComponent, ProcessLinkModalComponent, ProcessLinkModule, ProcessLinkService, ProcessLinkStateService, ProcessLinkStepService, SelectPluginActionComponent, SelectPluginConfigurationComponent, UNSUPPORTED_PROCESS_LINK_TYPES_IN_BUILDING_BLOCK, UrlResolverService, UrlValidatorService, formSizeToCarbonModalSizeMap };
2985
4561
  //# sourceMappingURL=valtimo-process-link.mjs.map