@valtimo/building-block-management 13.43.0 → 13.44.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 (36) hide show
  1. package/fesm2022/valtimo-building-block-management.mjs +191 -27
  2. package/fesm2022/valtimo-building-block-management.mjs.map +1 -1
  3. package/lib/building-block-management-routing.d.ts.map +1 -1
  4. package/lib/components/building-block-management-artwork/building-block-management-artwork.component.d.ts +6 -0
  5. package/lib/components/building-block-management-artwork/building-block-management-artwork.component.d.ts.map +1 -1
  6. package/lib/components/building-block-management-create-modal/building-block-management-create-modal.component.d.ts +7 -0
  7. package/lib/components/building-block-management-create-modal/building-block-management-create-modal.component.d.ts.map +1 -1
  8. package/lib/components/building-block-management-detail/building-block-management-detail.component.d.ts +3 -0
  9. package/lib/components/building-block-management-detail/building-block-management-detail.component.d.ts.map +1 -1
  10. package/lib/components/building-block-management-detail-actions/building-block-management-detail-actions.component.d.ts +10 -0
  11. package/lib/components/building-block-management-detail-actions/building-block-management-detail-actions.component.d.ts.map +1 -1
  12. package/lib/components/building-block-management-list/building-block-management-list.component.d.ts +20 -3
  13. package/lib/components/building-block-management-list/building-block-management-list.component.d.ts.map +1 -1
  14. package/lib/components/building-block-management-metadata/building-block-management-metadata.component.d.ts +6 -0
  15. package/lib/components/building-block-management-metadata/building-block-management-metadata.component.d.ts.map +1 -1
  16. package/lib/components/building-block-management-plugins/building-block-management-plugins.component.d.ts +4 -0
  17. package/lib/components/building-block-management-plugins/building-block-management-plugins.component.d.ts.map +1 -1
  18. package/lib/components/building-block-management-process-upload/building-block-management-process-upload.component.d.ts +5 -0
  19. package/lib/components/building-block-management-process-upload/building-block-management-process-upload.component.d.ts.map +1 -1
  20. package/lib/components/building-block-management-processes/building-block-management-processes.component.d.ts +4 -0
  21. package/lib/components/building-block-management-processes/building-block-management-processes.component.d.ts.map +1 -1
  22. package/lib/components/building-block-management-upload-modal/building-block-management-upload-modal.component.d.ts +10 -0
  23. package/lib/components/building-block-management-upload-modal/building-block-management-upload-modal.component.d.ts.map +1 -1
  24. package/lib/components/building-block-management-version-selector/building-block-management-version-selector.component.d.ts +10 -0
  25. package/lib/components/building-block-management-version-selector/building-block-management-version-selector.component.d.ts.map +1 -1
  26. package/lib/constants/building-block-management.test-ids.d.ts +65 -0
  27. package/lib/constants/building-block-management.test-ids.d.ts.map +1 -0
  28. package/lib/constants/index.d.ts +1 -0
  29. package/lib/constants/index.d.ts.map +1 -1
  30. package/lib/models/building-block-management.model.d.ts +6 -1
  31. package/lib/models/building-block-management.model.d.ts.map +1 -1
  32. package/lib/services/building-block-management-api.service.d.ts +5 -0
  33. package/lib/services/building-block-management-api.service.d.ts.map +1 -1
  34. package/package.json +1 -1
  35. package/public-api.d.ts +1 -0
  36. package/public-api.d.ts.map +1 -1
@@ -3,7 +3,7 @@ import { Injectable, Component, Input, signal, ChangeDetectionStrategy, ViewChil
3
3
  import * as i4 from '@angular/common';
4
4
  import { CommonModule, DOCUMENT } from '@angular/common';
5
5
  import * as i7 from '@valtimo/components';
6
- import { runAfterCarbonModalClosed, ValtimoCdsModalDirective, AutoKeyInputComponent, TooltipIconModule, CARBON_CONSTANTS, ViewType, CarbonListModule, ReadOnlyDirective, ConfirmationModalModule, RenderInBodyComponent, MuuriDirectiveModule, SchemaEditorComponent, FitPageDirective, OverflowMenuComponent, OverflowMenuOptionComponent, RenderInPageHeaderDirective } from '@valtimo/components';
6
+ import { runAfterCarbonModalClosed, ValtimoCdsModalDirective, AutoKeyInputComponent, TooltipIconModule, CARBON_CONSTANTS, DEFAULT_PAGINATION, ViewType, CarbonListModule, ReadOnlyDirective, ConfirmationModalModule, RenderInBodyComponent, MuuriDirectiveModule, SchemaEditorComponent, FitPageDirective, OverflowMenuComponent, OverflowMenuOptionComponent, RenderInPageHeaderDirective, pendingChangesGuard } from '@valtimo/components';
7
7
  import * as i2 from '@angular/common/http';
8
8
  import { HttpHeaders, HttpErrorResponse } from '@angular/common/http';
9
9
  import * as i5 from '@valtimo/shared';
@@ -63,6 +63,9 @@ class BuildingBlockManagementApiService extends BaseApiService {
63
63
  throw error;
64
64
  }));
65
65
  }
66
+ searchBuildingBlockDefinitions(params) {
67
+ return this.httpClient.get(this.getApiUrl('management/v1/building-block/search'), { params: params });
68
+ }
66
69
  createBuildingBlockDefinition(dto) {
67
70
  return this.httpClient.post(this.getApiUrl('management/v1/building-block'), dto);
68
71
  }
@@ -427,6 +430,86 @@ var UPLOAD_STEP;
427
430
  })(UPLOAD_STEP || (UPLOAD_STEP = {}));
428
431
  const STEPS = [UPLOAD_STEP.PLUGINS, UPLOAD_STEP.FILE_SELECT, UPLOAD_STEP.FILE_UPLOAD];
429
432
 
