@valtimo/case-management 13.32.0 → 13.33.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.
@@ -9,7 +9,7 @@ import { NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap';
9
9
  import * as i3 from '@ngx-translate/core';
10
10
  import { TranslateModule } from '@ngx-translate/core';
11
11
  import * as i7 from '@valtimo/components';
12
- import { runAfterCarbonModalClosed, ViewType, CARBON_CONSTANTS, ValuePathSelectorPrefix, SelectModule, MuuriItemComponent, ValtimoCdsModalDirective, RenderInPageHeaderDirective, TooltipModule, CarbonListModule, ConfirmationModalModule, WidgetModule, DropzoneModule, ModalModule as ModalModule$1, MultiselectDropdownModule, ParagraphModule, SpinnerModule, InputModule as InputModule$1, FormModule, TooltipIconModule, CarbonMultiInputModule, TableModule, OverflowMenuComponent, OverflowMenuOptionComponent, EditorModule, ValuePathSelectorComponent, EllipsisPipe, MuuriDirectiveModule, ReadOnlyDirective, JsonEditorComponent, AutoKeyInputComponent } from '@valtimo/components';
12
+ import { WidgetLayout, runAfterCarbonModalClosed, ViewType, CARBON_CONSTANTS, ValuePathSelectorPrefix, SelectModule, MuuriItemComponent, WIDGET_LAYOUT_VALUES, WIDGET_LAYOUT_TRANSLATION_KEYS, ValtimoCdsModalDirective, WidgetLayoutInfoComponent, RenderInPageHeaderDirective, TooltipModule, CarbonListModule, ConfirmationModalModule, WidgetModule, DropzoneModule, ModalModule as ModalModule$1, MultiselectDropdownModule, ParagraphModule, SpinnerModule, InputModule as InputModule$1, FormModule, TooltipIconModule, CarbonMultiInputModule, TableModule, OverflowMenuComponent, OverflowMenuOptionComponent, EditorModule, ValuePathSelectorComponent, EllipsisPipe, MuuriDirectiveModule, ReadOnlyDirective, JsonEditorComponent, AutoKeyInputComponent } from '@valtimo/components';
13
13
  import { FormManagementComponent, FormManagementEditComponent } from '@valtimo/form-management';
14
14
  import * as i2$1 from '@valtimo/shared';
15
15
  import { BaseApiService, InterceptorSkip, getCaseManagementRouteParams, CASE_MANAGEMENT_TAB_TOKEN, InterceptorSkipHeader, TagColor, getDisplayTypeParametersView, CASE_CONFIGURATION_EXTENSIONS_TOKEN, ROLE_ADMIN, ConfigModule } from '@valtimo/shared';
@@ -660,6 +660,8 @@ class CaseWidgetManagementApiService {
660
660
  this.http = http;
661
661
  this.configService = configService;
662
662
  this._widgetConfigurationCache = [];
663
+ this._widgetLayout = WidgetLayout.MUURI_GAP_FREE;
664
+ this.widgetLayout$ = new BehaviorSubject(WidgetLayout.MUURI_GAP_FREE);
663
665
  this.params$ = new BehaviorSubject({
664
666
  caseDefinitionKey: '',
665
667
  caseDefinitionVersionTag: '',
@@ -682,14 +684,21 @@ class CaseWidgetManagementApiService {
682
684
  getWidgetConfiguration() {
683
685
  return this.params$.pipe(switchMap((params) => this.http.get(`${this.valtimoEndpointBase}/${params.caseDefinitionKey}/version/${params.caseDefinitionVersionTag}/widget-tab/${params.key}`)), map((res) => {
684
686
  this._widgetConfigurationCache = res.widgets;
687
+ this._widgetLayout = res.widgetLayout ?? WidgetLayout.MUURI_GAP_FREE;
688
+ this.widgetLayout$.next(this._widgetLayout);
685
689
  return res.widgets;
686
690
  }));
687
691
  }
688
692
  updateWidgetConfiguration(widgets) {
689
693
  return this.updateWidgets(widgets);
690
694
  }
695
+ updateWidgetLayout(widgetLayout) {
696
+ this._widgetLayout = widgetLayout;
697
+ this.widgetLayout$.next(widgetLayout);
698
+ return this.updateWidgets(this._widgetConfigurationCache);
699
+ }
691
700
  updateWidgets(widgets) {
692
- return this.params$.pipe(switchMap((params) => this.http.post(`${this.valtimoEndpointBase}/${params.caseDefinitionKey}/version/${params.caseDefinitionVersionTag}/widget-tab/${params.key}`, { ...params, widgets })));
701
+ return this.params$.pipe(switchMap((params) => this.http.post(`${this.valtimoEndpointBase}/${params.caseDefinitionKey}/version/${params.caseDefinitionVersionTag}/widget-tab/${params.key}`, { ...params, widgets, widgetLayout: this._widgetLayout })));
693
702
  }
694
703
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: CaseWidgetManagementApiService, deps: [{ token: i1.HttpClient }, { token: i2$1.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
695
704
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: CaseWidgetManagementApiService, providedIn: 'root' }); }
@@ -4867,7 +4876,7 @@ class CaseManagementGeneralComponent {
4867
4876
  this.cdr.detectChanges();
4868
4877
  }
4869
4878
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: CaseManagementGeneralComponent, deps: [{ token: i1$2.DocumentService }, { token: i2$2.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: CaseManagementService }, { token: CASE_CONFIGURATION_EXTENSIONS_TOKEN, optional: true }, { token: i2$1.EditPermissionsService }], target: i0.ɵɵFactoryTarget.Component }); }
4870
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.20", type: CaseManagementGeneralComponent, isStandalone: false, selector: "valtimo-case-management-general", viewQueries: [{ propertyName: "_extensions", first: true, predicate: ["extensions"], descendants: true, read: ViewContainerRef }], 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<ng-container\n *ngIf=\"{\n isReadOnly: isReadOnly$ | async,\n } as obs\"\n>\n @if (obs.isReadOnly) {\n <cds-notification\n class=\"read-only-notification\"\n [notificationObj]=\"{\n type: 'info',\n title: 'caseManagement.tabs.generalTab.readOnlyNotification.title' | translate,\n message: 'caseManagement.tabs.generalTab.readOnlyNotification.message' | translate,\n showClose: false,\n lowContrast: true,\n }\"\n >\n </cds-notification>\n }\n\n <valtimo-case-management-missing-plugin-configurations></valtimo-case-management-missing-plugin-configurations>\n\n <div class=\"case-management-general-tab\" muuri [columnMinWidth]=\"350\">\n <ng-template #extensions></ng-template>\n\n <valtimo-muuri-item>\n <valtimo-case-management-case-handler\n muuriItem\n [isReadOnly]=\"obs.isReadOnly\"\n *ngIf=\"documentDefinition$ | async\"\n ></valtimo-case-management-case-handler>\n </valtimo-muuri-item>\n\n <valtimo-muuri-item>\n <valtimo-case-management-external-start-form [isReadOnly]=\"obs.isReadOnly\">\n </valtimo-case-management-external-start-form>\n </valtimo-muuri-item>\n </div>\n</ng-container>\n", styles: [".read-only-notification{margin-bottom:16px;max-inline-size:100%;min-inline-size: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: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.Notification, selector: "cds-notification, cds-inline-notification, ibm-notification, ibm-inline-notification", inputs: ["notificationObj"] }, { kind: "directive", type: i7.MuuriDirective, selector: "[muuri]", inputs: ["columnMinWidth"] }, { kind: "component", type: i7.MuuriItemComponent, selector: "valtimo-muuri-item" }, { kind: "component", type: CaseManagementMissingPluginConfigurationsComponent, selector: "valtimo-case-management-missing-plugin-configurations" }, { kind: "component", type: CaseManagementCaseHandlerComponent, selector: "valtimo-case-management-case-handler", inputs: ["isReadOnly"] }, { kind: "component", type: CaseManagementExternalStartFormComponent, selector: "valtimo-case-management-external-start-form", inputs: ["isReadOnly"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
4879
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.20", type: CaseManagementGeneralComponent, isStandalone: false, selector: "valtimo-case-management-general", viewQueries: [{ propertyName: "_extensions", first: true, predicate: ["extensions"], descendants: true, read: ViewContainerRef }], 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<ng-container\n *ngIf=\"{\n isReadOnly: isReadOnly$ | async,\n } as obs\"\n>\n @if (obs.isReadOnly) {\n <cds-notification\n class=\"read-only-notification\"\n [notificationObj]=\"{\n type: 'info',\n title: 'caseManagement.tabs.generalTab.readOnlyNotification.title' | translate,\n message: 'caseManagement.tabs.generalTab.readOnlyNotification.message' | translate,\n showClose: false,\n lowContrast: true,\n }\"\n >\n </cds-notification>\n }\n\n <valtimo-case-management-missing-plugin-configurations></valtimo-case-management-missing-plugin-configurations>\n\n <div class=\"case-management-general-tab\" muuri [columnMinWidth]=\"350\">\n <ng-template #extensions></ng-template>\n\n <valtimo-muuri-item>\n <valtimo-case-management-case-handler\n muuriItem\n [isReadOnly]=\"obs.isReadOnly\"\n *ngIf=\"documentDefinition$ | async\"\n ></valtimo-case-management-case-handler>\n </valtimo-muuri-item>\n\n <valtimo-muuri-item>\n <valtimo-case-management-external-start-form [isReadOnly]=\"obs.isReadOnly\">\n </valtimo-case-management-external-start-form>\n </valtimo-muuri-item>\n </div>\n</ng-container>\n", styles: [".read-only-notification{margin-bottom:16px;max-inline-size:100%;min-inline-size: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: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.Notification, selector: "cds-notification, cds-inline-notification, ibm-notification, ibm-inline-notification", inputs: ["notificationObj"] }, { kind: "directive", type: i7.MuuriDirective, selector: "[muuri]", inputs: ["columnMinWidth", "widgetLayout"] }, { kind: "component", type: i7.MuuriItemComponent, selector: "valtimo-muuri-item" }, { kind: "component", type: CaseManagementMissingPluginConfigurationsComponent, selector: "valtimo-case-management-missing-plugin-configurations" }, { kind: "component", type: CaseManagementCaseHandlerComponent, selector: "valtimo-case-management-case-handler", inputs: ["isReadOnly"] }, { kind: "component", type: CaseManagementExternalStartFormComponent, selector: "valtimo-case-management-external-start-form", inputs: ["isReadOnly"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
4871
4880
  }
4872
4881
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: CaseManagementGeneralComponent, decorators: [{
4873
4882
  type: Component,
@@ -4901,15 +4910,24 @@ class CaseManagementWidgetTabEditModalComponent {
4901
4910
  get widgetTabName() {
4902
4911
  return this.editWidgetTabForm.get('name');
4903
4912
  }
4904
- constructor(fb, tabManagementService) {
4913
+ get _widgetService() {
4914
+ return this.widgetManagementService;
4915
+ }
4916
+ constructor(fb, tabManagementService, widgetManagementService) {
4905
4917
  this.fb = fb;
4906
4918
  this.tabManagementService = tabManagementService;
4919
+ this.widgetManagementService = widgetManagementService;
4907
4920
  this.saveEvent = new EventEmitter();
4908
4921
  this.open$ = new BehaviorSubject(false);
4909
4922
  this.disabled$ = new BehaviorSubject(false);
4910
4923
  this.editWidgetTabForm = this.fb.group({
4911
4924
  name: this.fb.control('', [Validators.required]),
4925
+ widgetLayout: this.fb.control(WidgetLayout.MUURI_GAP_FREE),
4912
4926
  });
4927
+ this.widgetLayoutSelectItems = WIDGET_LAYOUT_VALUES.map(value => ({
4928
+ id: value,
4929
+ translationKey: WIDGET_LAYOUT_TRANSLATION_KEYS[value],
4930
+ }));
4913
4931
  }
4914
4932
  ngOnInit() {
4915
4933
  this.openOpenSubscription();
@@ -4925,6 +4943,7 @@ class CaseManagementWidgetTabEditModalComponent {
4925
4943
  }
4926
4944
  saveWidgetTab() {
4927
4945
  this.disable();
4946
+ const widgetLayout = this.editWidgetTabForm.get('widgetLayout')?.value ?? WidgetLayout.MUURI_GAP_FREE;
4928
4947
  this.tabManagementService
4929
4948
  .editTab({
4930
4949
  key: this.tabItem.key,
@@ -4932,6 +4951,10 @@ class CaseManagementWidgetTabEditModalComponent {
4932
4951
  contentKey: '-',
4933
4952
  type: ApiTabType.WIDGETS,
4934
4953
  }, this.tabItem.key)
4954
+ .pipe(
4955
+ // Refresh the cached widgets first so persisting the layout doesn't
4956
+ // overwrite the widget tab with a stale widget list.
4957
+ switchMap(() => this._widgetService.getWidgetConfiguration().pipe(take$1(1))), switchMap(() => this._widgetService.updateWidgetLayout(widgetLayout).pipe(take$1(1))))
4935
4958
  .subscribe(() => {
4936
4959
  this.saveEvent.emit();
4937
4960
  this.closeModal();
@@ -4941,6 +4964,9 @@ class CaseManagementWidgetTabEditModalComponent {
4941
4964
  if (this.tabItem) {
4942
4965
  this.widgetTabName?.setValue(this.tabItem.name ?? '');
4943
4966
  }
4967
+ this.editWidgetTabForm
4968
+ .get('widgetLayout')
4969
+ ?.setValue(this._widgetService.widgetLayout$.value);
4944
4970
  this.enable();
4945
4971
  }
4946
4972
  openOpenSubscription() {
@@ -4955,8 +4981,8 @@ class CaseManagementWidgetTabEditModalComponent {
4955
4981
  enable() {
4956
4982
  this.disabled$.next(false);
4957
4983
  }
4958
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: CaseManagementWidgetTabEditModalComponent, deps: [{ token: i1$4.FormBuilder }, { token: TabManagementService }], target: i0.ɵɵFactoryTarget.Component }); }
4959
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: CaseManagementWidgetTabEditModalComponent, isStandalone: true, selector: "valtimo-case-management-widget-tab-edit-modal", inputs: { showModal$: "showModal$", tabItem: "tabItem" }, outputs: { saveEvent: "saveEvent" }, 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=\"{disabled: disabled$ | async} as obs\"\n valtimoCdsModal\n [open]=\"open$ | async\"\n showFooter=\"true\"\n title=\"{{ 'widgetTabManagement.tab.editWidgetTab' | translate }}\"\n class=\"edit-widget-tab-modal\"\n (close)=\"closeModal()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>{{ 'widgetTabManagement.tab.editWidgetTab' | translate }}</h3>\n </cds-modal-header>\n\n <section cdsModalContent [cdsLayer]=\"1\">\n <ng-container *ngTemplateOutlet=\"editWidgetTabFormTemplate;context:{obs: obs}\"></ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"editWidgetTabButtons;context:{obs: obs}\"></ng-container>\n </cds-modal-footer>\n</cds-modal>\n\n<ng-template #editWidgetTabFormTemplate let-obs=\"obs\">\n <form *ngIf=\"editWidgetTabForm\" [formGroup]=\"editWidgetTabForm\" class=\"widget-tab-modal__form\">\n <cds-label [disabled]=\"obs.disabled\" [invalid]=\"widgetTabName.dirty && widgetTabName.invalid\">\n {{ 'widgetTabManagement.tab.form.tabName' | translate }}\n\n <input\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"widgetTabName.dirty && widgetTabName.invalid\"\n formControlName=\"name\"\n [attr.modal-primary-focus]=\"true\"\n />\n </cds-label>\n </form>\n</ng-template>\n\n<ng-template #editWidgetTabButtons let-obs=\"obs\">\n <button cdsButton=\"secondary\" [disabled]=\"obs.disabled\" (click)=\"closeModal()\">\n {{ 'widgetTabManagement.tab.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n [disabled]=\"editWidgetTabForm.invalid || obs.disabled\"\n (click)=\"saveWidgetTab()\"\n >\n {{ 'widgetTabManagement.tab.save' | translate }}\n </button>\n</ng-template>\n", styles: [".edit-widget-tab-modal .form__row{display:flex;flex-direction:row;justify-content:space-between;align-items:flex-end}\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: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ModalModule }, { kind: "component", type: i2.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i2.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i2.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i2.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i2.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "directive", type: ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i2.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i2.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
4984
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: CaseManagementWidgetTabEditModalComponent, deps: [{ token: i1$4.FormBuilder }, { token: TabManagementService }, { token: WIDGET_MANAGEMENT_SERVICE }], target: i0.ɵɵFactoryTarget.Component }); }
4985
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: CaseManagementWidgetTabEditModalComponent, isStandalone: true, selector: "valtimo-case-management-widget-tab-edit-modal", inputs: { showModal$: "showModal$", tabItem: "tabItem" }, outputs: { saveEvent: "saveEvent" }, 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=\"{disabled: disabled$ | async} as obs\"\n valtimoCdsModal\n [open]=\"open$ | async\"\n showFooter=\"true\"\n title=\"{{ 'widgetTabManagement.tab.editWidgetTab' | translate }}\"\n class=\"edit-widget-tab-modal\"\n (close)=\"closeModal()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>{{ 'widgetTabManagement.tab.editWidgetTab' | translate }}</h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <ng-container *ngTemplateOutlet=\"editWidgetTabFormTemplate;context:{obs: obs}\"></ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"editWidgetTabButtons;context:{obs: obs}\"></ng-container>\n </cds-modal-footer>\n</cds-modal>\n\n<ng-template #editWidgetTabFormTemplate let-obs=\"obs\">\n <form\n *ngIf=\"editWidgetTabForm\"\n [formGroup]=\"editWidgetTabForm\"\n class=\"widget-tab-modal__form\"\n [cdsLayer]=\"1\"\n >\n <cds-label [disabled]=\"obs.disabled\" [invalid]=\"widgetTabName.dirty && widgetTabName.invalid\">\n {{ 'widgetTabManagement.tab.form.tabName' | translate }}\n\n <input\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"widgetTabName.dirty && widgetTabName.invalid\"\n formControlName=\"name\"\n [attr.modal-primary-focus]=\"true\"\n />\n </cds-label>\n\n <v-select\n formControlName=\"widgetLayout\"\n [items]=\"widgetLayoutSelectItems\"\n [dropUp]=\"false\"\n [appendInline]=\"false\"\n titleTranslationKey=\"widgetLayout.label\"\n ></v-select>\n\n <valtimo-widget-layout-info></valtimo-widget-layout-info>\n </form>\n</ng-template>\n\n<ng-template #editWidgetTabButtons let-obs=\"obs\">\n <button cdsButton=\"secondary\" [disabled]=\"obs.disabled\" (click)=\"closeModal()\">\n {{ 'widgetTabManagement.tab.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n [disabled]=\"editWidgetTabForm.invalid || obs.disabled\"\n (click)=\"saveWidgetTab()\"\n >\n {{ 'widgetTabManagement.tab.save' | translate }}\n </button>\n</ng-template>\n", styles: [".edit-widget-tab-modal .widget-tab-modal__form{display:flex;flex-direction:column;gap:16px}.edit-widget-tab-modal .form__row{display:flex;flex-direction:row;justify-content:space-between;align-items:flex-end}\n/*!\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ModalModule }, { kind: "component", type: i2.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i2.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i2.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i2.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i2.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "directive", type: ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i2.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i2.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i2.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i7.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "disabled", "dropUp", "invalid", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "clearText", "clearable", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder", "smallMargin", "carbonTheme", "appendInline", "warn", "warnText", "dataTestId"], outputs: ["selectedChange"] }, { kind: "component", type: WidgetLayoutInfoComponent, selector: "valtimo-widget-layout-info" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
4960
4986
  }
4961
4987
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: CaseManagementWidgetTabEditModalComponent, decorators: [{
4962
4988
  type: Component,
@@ -4968,8 +4994,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImpo
4968
4994
  ReactiveFormsModule,
4969
4995
  InputModule,
4970
4996
  ButtonModule,
4971
- ], 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=\"{disabled: disabled$ | async} as obs\"\n valtimoCdsModal\n [open]=\"open$ | async\"\n showFooter=\"true\"\n title=\"{{ 'widgetTabManagement.tab.editWidgetTab' | translate }}\"\n class=\"edit-widget-tab-modal\"\n (close)=\"closeModal()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>{{ 'widgetTabManagement.tab.editWidgetTab' | translate }}</h3>\n </cds-modal-header>\n\n <section cdsModalContent [cdsLayer]=\"1\">\n <ng-container *ngTemplateOutlet=\"editWidgetTabFormTemplate;context:{obs: obs}\"></ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"editWidgetTabButtons;context:{obs: obs}\"></ng-container>\n </cds-modal-footer>\n</cds-modal>\n\n<ng-template #editWidgetTabFormTemplate let-obs=\"obs\">\n <form *ngIf=\"editWidgetTabForm\" [formGroup]=\"editWidgetTabForm\" class=\"widget-tab-modal__form\">\n <cds-label [disabled]=\"obs.disabled\" [invalid]=\"widgetTabName.dirty && widgetTabName.invalid\">\n {{ 'widgetTabManagement.tab.form.tabName' | translate }}\n\n <input\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"widgetTabName.dirty && widgetTabName.invalid\"\n formControlName=\"name\"\n [attr.modal-primary-focus]=\"true\"\n />\n </cds-label>\n </form>\n</ng-template>\n\n<ng-template #editWidgetTabButtons let-obs=\"obs\">\n <button cdsButton=\"secondary\" [disabled]=\"obs.disabled\" (click)=\"closeModal()\">\n {{ 'widgetTabManagement.tab.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n [disabled]=\"editWidgetTabForm.invalid || obs.disabled\"\n (click)=\"saveWidgetTab()\"\n >\n {{ 'widgetTabManagement.tab.save' | translate }}\n </button>\n</ng-template>\n", styles: [".edit-widget-tab-modal .form__row{display:flex;flex-direction:row;justify-content:space-between;align-items:flex-end}\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"] }]
4972
- }], ctorParameters: () => [{ type: i1$4.FormBuilder }, { type: TabManagementService }], propDecorators: { showModal$: [{
4997
+ LayerModule,
4998
+ SelectModule,
4999
+ WidgetLayoutInfoComponent,
5000
+ ], 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=\"{disabled: disabled$ | async} as obs\"\n valtimoCdsModal\n [open]=\"open$ | async\"\n showFooter=\"true\"\n title=\"{{ 'widgetTabManagement.tab.editWidgetTab' | translate }}\"\n class=\"edit-widget-tab-modal\"\n (close)=\"closeModal()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>{{ 'widgetTabManagement.tab.editWidgetTab' | translate }}</h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <ng-container *ngTemplateOutlet=\"editWidgetTabFormTemplate;context:{obs: obs}\"></ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"editWidgetTabButtons;context:{obs: obs}\"></ng-container>\n </cds-modal-footer>\n</cds-modal>\n\n<ng-template #editWidgetTabFormTemplate let-obs=\"obs\">\n <form\n *ngIf=\"editWidgetTabForm\"\n [formGroup]=\"editWidgetTabForm\"\n class=\"widget-tab-modal__form\"\n [cdsLayer]=\"1\"\n >\n <cds-label [disabled]=\"obs.disabled\" [invalid]=\"widgetTabName.dirty && widgetTabName.invalid\">\n {{ 'widgetTabManagement.tab.form.tabName' | translate }}\n\n <input\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"widgetTabName.dirty && widgetTabName.invalid\"\n formControlName=\"name\"\n [attr.modal-primary-focus]=\"true\"\n />\n </cds-label>\n\n <v-select\n formControlName=\"widgetLayout\"\n [items]=\"widgetLayoutSelectItems\"\n [dropUp]=\"false\"\n [appendInline]=\"false\"\n titleTranslationKey=\"widgetLayout.label\"\n ></v-select>\n\n <valtimo-widget-layout-info></valtimo-widget-layout-info>\n </form>\n</ng-template>\n\n<ng-template #editWidgetTabButtons let-obs=\"obs\">\n <button cdsButton=\"secondary\" [disabled]=\"obs.disabled\" (click)=\"closeModal()\">\n {{ 'widgetTabManagement.tab.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n [disabled]=\"editWidgetTabForm.invalid || obs.disabled\"\n (click)=\"saveWidgetTab()\"\n >\n {{ 'widgetTabManagement.tab.save' | translate }}\n </button>\n</ng-template>\n", styles: [".edit-widget-tab-modal .widget-tab-modal__form{display:flex;flex-direction:column;gap:16px}.edit-widget-tab-modal .form__row{display:flex;flex-direction:row;justify-content:space-between;align-items:flex-end}\n/*!\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
5001
+ }], ctorParameters: () => [{ type: i1$4.FormBuilder }, { type: TabManagementService }, { type: undefined, decorators: [{
5002
+ type: Inject,
5003
+ args: [WIDGET_MANAGEMENT_SERVICE]
5004
+ }] }], propDecorators: { showModal$: [{
4973
5005
  type: Input
4974
5006
  }], tabItem: [{
4975
5007
  type: Input