433
+ /*
434
+ * Copyright 2015-2026 Ritense BV, the Netherlands.
435
+ *
436
+ * Licensed under EUPL, Version 1.2 (the "License");
437
+ * you may not use this file except in compliance with the License.
438
+ * You may obtain a copy of the License at
439
+ *
440
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
441
+ *
442
+ * Unless required by applicable law or agreed to in writing, software
443
+ * distributed under the License is distributed on an "AS IS" basis,
444
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
445
+ * See the License for the specific language governing permissions and
446
+ * limitations under the License.
447
+ */
448
+ const BUILDING_BLOCK_MANAGEMENT_LIST_TEST_IDS = {
449
+ uploadButton: 'buildingBlockUploadButton',
450
+ createButton: 'buildingBlockCreateButton',
451
+ };
452
+ const BUILDING_BLOCK_MANAGEMENT_CREATE_TEST_IDS = {
453
+ nameInput: 'buildingBlockNameInput',
454
+ versionInput: 'buildingBlockVersionInput',
455
+ descriptionInput: 'buildingBlockDescriptionInput',
456
+ cancelButton: 'buildingBlockCreateCancelButton',
457
+ saveButton: 'buildingBlockCreateSaveButton',
458
+ };
459
+ const BUILDING_BLOCK_MANAGEMENT_UPLOAD_TEST_IDS = {
460
+ fileUploader: 'buildingBlockFileUploader',
461
+ overwriteWarning: 'buildingBlockOverwriteWarning',
462
+ overwriteCheckbox: 'buildingBlockOverwriteCheckbox',
463
+ progressBar: 'buildingBlockUploadProgressBar',
464
+ cancelButton: 'buildingBlockUploadCancelButton',
465
+ backButton: 'buildingBlockUploadBackButton',
466
+ nextButton: 'buildingBlockUploadNextButton',
467
+ finishButton: 'buildingBlockUploadFinishButton',
468
+ };
469
+ const BUILDING_BLOCK_MANAGEMENT_DETAIL_TEST_IDS = {
470
+ tabs: 'buildingBlockTabs',
471
+ };
472
+ const BUILDING_BLOCK_MANAGEMENT_PROCESSES_TEST_IDS = {
473
+ uploadButton: 'buildingBlockProcessesUploadButton',
474
+ createButton: 'buildingBlockProcessesCreateButton',
475
+ };
476
+ const BUILDING_BLOCK_MANAGEMENT_PROCESS_UPLOAD_TEST_IDS = {
477
+ fileUploader: 'buildingBlockProcessUploadFileUploader',
478
+ cancelButton: 'buildingBlockProcessUploadCancelButton',
479
+ submitButton: 'buildingBlockProcessUploadSubmitButton',
480
+ };
481
+ const BUILDING_BLOCK_MANAGEMENT_METADATA_TEST_IDS = {
482
+ nameInput: 'buildingBlockMetadataNameInput',
483
+ keyInput: 'buildingBlockMetadataKeyInput',
484
+ descriptionInput: 'buildingBlockMetadataDescriptionInput',
485
+ saveButton: 'buildingBlockMetadataSaveButton',
486
+ };
487
+ const BUILDING_BLOCK_MANAGEMENT_ARTWORK_TEST_IDS = {
488
+ fileUploader: 'buildingBlockArtworkFileUploader',
489
+ image: 'buildingBlockArtworkImage',
490
+ uploadButton: 'buildingBlockArtworkUploadButton',
491
+ deleteButton: 'buildingBlockArtworkDeleteButton',
492
+ };
493
+ const BUILDING_BLOCK_MANAGEMENT_PLUGINS_TEST_IDS = {
494
+ usedPlugins: 'buildingBlockUsedPlugins',
495
+ noPluginsUsed: 'buildingBlockNoPluginsUsed',
496
+ };
497
+ const BUILDING_BLOCK_MANAGEMENT_DETAIL_ACTIONS_TEST_IDS = {
498
+ versionSelectDropdown: 'buildingBlockVersionSelectDropdown',
499
+ moreButton: 'buildingBlockMoreButton',
500
+ exportButton: 'buildingBlockExportButton',
501
+ makeFinalButton: 'buildingBlockMakeFinalButton',
502
+ createDraftButton: 'buildingBlockCreateDraftButton',
503
+ draftVersionInput: 'buildingBlockDraftVersionInput',
504
+ draftCancelButton: 'buildingBlockDraftCancelButton',
505
+ draftConfirmButton: 'buildingBlockDraftConfirmButton',
506
+ };
507
+ /**
508
+ * Prefix for the per-version options of the version dropdown. The full test id is
509
+ * `buildingBlockVersion-<versionTag>`, built in the version selector component.
510
+ */
511
+ const BUILDING_BLOCK_VERSION_OPTION_TEST_ID_PREFIX = 'buildingBlockVersion-';
512
+
430
513
  /*
431
514
  * Copyright 2015-2025 Ritense BV, the Netherlands.
432
515
  *
@@ -476,6 +559,7 @@ class BuildingBlockManagementCreateModalComponent {
476
559
  this.buildingBlockManagementService = buildingBlockManagementService;
477
560
  this.fb = fb;
478
561
  this.router = router;
562
+ this.testIds = BUILDING_BLOCK_MANAGEMENT_CREATE_TEST_IDS;
479
563
  this.showModal$ = this.buildingBlockManagementService.showCreateModal$;
480
564
  this.usedKeys$ = this.buildingBlockManagementService.usedKeys$;
481
565
  this.formGroup = this.fb.group({
@@ -515,7 +599,7 @@ class BuildingBlockManagementCreateModalComponent {
515
599
  });
516
600
  }
517
601
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: BuildingBlockManagementCreateModalComponent, deps: [{ token: BuildingBlockManagementApiService }, { token: BuildingBlockManagementService }, { token: i2$1.FormBuilder }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Component }); }
518
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: BuildingBlockManagementCreateModalComponent, isStandalone: true, selector: "valtimo-building-block-management-create-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<cds-modal\n *ngIf=\"{\n showModal: showModal$ | async,\n } as obs\"\n [open]=\"obs.showModal\"\n showFooter=\"true\"\n valtimoCdsModal\n (close)=\"onCloseModal()\"\n>\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"onCloseModal()\">\n <h3 cdsModalHeaderHeading>\n {{ 'buildingBlockManagement.createDefinition.modalTitle' | translate }}\n </h3>\n </cds-modal-header>\n\n <form\n [formGroup]=\"formGroup\"\n cdsModalContent\n class=\"valtimo-definition-create__content\"\n [cdsLayer]=\"1\"\n >\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label [disabled]=\"formGroup.disabled\" [invalid]=\"name.touched && name.invalid\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.createDefinition.name' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'buildingBlockManagement.createDefinition.nameTooltip' | translate\"\n [disabled]=\"obs.disabled\"\n ></v-tooltip-icon>\n </span>\n\n <input\n formControlName=\"name\"\n cdsText\n placeholder=\"{{ 'buildingBlockManagement.createDefinition.namePlaceholder' | translate }}\"\n />\n </cds-label>\n </div>\n\n <valtimo-auto-key-input\n [cdsLayer]=\"1\"\n formControlName=\"key\"\n labelTranslationKey=\"buildingBlockManagement.createDefinition.keyTitle\"\n placeholderTranslationKey=\"buildingBlockManagement.createDefinition.keyPlaceHolder\"\n mode=\"add\"\n [usedKeys]=\"usedKeys$ | async\"\n [sourceText]=\"name.value\"\n >\n </valtimo-auto-key-input>\n\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label\n [disabled]=\"formGroup.disabled\"\n [invalid]=\"versionTag.touched && versionTag.invalid\"\n >\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.createDefinition.version' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'buildingBlockManagement.createDefinition.versionTooltip' | translate\"\n [disabled]=\"obs.disabled\"\n ></v-tooltip-icon>\n </span>\n\n <input\n formControlName=\"versionTag\"\n cdsText\n placeholder=\"{{\n 'buildingBlockManagement.createDefinition.versionPlaceholder' | translate\n }}\"\n />\n </cds-label>\n </div>\n\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label\n [disabled]=\"formGroup.disabled\"\n [invalid]=\"description.touched && description.invalid\"\n >\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.createDefinition.description' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'buildingBlockManagement.createDefinition.descriptionTooltip' | translate\"\n [disabled]=\"obs.disabled\"\n ></v-tooltip-icon>\n </span>\n\n <textarea\n cdsTextArea\n formControlName=\"description\"\n placeholder=\"{{\n 'buildingBlockManagement.createDefinition.descriptionPlaceholder' | translate\n }}\"\n [rows]=\"3\"\n [cols]=\"150\"\n ></textarea>\n </cds-label>\n </div>\n </form>\n\n <cds-modal-footer>\n <button cdsButton=\"secondary\" (click)=\"onCloseModal()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button cdsButton=\"primary\" [disabled]=\"formGroup.invalid\" (click)=\"onSave()\">\n {{ 'interface.save' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".valtimo-definition-create__content{display:flex;flex-direction:column;gap:16px}.cds--text-input__field-wrapper cds-label{width:100%}.cds--text-input__field-wrapper ::ng-deep .cds--label{width:100%}.cds--text-input__field-wrapper:not(:last-child){margin-bottom:16px}.label-with-tooltip{display:flex;align-items:center}.select-label{padding-bottom: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: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ModalModule }, { kind: "component", type: i3$1.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i3$1.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i3$1.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i3$1.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i3$1.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i3$1.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i3$1.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "directive", type: i3$1.TextArea, selector: "[cdsTextArea], [ibmTextArea]", inputs: ["theme", "invalid", "skeleton"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }, { kind: "component", type: AutoKeyInputComponent, selector: "valtimo-auto-key-input", inputs: ["labelTranslationKey", "placeholderTranslationKey", "mode", "usedKeys", "sourceText"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i3$1.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "ngmodule", type: TooltipIconModule }, { kind: "component", type: i7.TooltipIconComponent, selector: "v-tooltip-icon", inputs: ["tooltip", "disabled"] }] }); }
602
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: BuildingBlockManagementCreateModalComponent, isStandalone: true, selector: "valtimo-building-block-management-create-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<cds-modal\n *ngIf=\"{\n showModal: showModal$ | async,\n } as obs\"\n [open]=\"obs.showModal\"\n showFooter=\"true\"\n valtimoCdsModal\n (close)=\"onCloseModal()\"\n>\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"onCloseModal()\">\n <h3 cdsModalHeaderHeading>\n {{ 'buildingBlockManagement.createDefinition.modalTitle' | translate }}\n </h3>\n </cds-modal-header>\n\n <form\n [formGroup]=\"formGroup\"\n cdsModalContent\n class=\"valtimo-definition-create__content\"\n [cdsLayer]=\"1\"\n >\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label [disabled]=\"formGroup.disabled\" [invalid]=\"name.touched && name.invalid\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.createDefinition.name' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'buildingBlockManagement.createDefinition.nameTooltip' | translate\"\n [disabled]=\"obs.disabled\"\n ></v-tooltip-icon>\n </span>\n\n <input\n [attr.data-test-id]=\"testIds.nameInput\"\n formControlName=\"name\"\n cdsText\n placeholder=\"{{ 'buildingBlockManagement.createDefinition.namePlaceholder' | translate }}\"\n />\n </cds-label>\n </div>\n\n <valtimo-auto-key-input\n [cdsLayer]=\"1\"\n formControlName=\"key\"\n labelTranslationKey=\"buildingBlockManagement.createDefinition.keyTitle\"\n placeholderTranslationKey=\"buildingBlockManagement.createDefinition.keyPlaceHolder\"\n mode=\"add\"\n [usedKeys]=\"usedKeys$ | async\"\n [sourceText]=\"name.value\"\n >\n </valtimo-auto-key-input>\n\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label\n [disabled]=\"formGroup.disabled\"\n [invalid]=\"versionTag.touched && versionTag.invalid\"\n >\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.createDefinition.version' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'buildingBlockManagement.createDefinition.versionTooltip' | translate\"\n [disabled]=\"obs.disabled\"\n ></v-tooltip-icon>\n </span>\n\n <input\n [attr.data-test-id]=\"testIds.versionInput\"\n formControlName=\"versionTag\"\n cdsText\n placeholder=\"{{\n 'buildingBlockManagement.createDefinition.versionPlaceholder' | translate\n }}\"\n />\n </cds-label>\n </div>\n\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label\n [disabled]=\"formGroup.disabled\"\n [invalid]=\"description.touched && description.invalid\"\n >\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.createDefinition.description' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'buildingBlockManagement.createDefinition.descriptionTooltip' | translate\"\n [disabled]=\"obs.disabled\"\n ></v-tooltip-icon>\n </span>\n\n <textarea\n [attr.data-test-id]=\"testIds.descriptionInput\"\n cdsTextArea\n formControlName=\"description\"\n placeholder=\"{{\n 'buildingBlockManagement.createDefinition.descriptionPlaceholder' | translate\n }}\"\n [rows]=\"3\"\n [cols]=\"150\"\n ></textarea>\n </cds-label>\n </div>\n </form>\n\n <cds-modal-footer>\n <button\n [attr.data-test-id]=\"testIds.cancelButton\"\n cdsButton=\"secondary\"\n (click)=\"onCloseModal()\"\n >\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n [attr.data-test-id]=\"testIds.saveButton\"\n cdsButton=\"primary\"\n [disabled]=\"formGroup.invalid\"\n (click)=\"onSave()\"\n >\n {{ 'interface.save' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".valtimo-definition-create__content{display:flex;flex-direction:column;gap:16px}.cds--text-input__field-wrapper cds-label{width:100%}.cds--text-input__field-wrapper ::ng-deep .cds--label{width:100%}.cds--text-input__field-wrapper:not(:last-child){margin-bottom:16px}.label-with-tooltip{display:flex;align-items:center}.select-label{padding-bottom: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: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ModalModule }, { kind: "component", type: i3$1.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i3$1.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i3$1.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i3$1.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i3$1.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i3$1.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i3$1.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "directive", type: i3$1.TextArea, selector: "[cdsTextArea], [ibmTextArea]", inputs: ["theme", "invalid", "skeleton"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }, { kind: "component", type: AutoKeyInputComponent, selector: "valtimo-auto-key-input", inputs: ["labelTranslationKey", "placeholderTranslationKey", "mode", "usedKeys", "sourceText"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i3$1.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "ngmodule", type: TooltipIconModule }, { kind: "component", type: i7.TooltipIconComponent, selector: "v-tooltip-icon", inputs: ["tooltip", "disabled"] }] }); }
519
603
  }
520
604
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: BuildingBlockManagementCreateModalComponent, decorators: [{
521
605
  type: Component,
@@ -533,7 +617,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
533
617
  AutoKeyInputComponent,
534
618
  LayerModule,
535
619
  TooltipIconModule,
536
- ], 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-modal\n *ngIf=\"{\n showModal: showModal$ | async,\n } as obs\"\n [open]=\"obs.showModal\"\n showFooter=\"true\"\n valtimoCdsModal\n (close)=\"onCloseModal()\"\n>\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"onCloseModal()\">\n <h3 cdsModalHeaderHeading>\n {{ 'buildingBlockManagement.createDefinition.modalTitle' | translate }}\n </h3>\n </cds-modal-header>\n\n <form\n [formGroup]=\"formGroup\"\n cdsModalContent\n class=\"valtimo-definition-create__content\"\n [cdsLayer]=\"1\"\n >\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label [disabled]=\"formGroup.disabled\" [invalid]=\"name.touched && name.invalid\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.createDefinition.name' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'buildingBlockManagement.createDefinition.nameTooltip' | translate\"\n [disabled]=\"obs.disabled\"\n ></v-tooltip-icon>\n </span>\n\n <input\n formControlName=\"name\"\n cdsText\n placeholder=\"{{ 'buildingBlockManagement.createDefinition.namePlaceholder' | translate }}\"\n />\n </cds-label>\n </div>\n\n <valtimo-auto-key-input\n [cdsLayer]=\"1\"\n formControlName=\"key\"\n labelTranslationKey=\"buildingBlockManagement.createDefinition.keyTitle\"\n placeholderTranslationKey=\"buildingBlockManagement.createDefinition.keyPlaceHolder\"\n mode=\"add\"\n [usedKeys]=\"usedKeys$ | async\"\n [sourceText]=\"name.value\"\n >\n </valtimo-auto-key-input>\n\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label\n [disabled]=\"formGroup.disabled\"\n [invalid]=\"versionTag.touched && versionTag.invalid\"\n >\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.createDefinition.version' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'buildingBlockManagement.createDefinition.versionTooltip' | translate\"\n [disabled]=\"obs.disabled\"\n ></v-tooltip-icon>\n </span>\n\n <input\n formControlName=\"versionTag\"\n cdsText\n placeholder=\"{{\n 'buildingBlockManagement.createDefinition.versionPlaceholder' | translate\n }}\"\n />\n </cds-label>\n </div>\n\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label\n [disabled]=\"formGroup.disabled\"\n [invalid]=\"description.touched && description.invalid\"\n >\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.createDefinition.description' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'buildingBlockManagement.createDefinition.descriptionTooltip' | translate\"\n [disabled]=\"obs.disabled\"\n ></v-tooltip-icon>\n </span>\n\n <textarea\n cdsTextArea\n formControlName=\"description\"\n placeholder=\"{{\n 'buildingBlockManagement.createDefinition.descriptionPlaceholder' | translate\n }}\"\n [rows]=\"3\"\n [cols]=\"150\"\n ></textarea>\n </cds-label>\n </div>\n </form>\n\n <cds-modal-footer>\n <button cdsButton=\"secondary\" (click)=\"onCloseModal()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button cdsButton=\"primary\" [disabled]=\"formGroup.invalid\" (click)=\"onSave()\">\n {{ 'interface.save' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".valtimo-definition-create__content{display:flex;flex-direction:column;gap:16px}.cds--text-input__field-wrapper cds-label{width:100%}.cds--text-input__field-wrapper ::ng-deep .cds--label{width:100%}.cds--text-input__field-wrapper:not(:last-child){margin-bottom:16px}.label-with-tooltip{display:flex;align-items:center}.select-label{padding-bottom: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"] }]
620
+ ], 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-modal\n *ngIf=\"{\n showModal: showModal$ | async,\n } as obs\"\n [open]=\"obs.showModal\"\n showFooter=\"true\"\n valtimoCdsModal\n (close)=\"onCloseModal()\"\n>\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"onCloseModal()\">\n <h3 cdsModalHeaderHeading>\n {{ 'buildingBlockManagement.createDefinition.modalTitle' | translate }}\n </h3>\n </cds-modal-header>\n\n <form\n [formGroup]=\"formGroup\"\n cdsModalContent\n class=\"valtimo-definition-create__content\"\n [cdsLayer]=\"1\"\n >\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label [disabled]=\"formGroup.disabled\" [invalid]=\"name.touched && name.invalid\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.createDefinition.name' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'buildingBlockManagement.createDefinition.nameTooltip' | translate\"\n [disabled]=\"obs.disabled\"\n ></v-tooltip-icon>\n </span>\n\n <input\n [attr.data-test-id]=\"testIds.nameInput\"\n formControlName=\"name\"\n cdsText\n placeholder=\"{{ 'buildingBlockManagement.createDefinition.namePlaceholder' | translate }}\"\n />\n </cds-label>\n </div>\n\n <valtimo-auto-key-input\n [cdsLayer]=\"1\"\n formControlName=\"key\"\n labelTranslationKey=\"buildingBlockManagement.createDefinition.keyTitle\"\n placeholderTranslationKey=\"buildingBlockManagement.createDefinition.keyPlaceHolder\"\n mode=\"add\"\n [usedKeys]=\"usedKeys$ | async\"\n [sourceText]=\"name.value\"\n >\n </valtimo-auto-key-input>\n\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label\n [disabled]=\"formGroup.disabled\"\n [invalid]=\"versionTag.touched && versionTag.invalid\"\n >\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.createDefinition.version' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'buildingBlockManagement.createDefinition.versionTooltip' | translate\"\n [disabled]=\"obs.disabled\"\n ></v-tooltip-icon>\n </span>\n\n <input\n [attr.data-test-id]=\"testIds.versionInput\"\n formControlName=\"versionTag\"\n cdsText\n placeholder=\"{{\n 'buildingBlockManagement.createDefinition.versionPlaceholder' | translate\n }}\"\n />\n </cds-label>\n </div>\n\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label\n [disabled]=\"formGroup.disabled\"\n [invalid]=\"description.touched && description.invalid\"\n >\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.createDefinition.description' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'buildingBlockManagement.createDefinition.descriptionTooltip' | translate\"\n [disabled]=\"obs.disabled\"\n ></v-tooltip-icon>\n </span>\n\n <textarea\n [attr.data-test-id]=\"testIds.descriptionInput\"\n cdsTextArea\n formControlName=\"description\"\n placeholder=\"{{\n 'buildingBlockManagement.createDefinition.descriptionPlaceholder' | translate\n }}\"\n [rows]=\"3\"\n [cols]=\"150\"\n ></textarea>\n </cds-label>\n </div>\n </form>\n\n <cds-modal-footer>\n <button\n [attr.data-test-id]=\"testIds.cancelButton\"\n cdsButton=\"secondary\"\n (click)=\"onCloseModal()\"\n >\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n [attr.data-test-id]=\"testIds.saveButton\"\n cdsButton=\"primary\"\n [disabled]=\"formGroup.invalid\"\n (click)=\"onSave()\"\n >\n {{ 'interface.save' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".valtimo-definition-create__content{display:flex;flex-direction:column;gap:16px}.cds--text-input__field-wrapper cds-label{width:100%}.cds--text-input__field-wrapper ::ng-deep .cds--label{width:100%}.cds--text-input__field-wrapper:not(:last-child){margin-bottom:16px}.label-with-tooltip{display:flex;align-items:center}.select-label{padding-bottom: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"] }]
537
621
  }], ctorParameters: () => [{ type: BuildingBlockManagementApiService }, { type: BuildingBlockManagementService }, { type: i2$1.FormBuilder }, { type: i3.Router }] });
538
622
 
539
623
  /*
@@ -588,6 +672,7 @@ class BuildingBlockManagementUploadModalComponent {
588
672
  this.fb = fb;
589
673
  this.iconService = iconService;
590
674
  this.translateService = translateService;
675
+ this.testIds = BUILDING_BLOCK_MANAGEMENT_UPLOAD_TEST_IDS;
591
676
  this.acceptedFiles = ['.zip'];
592
677
  this.showUploadModal$ = this.buildingBlockManagementService.showUploadModal$;
593
678
  this._disabled$ = new BehaviorSubject(true);
@@ -719,7 +804,7 @@ class BuildingBlockManagementUploadModalComponent {
719
804
  }, CARBON_CONSTANTS.modalAnimationMs);
720
805
  }
721
806
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: BuildingBlockManagementUploadModalComponent, deps: [{ token: BuildingBlockManagementApiService }, { token: BuildingBlockManagementService }, { token: i2$1.FormBuilder }, { token: i3$1.IconService }, { token: i2$2.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
722
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: BuildingBlockManagementUploadModalComponent, isStandalone: true, selector: "valtimo-building-block-management-upload-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<cds-modal\n *ngIf=\"{\n activeStep: activeStep$ | async,\n backButtonEnabled: backButtonEnabled$ | async,\n isStepAfterUpload: isStepAfterUpload$ | async,\n nextButtonDisabled: nextButtonDisabled$ | async,\n notificationObj: notificationObj$ | async,\n showCheckboxError: showCheckboxError$ | async,\n showCloseButton: showCloseButton$ | async,\n uploadStatus: uploadStatus$ | async,\n showUploadModal: showUploadModal$ | async,\n } as obs\"\n valtimoCdsModal\n [open]=\"obs.showUploadModal\"\n showFooter=\"true\"\n class=\"valtimo-definition-uploader\"\n (close)=\"onCloseModal()\"\n>\n <cds-modal-header\n [showCloseButton]=\"obs.showCloseButton\"\n (closeSelect)=\"onCloseModal(obs.isStepAfterUpload && obs.uploadStatus !== UPLOAD_STATUS.ERROR)\"\n >\n <h3 cdsModalHeaderHeading>\n {{ 'buildingBlockManagement.importDefinition.title' | translate }}\n </h3>\n </cds-modal-header>\n\n <section [ngSwitch]=\"obs.activeStep\" cdsModalContent class=\"valtimo-definition-uploader__content\">\n <ng-template ngSwitchDefault>\n <valtimo-building-block-management-upload-step\n [message]=\"\n 'buildingBlockManagement.importDefinition.steps.' + obs.activeStep + '.message'\n | translate\n \"\n [title]=\"\n 'buildingBlockManagement.importDefinition.steps.' + obs.activeStep + '.title' | translate\n \"\n [illustration]=\"'valtimo-layout/img/' + obs.activeStep + '.svg'\"\n >\n </valtimo-building-block-management-upload-step>\n </ng-template>\n\n <form *ngSwitchCase=\"UPLOAD_STEP.FILE_SELECT\" [formGroup]=\"form\">\n <cds-file-uploader\n [accept]=\"acceptedFiles\"\n [buttonText]=\"'buildingBlockManagement.importDefinition.upload.buttonText' | translate\"\n [description]=\"'buildingBlockManagement.importDefinition.upload.description' | translate\"\n [multiple]=\"false\"\n [title]=\"'buildingBlockManagement.importDefinition.upload.title' | translate\"\n buttonType=\"primary\"\n formControlName=\"file\"\n class=\"valtimo-definition-uploader__file-uploader\"\n >\n </cds-file-uploader>\n\n <ng-container *ngIf=\"obs.activeStep === UPLOAD_STEP.FILE_SELECT\">\n <cds-inline-notification [notificationObj]=\"obs.notificationObj\"></cds-inline-notification>\n\n <div class=\"valtimo-uploader__checkbox\">\n <cds-checkbox\n [class.valtimo-definition-uploader__checkbox--invalid]=\"obs.showCheckboxError\"\n (checkedChange)=\"onCheckedChange($event)\"\n >\n {{ 'buildingBlockManagement.importDefinition.checkbox.message' | translate }}\n </cds-checkbox>\n\n <div *ngIf=\"obs.showCheckboxError\" class=\"valtimo-definition-uploader__error\">\n <svg cdsIcon=\"warning--filled\" size=\"16\"></svg>\n {{ 'buildingBlockManagement.importDefinition.checkbox.error' | translate }}\n </div>\n </div>\n </ng-container>\n </form>\n\n <cds-progress-bar\n *ngSwitchCase=\"UPLOAD_STEP.FILE_UPLOAD\"\n class=\"valtimo-definition-uploader__progress-bar\"\n [label]=\"'buildingBlockManagement.importDefinition.progressBar.label' | translate\"\n [status]=\"obs.uploadStatus\"\n [helperText]=\"\n 'buildingBlockManagement.importDefinition.progressBar.' + obs.uploadStatus | translate\n \"\n ></cds-progress-bar>\n </section>\n\n <cds-modal-footer\n class=\"valtimo-definition-uploader__footer\"\n [class.valtimo-definition-uploader__footer--double]=\"obs.activeStep === UPLOAD_STEP.PLUGINS\"\n >\n <button\n *ngIf=\"obs.uploadStatus !== UPLOAD_STATUS.ERROR && obs.activeStep !== UPLOAD_STEP.FILE_UPLOAD\"\n class=\"valtimo-definition-uploader__cancel\"\n cdsButton=\"ghost\"\n (click)=\"onCloseModal(obs.isStepAfterUpload)\"\n >\n {{ (obs.isStepAfterUpload ? 'interface.skip' : 'interface.cancel') | translate }}\n </button>\n\n <div class=\"valtimo-definition-uploader__actions\">\n <button\n *ngIf=\"obs.backButtonEnabled\"\n cdsButton=\"secondary\"\n (click)=\"onBackClick(obs.activeStep)\"\n >\n {{ 'interface.back' | translate }}\n </button>\n\n <button\n *ngIf=\"\n obs.uploadStatus !== UPLOAD_STATUS.ERROR && obs.activeStep !== UPLOAD_STEP.FILE_UPLOAD\n \"\n cdsButton=\"primary\"\n [disabled]=\"obs.nextButtonDisabled\"\n (click)=\"onNextClick(obs.activeStep)\"\n >\n {{\n (obs.activeStep === UPLOAD_STEP.FILE_SELECT\n ? 'buildingBlockManagement.importDefinition.startUpload'\n : 'interface.next'\n ) | translate\n }}\n </button>\n\n <button\n *ngIf=\"\n obs.uploadStatus === UPLOAD_STATUS.ERROR || obs.activeStep === UPLOAD_STEP.FILE_UPLOAD\n \"\n class=\"valtimo-definition-uploader__cancel\"\n cdsButton=\"primary\"\n (click)=\"onCloseModal(true)\"\n >\n {{ 'interface.finish' | translate }}\n </button>\n </div>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".valtimo-definition-uploader__content,.valtimo-definition-uploader__content form{display:flex;flex-direction:column;gap:16px}.valtimo-definition-uploader__footer ::ng-deep .cds--modal-footer{justify-content:unset!important;display:grid!important;grid-template-columns:1fr 1fr 2fr!important;grid-template-areas:\"cancel . actions\"!important}.valtimo-definition-uploader__footer--double ::ng-deep .cds--modal-footer{grid-template-columns:1fr 1fr!important;grid-template-areas:\"cancel actions\"!important}.valtimo-definition-uploader__progress-bar{height:100%;display:flex;flex-direction:column;justify-content:center}.valtimo-definition-uploader__error{display:flex;align-items:center;gap:10px;color:#da1e28;fill:#da1e28;font-size:12px}.valtimo-definition-uploader__cancel{grid-area:cancel;width:100%}.valtimo-definition-uploader__actions{grid-area:actions;display:flex}.valtimo-definition-uploader__actions button{flex:unset;width:100%}.valtimo-definition-uploader__file-uploader ::ng-deep cds-file{max-width:unset}.valtimo-definition-uploader__checkbox{display:flex;flex-direction:column;gap:8px}.valtimo-definition-uploader__checkbox--invalid ::ng-deep label:before{border-color:#da1e28;margin-inline:0}.valtimo-definition-uploader ::ng-deep .cds--modal-container{height:550px}.valtimo-definition-uploader ::ng-deep .cds--checkbox-label-text{color:#000}\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: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FileUploaderModule }, { kind: "component", type: i3$1.FileUploader, selector: "cds-file-uploader, ibm-file-uploader", inputs: ["buttonText", "buttonType", "title", "description", "accept", "multiple", "skeleton", "size", "fileItemSize", "drop", "dropText", "fileUploaderId", "files", "disabled"], outputs: ["filesChange"] }, { kind: "ngmodule", type: ModalModule }, { kind: "component", type: i3$1.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i3$1.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i3$1.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i3$1.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i3$1.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2$2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: ProgressBarModule }, { kind: "component", type: i3$1.ProgressBar, selector: "cds-progress-bar, ibm-progress-bar", inputs: ["value", "id", "label", "helperText", "max", "type", "status", "size"] }, { kind: "ngmodule", type: NotificationModule }, { kind: "component", type: i3$1.Notification, selector: "cds-notification, cds-inline-notification, ibm-notification, ibm-inline-notification", inputs: ["notificationObj"] }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i3$1.Checkbox, selector: "cds-checkbox, ibm-checkbox", inputs: ["disabled", "skeleton", "hideLabel", "name", "id", "required", "value", "ariaLabel", "ariaLabelledby", "indeterminate", "checked"], outputs: ["click", "checkedChange", "indeterminateChange"] }, { kind: "component", type: BuildingBlockManagementUploadStepComponent, selector: "valtimo-building-block-management-upload-step", inputs: ["illustration", "message", "title"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
807
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: BuildingBlockManagementUploadModalComponent, isStandalone: true, selector: "valtimo-building-block-management-upload-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<cds-modal\n *ngIf=\"{\n activeStep: activeStep$ | async,\n backButtonEnabled: backButtonEnabled$ | async,\n isStepAfterUpload: isStepAfterUpload$ | async,\n nextButtonDisabled: nextButtonDisabled$ | async,\n notificationObj: notificationObj$ | async,\n showCheckboxError: showCheckboxError$ | async,\n showCloseButton: showCloseButton$ | async,\n uploadStatus: uploadStatus$ | async,\n showUploadModal: showUploadModal$ | async,\n } as obs\"\n valtimoCdsModal\n [open]=\"obs.showUploadModal\"\n showFooter=\"true\"\n class=\"valtimo-definition-uploader\"\n (close)=\"onCloseModal()\"\n>\n <cds-modal-header\n [showCloseButton]=\"obs.showCloseButton\"\n (closeSelect)=\"onCloseModal(obs.isStepAfterUpload && obs.uploadStatus !== UPLOAD_STATUS.ERROR)\"\n >\n <h3 cdsModalHeaderHeading>\n {{ 'buildingBlockManagement.importDefinition.title' | translate }}\n </h3>\n </cds-modal-header>\n\n <section [ngSwitch]=\"obs.activeStep\" cdsModalContent class=\"valtimo-definition-uploader__content\">\n <ng-template ngSwitchDefault>\n <valtimo-building-block-management-upload-step\n [message]=\"\n 'buildingBlockManagement.importDefinition.steps.' + obs.activeStep + '.message'\n | translate\n \"\n [title]=\"\n 'buildingBlockManagement.importDefinition.steps.' + obs.activeStep + '.title' | translate\n \"\n [illustration]=\"'valtimo-layout/img/' + obs.activeStep + '.svg'\"\n >\n </valtimo-building-block-management-upload-step>\n </ng-template>\n\n <form *ngSwitchCase=\"UPLOAD_STEP.FILE_SELECT\" [formGroup]=\"form\">\n <cds-file-uploader\n [attr.data-test-id]=\"testIds.fileUploader\"\n [accept]=\"acceptedFiles\"\n [buttonText]=\"'buildingBlockManagement.importDefinition.upload.buttonText' | translate\"\n [description]=\"'buildingBlockManagement.importDefinition.upload.description' | translate\"\n [multiple]=\"false\"\n [title]=\"'buildingBlockManagement.importDefinition.upload.title' | translate\"\n buttonType=\"primary\"\n formControlName=\"file\"\n class=\"valtimo-definition-uploader__file-uploader\"\n >\n </cds-file-uploader>\n\n <ng-container *ngIf=\"obs.activeStep === UPLOAD_STEP.FILE_SELECT\">\n <cds-inline-notification\n [attr.data-test-id]=\"testIds.overwriteWarning\"\n [notificationObj]=\"obs.notificationObj\"\n ></cds-inline-notification>\n\n <div class=\"valtimo-uploader__checkbox\">\n <cds-checkbox\n [attr.data-test-id]=\"testIds.overwriteCheckbox\"\n [class.valtimo-definition-uploader__checkbox--invalid]=\"obs.showCheckboxError\"\n (checkedChange)=\"onCheckedChange($event)\"\n >\n {{ 'buildingBlockManagement.importDefinition.checkbox.message' | translate }}\n </cds-checkbox>\n\n <div *ngIf=\"obs.showCheckboxError\" class=\"valtimo-definition-uploader__error\">\n <svg cdsIcon=\"warning--filled\" size=\"16\"></svg>\n {{ 'buildingBlockManagement.importDefinition.checkbox.error' | translate }}\n </div>\n </div>\n </ng-container>\n </form>\n\n <cds-progress-bar\n *ngSwitchCase=\"UPLOAD_STEP.FILE_UPLOAD\"\n [attr.data-test-id]=\"testIds.progressBar\"\n class=\"valtimo-definition-uploader__progress-bar\"\n [label]=\"'buildingBlockManagement.importDefinition.progressBar.label' | translate\"\n [status]=\"obs.uploadStatus\"\n [helperText]=\"\n 'buildingBlockManagement.importDefinition.progressBar.' + obs.uploadStatus | translate\n \"\n ></cds-progress-bar>\n </section>\n\n <cds-modal-footer\n class=\"valtimo-definition-uploader__footer\"\n [class.valtimo-definition-uploader__footer--double]=\"obs.activeStep === UPLOAD_STEP.PLUGINS\"\n >\n <button\n *ngIf=\"obs.uploadStatus !== UPLOAD_STATUS.ERROR && obs.activeStep !== UPLOAD_STEP.FILE_UPLOAD\"\n [attr.data-test-id]=\"testIds.cancelButton\"\n class=\"valtimo-definition-uploader__cancel\"\n cdsButton=\"ghost\"\n (click)=\"onCloseModal(obs.isStepAfterUpload)\"\n >\n {{ (obs.isStepAfterUpload ? 'interface.skip' : 'interface.cancel') | translate }}\n </button>\n\n <div class=\"valtimo-definition-uploader__actions\">\n <button\n *ngIf=\"obs.backButtonEnabled\"\n [attr.data-test-id]=\"testIds.backButton\"\n cdsButton=\"secondary\"\n (click)=\"onBackClick(obs.activeStep)\"\n >\n {{ 'interface.back' | translate }}\n </button>\n\n <button\n *ngIf=\"\n obs.uploadStatus !== UPLOAD_STATUS.ERROR && obs.activeStep !== UPLOAD_STEP.FILE_UPLOAD\n \"\n [attr.data-test-id]=\"testIds.nextButton\"\n cdsButton=\"primary\"\n [disabled]=\"obs.nextButtonDisabled\"\n (click)=\"onNextClick(obs.activeStep)\"\n >\n {{\n (obs.activeStep === UPLOAD_STEP.FILE_SELECT\n ? 'buildingBlockManagement.importDefinition.startUpload'\n : 'interface.next'\n ) | translate\n }}\n </button>\n\n <button\n *ngIf=\"\n obs.uploadStatus === UPLOAD_STATUS.ERROR || obs.activeStep === UPLOAD_STEP.FILE_UPLOAD\n \"\n [attr.data-test-id]=\"testIds.finishButton\"\n class=\"valtimo-definition-uploader__cancel\"\n cdsButton=\"primary\"\n (click)=\"onCloseModal(true)\"\n >\n {{ 'interface.finish' | translate }}\n </button>\n </div>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".valtimo-definition-uploader__content,.valtimo-definition-uploader__content form{display:flex;flex-direction:column;gap:16px}.valtimo-definition-uploader__footer ::ng-deep .cds--modal-footer{justify-content:unset!important;display:grid!important;grid-template-columns:1fr 1fr 2fr!important;grid-template-areas:\"cancel . actions\"!important}.valtimo-definition-uploader__footer--double ::ng-deep .cds--modal-footer{grid-template-columns:1fr 1fr!important;grid-template-areas:\"cancel actions\"!important}.valtimo-definition-uploader__progress-bar{height:100%;display:flex;flex-direction:column;justify-content:center}.valtimo-definition-uploader__error{display:flex;align-items:center;gap:10px;color:#da1e28;fill:#da1e28;font-size:12px}.valtimo-definition-uploader__cancel{grid-area:cancel;width:100%}.valtimo-definition-uploader__actions{grid-area:actions;display:flex}.valtimo-definition-uploader__actions button{flex:unset;width:100%}.valtimo-definition-uploader__file-uploader ::ng-deep cds-file{max-width:unset}.valtimo-definition-uploader__checkbox{display:flex;flex-direction:column;gap:8px}.valtimo-definition-uploader__checkbox--invalid ::ng-deep label:before{border-color:#da1e28;margin-inline:0}.valtimo-definition-uploader ::ng-deep .cds--modal-container{height:550px}.valtimo-definition-uploader ::ng-deep .cds--checkbox-label-text{color:#000}\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: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FileUploaderModule }, { kind: "component", type: i3$1.FileUploader, selector: "cds-file-uploader, ibm-file-uploader", inputs: ["buttonText", "buttonType", "title", "description", "accept", "multiple", "skeleton", "size", "fileItemSize", "drop", "dropText", "fileUploaderId", "files", "disabled"], outputs: ["filesChange"] }, { kind: "ngmodule", type: ModalModule }, { kind: "component", type: i3$1.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i3$1.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i3$1.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i3$1.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i3$1.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2$2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: ProgressBarModule }, { kind: "component", type: i3$1.ProgressBar, selector: "cds-progress-bar, ibm-progress-bar", inputs: ["value", "id", "label", "helperText", "max", "type", "status", "size"] }, { kind: "ngmodule", type: NotificationModule }, { kind: "component", type: i3$1.Notification, selector: "cds-notification, cds-inline-notification, ibm-notification, ibm-inline-notification", inputs: ["notificationObj"] }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i3$1.Checkbox, selector: "cds-checkbox, ibm-checkbox", inputs: ["disabled", "skeleton", "hideLabel", "name", "id", "required", "value", "ariaLabel", "ariaLabelledby", "indeterminate", "checked"], outputs: ["click", "checkedChange", "indeterminateChange"] }, { kind: "component", type: BuildingBlockManagementUploadStepComponent, selector: "valtimo-building-block-management-upload-step", inputs: ["illustration", "message", "title"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
723
808
  }
724
809
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: BuildingBlockManagementUploadModalComponent, decorators: [{
725
810
  type: Component,
@@ -735,7 +820,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
735
820
  BuildingBlockManagementUploadStepComponent,
736
821
  ReactiveFormsModule,
737
822
  ValtimoCdsModalDirective,
738
- ], 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-modal\n *ngIf=\"{\n activeStep: activeStep$ | async,\n backButtonEnabled: backButtonEnabled$ | async,\n isStepAfterUpload: isStepAfterUpload$ | async,\n nextButtonDisabled: nextButtonDisabled$ | async,\n notificationObj: notificationObj$ | async,\n showCheckboxError: showCheckboxError$ | async,\n showCloseButton: showCloseButton$ | async,\n uploadStatus: uploadStatus$ | async,\n showUploadModal: showUploadModal$ | async,\n } as obs\"\n valtimoCdsModal\n [open]=\"obs.showUploadModal\"\n showFooter=\"true\"\n class=\"valtimo-definition-uploader\"\n (close)=\"onCloseModal()\"\n>\n <cds-modal-header\n [showCloseButton]=\"obs.showCloseButton\"\n (closeSelect)=\"onCloseModal(obs.isStepAfterUpload && obs.uploadStatus !== UPLOAD_STATUS.ERROR)\"\n >\n <h3 cdsModalHeaderHeading>\n {{ 'buildingBlockManagement.importDefinition.title' | translate }}\n </h3>\n </cds-modal-header>\n\n <section [ngSwitch]=\"obs.activeStep\" cdsModalContent class=\"valtimo-definition-uploader__content\">\n <ng-template ngSwitchDefault>\n <valtimo-building-block-management-upload-step\n [message]=\"\n 'buildingBlockManagement.importDefinition.steps.' + obs.activeStep + '.message'\n | translate\n \"\n [title]=\"\n 'buildingBlockManagement.importDefinition.steps.' + obs.activeStep + '.title' | translate\n \"\n [illustration]=\"'valtimo-layout/img/' + obs.activeStep + '.svg'\"\n >\n </valtimo-building-block-management-upload-step>\n </ng-template>\n\n <form *ngSwitchCase=\"UPLOAD_STEP.FILE_SELECT\" [formGroup]=\"form\">\n <cds-file-uploader\n [accept]=\"acceptedFiles\"\n [buttonText]=\"'buildingBlockManagement.importDefinition.upload.buttonText' | translate\"\n [description]=\"'buildingBlockManagement.importDefinition.upload.description' | translate\"\n [multiple]=\"false\"\n [title]=\"'buildingBlockManagement.importDefinition.upload.title' | translate\"\n buttonType=\"primary\"\n formControlName=\"file\"\n class=\"valtimo-definition-uploader__file-uploader\"\n >\n </cds-file-uploader>\n\n <ng-container *ngIf=\"obs.activeStep === UPLOAD_STEP.FILE_SELECT\">\n <cds-inline-notification [notificationObj]=\"obs.notificationObj\"></cds-inline-notification>\n\n <div class=\"valtimo-uploader__checkbox\">\n <cds-checkbox\n [class.valtimo-definition-uploader__checkbox--invalid]=\"obs.showCheckboxError\"\n (checkedChange)=\"onCheckedChange($event)\"\n >\n {{ 'buildingBlockManagement.importDefinition.checkbox.message' | translate }}\n </cds-checkbox>\n\n <div *ngIf=\"obs.showCheckboxError\" class=\"valtimo-definition-uploader__error\">\n <svg cdsIcon=\"warning--filled\" size=\"16\"></svg>\n {{ 'buildingBlockManagement.importDefinition.checkbox.error' | translate }}\n </div>\n </div>\n </ng-container>\n </form>\n\n <cds-progress-bar\n *ngSwitchCase=\"UPLOAD_STEP.FILE_UPLOAD\"\n class=\"valtimo-definition-uploader__progress-bar\"\n [label]=\"'buildingBlockManagement.importDefinition.progressBar.label' | translate\"\n [status]=\"obs.uploadStatus\"\n [helperText]=\"\n 'buildingBlockManagement.importDefinition.progressBar.' + obs.uploadStatus | translate\n \"\n ></cds-progress-bar>\n </section>\n\n <cds-modal-footer\n class=\"valtimo-definition-uploader__footer\"\n [class.valtimo-definition-uploader__footer--double]=\"obs.activeStep === UPLOAD_STEP.PLUGINS\"\n >\n <button\n *ngIf=\"obs.uploadStatus !== UPLOAD_STATUS.ERROR && obs.activeStep !== UPLOAD_STEP.FILE_UPLOAD\"\n class=\"valtimo-definition-uploader__cancel\"\n cdsButton=\"ghost\"\n (click)=\"onCloseModal(obs.isStepAfterUpload)\"\n >\n {{ (obs.isStepAfterUpload ? 'interface.skip' : 'interface.cancel') | translate }}\n </button>\n\n <div class=\"valtimo-definition-uploader__actions\">\n <button\n *ngIf=\"obs.backButtonEnabled\"\n cdsButton=\"secondary\"\n (click)=\"onBackClick(obs.activeStep)\"\n >\n {{ 'interface.back' | translate }}\n </button>\n\n <button\n *ngIf=\"\n obs.uploadStatus !== UPLOAD_STATUS.ERROR && obs.activeStep !== UPLOAD_STEP.FILE_UPLOAD\n \"\n cdsButton=\"primary\"\n [disabled]=\"obs.nextButtonDisabled\"\n (click)=\"onNextClick(obs.activeStep)\"\n >\n {{\n (obs.activeStep === UPLOAD_STEP.FILE_SELECT\n ? 'buildingBlockManagement.importDefinition.startUpload'\n : 'interface.next'\n ) | translate\n }}\n </button>\n\n <button\n *ngIf=\"\n obs.uploadStatus === UPLOAD_STATUS.ERROR || obs.activeStep === UPLOAD_STEP.FILE_UPLOAD\n \"\n class=\"valtimo-definition-uploader__cancel\"\n cdsButton=\"primary\"\n (click)=\"onCloseModal(true)\"\n >\n {{ 'interface.finish' | translate }}\n </button>\n </div>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".valtimo-definition-uploader__content,.valtimo-definition-uploader__content form{display:flex;flex-direction:column;gap:16px}.valtimo-definition-uploader__footer ::ng-deep .cds--modal-footer{justify-content:unset!important;display:grid!important;grid-template-columns:1fr 1fr 2fr!important;grid-template-areas:\"cancel . actions\"!important}.valtimo-definition-uploader__footer--double ::ng-deep .cds--modal-footer{grid-template-columns:1fr 1fr!important;grid-template-areas:\"cancel actions\"!important}.valtimo-definition-uploader__progress-bar{height:100%;display:flex;flex-direction:column;justify-content:center}.valtimo-definition-uploader__error{display:flex;align-items:center;gap:10px;color:#da1e28;fill:#da1e28;font-size:12px}.valtimo-definition-uploader__cancel{grid-area:cancel;width:100%}.valtimo-definition-uploader__actions{grid-area:actions;display:flex}.valtimo-definition-uploader__actions button{flex:unset;width:100%}.valtimo-definition-uploader__file-uploader ::ng-deep cds-file{max-width:unset}.valtimo-definition-uploader__checkbox{display:flex;flex-direction:column;gap:8px}.valtimo-definition-uploader__checkbox--invalid ::ng-deep label:before{border-color:#da1e28;margin-inline:0}.valtimo-definition-uploader ::ng-deep .cds--modal-container{height:550px}.valtimo-definition-uploader ::ng-deep .cds--checkbox-label-text{color:#000}\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"] }]
823
+ ], 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-modal\n *ngIf=\"{\n activeStep: activeStep$ | async,\n backButtonEnabled: backButtonEnabled$ | async,\n isStepAfterUpload: isStepAfterUpload$ | async,\n nextButtonDisabled: nextButtonDisabled$ | async,\n notificationObj: notificationObj$ | async,\n showCheckboxError: showCheckboxError$ | async,\n showCloseButton: showCloseButton$ | async,\n uploadStatus: uploadStatus$ | async,\n showUploadModal: showUploadModal$ | async,\n } as obs\"\n valtimoCdsModal\n [open]=\"obs.showUploadModal\"\n showFooter=\"true\"\n class=\"valtimo-definition-uploader\"\n (close)=\"onCloseModal()\"\n>\n <cds-modal-header\n [showCloseButton]=\"obs.showCloseButton\"\n (closeSelect)=\"onCloseModal(obs.isStepAfterUpload && obs.uploadStatus !== UPLOAD_STATUS.ERROR)\"\n >\n <h3 cdsModalHeaderHeading>\n {{ 'buildingBlockManagement.importDefinition.title' | translate }}\n </h3>\n </cds-modal-header>\n\n <section [ngSwitch]=\"obs.activeStep\" cdsModalContent class=\"valtimo-definition-uploader__content\">\n <ng-template ngSwitchDefault>\n <valtimo-building-block-management-upload-step\n [message]=\"\n 'buildingBlockManagement.importDefinition.steps.' + obs.activeStep + '.message'\n | translate\n \"\n [title]=\"\n 'buildingBlockManagement.importDefinition.steps.' + obs.activeStep + '.title' | translate\n \"\n [illustration]=\"'valtimo-layout/img/' + obs.activeStep + '.svg'\"\n >\n </valtimo-building-block-management-upload-step>\n </ng-template>\n\n <form *ngSwitchCase=\"UPLOAD_STEP.FILE_SELECT\" [formGroup]=\"form\">\n <cds-file-uploader\n [attr.data-test-id]=\"testIds.fileUploader\"\n [accept]=\"acceptedFiles\"\n [buttonText]=\"'buildingBlockManagement.importDefinition.upload.buttonText' | translate\"\n [description]=\"'buildingBlockManagement.importDefinition.upload.description' | translate\"\n [multiple]=\"false\"\n [title]=\"'buildingBlockManagement.importDefinition.upload.title' | translate\"\n buttonType=\"primary\"\n formControlName=\"file\"\n class=\"valtimo-definition-uploader__file-uploader\"\n >\n </cds-file-uploader>\n\n <ng-container *ngIf=\"obs.activeStep === UPLOAD_STEP.FILE_SELECT\">\n <cds-inline-notification\n [attr.data-test-id]=\"testIds.overwriteWarning\"\n [notificationObj]=\"obs.notificationObj\"\n ></cds-inline-notification>\n\n <div class=\"valtimo-uploader__checkbox\">\n <cds-checkbox\n [attr.data-test-id]=\"testIds.overwriteCheckbox\"\n [class.valtimo-definition-uploader__checkbox--invalid]=\"obs.showCheckboxError\"\n (checkedChange)=\"onCheckedChange($event)\"\n >\n {{ 'buildingBlockManagement.importDefinition.checkbox.message' | translate }}\n </cds-checkbox>\n\n <div *ngIf=\"obs.showCheckboxError\" class=\"valtimo-definition-uploader__error\">\n <svg cdsIcon=\"warning--filled\" size=\"16\"></svg>\n {{ 'buildingBlockManagement.importDefinition.checkbox.error' | translate }}\n </div>\n </div>\n </ng-container>\n </form>\n\n <cds-progress-bar\n *ngSwitchCase=\"UPLOAD_STEP.FILE_UPLOAD\"\n [attr.data-test-id]=\"testIds.progressBar\"\n class=\"valtimo-definition-uploader__progress-bar\"\n [label]=\"'buildingBlockManagement.importDefinition.progressBar.label' | translate\"\n [status]=\"obs.uploadStatus\"\n [helperText]=\"\n 'buildingBlockManagement.importDefinition.progressBar.' + obs.uploadStatus | translate\n \"\n ></cds-progress-bar>\n </section>\n\n <cds-modal-footer\n class=\"valtimo-definition-uploader__footer\"\n [class.valtimo-definition-uploader__footer--double]=\"obs.activeStep === UPLOAD_STEP.PLUGINS\"\n >\n <button\n *ngIf=\"obs.uploadStatus !== UPLOAD_STATUS.ERROR && obs.activeStep !== UPLOAD_STEP.FILE_UPLOAD\"\n [attr.data-test-id]=\"testIds.cancelButton\"\n class=\"valtimo-definition-uploader__cancel\"\n cdsButton=\"ghost\"\n (click)=\"onCloseModal(obs.isStepAfterUpload)\"\n >\n {{ (obs.isStepAfterUpload ? 'interface.skip' : 'interface.cancel') | translate }}\n </button>\n\n <div class=\"valtimo-definition-uploader__actions\">\n <button\n *ngIf=\"obs.backButtonEnabled\"\n [attr.data-test-id]=\"testIds.backButton\"\n cdsButton=\"secondary\"\n (click)=\"onBackClick(obs.activeStep)\"\n >\n {{ 'interface.back' | translate }}\n </button>\n\n <button\n *ngIf=\"\n obs.uploadStatus !== UPLOAD_STATUS.ERROR && obs.activeStep !== UPLOAD_STEP.FILE_UPLOAD\n \"\n [attr.data-test-id]=\"testIds.nextButton\"\n cdsButton=\"primary\"\n [disabled]=\"obs.nextButtonDisabled\"\n (click)=\"onNextClick(obs.activeStep)\"\n >\n {{\n (obs.activeStep === UPLOAD_STEP.FILE_SELECT\n ? 'buildingBlockManagement.importDefinition.startUpload'\n : 'interface.next'\n ) | translate\n }}\n </button>\n\n <button\n *ngIf=\"\n obs.uploadStatus === UPLOAD_STATUS.ERROR || obs.activeStep === UPLOAD_STEP.FILE_UPLOAD\n \"\n [attr.data-test-id]=\"testIds.finishButton\"\n class=\"valtimo-definition-uploader__cancel\"\n cdsButton=\"primary\"\n (click)=\"onCloseModal(true)\"\n >\n {{ 'interface.finish' | translate }}\n </button>\n </div>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".valtimo-definition-uploader__content,.valtimo-definition-uploader__content form{display:flex;flex-direction:column;gap:16px}.valtimo-definition-uploader__footer ::ng-deep .cds--modal-footer{justify-content:unset!important;display:grid!important;grid-template-columns:1fr 1fr 2fr!important;grid-template-areas:\"cancel . actions\"!important}.valtimo-definition-uploader__footer--double ::ng-deep .cds--modal-footer{grid-template-columns:1fr 1fr!important;grid-template-areas:\"cancel actions\"!important}.valtimo-definition-uploader__progress-bar{height:100%;display:flex;flex-direction:column;justify-content:center}.valtimo-definition-uploader__error{display:flex;align-items:center;gap:10px;color:#da1e28;fill:#da1e28;font-size:12px}.valtimo-definition-uploader__cancel{grid-area:cancel;width:100%}.valtimo-definition-uploader__actions{grid-area:actions;display:flex}.valtimo-definition-uploader__actions button{flex:unset;width:100%}.valtimo-definition-uploader__file-uploader ::ng-deep cds-file{max-width:unset}.valtimo-definition-uploader__checkbox{display:flex;flex-direction:column;gap:8px}.valtimo-definition-uploader__checkbox--invalid ::ng-deep label:before{border-color:#da1e28;margin-inline:0}.valtimo-definition-uploader ::ng-deep .cds--modal-container{height:550px}.valtimo-definition-uploader ::ng-deep .cds--checkbox-label-text{color:#000}\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"] }]
739
824
  }], ctorParameters: () => [{ type: BuildingBlockManagementApiService }, { type: BuildingBlockManagementService }, { type: i2$1.FormBuilder }, { type: i3$1.IconService }, { type: i2$2.TranslateService }] });
740
825
 
741
826
  /*
@@ -754,16 +839,41 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
754
839
  * limitations under the License.
755
840
  */
756
841
  class BuildingBlockManagementListComponent {
842
+ get _query() {
843
+ return this._query$.getValue();
844
+ }
757
845
  constructor(buildingBlockManagementApiService, buildingBlockManagementService, iconService, router) {
758
846
  this.buildingBlockManagementApiService = buildingBlockManagementApiService;
759
847
  this.buildingBlockManagementService = buildingBlockManagementService;
760
848
  this.iconService = iconService;
761
849
  this.router = router;
850
+ this.testIds = BUILDING_BLOCK_MANAGEMENT_LIST_TEST_IDS;
762
851
  this.$loading = signal(true);
763
- this.buildingBlockDefinitions$ = this.buildingBlockManagementService.reload$.pipe(switchMap(() => this.buildingBlockManagementApiService.getBuildingBlockDefinitions()), tap(res => {
764
- this.buildingBlockManagementService.setUsedKeys(res.map(item => item.key));
852
+ this._collectionSize$ = new BehaviorSubject(0);
853
+ /*
854
+ Page, size and search term live in a single subject so that a search - which also resets the
855
+ page - results in one request rather than two.
856
+ */
857
+ this._query$ = new BehaviorSubject({
858
+ page: DEFAULT_PAGINATION.page,
859
+ searchTerm: '',
860
+ size: DEFAULT_PAGINATION.size,
861
+ });
862
+ this.pagination$ = combineLatest([
863
+ this._collectionSize$,
864
+ this._query$,
865
+ ]).pipe(map(([collectionSize, { page, size }]) => ({ collectionSize, page, size })));
866
+ this.buildingBlockDefinitions$ = combineLatest([this.buildingBlockManagementService.reload$, this._query$]).pipe(tap(() => this.$loading.set(true)), switchMap(([, { page, searchTerm, size }]) => this.buildingBlockManagementApiService
867
+ .searchBuildingBlockDefinitions({
868
+ page: page - 1,
869
+ size,
870
+ ...(searchTerm && { searchTerm }),
871
+ })
872
+ // Caught inside the switchMap: an error on the outer stream would terminate it, stranding the skeleton.
873
+ .pipe(catchError(() => of(null)))), tap(res => {
874
+ this._collectionSize$.next(res?.totalElements ?? 0);
765
875
  this.$loading.set(false);
766
- }));
876
+ }), map(res => res?.content ?? []));
767
877
  this.FIELDS = [
768
878
  { key: 'name', label: 'buildingBlockManagement.listColumns.name' },
769
879
  { key: 'key', label: 'buildingBlockManagement.listColumns.key' },
@@ -773,8 +883,40 @@ class BuildingBlockManagementListComponent {
773
883
  viewType: ViewType.TAGS,
774
884
  },
775
885
  ];
886
+ this._subscriptions = new Subscription();
776
887
  this.iconService.registerAll([Upload16]);
777
888
  }
889
+ ngOnInit() {
890
+ /*
891
+ The create modal validates that a key is not taken yet, so it needs every key rather than the
892
+ keys on the current page. Kept separate from the paginated list request for that reason.
893
+ */
894
+ this._subscriptions.add(this.buildingBlockManagementService.reload$
895
+ .pipe(switchMap(() => this.buildingBlockManagementApiService.getBuildingBlockDefinitions()))
896
+ .subscribe(definitions => this.buildingBlockManagementService.setUsedKeys(definitions.map(item => item.key))));
897
+ }
898
+ ngOnDestroy() {
899
+ this._subscriptions.unsubscribe();
900
+ }
901
+ paginationClicked(page) {
902
+ this.updateQuery({ page });
903
+ }
904
+ paginationSet(size) {
905
+ this.updateQuery({ size: Number(size), page: 1 });
906
+ }
907
+ searchTermEntered(searchTerm) {
908
+ this.updateQuery({ searchTerm: searchTerm ?? '', page: 1 });
909
+ }
910
+ updateQuery(update) {
911
+ const query = { ...this._query, ...update };
912
+ /*
913
+ The list emits paginationSet once on init with the size it restored from local storage, which
914
+ is usually the size we already hold. Ignoring no-op updates keeps that from costing a request.
915
+ */
916
+ if (isEqual(query, this._query))
917
+ return;
918
+ this._query$.next(query);
919
+ }
778
920
  showCreateModal() {
779
921
  this.buildingBlockManagementService.showCreateModal();
780
922
  }
@@ -792,7 +934,7 @@ class BuildingBlockManagementListComponent {
792
934
  ]);
793
935
  }
794
936
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: BuildingBlockManagementListComponent, deps: [{ token: BuildingBlockManagementApiService }, { token: BuildingBlockManagementService }, { token: i3$1.IconService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Component }); }
795
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: BuildingBlockManagementListComponent, isStandalone: true, selector: "valtimo-building-block-management-list", providers: [BuildingBlockManagementService], 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=\"{buildingBlockDefinitions: buildingBlockDefinitions$ | async} as obs\">\n <valtimo-carbon-list\n [fields]=\"FIELDS\"\n [items]=\"obs.buildingBlockDefinitions\"\n [loading]=\"$loading()\"\n (rowClicked)=\"onRowClick($event)\"\n >\n <ng-container\n carbonToolbarContent\n [ngTemplateOutlet]=\"buildingBlockDefinitionActions\"\n ></ng-container>\n\n <valtimo-no-results\n [action]=\"buildingBlockDefinitionActions\"\n [description]=\"'buildingBlockManagement.noResults.description' | translate\"\n [title]=\"'buildingBlockManagement.noResults.title' | translate\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n</ng-container>\n\n<ng-template #buildingBlockDefinitionActions>\n <div class=\"valtimo-building-block-management-list__actions\">\n <button cdsButton=\"ghost\" (click)=\"showUploadModal()\">\n {{ 'Upload' | translate }}\n\n <svg cdsIcon=\"upload\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button cdsButton=\"primary\" (click)=\"showCreateModal()\">\n {{ 'interface.create' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<valtimo-building-block-management-create-modal></valtimo-building-block-management-create-modal>\n\n<valtimo-building-block-management-upload-modal></valtimo-building-block-management-upload-modal>\n", styles: [".valtimo-building-block-management-list__actions{display:flex}\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: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i7.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "skeletonRowCount", "actions", "actionItems", "showActionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "initialSearchValue", "searchDebounceMs", "invalidSearchFields", "searchFields", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled", "expandedRowTemplate", "expandedRowKey", "trackByKey"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i7.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i3$1.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: BuildingBlockManagementCreateModalComponent, selector: "valtimo-building-block-management-create-modal" }, { kind: "component", type: BuildingBlockManagementUploadModalComponent, selector: "valtimo-building-block-management-upload-modal" }] }); }
937
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: BuildingBlockManagementListComponent, isStandalone: true, selector: "valtimo-building-block-management-list", providers: [BuildingBlockManagementService], 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 buildingBlockDefinitions: buildingBlockDefinitions$ | async,\n pagination: pagination$ | async,\n } as obs\"\n>\n <valtimo-carbon-list\n [fields]=\"FIELDS\"\n [isSearchable]=\"true\"\n [items]=\"obs.buildingBlockDefinitions\"\n [loading]=\"$loading()\"\n [pagination]=\"obs.pagination\"\n paginationIdentifier=\"buildingBlockManagementList\"\n (paginationClicked)=\"paginationClicked($event)\"\n (paginationSet)=\"paginationSet($event)\"\n (rowClicked)=\"onRowClick($event)\"\n (search)=\"searchTermEntered($event)\"\n >\n <ng-container\n carbonToolbarContent\n [ngTemplateOutlet]=\"buildingBlockDefinitionActions\"\n ></ng-container>\n\n <valtimo-no-results\n [action]=\"buildingBlockDefinitionActions\"\n [description]=\"'buildingBlockManagement.noResults.description' | translate\"\n [title]=\"'buildingBlockManagement.noResults.title' | translate\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n</ng-container>\n\n<ng-template #buildingBlockDefinitionActions>\n <div class=\"valtimo-building-block-management-list__actions\">\n <button\n [attr.data-test-id]=\"testIds.uploadButton\"\n cdsButton=\"ghost\"\n (click)=\"showUploadModal()\"\n >\n {{ 'Upload' | translate }}\n\n <svg cdsIcon=\"upload\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button\n [attr.data-test-id]=\"testIds.createButton\"\n cdsButton=\"primary\"\n (click)=\"showCreateModal()\"\n >\n {{ 'interface.create' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<valtimo-building-block-management-create-modal></valtimo-building-block-management-create-modal>\n\n<valtimo-building-block-management-upload-modal></valtimo-building-block-management-upload-modal>\n", styles: [".valtimo-building-block-management-list__actions{display:flex}\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: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i7.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "skeletonRowCount", "actions", "actionItems", "showActionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "initialSearchValue", "searchDebounceMs", "invalidSearchFields", "searchFields", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled", "expandedRowTemplate", "expandedRowKey", "trackByKey"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i7.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i3$1.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: BuildingBlockManagementCreateModalComponent, selector: "valtimo-building-block-management-create-modal" }, { kind: "component", type: BuildingBlockManagementUploadModalComponent, selector: "valtimo-building-block-management-upload-modal" }] }); }
796
938
  }
797
939
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: BuildingBlockManagementListComponent, decorators: [{
798
940
  type: Component,
@@ -804,7 +946,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
804
946
  TranslatePipe,
805
947
  BuildingBlockManagementCreateModalComponent,
806
948
  BuildingBlockManagementUploadModalComponent,
807
- ], providers: [BuildingBlockManagementService], 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=\"{buildingBlockDefinitions: buildingBlockDefinitions$ | async} as obs\">\n <valtimo-carbon-list\n [fields]=\"FIELDS\"\n [items]=\"obs.buildingBlockDefinitions\"\n [loading]=\"$loading()\"\n (rowClicked)=\"onRowClick($event)\"\n >\n <ng-container\n carbonToolbarContent\n [ngTemplateOutlet]=\"buildingBlockDefinitionActions\"\n ></ng-container>\n\n <valtimo-no-results\n [action]=\"buildingBlockDefinitionActions\"\n [description]=\"'buildingBlockManagement.noResults.description' | translate\"\n [title]=\"'buildingBlockManagement.noResults.title' | translate\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n</ng-container>\n\n<ng-template #buildingBlockDefinitionActions>\n <div class=\"valtimo-building-block-management-list__actions\">\n <button cdsButton=\"ghost\" (click)=\"showUploadModal()\">\n {{ 'Upload' | translate }}\n\n <svg cdsIcon=\"upload\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button cdsButton=\"primary\" (click)=\"showCreateModal()\">\n {{ 'interface.create' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<valtimo-building-block-management-create-modal></valtimo-building-block-management-create-modal>\n\n<valtimo-building-block-management-upload-modal></valtimo-building-block-management-upload-modal>\n", styles: [".valtimo-building-block-management-list__actions{display:flex}\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"] }]
949
+ ], providers: [BuildingBlockManagementService], 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 buildingBlockDefinitions: buildingBlockDefinitions$ | async,\n pagination: pagination$ | async,\n } as obs\"\n>\n <valtimo-carbon-list\n [fields]=\"FIELDS\"\n [isSearchable]=\"true\"\n [items]=\"obs.buildingBlockDefinitions\"\n [loading]=\"$loading()\"\n [pagination]=\"obs.pagination\"\n paginationIdentifier=\"buildingBlockManagementList\"\n (paginationClicked)=\"paginationClicked($event)\"\n (paginationSet)=\"paginationSet($event)\"\n (rowClicked)=\"onRowClick($event)\"\n (search)=\"searchTermEntered($event)\"\n >\n <ng-container\n carbonToolbarContent\n [ngTemplateOutlet]=\"buildingBlockDefinitionActions\"\n ></ng-container>\n\n <valtimo-no-results\n [action]=\"buildingBlockDefinitionActions\"\n [description]=\"'buildingBlockManagement.noResults.description' | translate\"\n [title]=\"'buildingBlockManagement.noResults.title' | translate\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n</ng-container>\n\n<ng-template #buildingBlockDefinitionActions>\n <div class=\"valtimo-building-block-management-list__actions\">\n <button\n [attr.data-test-id]=\"testIds.uploadButton\"\n cdsButton=\"ghost\"\n (click)=\"showUploadModal()\"\n >\n {{ 'Upload' | translate }}\n\n <svg cdsIcon=\"upload\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button\n [attr.data-test-id]=\"testIds.createButton\"\n cdsButton=\"primary\"\n (click)=\"showCreateModal()\"\n >\n {{ 'interface.create' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<valtimo-building-block-management-create-modal></valtimo-building-block-management-create-modal>\n\n<valtimo-building-block-management-upload-modal></valtimo-building-block-management-upload-modal>\n", styles: [".valtimo-building-block-management-list__actions{display:flex}\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"] }]
808
950
  }], ctorParameters: () => [{ type: BuildingBlockManagementApiService }, { type: BuildingBlockManagementService }, { type: i3$1.IconService }, { type: i3.Router }] });
809
951
 
810
952
  /*
@@ -836,6 +978,7 @@ class BuildingBlockManagementMetadataComponent {
836
978
  this.buildingBlockManagementDetailService = buildingBlockManagementDetailService;
837
979
  this.buildingBlockManagementApiService = buildingBlockManagementApiService;
838
980
  this.fb = fb;
981
+ this.testIds = BUILDING_BLOCK_MANAGEMENT_METADATA_TEST_IDS;
839
982
  this.formGroup = this.fb.group({
840
983
  name: this.fb.control('', Validators.required),
841
984
  key: this.fb.control('', Validators.required),
@@ -883,7 +1026,7 @@ class BuildingBlockManagementMetadataComponent {
883
1026
  }));
884
1027
  }
885
1028
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: BuildingBlockManagementMetadataComponent, deps: [{ token: BuildingBlockManagementDetailService }, { token: BuildingBlockManagementApiService }, { token: i2$1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
886
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: BuildingBlockManagementMetadataComponent, isStandalone: true, selector: "valtimo-building-block-management-metadata", 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<form class=\"building-block-management-metadata\" [formGroup]=\"formGroup\" [cdsLayer]=\"1\">\n <h4 class=\"building-block-management-metadata__title\">\n {{ 'buildingBlockManagement.metadata.title' | translate }}\n </h4>\n\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label [disabled]=\"formGroup.disabled\" [invalid]=\"name.touched && name.invalid\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.createDefinition.name' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'buildingBlockManagement.createDefinition.nameTooltip' | translate\"\n [disabled]=\"formGroup.disabled\"\n ></v-tooltip-icon>\n </span>\n\n <input\n formControlName=\"name\"\n cdsText\n placeholder=\"{{ 'buildingBlockManagement.createDefinition.namePlaceholder' | translate }}\"\n />\n </cds-label>\n </div>\n\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label [disabled]=\"formGroup.disabled\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.createDefinition.keyTitle' | translate }}\n </span>\n\n <input formControlName=\"key\" cdsText valtimoReadOnly [isReadOnly]=\"true\" />\n </cds-label>\n </div>\n\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label\n [disabled]=\"formGroup.disabled\"\n [invalid]=\"description.touched && description.invalid\"\n >\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.createDefinition.description' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'buildingBlockManagement.createDefinition.descriptionTooltip' | translate\"\n [disabled]=\"formGroup.disabled\"\n ></v-tooltip-icon>\n </span>\n\n <textarea\n cdsTextArea\n formControlName=\"description\"\n placeholder=\"{{\n 'buildingBlockManagement.createDefinition.descriptionPlaceholder' | translate\n }}\"\n [rows]=\"3\"\n [cols]=\"150\"\n ></textarea>\n </cds-label>\n </div>\n\n <div class=\"building-block-management-metadata__buttons\">\n <button\n cdsButton=\"primary\"\n [disabled]=\"formGroup.disabled || formGroup.invalid || formGroup.pristine\"\n (click)=\"onSave()\"\n >\n {{ 'interface.save' | translate }}\n </button>\n </div>\n</form>\n", styles: [".building-block-management-metadata{display:flex;flex-direction:column;gap:16px;padding:16px;background-color:var(--cds-layer-01);max-width:625px}.building-block-management-metadata__title{font-size:16px;line-height:24px;font-weight:600}.building-block-management-metadata__buttons{display:flex;justify-content:flex-end;width:100%}.cds--text-input__field-wrapper cds-label{width:100%}.cds--text-input__field-wrapper ::ng-deep .cds--label{width:100%}.cds--text-input__field-wrapper:not(:last-child){margin-bottom:16px}.label-with-tooltip{display:flex;align-items:center}.select-label{padding-bottom: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: "ngmodule", type: CommonModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i3$1.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i3$1.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "directive", type: i3$1.TextArea, selector: "[cdsTextArea], [ibmTextArea]", inputs: ["theme", "invalid", "skeleton"] }, { kind: "ngmodule", type: TooltipIconModule }, { kind: "component", type: i7.TooltipIconComponent, selector: "v-tooltip-icon", inputs: ["tooltip", "disabled"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i3$1.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "directive", type: ReadOnlyDirective, selector: "[valtimoReadOnly]", inputs: ["isReadOnly"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }] }); }
1029
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: BuildingBlockManagementMetadataComponent, isStandalone: true, selector: "valtimo-building-block-management-metadata", 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<form class=\"building-block-management-metadata\" [formGroup]=\"formGroup\" [cdsLayer]=\"1\">\n <h4 class=\"building-block-management-metadata__title\">\n {{ 'buildingBlockManagement.metadata.title' | translate }}\n </h4>\n\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label [disabled]=\"formGroup.disabled\" [invalid]=\"name.touched && name.invalid\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.createDefinition.name' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'buildingBlockManagement.createDefinition.nameTooltip' | translate\"\n [disabled]=\"formGroup.disabled\"\n ></v-tooltip-icon>\n </span>\n\n <input\n [attr.data-test-id]=\"testIds.nameInput\"\n formControlName=\"name\"\n cdsText\n placeholder=\"{{ 'buildingBlockManagement.createDefinition.namePlaceholder' | translate }}\"\n />\n </cds-label>\n </div>\n\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label [disabled]=\"formGroup.disabled\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.createDefinition.keyTitle' | translate }}\n </span>\n\n <input\n [attr.data-test-id]=\"testIds.keyInput\"\n formControlName=\"key\"\n cdsText\n valtimoReadOnly\n [isReadOnly]=\"true\"\n />\n </cds-label>\n </div>\n\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label\n [disabled]=\"formGroup.disabled\"\n [invalid]=\"description.touched && description.invalid\"\n >\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.createDefinition.description' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'buildingBlockManagement.createDefinition.descriptionTooltip' | translate\"\n [disabled]=\"formGroup.disabled\"\n ></v-tooltip-icon>\n </span>\n\n <textarea\n [attr.data-test-id]=\"testIds.descriptionInput\"\n cdsTextArea\n formControlName=\"description\"\n placeholder=\"{{\n 'buildingBlockManagement.createDefinition.descriptionPlaceholder' | translate\n }}\"\n [rows]=\"3\"\n [cols]=\"150\"\n ></textarea>\n </cds-label>\n </div>\n\n <div class=\"building-block-management-metadata__buttons\">\n <button\n [attr.data-test-id]=\"testIds.saveButton\"\n cdsButton=\"primary\"\n [disabled]=\"formGroup.disabled || formGroup.invalid || formGroup.pristine\"\n (click)=\"onSave()\"\n >\n {{ 'interface.save' | translate }}\n </button>\n </div>\n</form>\n", styles: [".building-block-management-metadata{display:flex;flex-direction:column;gap:16px;padding:16px;background-color:var(--cds-layer-01);max-width:625px}.building-block-management-metadata__title{font-size:16px;line-height:24px;font-weight:600}.building-block-management-metadata__buttons{display:flex;justify-content:flex-end;width:100%}.cds--text-input__field-wrapper cds-label{width:100%}.cds--text-input__field-wrapper ::ng-deep .cds--label{width:100%}.cds--text-input__field-wrapper:not(:last-child){margin-bottom:16px}.label-with-tooltip{display:flex;align-items:center}.select-label{padding-bottom: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: "ngmodule", type: CommonModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i3$1.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i3$1.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "directive", type: i3$1.TextArea, selector: "[cdsTextArea], [ibmTextArea]", inputs: ["theme", "invalid", "skeleton"] }, { kind: "ngmodule", type: TooltipIconModule }, { kind: "component", type: i7.TooltipIconComponent, selector: "v-tooltip-icon", inputs: ["tooltip", "disabled"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i3$1.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "directive", type: ReadOnlyDirective, selector: "[valtimoReadOnly]", inputs: ["isReadOnly"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }] }); }
887
1030
  }
888
1031
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: BuildingBlockManagementMetadataComponent, decorators: [{
889
1032
  type: Component,
@@ -896,7 +1039,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
896
1039
  LayerModule,
897
1040
  ReadOnlyDirective,
898
1041
  ButtonModule,
899
- ], 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<form class=\"building-block-management-metadata\" [formGroup]=\"formGroup\" [cdsLayer]=\"1\">\n <h4 class=\"building-block-management-metadata__title\">\n {{ 'buildingBlockManagement.metadata.title' | translate }}\n </h4>\n\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label [disabled]=\"formGroup.disabled\" [invalid]=\"name.touched && name.invalid\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.createDefinition.name' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'buildingBlockManagement.createDefinition.nameTooltip' | translate\"\n [disabled]=\"formGroup.disabled\"\n ></v-tooltip-icon>\n </span>\n\n <input\n formControlName=\"name\"\n cdsText\n placeholder=\"{{ 'buildingBlockManagement.createDefinition.namePlaceholder' | translate }}\"\n />\n </cds-label>\n </div>\n\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label [disabled]=\"formGroup.disabled\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.createDefinition.keyTitle' | translate }}\n </span>\n\n <input formControlName=\"key\" cdsText valtimoReadOnly [isReadOnly]=\"true\" />\n </cds-label>\n </div>\n\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label\n [disabled]=\"formGroup.disabled\"\n [invalid]=\"description.touched && description.invalid\"\n >\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.createDefinition.description' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'buildingBlockManagement.createDefinition.descriptionTooltip' | translate\"\n [disabled]=\"formGroup.disabled\"\n ></v-tooltip-icon>\n </span>\n\n <textarea\n cdsTextArea\n formControlName=\"description\"\n placeholder=\"{{\n 'buildingBlockManagement.createDefinition.descriptionPlaceholder' | translate\n }}\"\n [rows]=\"3\"\n [cols]=\"150\"\n ></textarea>\n </cds-label>\n </div>\n\n <div class=\"building-block-management-metadata__buttons\">\n <button\n cdsButton=\"primary\"\n [disabled]=\"formGroup.disabled || formGroup.invalid || formGroup.pristine\"\n (click)=\"onSave()\"\n >\n {{ 'interface.save' | translate }}\n </button>\n </div>\n</form>\n", styles: [".building-block-management-metadata{display:flex;flex-direction:column;gap:16px;padding:16px;background-color:var(--cds-layer-01);max-width:625px}.building-block-management-metadata__title{font-size:16px;line-height:24px;font-weight:600}.building-block-management-metadata__buttons{display:flex;justify-content:flex-end;width:100%}.cds--text-input__field-wrapper cds-label{width:100%}.cds--text-input__field-wrapper ::ng-deep .cds--label{width:100%}.cds--text-input__field-wrapper:not(:last-child){margin-bottom:16px}.label-with-tooltip{display:flex;align-items:center}.select-label{padding-bottom: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"] }]
1042
+ ], 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<form class=\"building-block-management-metadata\" [formGroup]=\"formGroup\" [cdsLayer]=\"1\">\n <h4 class=\"building-block-management-metadata__title\">\n {{ 'buildingBlockManagement.metadata.title' | translate }}\n </h4>\n\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label [disabled]=\"formGroup.disabled\" [invalid]=\"name.touched && name.invalid\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.createDefinition.name' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'buildingBlockManagement.createDefinition.nameTooltip' | translate\"\n [disabled]=\"formGroup.disabled\"\n ></v-tooltip-icon>\n </span>\n\n <input\n [attr.data-test-id]=\"testIds.nameInput\"\n formControlName=\"name\"\n cdsText\n placeholder=\"{{ 'buildingBlockManagement.createDefinition.namePlaceholder' | translate }}\"\n />\n </cds-label>\n </div>\n\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label [disabled]=\"formGroup.disabled\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.createDefinition.keyTitle' | translate }}\n </span>\n\n <input\n [attr.data-test-id]=\"testIds.keyInput\"\n formControlName=\"key\"\n cdsText\n valtimoReadOnly\n [isReadOnly]=\"true\"\n />\n </cds-label>\n </div>\n\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label\n [disabled]=\"formGroup.disabled\"\n [invalid]=\"description.touched && description.invalid\"\n >\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.createDefinition.description' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'buildingBlockManagement.createDefinition.descriptionTooltip' | translate\"\n [disabled]=\"formGroup.disabled\"\n ></v-tooltip-icon>\n </span>\n\n <textarea\n [attr.data-test-id]=\"testIds.descriptionInput\"\n cdsTextArea\n formControlName=\"description\"\n placeholder=\"{{\n 'buildingBlockManagement.createDefinition.descriptionPlaceholder' | translate\n }}\"\n [rows]=\"3\"\n [cols]=\"150\"\n ></textarea>\n </cds-label>\n </div>\n\n <div class=\"building-block-management-metadata__buttons\">\n <button\n [attr.data-test-id]=\"testIds.saveButton\"\n cdsButton=\"primary\"\n [disabled]=\"formGroup.disabled || formGroup.invalid || formGroup.pristine\"\n (click)=\"onSave()\"\n >\n {{ 'interface.save' | translate }}\n </button>\n </div>\n</form>\n", styles: [".building-block-management-metadata{display:flex;flex-direction:column;gap:16px;padding:16px;background-color:var(--cds-layer-01);max-width:625px}.building-block-management-metadata__title{font-size:16px;line-height:24px;font-weight:600}.building-block-management-metadata__buttons{display:flex;justify-content:flex-end;width:100%}.cds--text-input__field-wrapper cds-label{width:100%}.cds--text-input__field-wrapper ::ng-deep .cds--label{width:100%}.cds--text-input__field-wrapper:not(:last-child){margin-bottom:16px}.label-with-tooltip{display:flex;align-items:center}.select-label{padding-bottom: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"] }]
900
1043
  }], ctorParameters: () => [{ type: BuildingBlockManagementDetailService }, { type: BuildingBlockManagementApiService }, { type: i2$1.FormBuilder }] });
901
1044
 
902
1045
  /*
@@ -923,6 +1066,7 @@ class BuildingBlockManagementArtworkComponent {
923
1066
  this.buildingBlockManagementApiService = buildingBlockManagementApiService;
924
1067
  this.formBuilder = formBuilder;
925
1068
  this.iconService = iconService;
1069
+ this.testIds = BUILDING_BLOCK_MANAGEMENT_ARTWORK_TEST_IDS;
926
1070
  this.ACCEPTED_FILES = ['png'];
927
1071
  this.formGroup = this.formBuilder.group({
928
1072
  file: this.formBuilder.control(new Set(), [Validators.required]),
@@ -988,7 +1132,7 @@ class BuildingBlockManagementArtworkComponent {
988
1132
  });
989
1133
  }
990
1134
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: BuildingBlockManagementArtworkComponent, deps: [{ token: BuildingBlockManagementDetailService }, { token: BuildingBlockManagementApiService }, { token: i2$1.FormBuilder }, { token: i3$1.IconService }], target: i0.ɵɵFactoryTarget.Component }); }
991
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: BuildingBlockManagementArtworkComponent, isStandalone: true, selector: "valtimo-building-block-management-artwork", 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<form\n *ngIf=\"{\n artwork: artwork$ | async,\n loadingArtwork: loadingArtwork$ | async,\n } as obs\"\n class=\"building-block-management-artwork\"\n [formGroup]=\"formGroup\"\n [cdsLayer]=\"1\"\n>\n <h4 class=\"building-block-management-artwork__title\">\n {{ 'buildingBlockManagement.artwork.title' | translate }}\n </h4>\n\n @if (obs.loadingArtwork) {\n <div class=\"loading-container\"><cds-loading></cds-loading></div>\n }\n\n @if (!obs.loadingArtwork && obs.artwork) {\n <div class=\"building-block-management-artwork__preview\">\n <img\n class=\"building-block-management-artwork__image\"\n [src]=\"'data:image/png;base64,' + obs.artwork.imageBase64\"\n />\n </div>\n\n <div class=\"building-block-management-artwork__buttons\">\n <button cdsButton=\"danger\" (click)=\"onDeleteButtonClick()\" [disabled]=\"formGroup.disabled\">\n {{ 'interface.delete' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </div>\n }\n\n @if (!obs.loadingArtwork && !obs.artwork) {\n <cds-file-uploader\n *ngIf=\"!obs.loadingArtwork && !obs.artwork\"\n [accept]=\"ACCEPTED_FILES\"\n [multiple]=\"false\"\n buttonType=\"primary\"\n [title]=\"'buildingBlockManagement.artwork.fileUploaderTitle' | translate\"\n [description]=\"'buildingBlockManagement.artwork.fileUploaderDescription' | translate\"\n [buttonText]=\"'buildingBlockManagement.artwork.fileUploaderButton' | translate\"\n formControlName=\"file\"\n >\n </cds-file-uploader>\n\n <div class=\"building-block-management-artwork__buttons\">\n <button\n cdsButton=\"primary\"\n [disabled]=\"formGroup.disabled || formGroup.invalid || formGroup.pristine\"\n (click)=\"onSave()\"\n >\n {{ 'interface.upload' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"upload\" size=\"16\"></svg>\n </button>\n </div>\n }\n</form>\n\n<valtimo-render-in-body>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"buildingBlockManagement.artwork.deleteConfirmationModalText\"\n [showModalSubject$]=\"showDeleteConfirmationModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDelete()\"\n ></valtimo-confirmation-modal>\n</valtimo-render-in-body>\n", styles: [".building-block-management-artwork{display:flex;flex-direction:column;gap:16px;padding:16px;background-color:var(--cds-layer-01);max-width:625px}.building-block-management-artwork__title{font-size:16px;line-height:24px;font-weight:600;margin-bottom:8px}.building-block-management-artwork__preview{display:flex;justify-content:center;align-items:center;background-color:var(--cds-layer-02);padding:12px;min-height:180px}.building-block-management-artwork__image{max-width:100%;max-height:300px;object-fit:contain}.building-block-management-artwork__buttons{display:flex;justify-content:flex-end;width:100%;margin-top:12px}.building-block-management-artwork__buttons button[cdsButton]{min-width:100px}.label-with-tooltip{display:flex;align-items:center}.loading-container{display:flex;width:100%;justify-content:center;align-items:center;min-height:180px}\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: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: InputModule }, { kind: "ngmodule", type: TooltipIconModule }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i3$1.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: FileUploaderModule }, { kind: "component", type: i3$1.FileUploader, selector: "cds-file-uploader, ibm-file-uploader", inputs: ["buttonText", "buttonType", "title", "description", "accept", "multiple", "skeleton", "size", "fileItemSize", "drop", "dropText", "fileUploaderId", "files", "disabled"], outputs: ["filesChange"] }, { kind: "ngmodule", type: LoadingModule }, { kind: "component", type: i3$1.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i3$1.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: ConfirmationModalModule }, { kind: "component", type: i7.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }, { kind: "component", type: RenderInBodyComponent, selector: "valtimo-render-in-body" }] }); }
1135
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: BuildingBlockManagementArtworkComponent, isStandalone: true, selector: "valtimo-building-block-management-artwork", 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<form\n *ngIf=\"{\n artwork: artwork$ | async,\n loadingArtwork: loadingArtwork$ | async,\n } as obs\"\n class=\"building-block-management-artwork\"\n [formGroup]=\"formGroup\"\n [cdsLayer]=\"1\"\n>\n <h4 class=\"building-block-management-artwork__title\">\n {{ 'buildingBlockManagement.artwork.title' | translate }}\n </h4>\n\n @if (obs.loadingArtwork) {\n <div class=\"loading-container\"><cds-loading></cds-loading></div>\n }\n\n @if (!obs.loadingArtwork && obs.artwork) {\n <div class=\"building-block-management-artwork__preview\">\n <img\n [attr.data-test-id]=\"testIds.image\"\n class=\"building-block-management-artwork__image\"\n [src]=\"'data:image/png;base64,' + obs.artwork.imageBase64\"\n />\n </div>\n\n <div class=\"building-block-management-artwork__buttons\">\n <button\n [attr.data-test-id]=\"testIds.deleteButton\"\n cdsButton=\"danger\"\n (click)=\"onDeleteButtonClick()\"\n [disabled]=\"formGroup.disabled\"\n >\n {{ 'interface.delete' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </div>\n }\n\n @if (!obs.loadingArtwork && !obs.artwork) {\n <cds-file-uploader\n *ngIf=\"!obs.loadingArtwork && !obs.artwork\"\n [attr.data-test-id]=\"testIds.fileUploader\"\n [accept]=\"ACCEPTED_FILES\"\n [multiple]=\"false\"\n buttonType=\"primary\"\n [title]=\"'buildingBlockManagement.artwork.fileUploaderTitle' | translate\"\n [description]=\"'buildingBlockManagement.artwork.fileUploaderDescription' | translate\"\n [buttonText]=\"'buildingBlockManagement.artwork.fileUploaderButton' | translate\"\n formControlName=\"file\"\n >\n </cds-file-uploader>\n\n <div class=\"building-block-management-artwork__buttons\">\n <button\n [attr.data-test-id]=\"testIds.uploadButton\"\n cdsButton=\"primary\"\n [disabled]=\"formGroup.disabled || formGroup.invalid || formGroup.pristine\"\n (click)=\"onSave()\"\n >\n {{ 'interface.upload' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"upload\" size=\"16\"></svg>\n </button>\n </div>\n }\n</form>\n\n<valtimo-render-in-body>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"buildingBlockManagement.artwork.deleteConfirmationModalText\"\n [showModalSubject$]=\"showDeleteConfirmationModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDelete()\"\n ></valtimo-confirmation-modal>\n</valtimo-render-in-body>\n", styles: [".building-block-management-artwork{display:flex;flex-direction:column;gap:16px;padding:16px;background-color:var(--cds-layer-01);max-width:625px}.building-block-management-artwork__title{font-size:16px;line-height:24px;font-weight:600;margin-bottom:8px}.building-block-management-artwork__preview{display:flex;justify-content:center;align-items:center;background-color:var(--cds-layer-02);padding:12px;min-height:180px}.building-block-management-artwork__image{max-width:100%;max-height:300px;object-fit:contain}.building-block-management-artwork__buttons{display:flex;justify-content:flex-end;width:100%;margin-top:12px}.building-block-management-artwork__buttons button[cdsButton]{min-width:100px}.label-with-tooltip{display:flex;align-items:center}.loading-container{display:flex;width:100%;justify-content:center;align-items:center;min-height:180px}\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: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: InputModule }, { kind: "ngmodule", type: TooltipIconModule }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i3$1.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: FileUploaderModule }, { kind: "component", type: i3$1.FileUploader, selector: "cds-file-uploader, ibm-file-uploader", inputs: ["buttonText", "buttonType", "title", "description", "accept", "multiple", "skeleton", "size", "fileItemSize", "drop", "dropText", "fileUploaderId", "files", "disabled"], outputs: ["filesChange"] }, { kind: "ngmodule", type: LoadingModule }, { kind: "component", type: i3$1.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i3$1.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: ConfirmationModalModule }, { kind: "component", type: i7.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }, { kind: "component", type: RenderInBodyComponent, selector: "valtimo-render-in-body" }] }); }
992
1136
  }
993
1137
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: BuildingBlockManagementArtworkComponent, decorators: [{
994
1138
  type: Component,
@@ -1005,7 +1149,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
1005
1149
  IconModule,
1006
1150
  ConfirmationModalModule,
1007
1151
  RenderInBodyComponent,
1008
- ], 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<form\n *ngIf=\"{\n artwork: artwork$ | async,\n loadingArtwork: loadingArtwork$ | async,\n } as obs\"\n class=\"building-block-management-artwork\"\n [formGroup]=\"formGroup\"\n [cdsLayer]=\"1\"\n>\n <h4 class=\"building-block-management-artwork__title\">\n {{ 'buildingBlockManagement.artwork.title' | translate }}\n </h4>\n\n @if (obs.loadingArtwork) {\n <div class=\"loading-container\"><cds-loading></cds-loading></div>\n }\n\n @if (!obs.loadingArtwork && obs.artwork) {\n <div class=\"building-block-management-artwork__preview\">\n <img\n class=\"building-block-management-artwork__image\"\n [src]=\"'data:image/png;base64,' + obs.artwork.imageBase64\"\n />\n </div>\n\n <div class=\"building-block-management-artwork__buttons\">\n <button cdsButton=\"danger\" (click)=\"onDeleteButtonClick()\" [disabled]=\"formGroup.disabled\">\n {{ 'interface.delete' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </div>\n }\n\n @if (!obs.loadingArtwork && !obs.artwork) {\n <cds-file-uploader\n *ngIf=\"!obs.loadingArtwork && !obs.artwork\"\n [accept]=\"ACCEPTED_FILES\"\n [multiple]=\"false\"\n buttonType=\"primary\"\n [title]=\"'buildingBlockManagement.artwork.fileUploaderTitle' | translate\"\n [description]=\"'buildingBlockManagement.artwork.fileUploaderDescription' | translate\"\n [buttonText]=\"'buildingBlockManagement.artwork.fileUploaderButton' | translate\"\n formControlName=\"file\"\n >\n </cds-file-uploader>\n\n <div class=\"building-block-management-artwork__buttons\">\n <button\n cdsButton=\"primary\"\n [disabled]=\"formGroup.disabled || formGroup.invalid || formGroup.pristine\"\n (click)=\"onSave()\"\n >\n {{ 'interface.upload' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"upload\" size=\"16\"></svg>\n </button>\n </div>\n }\n</form>\n\n<valtimo-render-in-body>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"buildingBlockManagement.artwork.deleteConfirmationModalText\"\n [showModalSubject$]=\"showDeleteConfirmationModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDelete()\"\n ></valtimo-confirmation-modal>\n</valtimo-render-in-body>\n", styles: [".building-block-management-artwork{display:flex;flex-direction:column;gap:16px;padding:16px;background-color:var(--cds-layer-01);max-width:625px}.building-block-management-artwork__title{font-size:16px;line-height:24px;font-weight:600;margin-bottom:8px}.building-block-management-artwork__preview{display:flex;justify-content:center;align-items:center;background-color:var(--cds-layer-02);padding:12px;min-height:180px}.building-block-management-artwork__image{max-width:100%;max-height:300px;object-fit:contain}.building-block-management-artwork__buttons{display:flex;justify-content:flex-end;width:100%;margin-top:12px}.building-block-management-artwork__buttons button[cdsButton]{min-width:100px}.label-with-tooltip{display:flex;align-items:center}.loading-container{display:flex;width:100%;justify-content:center;align-items:center;min-height:180px}\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"] }]
1152
+ ], 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<form\n *ngIf=\"{\n artwork: artwork$ | async,\n loadingArtwork: loadingArtwork$ | async,\n } as obs\"\n class=\"building-block-management-artwork\"\n [formGroup]=\"formGroup\"\n [cdsLayer]=\"1\"\n>\n <h4 class=\"building-block-management-artwork__title\">\n {{ 'buildingBlockManagement.artwork.title' | translate }}\n </h4>\n\n @if (obs.loadingArtwork) {\n <div class=\"loading-container\"><cds-loading></cds-loading></div>\n }\n\n @if (!obs.loadingArtwork && obs.artwork) {\n <div class=\"building-block-management-artwork__preview\">\n <img\n [attr.data-test-id]=\"testIds.image\"\n class=\"building-block-management-artwork__image\"\n [src]=\"'data:image/png;base64,' + obs.artwork.imageBase64\"\n />\n </div>\n\n <div class=\"building-block-management-artwork__buttons\">\n <button\n [attr.data-test-id]=\"testIds.deleteButton\"\n cdsButton=\"danger\"\n (click)=\"onDeleteButtonClick()\"\n [disabled]=\"formGroup.disabled\"\n >\n {{ 'interface.delete' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </div>\n }\n\n @if (!obs.loadingArtwork && !obs.artwork) {\n <cds-file-uploader\n *ngIf=\"!obs.loadingArtwork && !obs.artwork\"\n [attr.data-test-id]=\"testIds.fileUploader\"\n [accept]=\"ACCEPTED_FILES\"\n [multiple]=\"false\"\n buttonType=\"primary\"\n [title]=\"'buildingBlockManagement.artwork.fileUploaderTitle' | translate\"\n [description]=\"'buildingBlockManagement.artwork.fileUploaderDescription' | translate\"\n [buttonText]=\"'buildingBlockManagement.artwork.fileUploaderButton' | translate\"\n formControlName=\"file\"\n >\n </cds-file-uploader>\n\n <div class=\"building-block-management-artwork__buttons\">\n <button\n [attr.data-test-id]=\"testIds.uploadButton\"\n cdsButton=\"primary\"\n [disabled]=\"formGroup.disabled || formGroup.invalid || formGroup.pristine\"\n (click)=\"onSave()\"\n >\n {{ 'interface.upload' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"upload\" size=\"16\"></svg>\n </button>\n </div>\n }\n</form>\n\n<valtimo-render-in-body>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"buildingBlockManagement.artwork.deleteConfirmationModalText\"\n [showModalSubject$]=\"showDeleteConfirmationModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDelete()\"\n ></valtimo-confirmation-modal>\n</valtimo-render-in-body>\n", styles: [".building-block-management-artwork{display:flex;flex-direction:column;gap:16px;padding:16px;background-color:var(--cds-layer-01);max-width:625px}.building-block-management-artwork__title{font-size:16px;line-height:24px;font-weight:600;margin-bottom:8px}.building-block-management-artwork__preview{display:flex;justify-content:center;align-items:center;background-color:var(--cds-layer-02);padding:12px;min-height:180px}.building-block-management-artwork__image{max-width:100%;max-height:300px;object-fit:contain}.building-block-management-artwork__buttons{display:flex;justify-content:flex-end;width:100%;margin-top:12px}.building-block-management-artwork__buttons button[cdsButton]{min-width:100px}.label-with-tooltip{display:flex;align-items:center}.loading-container{display:flex;width:100%;justify-content:center;align-items:center;min-height:180px}\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"] }]
1009
1153
  }], ctorParameters: () => [{ type: BuildingBlockManagementDetailService }, { type: BuildingBlockManagementApiService }, { type: i2$1.FormBuilder }, { type: i3$1.IconService }] });
1010
1154
 
1011
1155
  /*
@@ -1028,6 +1172,7 @@ class BuildingBlockManagementPluginsComponent {
1028
1172
  this.buildingBlockManagementApiService = buildingBlockManagementApiService;
1029
1173
  this.pluginManagementService = pluginManagementService;
1030
1174
  this.buildingBlockManagementDetailService = buildingBlockManagementDetailService;
1175
+ this.testIds = BUILDING_BLOCK_MANAGEMENT_PLUGINS_TEST_IDS;
1031
1176
  this.loading$ = new BehaviorSubject(true);
1032
1177
  this.usedPluginTitles$ = combineLatest([
1033
1178
  this.pluginManagementService.getPluginDefinitions(),
@@ -1039,11 +1184,11 @@ class BuildingBlockManagementPluginsComponent {
1039
1184
  }), tap(() => this.loading$.next(false)));
1040
1185
  }
1041
1186
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: BuildingBlockManagementPluginsComponent, deps: [{ token: BuildingBlockManagementApiService }, { token: i2$3.PluginManagementService }, { token: BuildingBlockManagementDetailService }], target: i0.ɵɵFactoryTarget.Component }); }
1042
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: BuildingBlockManagementPluginsComponent, isStandalone: true, selector: "valtimo-building-block-management-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\n class=\"building-block-management-plugins\"\n *ngIf=\"{usedPluginTitles: usedPluginTitles$ | async, loading: loading$ | async} as obs\"\n>\n <h4 class=\"building-block-management-plugins__title\">\n {{ 'buildingBlockManagement.plugins.title' | translate }}\n </h4>\n\n @if (obs.loading) {\n <div class=\"loading-container\"><cds-loading size=\"sm\"></cds-loading></div>\n }\n\n @if (!obs.loading && obs.usedPluginTitles.length > 0) {\n <div class=\"building-block-management-plugins__tags\">\n @for (pluginTitle of obs.usedPluginTitles; track pluginTitle) {\n <cds-tag type=\"blue\">{{ pluginTitle }}</cds-tag>\n }\n </div>\n }\n\n @if (!obs.loading && obs.usedPluginTitles.length === 0) {\n <p class=\"building-block-management-plugins__description cds--label-description\">\n {{ 'buildingBlockManagement.plugins.noPluginsUsed' | translate }}\n </p>\n }\n</div>\n", styles: [".building-block-management-plugins{display:flex;padding:16px 24px;width:100%;background-color:var(--cds-layer-01);align-items:center;gap:16px}.building-block-management-plugins__title{font-size:16px;line-height:24px;font-weight:600;flex-shrink:0}.building-block-management-plugins__tags{display:flex;flex-flow:row wrap;height:100%;gap:8px}.building-block-management-plugins__description{padding:0;margin:0}.loading-container{display:flex;width:100%;justify-content:center}\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: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: LoadingModule }, { kind: "component", type: i3$1.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: TagModule }, { kind: "component", type: i3$1.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class", "skeleton"] }] }); }
1187
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: BuildingBlockManagementPluginsComponent, isStandalone: true, selector: "valtimo-building-block-management-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\n class=\"building-block-management-plugins\"\n *ngIf=\"{usedPluginTitles: usedPluginTitles$ | async, loading: loading$ | async} as obs\"\n>\n <h4 class=\"building-block-management-plugins__title\">\n {{ 'buildingBlockManagement.plugins.title' | translate }}\n </h4>\n\n @if (obs.loading) {\n <div class=\"loading-container\"><cds-loading size=\"sm\"></cds-loading></div>\n }\n\n @if (!obs.loading && obs.usedPluginTitles.length > 0) {\n <div [attr.data-test-id]=\"testIds.usedPlugins\" class=\"building-block-management-plugins__tags\">\n @for (pluginTitle of obs.usedPluginTitles; track pluginTitle) {\n <cds-tag type=\"blue\">{{ pluginTitle }}</cds-tag>\n }\n </div>\n }\n\n @if (!obs.loading && obs.usedPluginTitles.length === 0) {\n <p\n [attr.data-test-id]=\"testIds.noPluginsUsed\"\n class=\"building-block-management-plugins__description cds--label-description\"\n >\n {{ 'buildingBlockManagement.plugins.noPluginsUsed' | translate }}\n </p>\n }\n</div>\n", styles: [".building-block-management-plugins{display:flex;padding:16px 24px;width:100%;background-color:var(--cds-layer-01);align-items:center;gap:16px}.building-block-management-plugins__title{font-size:16px;line-height:24px;font-weight:600;flex-shrink:0}.building-block-management-plugins__tags{display:flex;flex-flow:row wrap;height:100%;gap:8px}.building-block-management-plugins__description{padding:0;margin:0}.loading-container{display:flex;width:100%;justify-content:center}\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: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: LoadingModule }, { kind: "component", type: i3$1.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: TagModule }, { kind: "component", type: i3$1.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class", "skeleton"] }] }); }
1043
1188
  }
1044
1189
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: BuildingBlockManagementPluginsComponent, decorators: [{
1045
1190
  type: Component,
1046
- args: [{ standalone: true, selector: 'valtimo-building-block-management-plugins', imports: [CommonModule, LoadingModule, TranslatePipe, TagModule], 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=\"building-block-management-plugins\"\n *ngIf=\"{usedPluginTitles: usedPluginTitles$ | async, loading: loading$ | async} as obs\"\n>\n <h4 class=\"building-block-management-plugins__title\">\n {{ 'buildingBlockManagement.plugins.title' | translate }}\n </h4>\n\n @if (obs.loading) {\n <div class=\"loading-container\"><cds-loading size=\"sm\"></cds-loading></div>\n }\n\n @if (!obs.loading && obs.usedPluginTitles.length > 0) {\n <div class=\"building-block-management-plugins__tags\">\n @for (pluginTitle of obs.usedPluginTitles; track pluginTitle) {\n <cds-tag type=\"blue\">{{ pluginTitle }}</cds-tag>\n }\n </div>\n }\n\n @if (!obs.loading && obs.usedPluginTitles.length === 0) {\n <p class=\"building-block-management-plugins__description cds--label-description\">\n {{ 'buildingBlockManagement.plugins.noPluginsUsed' | translate }}\n </p>\n }\n</div>\n", styles: [".building-block-management-plugins{display:flex;padding:16px 24px;width:100%;background-color:var(--cds-layer-01);align-items:center;gap:16px}.building-block-management-plugins__title{font-size:16px;line-height:24px;font-weight:600;flex-shrink:0}.building-block-management-plugins__tags{display:flex;flex-flow:row wrap;height:100%;gap:8px}.building-block-management-plugins__description{padding:0;margin:0}.loading-container{display:flex;width:100%;justify-content:center}\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"] }]
1191
+ args: [{ standalone: true, selector: 'valtimo-building-block-management-plugins', imports: [CommonModule, LoadingModule, TranslatePipe, TagModule], 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=\"building-block-management-plugins\"\n *ngIf=\"{usedPluginTitles: usedPluginTitles$ | async, loading: loading$ | async} as obs\"\n>\n <h4 class=\"building-block-management-plugins__title\">\n {{ 'buildingBlockManagement.plugins.title' | translate }}\n </h4>\n\n @if (obs.loading) {\n <div class=\"loading-container\"><cds-loading size=\"sm\"></cds-loading></div>\n }\n\n @if (!obs.loading && obs.usedPluginTitles.length > 0) {\n <div [attr.data-test-id]=\"testIds.usedPlugins\" class=\"building-block-management-plugins__tags\">\n @for (pluginTitle of obs.usedPluginTitles; track pluginTitle) {\n <cds-tag type=\"blue\">{{ pluginTitle }}</cds-tag>\n }\n </div>\n }\n\n @if (!obs.loading && obs.usedPluginTitles.length === 0) {\n <p\n [attr.data-test-id]=\"testIds.noPluginsUsed\"\n class=\"building-block-management-plugins__description cds--label-description\"\n >\n {{ 'buildingBlockManagement.plugins.noPluginsUsed' | translate }}\n </p>\n }\n</div>\n", styles: [".building-block-management-plugins{display:flex;padding:16px 24px;width:100%;background-color:var(--cds-layer-01);align-items:center;gap:16px}.building-block-management-plugins__title{font-size:16px;line-height:24px;font-weight:600;flex-shrink:0}.building-block-management-plugins__tags{display:flex;flex-flow:row wrap;height:100%;gap:8px}.building-block-management-plugins__description{padding:0;margin:0}.loading-container{display:flex;width:100%;justify-content:center}\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"] }]
1047
1192
  }], ctorParameters: () => [{ type: BuildingBlockManagementApiService }, { type: i2$3.PluginManagementService }, { type: BuildingBlockManagementDetailService }] });
1048
1193
 
1049
1194
  /*
@@ -1189,6 +1334,7 @@ class BuildingBlockManagementProcessUploadComponent {
1189
1334
  this.processLinkService = processLinkService;
1190
1335
  this.buildingBlockManagementDetailService = buildingBlockManagementDetailService;
1191
1336
  this.translateService = translateService;
1337
+ this.testIds = BUILDING_BLOCK_MANAGEMENT_PROCESS_UPLOAD_TEST_IDS;
1192
1338
  this.modalOpen$ = this.buildingBlockManagementDetailService.showProcessDefinitionUploadModal$;
1193
1339
  this.showReplaceConfirmationModal$ = new BehaviorSubject(false);
1194
1340
  this.replaceModalContent = '';
@@ -1298,7 +1444,7 @@ class BuildingBlockManagementProcessUploadComponent {
1298
1444
  this.translateService.instant('processManagement.upload.replaceContent'));
1299
1445
  }
1300
1446
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: BuildingBlockManagementProcessUploadComponent, deps: [{ token: i2$1.FormBuilder }, { token: i5.GlobalNotificationService }, { token: i3$2.ProcessLinkService }, { token: BuildingBlockManagementDetailService }, { token: i2$2.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
1301
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: BuildingBlockManagementProcessUploadComponent, isStandalone: true, selector: "valtimo-building-block-management-process-upload", 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-modal valtimoCdsModal [open]=\"modalOpen$ | async\" size=\"sm\" (close)=\"closeModal()\">\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>{{ 'processManagement.upload.modalTitle' | translate }}</h3>\n </cds-modal-header>\n\n <section cdsModalContent [cdsLayer]=\"1\" [formGroup]=\"form\">\n <cds-file-uploader\n [accept]=\"ACCEPTED_FILES\"\n [buttonText]=\"'processManagement.upload.buttonText' | translate\"\n [description]=\"'processManagement.upload.description' | translate\"\n [multiple]=\"false\"\n [title]=\"'processManagement.upload.title' | translate\"\n buttonType=\"primary\"\n formControlName=\"file\"\n >\n </cds-file-uploader>\n </section>\n\n <cds-modal-footer>\n <button cdsButton=\"secondary\" (click)=\"closeModal()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n [disabled]=\"(fileSelected$ | async) === false\"\n (click)=\"uploadProcessBpmn()\"\n >\n {{ 'interface.upload' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n\n<valtimo-render-in-body>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"processManagement.upload.replaceConfirm\"\n confirmButtonType=\"danger\"\n cancelButtonTextTranslationKey=\"interface.cancel\"\n [content]=\"replaceModalContent\"\n [showModalSubject$]=\"showReplaceConfirmationModal$\"\n titleTranslationKey=\"processManagement.upload.replaceTitle\"\n (confirmEvent)=\"confirmReplace()\"\n (cancelEvent)=\"clearReplaceModal()\"\n ></valtimo-confirmation-modal>\n</valtimo-render-in-body>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2$2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FileUploaderModule }, { kind: "component", type: i3$1.FileUploader, selector: "cds-file-uploader, ibm-file-uploader", inputs: ["buttonText", "buttonType", "title", "description", "accept", "multiple", "skeleton", "size", "fileItemSize", "drop", "dropText", "fileUploaderId", "files", "disabled"], outputs: ["filesChange"] }, { kind: "ngmodule", type: ModalModule }, { kind: "component", type: i3$1.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i3$1.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i3$1.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i3$1.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i3$1.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i3$1.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: ConfirmationModalModule }, { kind: "component", type: i7.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }, { kind: "component", type: RenderInBodyComponent, selector: "valtimo-render-in-body" }, { kind: "directive", type: ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1447
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: BuildingBlockManagementProcessUploadComponent, isStandalone: true, selector: "valtimo-building-block-management-process-upload", 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-modal valtimoCdsModal [open]=\"modalOpen$ | async\" size=\"sm\" (close)=\"closeModal()\">\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>{{ 'processManagement.upload.modalTitle' | translate }}</h3>\n </cds-modal-header>\n\n <section cdsModalContent [cdsLayer]=\"1\" [formGroup]=\"form\">\n <cds-file-uploader\n [attr.data-test-id]=\"testIds.fileUploader\"\n [accept]=\"ACCEPTED_FILES\"\n [buttonText]=\"'processManagement.upload.buttonText' | translate\"\n [description]=\"'processManagement.upload.description' | translate\"\n [multiple]=\"false\"\n [title]=\"'processManagement.upload.title' | translate\"\n buttonType=\"primary\"\n formControlName=\"file\"\n >\n </cds-file-uploader>\n </section>\n\n <cds-modal-footer>\n <button cdsButton=\"secondary\" [attr.data-test-id]=\"testIds.cancelButton\" (click)=\"closeModal()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n [attr.data-test-id]=\"testIds.submitButton\"\n [disabled]=\"(fileSelected$ | async) === false\"\n (click)=\"uploadProcessBpmn()\"\n >\n {{ 'interface.upload' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n\n<valtimo-render-in-body>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"processManagement.upload.replaceConfirm\"\n confirmButtonType=\"danger\"\n cancelButtonTextTranslationKey=\"interface.cancel\"\n [content]=\"replaceModalContent\"\n [showModalSubject$]=\"showReplaceConfirmationModal$\"\n titleTranslationKey=\"processManagement.upload.replaceTitle\"\n (confirmEvent)=\"confirmReplace()\"\n (cancelEvent)=\"clearReplaceModal()\"\n ></valtimo-confirmation-modal>\n</valtimo-render-in-body>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2$2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FileUploaderModule }, { kind: "component", type: i3$1.FileUploader, selector: "cds-file-uploader, ibm-file-uploader", inputs: ["buttonText", "buttonType", "title", "description", "accept", "multiple", "skeleton", "size", "fileItemSize", "drop", "dropText", "fileUploaderId", "files", "disabled"], outputs: ["filesChange"] }, { kind: "ngmodule", type: ModalModule }, { kind: "component", type: i3$1.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i3$1.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i3$1.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i3$1.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i3$1.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i3$1.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: ConfirmationModalModule }, { kind: "component", type: i7.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }, { kind: "component", type: RenderInBodyComponent, selector: "valtimo-render-in-body" }, { kind: "directive", type: ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1302
1448
  }
1303
1449
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: BuildingBlockManagementProcessUploadComponent, decorators: [{
1304
1450
  type: Component,
@@ -1313,7 +1459,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
1313
1459
  ConfirmationModalModule,
1314
1460
  RenderInBodyComponent,
1315
1461
  ValtimoCdsModalDirective,
1316
- ], 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-modal valtimoCdsModal [open]=\"modalOpen$ | async\" size=\"sm\" (close)=\"closeModal()\">\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>{{ 'processManagement.upload.modalTitle' | translate }}</h3>\n </cds-modal-header>\n\n <section cdsModalContent [cdsLayer]=\"1\" [formGroup]=\"form\">\n <cds-file-uploader\n [accept]=\"ACCEPTED_FILES\"\n [buttonText]=\"'processManagement.upload.buttonText' | translate\"\n [description]=\"'processManagement.upload.description' | translate\"\n [multiple]=\"false\"\n [title]=\"'processManagement.upload.title' | translate\"\n buttonType=\"primary\"\n formControlName=\"file\"\n >\n </cds-file-uploader>\n </section>\n\n <cds-modal-footer>\n <button cdsButton=\"secondary\" (click)=\"closeModal()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n [disabled]=\"(fileSelected$ | async) === false\"\n (click)=\"uploadProcessBpmn()\"\n >\n {{ 'interface.upload' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n\n<valtimo-render-in-body>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"processManagement.upload.replaceConfirm\"\n confirmButtonType=\"danger\"\n cancelButtonTextTranslationKey=\"interface.cancel\"\n [content]=\"replaceModalContent\"\n [showModalSubject$]=\"showReplaceConfirmationModal$\"\n titleTranslationKey=\"processManagement.upload.replaceTitle\"\n (confirmEvent)=\"confirmReplace()\"\n (cancelEvent)=\"clearReplaceModal()\"\n ></valtimo-confirmation-modal>\n</valtimo-render-in-body>\n" }]
1462
+ ], 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-modal valtimoCdsModal [open]=\"modalOpen$ | async\" size=\"sm\" (close)=\"closeModal()\">\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>{{ 'processManagement.upload.modalTitle' | translate }}</h3>\n </cds-modal-header>\n\n <section cdsModalContent [cdsLayer]=\"1\" [formGroup]=\"form\">\n <cds-file-uploader\n [attr.data-test-id]=\"testIds.fileUploader\"\n [accept]=\"ACCEPTED_FILES\"\n [buttonText]=\"'processManagement.upload.buttonText' | translate\"\n [description]=\"'processManagement.upload.description' | translate\"\n [multiple]=\"false\"\n [title]=\"'processManagement.upload.title' | translate\"\n buttonType=\"primary\"\n formControlName=\"file\"\n >\n </cds-file-uploader>\n </section>\n\n <cds-modal-footer>\n <button cdsButton=\"secondary\" [attr.data-test-id]=\"testIds.cancelButton\" (click)=\"closeModal()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n [attr.data-test-id]=\"testIds.submitButton\"\n [disabled]=\"(fileSelected$ | async) === false\"\n (click)=\"uploadProcessBpmn()\"\n >\n {{ 'interface.upload' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n\n<valtimo-render-in-body>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"processManagement.upload.replaceConfirm\"\n confirmButtonType=\"danger\"\n cancelButtonTextTranslationKey=\"interface.cancel\"\n [content]=\"replaceModalContent\"\n [showModalSubject$]=\"showReplaceConfirmationModal$\"\n titleTranslationKey=\"processManagement.upload.replaceTitle\"\n (confirmEvent)=\"confirmReplace()\"\n (cancelEvent)=\"clearReplaceModal()\"\n ></valtimo-confirmation-modal>\n</valtimo-render-in-body>\n" }]
1317
1463
  }], ctorParameters: () => [{ type: i2$1.FormBuilder }, { type: i5.GlobalNotificationService }, { type: i3$2.ProcessLinkService }, { type: BuildingBlockManagementDetailService }, { type: i2$2.TranslateService }] });
1318
1464
 
1319
1465
  /*
@@ -1338,6 +1484,7 @@ class BuildingBlockManagementProcessesComponent {
1338
1484
  this.translateService = translateService;
1339
1485
  this.iconService = iconService;
1340
1486
  this.router = router;
1487
+ this.testIds = BUILDING_BLOCK_MANAGEMENT_PROCESSES_TEST_IDS;
1341
1488
  this.$loading = signal(true);
1342
1489
  this._buildingBlockProcessDefinitions$ = new BehaviorSubject([]);
1343
1490
  this._buildingBlockProcessDefinitionItems = [];
@@ -1464,7 +1611,7 @@ class BuildingBlockManagementProcessesComponent {
1464
1611
  return process.main || this._buildingBlockProcessDefinitionItems.length === 1;
1465
1612
  }
1466
1613
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: BuildingBlockManagementProcessesComponent, deps: [{ token: BuildingBlockManagementDetailService }, { token: BuildingBlockManagementApiService }, { token: i2$2.TranslateService }, { token: i3$1.IconService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Component }); }
1467
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: BuildingBlockManagementProcessesComponent, isStandalone: true, selector: "valtimo-building-block-management-processes", 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-carbon-list\n [fields]=\"FIELDS\"\n [actionItems]=\"ACTION_ITEMS\"\n [items]=\"buildingBlockProcessDefinitionItems$ | async\"\n [loading]=\"$loading()\"\n (rowClicked)=\"onRowClick($event)\"\n>\n <div carbonToolbarContent>\n <div class=\"valtimo-building-block-management-list__actions\">\n <button\n cdsButton=\"ghost\"\n (click)=\"showUploadModal()\"\n [disabled]=\"(isFinal$ | async) || $loading()\"\n >\n {{ 'Upload' | translate }}\n\n <svg cdsIcon=\"upload\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button\n cdsButton=\"primary\"\n (click)=\"onCreateClick()\"\n [disabled]=\"(isFinal$ | async) || $loading()\"\n >\n {{ 'interface.create' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n </div>\n</valtimo-carbon-list>\n\n<valtimo-building-block-management-process-upload></valtimo-building-block-management-process-upload>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"processManagement.deleteModal.content\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"processManagement.deleteModal.title\"\n (confirmEvent)=\"onDeleteConfirm()\"\n></valtimo-confirmation-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: "ngmodule", type: CommonModule }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i7.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "skeletonRowCount", "actions", "actionItems", "showActionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "initialSearchValue", "searchDebounceMs", "invalidSearchFields", "searchFields", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled", "expandedRowTemplate", "expandedRowKey", "trackByKey"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2$2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i3$1.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: BuildingBlockManagementProcessUploadComponent, selector: "valtimo-building-block-management-process-upload" }, { kind: "ngmodule", type: ConfirmationModalModule }, { kind: "component", type: i7.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }] }); }
1614
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: BuildingBlockManagementProcessesComponent, isStandalone: true, selector: "valtimo-building-block-management-processes", 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-carbon-list\n [fields]=\"FIELDS\"\n [actionItems]=\"ACTION_ITEMS\"\n [items]=\"buildingBlockProcessDefinitionItems$ | async\"\n [loading]=\"$loading()\"\n (rowClicked)=\"onRowClick($event)\"\n>\n <div carbonToolbarContent>\n <div class=\"valtimo-building-block-management-list__actions\">\n <button\n cdsButton=\"ghost\"\n [attr.data-test-id]=\"testIds.uploadButton\"\n (click)=\"showUploadModal()\"\n [disabled]=\"(isFinal$ | async) || $loading()\"\n >\n {{ 'Upload' | translate }}\n\n <svg cdsIcon=\"upload\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button\n cdsButton=\"primary\"\n [attr.data-test-id]=\"testIds.createButton\"\n (click)=\"onCreateClick()\"\n [disabled]=\"(isFinal$ | async) || $loading()\"\n >\n {{ 'interface.create' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n </div>\n</valtimo-carbon-list>\n\n<valtimo-building-block-management-process-upload></valtimo-building-block-management-process-upload>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"processManagement.deleteModal.content\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"processManagement.deleteModal.title\"\n (confirmEvent)=\"onDeleteConfirm()\"\n></valtimo-confirmation-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: "ngmodule", type: CommonModule }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i7.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "skeletonRowCount", "actions", "actionItems", "showActionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "initialSearchValue", "searchDebounceMs", "invalidSearchFields", "searchFields", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled", "expandedRowTemplate", "expandedRowKey", "trackByKey"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2$2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i3$1.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: BuildingBlockManagementProcessUploadComponent, selector: "valtimo-building-block-management-process-upload" }, { kind: "ngmodule", type: ConfirmationModalModule }, { kind: "component", type: i7.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }] }); }
1468
1615
  }
1469
1616
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: BuildingBlockManagementProcessesComponent, decorators: [{
1470
1617
  type: Component,
@@ -1476,7 +1623,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
1476
1623
  IconModule,
1477
1624
  BuildingBlockManagementProcessUploadComponent,
1478
1625
  ConfirmationModalModule,
1479
- ], 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-carbon-list\n [fields]=\"FIELDS\"\n [actionItems]=\"ACTION_ITEMS\"\n [items]=\"buildingBlockProcessDefinitionItems$ | async\"\n [loading]=\"$loading()\"\n (rowClicked)=\"onRowClick($event)\"\n>\n <div carbonToolbarContent>\n <div class=\"valtimo-building-block-management-list__actions\">\n <button\n cdsButton=\"ghost\"\n (click)=\"showUploadModal()\"\n [disabled]=\"(isFinal$ | async) || $loading()\"\n >\n {{ 'Upload' | translate }}\n\n <svg cdsIcon=\"upload\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button\n cdsButton=\"primary\"\n (click)=\"onCreateClick()\"\n [disabled]=\"(isFinal$ | async) || $loading()\"\n >\n {{ 'interface.create' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n </div>\n</valtimo-carbon-list>\n\n<valtimo-building-block-management-process-upload></valtimo-building-block-management-process-upload>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"processManagement.deleteModal.content\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"processManagement.deleteModal.title\"\n (confirmEvent)=\"onDeleteConfirm()\"\n></valtimo-confirmation-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"] }]
1626
+ ], 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-carbon-list\n [fields]=\"FIELDS\"\n [actionItems]=\"ACTION_ITEMS\"\n [items]=\"buildingBlockProcessDefinitionItems$ | async\"\n [loading]=\"$loading()\"\n (rowClicked)=\"onRowClick($event)\"\n>\n <div carbonToolbarContent>\n <div class=\"valtimo-building-block-management-list__actions\">\n <button\n cdsButton=\"ghost\"\n [attr.data-test-id]=\"testIds.uploadButton\"\n (click)=\"showUploadModal()\"\n [disabled]=\"(isFinal$ | async) || $loading()\"\n >\n {{ 'Upload' | translate }}\n\n <svg cdsIcon=\"upload\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button\n cdsButton=\"primary\"\n [attr.data-test-id]=\"testIds.createButton\"\n (click)=\"onCreateClick()\"\n [disabled]=\"(isFinal$ | async) || $loading()\"\n >\n {{ 'interface.create' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n </div>\n</valtimo-carbon-list>\n\n<valtimo-building-block-management-process-upload></valtimo-building-block-management-process-upload>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"processManagement.deleteModal.content\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"processManagement.deleteModal.title\"\n (confirmEvent)=\"onDeleteConfirm()\"\n></valtimo-confirmation-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"] }]
1480
1627
  }], ctorParameters: () => [{ type: BuildingBlockManagementDetailService }, { type: BuildingBlockManagementApiService }, { type: i2$2.TranslateService }, { type: i3$1.IconService }, { type: i3.Router }] });
1481
1628
 
1482
1629
  /*
@@ -1504,6 +1651,7 @@ class BuildingBlockManagementVersionSelectorComponent {
1504
1651
  constructor(buildingBlockManagementDetailService, buildingBlockManagementApiService) {
1505
1652
  this.buildingBlockManagementDetailService = buildingBlockManagementDetailService;
1506
1653
  this.buildingBlockManagementApiService = buildingBlockManagementApiService;
1654
+ this.testIds = BUILDING_BLOCK_MANAGEMENT_DETAIL_ACTIONS_TEST_IDS;
1507
1655
  this._versions$ = combineLatest([
1508
1656
  this.buildingBlockManagementDetailService.buildingBlockDefinitionKey$,
1509
1657
  this.buildingBlockManagementDetailService.reloadVersions$,
@@ -1516,14 +1664,15 @@ class BuildingBlockManagementVersionSelectorComponent {
1516
1664
  content: version.versionTag,
1517
1665
  selected: versionTag === version.versionTag,
1518
1666
  final: version.final,
1667
+ 'data-test-id': `${BUILDING_BLOCK_VERSION_OPTION_TEST_ID_PREFIX}${version.versionTag}`,
1519
1668
  }))));
1520
1669
  }
1521
1670
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: BuildingBlockManagementVersionSelectorComponent, deps: [{ token: BuildingBlockManagementDetailService }, { token: BuildingBlockManagementApiService }], target: i0.ɵɵFactoryTarget.Component }); }
1522
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: BuildingBlockManagementVersionSelectorComponent, isStandalone: true, selector: "valtimo-building-block-management-version-selector", 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=\"{versionListItems: (versionListItems$ | async) || []} as obs\">\n <cds-dropdown\n class=\"version-selector\"\n [disabled]=\"obs.versionListItems.length === 1\"\n [displayValue]=\"versionTemplate\"\n (selected)=\"onVersionSelected($event)\"\n >\n <cds-dropdown-list\n [items]=\"obs.versionListItems\"\n [listTpl]=\"versionTemplate\"\n ></cds-dropdown-list>\n </cds-dropdown>\n</ng-container>\n\n<ng-template #versionTemplate let-item=\"item\">\n <div class=\"version-selector-dropdown-template\">\n <cds-tag\n class=\"cds-tag--no-margin\"\n [type]=\"!item?.final ? 'red' : 'green'\"\n [title]=\"item?.content\"\n >\n {{ !item?.final ? 'DRAFT: ' + item?.content : item?.content }}\n </cds-tag>\n </div>\n</ng-template>\n", styles: [".version-selector{margin:0;max-width:300px}::ng-deep .version-selector-dropdown-template{display:flex}::ng-deep .version-selector-dropdown-template .cds--tag{margin:0 8px 0 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;line-height:24px;max-width:100%}\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: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i3$1.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: i3$1.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "ngmodule", type: TagModule }, { kind: "component", type: i3$1.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class", "skeleton"] }] }); }
1671
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: BuildingBlockManagementVersionSelectorComponent, isStandalone: true, selector: "valtimo-building-block-management-version-selector", 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=\"{versionListItems: (versionListItems$ | async) || []} as obs\">\n <cds-dropdown\n class=\"version-selector\"\n [attr.data-test-id]=\"testIds.versionSelectDropdown\"\n [disabled]=\"obs.versionListItems.length === 1\"\n [displayValue]=\"versionTemplate\"\n (selected)=\"onVersionSelected($event)\"\n >\n <cds-dropdown-list\n [items]=\"obs.versionListItems\"\n [listTpl]=\"versionTemplate\"\n ></cds-dropdown-list>\n </cds-dropdown>\n</ng-container>\n\n<ng-template #versionTemplate let-item=\"item\">\n <div [attr.data-test-id]=\"item?.['data-test-id']\" class=\"version-selector-dropdown-template\">\n <cds-tag\n class=\"cds-tag--no-margin\"\n [type]=\"!item?.final ? 'red' : 'green'\"\n [title]=\"item?.content\"\n >\n {{ !item?.final ? 'DRAFT: ' + item?.content : item?.content }}\n </cds-tag>\n </div>\n</ng-template>\n", styles: [".version-selector{margin:0;max-width:300px}::ng-deep .version-selector-dropdown-template{display:flex}::ng-deep .version-selector-dropdown-template .cds--tag{margin:0 8px 0 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;line-height:24px;max-width:100%}\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: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i3$1.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: i3$1.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "ngmodule", type: TagModule }, { kind: "component", type: i3$1.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class", "skeleton"] }] }); }
1523
1672
  }
1524
1673
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: BuildingBlockManagementVersionSelectorComponent, decorators: [{
1525
1674
  type: Component,
1526
- args: [{ standalone: true, selector: 'valtimo-building-block-management-version-selector', imports: [CommonModule, DropdownModule, TagModule], 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=\"{versionListItems: (versionListItems$ | async) || []} as obs\">\n <cds-dropdown\n class=\"version-selector\"\n [disabled]=\"obs.versionListItems.length === 1\"\n [displayValue]=\"versionTemplate\"\n (selected)=\"onVersionSelected($event)\"\n >\n <cds-dropdown-list\n [items]=\"obs.versionListItems\"\n [listTpl]=\"versionTemplate\"\n ></cds-dropdown-list>\n </cds-dropdown>\n</ng-container>\n\n<ng-template #versionTemplate let-item=\"item\">\n <div class=\"version-selector-dropdown-template\">\n <cds-tag\n class=\"cds-tag--no-margin\"\n [type]=\"!item?.final ? 'red' : 'green'\"\n [title]=\"item?.content\"\n >\n {{ !item?.final ? 'DRAFT: ' + item?.content : item?.content }}\n </cds-tag>\n </div>\n</ng-template>\n", styles: [".version-selector{margin:0;max-width:300px}::ng-deep .version-selector-dropdown-template{display:flex}::ng-deep .version-selector-dropdown-template .cds--tag{margin:0 8px 0 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;line-height:24px;max-width:100%}\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"] }]
1675
+ args: [{ standalone: true, selector: 'valtimo-building-block-management-version-selector', imports: [CommonModule, DropdownModule, TagModule], 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=\"{versionListItems: (versionListItems$ | async) || []} as obs\">\n <cds-dropdown\n class=\"version-selector\"\n [attr.data-test-id]=\"testIds.versionSelectDropdown\"\n [disabled]=\"obs.versionListItems.length === 1\"\n [displayValue]=\"versionTemplate\"\n (selected)=\"onVersionSelected($event)\"\n >\n <cds-dropdown-list\n [items]=\"obs.versionListItems\"\n [listTpl]=\"versionTemplate\"\n ></cds-dropdown-list>\n </cds-dropdown>\n</ng-container>\n\n<ng-template #versionTemplate let-item=\"item\">\n <div [attr.data-test-id]=\"item?.['data-test-id']\" class=\"version-selector-dropdown-template\">\n <cds-tag\n class=\"cds-tag--no-margin\"\n [type]=\"!item?.final ? 'red' : 'green'\"\n [title]=\"item?.content\"\n >\n {{ !item?.final ? 'DRAFT: ' + item?.content : item?.content }}\n </cds-tag>\n </div>\n</ng-template>\n", styles: [".version-selector{margin:0;max-width:300px}::ng-deep .version-selector-dropdown-template{display:flex}::ng-deep .version-selector-dropdown-template .cds--tag{margin:0 8px 0 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;line-height:24px;max-width:100%}\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"] }]
1527
1676
  }], ctorParameters: () => [{ type: BuildingBlockManagementDetailService }, { type: BuildingBlockManagementApiService }] });
1528
1677
 
1529
1678
  /*
@@ -1555,6 +1704,7 @@ class BuildingBlockManagementDetailActionsComponent {
1555
1704
  this.notificationService = notificationService;
1556
1705
  this.translateService = translateService;
1557
1706
  this.document = document;
1707
+ this.testIds = BUILDING_BLOCK_MANAGEMENT_DETAIL_ACTIONS_TEST_IDS;
1558
1708
  this.actionInProgress$ = new BehaviorSubject(false);
1559
1709
  this.showDraftModal$ = new BehaviorSubject(false);
1560
1710
  this.definition$ = this.buildingBlockManagementDetailService.buildingBlockDefinition$;
@@ -1670,7 +1820,7 @@ class BuildingBlockManagementDetailActionsComponent {
1670
1820
  });
1671
1821
  }
1672
1822
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: BuildingBlockManagementDetailActionsComponent, deps: [{ token: BuildingBlockManagementApiService }, { token: BuildingBlockManagementDetailService }, { token: i2$1.FormBuilder }, { token: i5.GlobalNotificationService }, { token: i2$2.TranslateService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
1673
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: BuildingBlockManagementDetailActionsComponent, isStandalone: true, selector: "valtimo-building-block-management-detail-actions", viewQueries: [{ propertyName: "_exportMessageTemplateRef", first: true, predicate: ["exportingMessage"], 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 class=\"building-block-actions\"\n *ngIf=\"{\n isFinal: isFinal$ | async,\n } as obs\"\n>\n <div class=\"building-block-metadata\">\n <valtimo-building-block-management-version-selector></valtimo-building-block-management-version-selector>\n </div>\n\n <div class=\"building-block-buttons\">\n <v-overflow-menu\n class=\"overflow-button\"\n [menuWidth]=\"250\"\n placement=\"bottom-end\"\n >\n <button overflowTrigger cdsButton=\"tertiary\">\n {{ 'buildingBlockManagement.actions.more' | translate }}\n <svg class=\"cds--btn__icon\" cdsIcon=\"overflow-menu--vertical\" size=\"16\"></svg>\n </button>\n\n <v-overflow-menu-option\n optionId=\"exportBuildingBlock\"\n (selected)=\"export()\"\n [disabled]=\"(actionInProgress$ | async) || (exporting$ | async)\"\n >\n {{\n 'buildingBlockManagement.overflowMenu.export'\n | translate: {value: buildingBlockName$ | async}\n }}\n </v-overflow-menu-option>\n\n <v-overflow-menu-option\n *ngIf=\"!obs.isFinal\"\n [disabled]=\"actionInProgress$ | async\"\n (selected)=\"finalizeDraft()\"\n >\n {{ 'buildingBlockManagement.actions.makeFinal' | translate }}\n </v-overflow-menu-option>\n\n <v-overflow-menu-option\n *ngIf=\"obs.isFinal\"\n [disabled]=\"actionInProgress$ | async\"\n (selected)=\"openDraftModal()\"\n >\n {{ 'buildingBlockManagement.actions.createDraft' | translate }}\n </v-overflow-menu-option>\n </v-overflow-menu>\n </div>\n</div>\n\n<ng-template #exportingMessage>\n <div class=\"exporting-message\">\n <span class=\"cds--inline-notification__title\">{{\n 'buildingBlockManagement.overflowMenu.preparingDownload' | translate\n }}</span>\n <cds-loading size=\"sm\"></cds-loading>\n </div>\n</ng-template>\n\n<cds-modal\n *ngIf=\"{open: showDraftModal$ | async} as obs\"\n [open]=\"obs.open\"\n showFooter=\"true\"\n valtimoCdsModal\n (close)=\"closeDraftModal()\"\n>\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"closeDraftModal()\">\n <h3 cdsModalHeaderHeading>\n {{ 'buildingBlockManagement.actions.draft.title' | translate }}\n </h3>\n </cds-modal-header>\n\n <form [formGroup]=\"draftForm\" cdsModalContent class=\"bb-management-actions__modal\" [cdsLayer]=\"1\">\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label\n [disabled]=\"draftForm.disabled\"\n [invalid]=\"versionTag.touched && versionTag.invalid\"\n >\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.actions.draft.version' | translate }}\n </span>\n\n <input\n formControlName=\"versionTag\"\n cdsText\n placeholder=\"{{ 'buildingBlockManagement.actions.draft.placeholder' | translate }}\"\n />\n </cds-label>\n </div>\n </form>\n\n <cds-modal-footer>\n <button cdsButton=\"secondary\" (click)=\"closeDraftModal()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n [disabled]=\"draftForm.invalid || (actionInProgress$ | async)\"\n (click)=\"createDraft()\"\n >\n {{ 'buildingBlockManagement.actions.draft.confirm' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".building-block-actions{display:flex;width:100%;justify-content:space-between;align-items:flex-end}.building-block-actions ::ng-deep .version-selection{width:160px}.building-block-actions ::ng-deep .version-selection .cds--list-box__selection{display:none}.bb-management-actions__modal{min-width:320px}.building-block-metadata{display:flex;gap:24px;align-items:flex-end}.building-block-buttons{display:flex;align-items:center;gap:16px}::ng-deep .cds--list-box__field{display:flex;justify-content:space-between}::ng-deep .cds--list-box__menu-item__option{display:flex;justify-content:space-between;padding-inline-end:0}::ng-deep .cds--list-box__menu-item__option>div{margin-top:-4px}.full-width-notification{max-inline-size:100%;min-inline-size:100%}::ng-deep .cds--text-input__field-wrapper cds-label{width:100%}.exporting-message{display:flex;align-items:center;gap:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: ModalModule }, { kind: "component", type: i3$1.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i3$1.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i3$1.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i3$1.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i3$1.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i3$1.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i3$1.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i3$1.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i3$1.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: BuildingBlockManagementVersionSelectorComponent, selector: "valtimo-building-block-management-version-selector" }, { kind: "component", type: OverflowMenuComponent, selector: "v-overflow-menu", inputs: ["open", "placement", "menuWidth", "offsetX", "offsetY", "closeOnSelect", "useHostAsReference", "portalToBody"], outputs: ["openChange"] }, { kind: "component", type: OverflowMenuOptionComponent, selector: "v-overflow-menu-option", inputs: ["disabled", "type", "testId", "optionId"], outputs: ["selected"] }, { kind: "ngmodule", type: LoadingModule }, { kind: "component", type: i3$1.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }] }); }
1823
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: BuildingBlockManagementDetailActionsComponent, isStandalone: true, selector: "valtimo-building-block-management-detail-actions", viewQueries: [{ propertyName: "_exportMessageTemplateRef", first: true, predicate: ["exportingMessage"], 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 class=\"building-block-actions\"\n *ngIf=\"{\n isFinal: isFinal$ | async,\n } as obs\"\n>\n <div class=\"building-block-metadata\">\n <valtimo-building-block-management-version-selector></valtimo-building-block-management-version-selector>\n </div>\n\n <div class=\"building-block-buttons\">\n <v-overflow-menu\n class=\"overflow-button\"\n [menuWidth]=\"250\"\n placement=\"bottom-end\"\n >\n <button [attr.data-test-id]=\"testIds.moreButton\" overflowTrigger cdsButton=\"tertiary\">\n {{ 'buildingBlockManagement.actions.more' | translate }}\n <svg class=\"cds--btn__icon\" cdsIcon=\"overflow-menu--vertical\" size=\"16\"></svg>\n </button>\n\n <v-overflow-menu-option\n [attr.data-test-id]=\"testIds.exportButton\"\n optionId=\"exportBuildingBlock\"\n (selected)=\"export()\"\n [disabled]=\"(actionInProgress$ | async) || (exporting$ | async)\"\n >\n {{\n 'buildingBlockManagement.overflowMenu.export'\n | translate: {value: buildingBlockName$ | async}\n }}\n </v-overflow-menu-option>\n\n <v-overflow-menu-option\n *ngIf=\"!obs.isFinal\"\n [attr.data-test-id]=\"testIds.makeFinalButton\"\n [disabled]=\"actionInProgress$ | async\"\n (selected)=\"finalizeDraft()\"\n >\n {{ 'buildingBlockManagement.actions.makeFinal' | translate }}\n </v-overflow-menu-option>\n\n <v-overflow-menu-option\n *ngIf=\"obs.isFinal\"\n [attr.data-test-id]=\"testIds.createDraftButton\"\n [disabled]=\"actionInProgress$ | async\"\n (selected)=\"openDraftModal()\"\n >\n {{ 'buildingBlockManagement.actions.createDraft' | translate }}\n </v-overflow-menu-option>\n </v-overflow-menu>\n </div>\n</div>\n\n<ng-template #exportingMessage>\n <div class=\"exporting-message\">\n <span class=\"cds--inline-notification__title\">{{\n 'buildingBlockManagement.overflowMenu.preparingDownload' | translate\n }}</span>\n <cds-loading size=\"sm\"></cds-loading>\n </div>\n</ng-template>\n\n<cds-modal\n *ngIf=\"{open: showDraftModal$ | async} as obs\"\n [open]=\"obs.open\"\n showFooter=\"true\"\n valtimoCdsModal\n (close)=\"closeDraftModal()\"\n>\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"closeDraftModal()\">\n <h3 cdsModalHeaderHeading>\n {{ 'buildingBlockManagement.actions.draft.title' | translate }}\n </h3>\n </cds-modal-header>\n\n <form [formGroup]=\"draftForm\" cdsModalContent class=\"bb-management-actions__modal\" [cdsLayer]=\"1\">\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label\n [disabled]=\"draftForm.disabled\"\n [invalid]=\"versionTag.touched && versionTag.invalid\"\n >\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.actions.draft.version' | translate }}\n </span>\n\n <input\n [attr.data-test-id]=\"testIds.draftVersionInput\"\n formControlName=\"versionTag\"\n cdsText\n placeholder=\"{{ 'buildingBlockManagement.actions.draft.placeholder' | translate }}\"\n />\n </cds-label>\n </div>\n </form>\n\n <cds-modal-footer>\n <button\n [attr.data-test-id]=\"testIds.draftCancelButton\"\n cdsButton=\"secondary\"\n (click)=\"closeDraftModal()\"\n >\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n [attr.data-test-id]=\"testIds.draftConfirmButton\"\n cdsButton=\"primary\"\n [disabled]=\"draftForm.invalid || (actionInProgress$ | async)\"\n (click)=\"createDraft()\"\n >\n {{ 'buildingBlockManagement.actions.draft.confirm' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".building-block-actions{display:flex;width:100%;justify-content:space-between;align-items:flex-end}.building-block-actions ::ng-deep .version-selection{width:160px}.building-block-actions ::ng-deep .version-selection .cds--list-box__selection{display:none}.bb-management-actions__modal{min-width:320px}.building-block-metadata{display:flex;gap:24px;align-items:flex-end}.building-block-buttons{display:flex;align-items:center;gap:16px}::ng-deep .cds--list-box__field{display:flex;justify-content:space-between}::ng-deep .cds--list-box__menu-item__option{display:flex;justify-content:space-between;padding-inline-end:0}::ng-deep .cds--list-box__menu-item__option>div{margin-top:-4px}.full-width-notification{max-inline-size:100%;min-inline-size:100%}::ng-deep .cds--text-input__field-wrapper cds-label{width:100%}.exporting-message{display:flex;align-items:center;gap:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: ModalModule }, { kind: "component", type: i3$1.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i3$1.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i3$1.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i3$1.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i3$1.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i3$1.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i3$1.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i3$1.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i3$1.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: BuildingBlockManagementVersionSelectorComponent, selector: "valtimo-building-block-management-version-selector" }, { kind: "component", type: OverflowMenuComponent, selector: "v-overflow-menu", inputs: ["open", "placement", "menuWidth", "offsetX", "offsetY", "closeOnSelect", "useHostAsReference", "portalToBody"], outputs: ["openChange"] }, { kind: "component", type: OverflowMenuOptionComponent, selector: "v-overflow-menu-option", inputs: ["disabled", "type", "testId", "optionId"], outputs: ["selected"] }, { kind: "ngmodule", type: LoadingModule }, { kind: "component", type: i3$1.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }] }); }
1674
1824
  }
1675
1825
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: BuildingBlockManagementDetailActionsComponent, decorators: [{
1676
1826
  type: Component,
@@ -1689,7 +1839,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
1689
1839
  OverflowMenuComponent,
1690
1840
  OverflowMenuOptionComponent,
1691
1841
  LoadingModule,
1692
- ], 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=\"building-block-actions\"\n *ngIf=\"{\n isFinal: isFinal$ | async,\n } as obs\"\n>\n <div class=\"building-block-metadata\">\n <valtimo-building-block-management-version-selector></valtimo-building-block-management-version-selector>\n </div>\n\n <div class=\"building-block-buttons\">\n <v-overflow-menu\n class=\"overflow-button\"\n [menuWidth]=\"250\"\n placement=\"bottom-end\"\n >\n <button overflowTrigger cdsButton=\"tertiary\">\n {{ 'buildingBlockManagement.actions.more' | translate }}\n <svg class=\"cds--btn__icon\" cdsIcon=\"overflow-menu--vertical\" size=\"16\"></svg>\n </button>\n\n <v-overflow-menu-option\n optionId=\"exportBuildingBlock\"\n (selected)=\"export()\"\n [disabled]=\"(actionInProgress$ | async) || (exporting$ | async)\"\n >\n {{\n 'buildingBlockManagement.overflowMenu.export'\n | translate: {value: buildingBlockName$ | async}\n }}\n </v-overflow-menu-option>\n\n <v-overflow-menu-option\n *ngIf=\"!obs.isFinal\"\n [disabled]=\"actionInProgress$ | async\"\n (selected)=\"finalizeDraft()\"\n >\n {{ 'buildingBlockManagement.actions.makeFinal' | translate }}\n </v-overflow-menu-option>\n\n <v-overflow-menu-option\n *ngIf=\"obs.isFinal\"\n [disabled]=\"actionInProgress$ | async\"\n (selected)=\"openDraftModal()\"\n >\n {{ 'buildingBlockManagement.actions.createDraft' | translate }}\n </v-overflow-menu-option>\n </v-overflow-menu>\n </div>\n</div>\n\n<ng-template #exportingMessage>\n <div class=\"exporting-message\">\n <span class=\"cds--inline-notification__title\">{{\n 'buildingBlockManagement.overflowMenu.preparingDownload' | translate\n }}</span>\n <cds-loading size=\"sm\"></cds-loading>\n </div>\n</ng-template>\n\n<cds-modal\n *ngIf=\"{open: showDraftModal$ | async} as obs\"\n [open]=\"obs.open\"\n showFooter=\"true\"\n valtimoCdsModal\n (close)=\"closeDraftModal()\"\n>\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"closeDraftModal()\">\n <h3 cdsModalHeaderHeading>\n {{ 'buildingBlockManagement.actions.draft.title' | translate }}\n </h3>\n </cds-modal-header>\n\n <form [formGroup]=\"draftForm\" cdsModalContent class=\"bb-management-actions__modal\" [cdsLayer]=\"1\">\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label\n [disabled]=\"draftForm.disabled\"\n [invalid]=\"versionTag.touched && versionTag.invalid\"\n >\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.actions.draft.version' | translate }}\n </span>\n\n <input\n formControlName=\"versionTag\"\n cdsText\n placeholder=\"{{ 'buildingBlockManagement.actions.draft.placeholder' | translate }}\"\n />\n </cds-label>\n </div>\n </form>\n\n <cds-modal-footer>\n <button cdsButton=\"secondary\" (click)=\"closeDraftModal()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n [disabled]=\"draftForm.invalid || (actionInProgress$ | async)\"\n (click)=\"createDraft()\"\n >\n {{ 'buildingBlockManagement.actions.draft.confirm' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".building-block-actions{display:flex;width:100%;justify-content:space-between;align-items:flex-end}.building-block-actions ::ng-deep .version-selection{width:160px}.building-block-actions ::ng-deep .version-selection .cds--list-box__selection{display:none}.bb-management-actions__modal{min-width:320px}.building-block-metadata{display:flex;gap:24px;align-items:flex-end}.building-block-buttons{display:flex;align-items:center;gap:16px}::ng-deep .cds--list-box__field{display:flex;justify-content:space-between}::ng-deep .cds--list-box__menu-item__option{display:flex;justify-content:space-between;padding-inline-end:0}::ng-deep .cds--list-box__menu-item__option>div{margin-top:-4px}.full-width-notification{max-inline-size:100%;min-inline-size:100%}::ng-deep .cds--text-input__field-wrapper cds-label{width:100%}.exporting-message{display:flex;align-items:center;gap:8px}\n"] }]
1842
+ ], 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=\"building-block-actions\"\n *ngIf=\"{\n isFinal: isFinal$ | async,\n } as obs\"\n>\n <div class=\"building-block-metadata\">\n <valtimo-building-block-management-version-selector></valtimo-building-block-management-version-selector>\n </div>\n\n <div class=\"building-block-buttons\">\n <v-overflow-menu\n class=\"overflow-button\"\n [menuWidth]=\"250\"\n placement=\"bottom-end\"\n >\n <button [attr.data-test-id]=\"testIds.moreButton\" overflowTrigger cdsButton=\"tertiary\">\n {{ 'buildingBlockManagement.actions.more' | translate }}\n <svg class=\"cds--btn__icon\" cdsIcon=\"overflow-menu--vertical\" size=\"16\"></svg>\n </button>\n\n <v-overflow-menu-option\n [attr.data-test-id]=\"testIds.exportButton\"\n optionId=\"exportBuildingBlock\"\n (selected)=\"export()\"\n [disabled]=\"(actionInProgress$ | async) || (exporting$ | async)\"\n >\n {{\n 'buildingBlockManagement.overflowMenu.export'\n | translate: {value: buildingBlockName$ | async}\n }}\n </v-overflow-menu-option>\n\n <v-overflow-menu-option\n *ngIf=\"!obs.isFinal\"\n [attr.data-test-id]=\"testIds.makeFinalButton\"\n [disabled]=\"actionInProgress$ | async\"\n (selected)=\"finalizeDraft()\"\n >\n {{ 'buildingBlockManagement.actions.makeFinal' | translate }}\n </v-overflow-menu-option>\n\n <v-overflow-menu-option\n *ngIf=\"obs.isFinal\"\n [attr.data-test-id]=\"testIds.createDraftButton\"\n [disabled]=\"actionInProgress$ | async\"\n (selected)=\"openDraftModal()\"\n >\n {{ 'buildingBlockManagement.actions.createDraft' | translate }}\n </v-overflow-menu-option>\n </v-overflow-menu>\n </div>\n</div>\n\n<ng-template #exportingMessage>\n <div class=\"exporting-message\">\n <span class=\"cds--inline-notification__title\">{{\n 'buildingBlockManagement.overflowMenu.preparingDownload' | translate\n }}</span>\n <cds-loading size=\"sm\"></cds-loading>\n </div>\n</ng-template>\n\n<cds-modal\n *ngIf=\"{open: showDraftModal$ | async} as obs\"\n [open]=\"obs.open\"\n showFooter=\"true\"\n valtimoCdsModal\n (close)=\"closeDraftModal()\"\n>\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"closeDraftModal()\">\n <h3 cdsModalHeaderHeading>\n {{ 'buildingBlockManagement.actions.draft.title' | translate }}\n </h3>\n </cds-modal-header>\n\n <form [formGroup]=\"draftForm\" cdsModalContent class=\"bb-management-actions__modal\" [cdsLayer]=\"1\">\n <div class=\"cds--text-input__field-wrapper\">\n <cds-label\n [disabled]=\"draftForm.disabled\"\n [invalid]=\"versionTag.touched && versionTag.invalid\"\n >\n <span class=\"label-with-tooltip select-label\">\n {{ 'buildingBlockManagement.actions.draft.version' | translate }}\n </span>\n\n <input\n [attr.data-test-id]=\"testIds.draftVersionInput\"\n formControlName=\"versionTag\"\n cdsText\n placeholder=\"{{ 'buildingBlockManagement.actions.draft.placeholder' | translate }}\"\n />\n </cds-label>\n </div>\n </form>\n\n <cds-modal-footer>\n <button\n [attr.data-test-id]=\"testIds.draftCancelButton\"\n cdsButton=\"secondary\"\n (click)=\"closeDraftModal()\"\n >\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n [attr.data-test-id]=\"testIds.draftConfirmButton\"\n cdsButton=\"primary\"\n [disabled]=\"draftForm.invalid || (actionInProgress$ | async)\"\n (click)=\"createDraft()\"\n >\n {{ 'buildingBlockManagement.actions.draft.confirm' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".building-block-actions{display:flex;width:100%;justify-content:space-between;align-items:flex-end}.building-block-actions ::ng-deep .version-selection{width:160px}.building-block-actions ::ng-deep .version-selection .cds--list-box__selection{display:none}.bb-management-actions__modal{min-width:320px}.building-block-metadata{display:flex;gap:24px;align-items:flex-end}.building-block-buttons{display:flex;align-items:center;gap:16px}::ng-deep .cds--list-box__field{display:flex;justify-content:space-between}::ng-deep .cds--list-box__menu-item__option{display:flex;justify-content:space-between;padding-inline-end:0}::ng-deep .cds--list-box__menu-item__option>div{margin-top:-4px}.full-width-notification{max-inline-size:100%;min-inline-size:100%}::ng-deep .cds--text-input__field-wrapper cds-label{width:100%}.exporting-message{display:flex;align-items:center;gap:8px}\n"] }]
1693
1843
  }], ctorParameters: () => [{ type: BuildingBlockManagementApiService }, { type: BuildingBlockManagementDetailService }, { type: i2$1.FormBuilder }, { type: i5.GlobalNotificationService }, { type: i2$2.TranslateService }, { type: Document, decorators: [{
1694
1844
  type: Inject,
1695
1845
  args: [DOCUMENT]
@@ -2264,6 +2414,7 @@ class BuildingBlockManagementDetailComponent {
2264
2414
  this.pageTitleService = pageTitleService;
2265
2415
  this.buildingBlockManagementTabConfig = buildingBlockManagementTabConfig;
2266
2416
  this.BUILDING_BLOCK_MANAGEMENT_TABS = BUILDING_BLOCK_MANAGEMENT_TABS;
2417
+ this.testIds = BUILDING_BLOCK_MANAGEMENT_DETAIL_TEST_IDS;
2267
2418
  this.activeTabKey$ = this.buildingBlockManagementDetailService.activeTabKey$;
2268
2419
  this.buildingBlockManagementDetailService.setRoute(this.route);
2269
2420
  }
@@ -2294,7 +2445,7 @@ class BuildingBlockManagementDetailComponent {
2294
2445
  return [];
2295
2446
  }
2296
2447
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: BuildingBlockManagementDetailComponent, deps: [{ token: i3.ActivatedRoute }, { token: BuildingBlockManagementDetailService }, { token: i7.PageTitleService }, { token: BUILDING_BLOCK_MANAGEMENT_TAB_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
2297
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: BuildingBlockManagementDetailComponent, isStandalone: true, selector: "valtimo-building-block-management-detail", providers: [BuildingBlockManagementDetailService], 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@if (activeTabKey$ | async; as activeTabKey) {\n <cds-tabs type=\"line\">\n @if ({active: activeTabKey === BUILDING_BLOCK_MANAGEMENT_TABS.GENERAL}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'buildingBlockManagement.tabs.general' | translate\"\n (selected)=\"switchTab(BUILDING_BLOCK_MANAGEMENT_TABS.GENERAL)\"\n >\n @if (obs.active) {\n <valtimo-building-block-management-general></valtimo-building-block-management-general>\n }\n </cds-tab>\n }\n\n @if ({active: activeTabKey === BUILDING_BLOCK_MANAGEMENT_TABS.DOCUMENT}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'buildingBlockManagement.tabs.document' | translate\"\n (selected)=\"switchTab(BUILDING_BLOCK_MANAGEMENT_TABS.DOCUMENT)\"\n >\n @if (obs.active) {\n <valtimo-building-block-management-document></valtimo-building-block-management-document>\n }\n </cds-tab>\n }\n\n @if ({active: activeTabKey === BUILDING_BLOCK_MANAGEMENT_TABS.PROCESSES}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'buildingBlockManagement.tabs.processes' | translate\"\n (selected)=\"switchTab(BUILDING_BLOCK_MANAGEMENT_TABS.PROCESSES)\"\n >\n @if (obs.active) {\n <valtimo-building-block-management-processes></valtimo-building-block-management-processes>\n }\n </cds-tab>\n }\n\n @if ({active: activeTabKey === BUILDING_BLOCK_MANAGEMENT_TABS.FORMS}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'buildingBlockManagement.tabs.forms' | translate\"\n (selected)=\"switchTab(BUILDING_BLOCK_MANAGEMENT_TABS.FORMS)\"\n >\n @if (obs.active) {\n <valtimo-building-block-management-forms></valtimo-building-block-management-forms>\n }\n </cds-tab>\n }\n\n @if ({active: activeTabKey === BUILDING_BLOCK_MANAGEMENT_TABS.FORM_FLOWS}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'buildingBlockManagement.tabs.formFlows' | translate\"\n (selected)=\"switchTab(BUILDING_BLOCK_MANAGEMENT_TABS.FORM_FLOWS)\"\n >\n @if (obs.active) {\n <valtimo-building-block-management-form-flows></valtimo-building-block-management-form-flows>\n }\n </cds-tab>\n }\n\n @if ({active: activeTabKey === BUILDING_BLOCK_MANAGEMENT_TABS.DECISIONS}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'buildingBlockManagement.tabs.decisions' | translate\"\n (selected)=\"switchTab(BUILDING_BLOCK_MANAGEMENT_TABS.DECISIONS)\"\n >\n @if (obs.active) {\n <valtimo-building-block-management-decisions></valtimo-building-block-management-decisions>\n }\n </cds-tab>\n }\n\n @for (customTab of customTabs; track customTab.tabRoute) {\n @if ((customTab.enabled$ | async) && {active: activeTabKey === customTab.tabRoute}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"customTab.translationKey | translate\"\n (selected)=\"switchTab(customTab.tabRoute)\"\n >\n @if (obs.active) {\n <ng-container *ngComponentOutlet=\"customTab.component\"></ng-container>\n }\n </cds-tab>\n }\n }\n </cds-tabs>\n}\n\n<ng-container renderInPageHeader [fullWidth]=\"true\">\n <ng-template>\n <div class=\"building-block-management-detail__header\">\n <valtimo-building-block-management-detail-actions></valtimo-building-block-management-detail-actions>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".valtimo-building-block-management-list__actions{display:flex}:host ::ng-deep .building-block-management-detail__header{display:flex;align-items:center;gap:.75rem;justify-content:flex-end}:host ::ng-deep .cds--tab-content{margin:0!important;padding-left:0!important;padding-right:0!important;outline:none!important}.building-block-management-header{display:flex;justify-content:space-between}\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: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: CarbonListModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: IconModule }, { kind: "ngmodule", type: TabsModule }, { kind: "component", type: i3$1.Tabs, selector: "cds-tabs, ibm-tabs", inputs: ["position", "cacheActive", "followFocus", "isNavigation", "ariaLabel", "ariaLabelledby", "type", "theme", "skeleton"] }, { kind: "component", type: i3$1.Tab, selector: "cds-tab, ibm-tab", inputs: ["heading", "title", "context", "active", "disabled", "tabIndex", "id", "cacheActive", "tabContent", "templateContext"], outputs: ["selected"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: BuildingBlockManagementGeneralComponent, selector: "valtimo-building-block-management-general" }, { kind: "component", type: BuildingBlockManagementDocumentComponent, selector: "valtimo-building-block-management-document" }, { kind: "component", type: BuildingBlockManagementProcessesComponent, selector: "valtimo-building-block-management-processes" }, { kind: "component", type: BuildingBlockManagementFormsComponent, selector: "valtimo-building-block-management-forms" }, { kind: "component", type: BuildingBlockManagementFormFlowsComponent, selector: "valtimo-building-block-management-form-flows" }, { kind: "component", type: BuildingBlockManagementDecisionsComponent, selector: "valtimo-building-block-management-decisions" }, { kind: "directive", type: RenderInPageHeaderDirective, selector: "[renderInPageHeader]", inputs: ["fullWidth"] }, { kind: "component", type: BuildingBlockManagementDetailActionsComponent, selector: "valtimo-building-block-management-detail-actions" }, { kind: "ngmodule", type: DialogModule }] }); }
2448
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: BuildingBlockManagementDetailComponent, isStandalone: true, selector: "valtimo-building-block-management-detail", providers: [BuildingBlockManagementDetailService], 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@if (activeTabKey$ | async; as activeTabKey) {\n <cds-tabs [attr.data-test-id]=\"testIds.tabs\" type=\"line\">\n @if ({active: activeTabKey === BUILDING_BLOCK_MANAGEMENT_TABS.GENERAL}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'buildingBlockManagement.tabs.general' | translate\"\n (selected)=\"switchTab(BUILDING_BLOCK_MANAGEMENT_TABS.GENERAL)\"\n >\n @if (obs.active) {\n <valtimo-building-block-management-general></valtimo-building-block-management-general>\n }\n </cds-tab>\n }\n\n @if ({active: activeTabKey === BUILDING_BLOCK_MANAGEMENT_TABS.DOCUMENT}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'buildingBlockManagement.tabs.document' | translate\"\n (selected)=\"switchTab(BUILDING_BLOCK_MANAGEMENT_TABS.DOCUMENT)\"\n >\n @if (obs.active) {\n <valtimo-building-block-management-document></valtimo-building-block-management-document>\n }\n </cds-tab>\n }\n\n @if ({active: activeTabKey === BUILDING_BLOCK_MANAGEMENT_TABS.PROCESSES}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'buildingBlockManagement.tabs.processes' | translate\"\n (selected)=\"switchTab(BUILDING_BLOCK_MANAGEMENT_TABS.PROCESSES)\"\n >\n @if (obs.active) {\n <valtimo-building-block-management-processes></valtimo-building-block-management-processes>\n }\n </cds-tab>\n }\n\n @if ({active: activeTabKey === BUILDING_BLOCK_MANAGEMENT_TABS.FORMS}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'buildingBlockManagement.tabs.forms' | translate\"\n (selected)=\"switchTab(BUILDING_BLOCK_MANAGEMENT_TABS.FORMS)\"\n >\n @if (obs.active) {\n <valtimo-building-block-management-forms></valtimo-building-block-management-forms>\n }\n </cds-tab>\n }\n\n @if ({active: activeTabKey === BUILDING_BLOCK_MANAGEMENT_TABS.FORM_FLOWS}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'buildingBlockManagement.tabs.formFlows' | translate\"\n (selected)=\"switchTab(BUILDING_BLOCK_MANAGEMENT_TABS.FORM_FLOWS)\"\n >\n @if (obs.active) {\n <valtimo-building-block-management-form-flows></valtimo-building-block-management-form-flows>\n }\n </cds-tab>\n }\n\n @if ({active: activeTabKey === BUILDING_BLOCK_MANAGEMENT_TABS.DECISIONS}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'buildingBlockManagement.tabs.decisions' | translate\"\n (selected)=\"switchTab(BUILDING_BLOCK_MANAGEMENT_TABS.DECISIONS)\"\n >\n @if (obs.active) {\n <valtimo-building-block-management-decisions></valtimo-building-block-management-decisions>\n }\n </cds-tab>\n }\n\n @for (customTab of customTabs; track customTab.tabRoute) {\n @if ((customTab.enabled$ | async) && {active: activeTabKey === customTab.tabRoute}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"customTab.translationKey | translate\"\n (selected)=\"switchTab(customTab.tabRoute)\"\n >\n @if (obs.active) {\n <ng-container *ngComponentOutlet=\"customTab.component\"></ng-container>\n }\n </cds-tab>\n }\n }\n </cds-tabs>\n}\n\n<ng-container renderInPageHeader [fullWidth]=\"true\">\n <ng-template>\n <div class=\"building-block-management-detail__header\">\n <valtimo-building-block-management-detail-actions></valtimo-building-block-management-detail-actions>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".valtimo-building-block-management-list__actions{display:flex}:host ::ng-deep .building-block-management-detail__header{display:flex;align-items:center;gap:.75rem;justify-content:flex-end}:host ::ng-deep .cds--tab-content{margin:0!important;padding-left:0!important;padding-right:0!important;outline:none!important}.building-block-management-header{display:flex;justify-content:space-between}\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: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: CarbonListModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: IconModule }, { kind: "ngmodule", type: TabsModule }, { kind: "component", type: i3$1.Tabs, selector: "cds-tabs, ibm-tabs", inputs: ["position", "cacheActive", "followFocus", "isNavigation", "ariaLabel", "ariaLabelledby", "type", "theme", "skeleton"] }, { kind: "component", type: i3$1.Tab, selector: "cds-tab, ibm-tab", inputs: ["heading", "title", "context", "active", "disabled", "tabIndex", "id", "cacheActive", "tabContent", "templateContext"], outputs: ["selected"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: BuildingBlockManagementGeneralComponent, selector: "valtimo-building-block-management-general" }, { kind: "component", type: BuildingBlockManagementDocumentComponent, selector: "valtimo-building-block-management-document" }, { kind: "component", type: BuildingBlockManagementProcessesComponent, selector: "valtimo-building-block-management-processes" }, { kind: "component", type: BuildingBlockManagementFormsComponent, selector: "valtimo-building-block-management-forms" }, { kind: "component", type: BuildingBlockManagementFormFlowsComponent, selector: "valtimo-building-block-management-form-flows" }, { kind: "component", type: BuildingBlockManagementDecisionsComponent, selector: "valtimo-building-block-management-decisions" }, { kind: "directive", type: RenderInPageHeaderDirective, selector: "[renderInPageHeader]", inputs: ["fullWidth"] }, { kind: "component", type: BuildingBlockManagementDetailActionsComponent, selector: "valtimo-building-block-management-detail-actions" }, { kind: "ngmodule", type: DialogModule }] }); }
2298
2449
  }
2299
2450
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: BuildingBlockManagementDetailComponent, decorators: [{
2300
2451
  type: Component,
@@ -2314,7 +2465,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
2314
2465
  RenderInPageHeaderDirective,
2315
2466
  BuildingBlockManagementDetailActionsComponent,
2316
2467
  DialogModule,
2317
- ], providers: [BuildingBlockManagementDetailService], 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@if (activeTabKey$ | async; as activeTabKey) {\n <cds-tabs type=\"line\">\n @if ({active: activeTabKey === BUILDING_BLOCK_MANAGEMENT_TABS.GENERAL}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'buildingBlockManagement.tabs.general' | translate\"\n (selected)=\"switchTab(BUILDING_BLOCK_MANAGEMENT_TABS.GENERAL)\"\n >\n @if (obs.active) {\n <valtimo-building-block-management-general></valtimo-building-block-management-general>\n }\n </cds-tab>\n }\n\n @if ({active: activeTabKey === BUILDING_BLOCK_MANAGEMENT_TABS.DOCUMENT}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'buildingBlockManagement.tabs.document' | translate\"\n (selected)=\"switchTab(BUILDING_BLOCK_MANAGEMENT_TABS.DOCUMENT)\"\n >\n @if (obs.active) {\n <valtimo-building-block-management-document></valtimo-building-block-management-document>\n }\n </cds-tab>\n }\n\n @if ({active: activeTabKey === BUILDING_BLOCK_MANAGEMENT_TABS.PROCESSES}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'buildingBlockManagement.tabs.processes' | translate\"\n (selected)=\"switchTab(BUILDING_BLOCK_MANAGEMENT_TABS.PROCESSES)\"\n >\n @if (obs.active) {\n <valtimo-building-block-management-processes></valtimo-building-block-management-processes>\n }\n </cds-tab>\n }\n\n @if ({active: activeTabKey === BUILDING_BLOCK_MANAGEMENT_TABS.FORMS}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'buildingBlockManagement.tabs.forms' | translate\"\n (selected)=\"switchTab(BUILDING_BLOCK_MANAGEMENT_TABS.FORMS)\"\n >\n @if (obs.active) {\n <valtimo-building-block-management-forms></valtimo-building-block-management-forms>\n }\n </cds-tab>\n }\n\n @if ({active: activeTabKey === BUILDING_BLOCK_MANAGEMENT_TABS.FORM_FLOWS}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'buildingBlockManagement.tabs.formFlows' | translate\"\n (selected)=\"switchTab(BUILDING_BLOCK_MANAGEMENT_TABS.FORM_FLOWS)\"\n >\n @if (obs.active) {\n <valtimo-building-block-management-form-flows></valtimo-building-block-management-form-flows>\n }\n </cds-tab>\n }\n\n @if ({active: activeTabKey === BUILDING_BLOCK_MANAGEMENT_TABS.DECISIONS}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'buildingBlockManagement.tabs.decisions' | translate\"\n (selected)=\"switchTab(BUILDING_BLOCK_MANAGEMENT_TABS.DECISIONS)\"\n >\n @if (obs.active) {\n <valtimo-building-block-management-decisions></valtimo-building-block-management-decisions>\n }\n </cds-tab>\n }\n\n @for (customTab of customTabs; track customTab.tabRoute) {\n @if ((customTab.enabled$ | async) && {active: activeTabKey === customTab.tabRoute}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"customTab.translationKey | translate\"\n (selected)=\"switchTab(customTab.tabRoute)\"\n >\n @if (obs.active) {\n <ng-container *ngComponentOutlet=\"customTab.component\"></ng-container>\n }\n </cds-tab>\n }\n }\n </cds-tabs>\n}\n\n<ng-container renderInPageHeader [fullWidth]=\"true\">\n <ng-template>\n <div class=\"building-block-management-detail__header\">\n <valtimo-building-block-management-detail-actions></valtimo-building-block-management-detail-actions>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".valtimo-building-block-management-list__actions{display:flex}:host ::ng-deep .building-block-management-detail__header{display:flex;align-items:center;gap:.75rem;justify-content:flex-end}:host ::ng-deep .cds--tab-content{margin:0!important;padding-left:0!important;padding-right:0!important;outline:none!important}.building-block-management-header{display:flex;justify-content:space-between}\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"] }]
2468
+ ], providers: [BuildingBlockManagementDetailService], 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@if (activeTabKey$ | async; as activeTabKey) {\n <cds-tabs [attr.data-test-id]=\"testIds.tabs\" type=\"line\">\n @if ({active: activeTabKey === BUILDING_BLOCK_MANAGEMENT_TABS.GENERAL}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'buildingBlockManagement.tabs.general' | translate\"\n (selected)=\"switchTab(BUILDING_BLOCK_MANAGEMENT_TABS.GENERAL)\"\n >\n @if (obs.active) {\n <valtimo-building-block-management-general></valtimo-building-block-management-general>\n }\n </cds-tab>\n }\n\n @if ({active: activeTabKey === BUILDING_BLOCK_MANAGEMENT_TABS.DOCUMENT}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'buildingBlockManagement.tabs.document' | translate\"\n (selected)=\"switchTab(BUILDING_BLOCK_MANAGEMENT_TABS.DOCUMENT)\"\n >\n @if (obs.active) {\n <valtimo-building-block-management-document></valtimo-building-block-management-document>\n }\n </cds-tab>\n }\n\n @if ({active: activeTabKey === BUILDING_BLOCK_MANAGEMENT_TABS.PROCESSES}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'buildingBlockManagement.tabs.processes' | translate\"\n (selected)=\"switchTab(BUILDING_BLOCK_MANAGEMENT_TABS.PROCESSES)\"\n >\n @if (obs.active) {\n <valtimo-building-block-management-processes></valtimo-building-block-management-processes>\n }\n </cds-tab>\n }\n\n @if ({active: activeTabKey === BUILDING_BLOCK_MANAGEMENT_TABS.FORMS}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'buildingBlockManagement.tabs.forms' | translate\"\n (selected)=\"switchTab(BUILDING_BLOCK_MANAGEMENT_TABS.FORMS)\"\n >\n @if (obs.active) {\n <valtimo-building-block-management-forms></valtimo-building-block-management-forms>\n }\n </cds-tab>\n }\n\n @if ({active: activeTabKey === BUILDING_BLOCK_MANAGEMENT_TABS.FORM_FLOWS}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'buildingBlockManagement.tabs.formFlows' | translate\"\n (selected)=\"switchTab(BUILDING_BLOCK_MANAGEMENT_TABS.FORM_FLOWS)\"\n >\n @if (obs.active) {\n <valtimo-building-block-management-form-flows></valtimo-building-block-management-form-flows>\n }\n </cds-tab>\n }\n\n @if ({active: activeTabKey === BUILDING_BLOCK_MANAGEMENT_TABS.DECISIONS}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"'buildingBlockManagement.tabs.decisions' | translate\"\n (selected)=\"switchTab(BUILDING_BLOCK_MANAGEMENT_TABS.DECISIONS)\"\n >\n @if (obs.active) {\n <valtimo-building-block-management-decisions></valtimo-building-block-management-decisions>\n }\n </cds-tab>\n }\n\n @for (customTab of customTabs; track customTab.tabRoute) {\n @if ((customTab.enabled$ | async) && {active: activeTabKey === customTab.tabRoute}; as obs) {\n <cds-tab\n [active]=\"obs.active\"\n [heading]=\"customTab.translationKey | translate\"\n (selected)=\"switchTab(customTab.tabRoute)\"\n >\n @if (obs.active) {\n <ng-container *ngComponentOutlet=\"customTab.component\"></ng-container>\n }\n </cds-tab>\n }\n }\n </cds-tabs>\n}\n\n<ng-container renderInPageHeader [fullWidth]=\"true\">\n <ng-template>\n <div class=\"building-block-management-detail__header\">\n <valtimo-building-block-management-detail-actions></valtimo-building-block-management-detail-actions>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".valtimo-building-block-management-list__actions{display:flex}:host ::ng-deep .building-block-management-detail__header{display:flex;align-items:center;gap:.75rem;justify-content:flex-end}:host ::ng-deep .cds--tab-content{margin:0!important;padding-left:0!important;padding-right:0!important;outline:none!important}.building-block-management-header{display:flex;justify-content:space-between}\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"] }]
2318
2469
  }], ctorParameters: () => [{ type: i3.ActivatedRoute }, { type: BuildingBlockManagementDetailService }, { type: i7.PageTitleService }, { type: undefined, decorators: [{
2319
2470
  type: Optional
2320
2471
  }, {
@@ -2391,6 +2542,19 @@ const routes = [
2391
2542
  path: `building-block-management/building-block/:buildingBlockDefinitionKey/version/:buildingBlockDefinitionVersionTag/${BUILDING_BLOCK_MANAGEMENT_TABS.FORM_FLOWS}/:formFlowDefinitionKey`,
2392
2543
  component: FormFlowEditorComponent,
2393
2544
  canActivate: [AuthGuardService],
2545
+ canDeactivate: [pendingChangesGuard],
2546
+ data: {
2547
+ title: 'formFlow.title',
2548
+ roles: [ROLE_ADMIN],
2549
+ customPageTitle: true,
2550
+ context: 'buildingBlock',
2551
+ },
2552
+ },
2553
+ {
2554
+ path: `building-block-management/building-block/:buildingBlockDefinitionKey/version/:buildingBlockDefinitionVersionTag/${BUILDING_BLOCK_MANAGEMENT_TABS.FORM_FLOWS}/:formFlowDefinitionKey/editor`,
2555
+ component: FormFlowEditorComponent,
2556
+ canActivate: [AuthGuardService],
2557
+ canDeactivate: [pendingChangesGuard],
2394
2558
  data: {
2395
2559
  title: 'formFlow.title',
2396
2560
  roles: [ROLE_ADMIN],
@@ -2476,5 +2640,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
2476
2640
  * Generated bundle index. Do not edit.
2477
2641
  */
2478
2642
 
2479
- export { BuildingBlockManagementApiService, BuildingBlockManagementDetailService, BuildingBlockManagementModule, BuildingBlockManagementService };
2643
+ export { BUILDING_BLOCK_MANAGEMENT_ARTWORK_TEST_IDS, BUILDING_BLOCK_MANAGEMENT_CREATE_TEST_IDS, BUILDING_BLOCK_MANAGEMENT_DETAIL_ACTIONS_TEST_IDS, BUILDING_BLOCK_MANAGEMENT_DETAIL_TEST_IDS, BUILDING_BLOCK_MANAGEMENT_LIST_TEST_IDS, BUILDING_BLOCK_MANAGEMENT_METADATA_TEST_IDS, BUILDING_BLOCK_MANAGEMENT_PLUGINS_TEST_IDS, BUILDING_BLOCK_MANAGEMENT_PROCESSES_TEST_IDS, BUILDING_BLOCK_MANAGEMENT_PROCESS_UPLOAD_TEST_IDS, BUILDING_BLOCK_MANAGEMENT_TABS, BUILDING_BLOCK_MANAGEMENT_UPLOAD_TEST_IDS, BUILDING_BLOCK_VERSION_OPTION_TEST_ID_PREFIX, BuildingBlockManagementApiService, BuildingBlockManagementDetailService, BuildingBlockManagementModule, BuildingBlockManagementService, STEPS, UPLOAD_STATUS, UPLOAD_STEP };
2480
2644
  //# sourceMappingURL=valtimo-building-block-management.mjs.map