@valtimo/dashboard-management 13.32.0 → 13.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/valtimo-dashboard-management.mjs +20 -5
- package/fesm2022/valtimo-dashboard-management.mjs.map +1 -1
- package/lib/components/edit-dashboard-modal/edit-dashboard-modal.d.ts +3 -0
- package/lib/dashboard-management.module.d.ts +1 -1
- package/lib/models/dashboard-item.type.d.ts +2 -0
- package/package.json +1 -1
|
@@ -7,7 +7,7 @@ import { Validators, ReactiveFormsModule } from '@angular/forms';
|
|
|
7
7
|
import * as i6 from '@ngx-translate/core';
|
|
8
8
|
import { TranslateModule } from '@ngx-translate/core';
|
|
9
9
|
import * as i4 from '@valtimo/components';
|
|
10
|
-
import { CARBON_CONSTANTS, ViewType, SpinnerModule, RenderInPageHeaderDirective, ConfirmationModalModule, CarbonListModule, ValtimoCdsModalDirective, JsonEditorComponent } from '@valtimo/components';
|
|
10
|
+
import { CARBON_CONSTANTS, WidgetLayout, WIDGET_LAYOUT_VALUES, WIDGET_LAYOUT_TRANSLATION_KEYS, ViewType, SpinnerModule, RenderInPageHeaderDirective, ConfirmationModalModule, CarbonListModule, ValtimoCdsModalDirective, JsonEditorComponent, SelectModule, WidgetLayoutInfoComponent } from '@valtimo/components';
|
|
11
11
|
import * as i3 from 'carbon-components-angular';
|
|
12
12
|
import { ButtonModule, DropdownModule, InputModule, ModalModule, NotificationModule, IconModule, LayerModule } from 'carbon-components-angular';
|
|
13
13
|
import { Code16, Edit16 } from '@carbon/icons';
|
|
@@ -556,7 +556,12 @@ class EditDashboardModalComponent {
|
|
|
556
556
|
this.editDashboardForm = this.fb.group({
|
|
557
557
|
title: this.fb.control('', [Validators.required]),
|
|
558
558
|
description: this.fb.control('', [Validators.required]),
|
|
559
|
+
widgetLayout: this.fb.control(WidgetLayout.MUURI_GAP_FREE),
|
|
559
560
|
});
|
|
561
|
+
this.widgetLayoutSelectItems = WIDGET_LAYOUT_VALUES.map(value => ({
|
|
562
|
+
id: value,
|
|
563
|
+
translationKey: WIDGET_LAYOUT_TRANSLATION_KEYS[value],
|
|
564
|
+
}));
|
|
560
565
|
}
|
|
561
566
|
ngOnInit() {
|
|
562
567
|
this.openOpenSubscription();
|
|
@@ -574,6 +579,7 @@ class EditDashboardModalComponent {
|
|
|
574
579
|
description: this.dashboardDescription.value,
|
|
575
580
|
title: this.dashboardTitle.value,
|
|
576
581
|
key: this.dashboard.key,
|
|
582
|
+
widgetLayout: this.editDashboardForm.get('widgetLayout').value ?? WidgetLayout.MUURI_GAP_FREE,
|
|
577
583
|
})
|
|
578
584
|
.subscribe(() => {
|
|
579
585
|
this.saveEvent.emit();
|
|
@@ -584,6 +590,9 @@ class EditDashboardModalComponent {
|
|
|
584
590
|
if (this.dashboard) {
|
|
585
591
|
this.dashboardTitle?.setValue(this.dashboard.title);
|
|
586
592
|
this.dashboardDescription?.setValue(this.dashboard.description);
|
|
593
|
+
this.editDashboardForm
|
|
594
|
+
.get('widgetLayout')
|
|
595
|
+
?.setValue(this.dashboard.widgetLayout ?? WidgetLayout.MUURI_GAP_FREE);
|
|
587
596
|
}
|
|
588
597
|
this.enable();
|
|
589
598
|
}
|
|
@@ -600,11 +609,11 @@ class EditDashboardModalComponent {
|
|
|
600
609
|
this.disabled$.next(false);
|
|
601
610
|
}
|
|
602
611
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: EditDashboardModalComponent, deps: [{ token: i1$1.FormBuilder }, { token: DashboardManagementService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
603
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: EditDashboardModalComponent, isStandalone: false, selector: "valtimo-edit-dashboard-modal", inputs: { showModal$: "showModal$", dashboard: "dashboard" }, 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=\"{{ 'dashboardManagement.widgets.editDashboard' | translate }}\"\n class=\"edit-dashboard-modal\"\n (close)=\"closeModal()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>{{ 'dashboardManagement.widgets.editDashboard' | translate }}</h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <ng-container *ngTemplateOutlet=\"editDashboardFormTemplate;context:{obs: obs}\"></ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"editDashboardButtons;context:{obs: obs}\"></ng-container>\n </cds-modal-footer>\n</cds-modal>\n\n<ng-template #editDashboardFormTemplate let-obs=\"obs\">\n <form\n *ngIf=\"editDashboardForm\"\n [formGroup]=\"editDashboardForm\"\n class=\"dashboard-modal__form\"\n [cdsLayer]=\"1\"\n >\n <div class=\"form__element\">\n <cds-label\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardTitle.dirty && dashboardTitle.invalid\"\n >\n {{ 'dashboardManagement.widgets.form.dashboardTitle' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.editTitleInput\"\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardTitle.dirty && dashboardTitle.invalid\"\n formControlName=\"title\"\n [attr.modal-primary-focus]=\"true\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [disabled]=\"obs.disabled\"\n [helperText]=\"'dashboardManagement.widgets.form.dashboardDescriptionHelperText' | translate\"\n [invalid]=\"dashboardDescription.dirty && dashboardDescription.invalid\"\n [invalidText]=\"\n 'dashboardManagement.widgets.form.dashboardDescriptionHelperText' | translate\n \"\n >\n {{ 'dashboardManagement.widgets.form.dashboardDescription' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.editDescriptionInput\"\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardDescription.dirty && dashboardDescription.invalid\"\n formControlName=\"description\"\n />\n </cds-label>\n </div>\n </form>\n</ng-template>\n\n<ng-template #editDashboardButtons let-obs=\"obs\">\n <button cdsButton=\"ghost\" [disabled]=\"obs.disabled\" (click)=\"closeModal()\">\n {{ 'dashboardManagement.widgets.cancel' | translate }}\n </button>\n\n <button\n [attr.data-test-id]=\"testIds.completeButton\"\n cdsButton=\"primary\"\n [disabled]=\"editDashboardForm.invalid || obs.disabled\"\n (click)=\"saveDashboard()\"\n >\n {{ 'dashboardManagement.widgets.complete' | translate }}\n </button>\n</ng-template>\n", styles: [".edit-dashboard-modal .form__row{display:flex;flex-direction:row;justify-content:space-between;align-items:flex-end}.edit-dashboard-modal .form__element{width:100%;margin-bottom:
|
|
612
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: EditDashboardModalComponent, isStandalone: false, selector: "valtimo-edit-dashboard-modal", inputs: { showModal$: "showModal$", dashboard: "dashboard" }, 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=\"{{ 'dashboardManagement.widgets.editDashboard' | translate }}\"\n class=\"edit-dashboard-modal\"\n (close)=\"closeModal()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>{{ 'dashboardManagement.widgets.editDashboard' | translate }}</h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <ng-container *ngTemplateOutlet=\"editDashboardFormTemplate;context:{obs: obs}\"></ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"editDashboardButtons;context:{obs: obs}\"></ng-container>\n </cds-modal-footer>\n</cds-modal>\n\n<ng-template #editDashboardFormTemplate let-obs=\"obs\">\n <form\n *ngIf=\"editDashboardForm\"\n [formGroup]=\"editDashboardForm\"\n class=\"dashboard-modal__form\"\n [cdsLayer]=\"1\"\n >\n <div class=\"form__element\">\n <cds-label\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardTitle.dirty && dashboardTitle.invalid\"\n >\n {{ 'dashboardManagement.widgets.form.dashboardTitle' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.editTitleInput\"\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardTitle.dirty && dashboardTitle.invalid\"\n formControlName=\"title\"\n [attr.modal-primary-focus]=\"true\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [disabled]=\"obs.disabled\"\n [helperText]=\"'dashboardManagement.widgets.form.dashboardDescriptionHelperText' | translate\"\n [invalid]=\"dashboardDescription.dirty && dashboardDescription.invalid\"\n [invalidText]=\"\n 'dashboardManagement.widgets.form.dashboardDescriptionHelperText' | translate\n \"\n >\n {{ 'dashboardManagement.widgets.form.dashboardDescription' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.editDescriptionInput\"\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardDescription.dirty && dashboardDescription.invalid\"\n formControlName=\"description\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <v-select\n formControlName=\"widgetLayout\"\n [items]=\"widgetLayoutSelectItems\"\n [dropUp]=\"false\"\n [appendInline]=\"false\"\n titleTranslationKey=\"widgetLayout.label\"\n ></v-select>\n </div>\n\n <valtimo-widget-layout-info></valtimo-widget-layout-info>\n </form>\n</ng-template>\n\n<ng-template #editDashboardButtons let-obs=\"obs\">\n <button cdsButton=\"ghost\" [disabled]=\"obs.disabled\" (click)=\"closeModal()\">\n {{ 'dashboardManagement.widgets.cancel' | translate }}\n </button>\n\n <button\n [attr.data-test-id]=\"testIds.completeButton\"\n cdsButton=\"primary\"\n [disabled]=\"editDashboardForm.invalid || obs.disabled\"\n (click)=\"saveDashboard()\"\n >\n {{ 'dashboardManagement.widgets.complete' | translate }}\n </button>\n</ng-template>\n", styles: [".edit-dashboard-modal .form__row{display:flex;flex-direction:row;justify-content:space-between;align-items:flex-end}.edit-dashboard-modal .form__element{width:100%;margin-bottom:16px}\n/*!\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i3.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "component", type: i3.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i3.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i3.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i3.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i3.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$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: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "directive", type: i4.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }, { kind: "component", type: i4.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: i4.WidgetLayoutInfoComponent, selector: "valtimo-widget-layout-info" }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
604
613
|
}
|
|
605
614
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: EditDashboardModalComponent, decorators: [{
|
|
606
615
|
type: Component,
|
|
607
|
-
args: [{ selector: 'valtimo-edit-dashboard-modal', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, 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=\"{{ 'dashboardManagement.widgets.editDashboard' | translate }}\"\n class=\"edit-dashboard-modal\"\n (close)=\"closeModal()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>{{ 'dashboardManagement.widgets.editDashboard' | translate }}</h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <ng-container *ngTemplateOutlet=\"editDashboardFormTemplate;context:{obs: obs}\"></ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"editDashboardButtons;context:{obs: obs}\"></ng-container>\n </cds-modal-footer>\n</cds-modal>\n\n<ng-template #editDashboardFormTemplate let-obs=\"obs\">\n <form\n *ngIf=\"editDashboardForm\"\n [formGroup]=\"editDashboardForm\"\n class=\"dashboard-modal__form\"\n [cdsLayer]=\"1\"\n >\n <div class=\"form__element\">\n <cds-label\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardTitle.dirty && dashboardTitle.invalid\"\n >\n {{ 'dashboardManagement.widgets.form.dashboardTitle' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.editTitleInput\"\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardTitle.dirty && dashboardTitle.invalid\"\n formControlName=\"title\"\n [attr.modal-primary-focus]=\"true\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [disabled]=\"obs.disabled\"\n [helperText]=\"'dashboardManagement.widgets.form.dashboardDescriptionHelperText' | translate\"\n [invalid]=\"dashboardDescription.dirty && dashboardDescription.invalid\"\n [invalidText]=\"\n 'dashboardManagement.widgets.form.dashboardDescriptionHelperText' | translate\n \"\n >\n {{ 'dashboardManagement.widgets.form.dashboardDescription' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.editDescriptionInput\"\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardDescription.dirty && dashboardDescription.invalid\"\n formControlName=\"description\"\n />\n </cds-label>\n </div>\n </form>\n</ng-template>\n\n<ng-template #editDashboardButtons let-obs=\"obs\">\n <button cdsButton=\"ghost\" [disabled]=\"obs.disabled\" (click)=\"closeModal()\">\n {{ 'dashboardManagement.widgets.cancel' | translate }}\n </button>\n\n <button\n [attr.data-test-id]=\"testIds.completeButton\"\n cdsButton=\"primary\"\n [disabled]=\"editDashboardForm.invalid || obs.disabled\"\n (click)=\"saveDashboard()\"\n >\n {{ 'dashboardManagement.widgets.complete' | translate }}\n </button>\n</ng-template>\n", styles: [".edit-dashboard-modal .form__row{display:flex;flex-direction:row;justify-content:space-between;align-items:flex-end}.edit-dashboard-modal .form__element{width:100%;margin-bottom:
|
|
616
|
+
args: [{ selector: 'valtimo-edit-dashboard-modal', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, 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=\"{{ 'dashboardManagement.widgets.editDashboard' | translate }}\"\n class=\"edit-dashboard-modal\"\n (close)=\"closeModal()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>{{ 'dashboardManagement.widgets.editDashboard' | translate }}</h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <ng-container *ngTemplateOutlet=\"editDashboardFormTemplate;context:{obs: obs}\"></ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"editDashboardButtons;context:{obs: obs}\"></ng-container>\n </cds-modal-footer>\n</cds-modal>\n\n<ng-template #editDashboardFormTemplate let-obs=\"obs\">\n <form\n *ngIf=\"editDashboardForm\"\n [formGroup]=\"editDashboardForm\"\n class=\"dashboard-modal__form\"\n [cdsLayer]=\"1\"\n >\n <div class=\"form__element\">\n <cds-label\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardTitle.dirty && dashboardTitle.invalid\"\n >\n {{ 'dashboardManagement.widgets.form.dashboardTitle' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.editTitleInput\"\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardTitle.dirty && dashboardTitle.invalid\"\n formControlName=\"title\"\n [attr.modal-primary-focus]=\"true\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [disabled]=\"obs.disabled\"\n [helperText]=\"'dashboardManagement.widgets.form.dashboardDescriptionHelperText' | translate\"\n [invalid]=\"dashboardDescription.dirty && dashboardDescription.invalid\"\n [invalidText]=\"\n 'dashboardManagement.widgets.form.dashboardDescriptionHelperText' | translate\n \"\n >\n {{ 'dashboardManagement.widgets.form.dashboardDescription' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.editDescriptionInput\"\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardDescription.dirty && dashboardDescription.invalid\"\n formControlName=\"description\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <v-select\n formControlName=\"widgetLayout\"\n [items]=\"widgetLayoutSelectItems\"\n [dropUp]=\"false\"\n [appendInline]=\"false\"\n titleTranslationKey=\"widgetLayout.label\"\n ></v-select>\n </div>\n\n <valtimo-widget-layout-info></valtimo-widget-layout-info>\n </form>\n</ng-template>\n\n<ng-template #editDashboardButtons let-obs=\"obs\">\n <button cdsButton=\"ghost\" [disabled]=\"obs.disabled\" (click)=\"closeModal()\">\n {{ 'dashboardManagement.widgets.cancel' | translate }}\n </button>\n\n <button\n [attr.data-test-id]=\"testIds.completeButton\"\n cdsButton=\"primary\"\n [disabled]=\"editDashboardForm.invalid || obs.disabled\"\n (click)=\"saveDashboard()\"\n >\n {{ 'dashboardManagement.widgets.complete' | translate }}\n </button>\n</ng-template>\n", styles: [".edit-dashboard-modal .form__row{display:flex;flex-direction:row;justify-content:space-between;align-items:flex-end}.edit-dashboard-modal .form__element{width:100%;margin-bottom:16px}\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"] }]
|
|
608
617
|
}], ctorParameters: () => [{ type: i1$1.FormBuilder }, { type: DashboardManagementService }], propDecorators: { showModal$: [{
|
|
609
618
|
type: Input
|
|
610
619
|
}], dashboard: [{
|
|
@@ -941,7 +950,9 @@ class DashboardManagementModule {
|
|
|
941
950
|
CarbonListModule,
|
|
942
951
|
LayerModule,
|
|
943
952
|
ValtimoCdsModalDirective,
|
|
944
|
-
JsonEditorComponent
|
|
953
|
+
JsonEditorComponent,
|
|
954
|
+
SelectModule,
|
|
955
|
+
WidgetLayoutInfoComponent] }); }
|
|
945
956
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: DashboardManagementModule, imports: [ButtonModule,
|
|
946
957
|
CommonModule,
|
|
947
958
|
DashboardManagementRoutingModule,
|
|
@@ -957,7 +968,9 @@ class DashboardManagementModule {
|
|
|
957
968
|
WidgetTranslatePipeModule,
|
|
958
969
|
CarbonListModule,
|
|
959
970
|
LayerModule,
|
|
960
|
-
JsonEditorComponent
|
|
971
|
+
JsonEditorComponent,
|
|
972
|
+
SelectModule,
|
|
973
|
+
WidgetLayoutInfoComponent] }); }
|
|
961
974
|
}
|
|
962
975
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: DashboardManagementModule, decorators: [{
|
|
963
976
|
type: NgModule,
|
|
@@ -988,6 +1001,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImpo
|
|
|
988
1001
|
LayerModule,
|
|
989
1002
|
ValtimoCdsModalDirective,
|
|
990
1003
|
JsonEditorComponent,
|
|
1004
|
+
SelectModule,
|
|
1005
|
+
WidgetLayoutInfoComponent,
|
|
991
1006
|
],
|
|
992
1007
|
exports: [],
|
|
993
1008
|
}]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valtimo-dashboard-management.mjs","sources":["../../../../projects/valtimo/dashboard-management/src/lib/constants/dashboard-management.test-ids.ts","../../../../projects/valtimo/dashboard-management/src/lib/services/dashboard-management.service.ts","../../../../projects/valtimo/dashboard-management/src/lib/components/widget-configuration-container/widget-configuration-container.component.ts","../../../../projects/valtimo/dashboard-management/src/lib/components/widget-configuration-container/widget-configuration-container.component.html","../../../../projects/valtimo/dashboard-management/src/lib/components/widget-modal/widget-modal.component.ts","../../../../projects/valtimo/dashboard-management/src/lib/components/widget-modal/widget-modal.component.html","../../../../projects/valtimo/dashboard-management/src/lib/components/edit-dashboard-modal/edit-dashboard-modal.ts","../../../../projects/valtimo/dashboard-management/src/lib/components/edit-dashboard-modal/edit-dashboard-modal.html","../../../../projects/valtimo/dashboard-management/src/lib/components/dashboard-details/dashboard-details.component.ts","../../../../projects/valtimo/dashboard-management/src/lib/components/dashboard-details/dashboard-details.component.html","../../../../projects/valtimo/dashboard-management/src/lib/components/dashboard-management/dashboard-management.component.ts","../../../../projects/valtimo/dashboard-management/src/lib/components/dashboard-management/dashboard-management.component.html","../../../../projects/valtimo/dashboard-management/src/lib/dashboard-management-routing.module.ts","../../../../projects/valtimo/dashboard-management/src/lib/dashboard-management.module.ts","../../../../projects/valtimo/dashboard-management/src/public-api.ts","../../../../projects/valtimo/dashboard-management/src/valtimo-dashboard-management.ts"],"sourcesContent":["/*\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\nexport const DASHBOARD_MANAGEMENT_TEST_IDS = {\n // Dashboard list page\n addButton: 'dashboardManagementAddButton',\n createTitleInput: 'dashboardManagementCreateTitleInput',\n createDescriptionInput: 'dashboardManagementCreateDescriptionInput',\n createButton: 'dashboardManagementCreateButton',\n cancelDashboardButton: 'dashboardManagementCancelDashboardButton',\n // Dashboard details page — edit dashboard\n editButton: 'dashboardManagementEditButton',\n editTitleInput: 'dashboardManagementEditTitleInput',\n editDescriptionInput: 'dashboardManagementEditDescriptionInput',\n completeButton: 'dashboardManagementCompleteButton',\n switchViewButton: 'dashboardDetailsSwitchView',\n // Widget list page (dashboard details)\n addWidgetButton: 'dashboardManagementAddWidgetButton',\n // Widget modal\n widgetTitleInput: 'dashboardManagementWidgetTitleInput',\n widgetDataSourceDropdown: 'dashboardManagementWidgetDataSourceDropdown',\n widgetDisplayTypeDropdown: 'dashboardManagementWidgetDisplayTypeDropdown',\n widgetUrlInput: 'dashboardManagementWidgetUrlInput',\n widgetSaveButton: 'dashboardManagementWidgetSaveButton',\n widgetCancelButton: 'dashboardManagementWidgetCancelButton',\n widgetDeleteButton: 'dashboardManagementWidgetDeleteButton',\n} as const;\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\nimport {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {ConfigService} from '@valtimo/shared';\nimport {BehaviorSubject, catchError, Observable, of, switchMap, take, tap} from 'rxjs';\nimport {DashboardItem, DashboardWidget, WidgetDataSource} from '../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DashboardManagementService {\n private valtimoEndpointUri: string;\n\n public dashboards$ = new BehaviorSubject<{items: DashboardItem[] | null; loading: boolean}>({\n items: null,\n loading: true,\n });\n\n public loadData(): void {\n this.http\n .get<DashboardItem[]>(this.valtimoEndpointUri)\n .pipe(\n take(1),\n tap(() => {\n this.dashboards$.next({items: null, loading: true});\n })\n )\n .subscribe({\n next: (items: DashboardItem[]) => {\n this.dashboards$.next({items, loading: false});\n },\n error: error => {\n console.error(error);\n },\n });\n }\n\n constructor(\n private readonly http: HttpClient,\n private readonly configService: ConfigService\n ) {\n this.valtimoEndpointUri = `${this.configService.config.valtimoApi.endpointUri}management/v1/dashboard`;\n }\n\n public createDashboard(dashboard: DashboardItem): Observable<DashboardItem> {\n return this.http.post<DashboardItem>(this.valtimoEndpointUri, dashboard);\n }\n\n public updateDashboards(dashboards: Array<DashboardItem>): Observable<Array<DashboardItem>> {\n return this.http.put<Array<DashboardItem>>(this.valtimoEndpointUri, dashboards);\n }\n\n public updateDashboard(dashboard: DashboardItem): Observable<DashboardItem> {\n return this.http.put<DashboardItem>(`${this.valtimoEndpointUri}/${dashboard.key}`, dashboard);\n }\n\n public deleteDashboard(dashboardKey: string): Observable<null> {\n return this.http.delete<null>(`${this.valtimoEndpointUri}/${dashboardKey}`);\n }\n\n public dispatchAction(actionResult: Observable<DashboardItem | null>): void {\n actionResult\n .pipe(\n switchMap(() => this.getDashboards()),\n tap(() => {\n this.dashboards$.next({items: null, loading: true});\n }),\n take(1),\n catchError(error => of(error))\n )\n .subscribe({\n next: (items: DashboardItem[]) => this.dashboards$.next({items, loading: false}),\n error: error => {\n console.error(error);\n },\n });\n }\n\n public getDashboard(dashboardKey: string): Observable<DashboardItem> {\n return this.http.get<DashboardItem>(`${this.valtimoEndpointUri}/${dashboardKey}`);\n }\n\n public getDashboardWidgetConfiguration(dashboardKey: string): Observable<Array<DashboardWidget>> {\n return this.http.get<Array<DashboardWidget>>(\n `${this.valtimoEndpointUri}/${dashboardKey}/widget-configuration`\n );\n }\n\n public createDashboardWidgetConfiguration(\n dashboardKey: string,\n widgetConfiguration: DashboardWidget\n ): Observable<DashboardWidget> {\n return this.http.post<DashboardWidget>(\n `${this.valtimoEndpointUri}/${dashboardKey}/widget-configuration`,\n widgetConfiguration\n );\n }\n\n public updateDashboardWidgetConfigurations(\n dashboardKey: string,\n widgetConfigurations: Array<DashboardWidget>\n ): Observable<Array<DashboardWidget>> {\n return this.http.put<Array<DashboardWidget>>(\n `${this.valtimoEndpointUri}/${dashboardKey}/widget-configuration`,\n widgetConfigurations\n );\n }\n\n public updateDashboardWidgetConfiguration(\n dashboardKey: string,\n widgetConfiguration: DashboardWidget\n ): Observable<DashboardWidget> {\n return this.http.put<DashboardWidget>(\n `${this.valtimoEndpointUri}/${dashboardKey}/widget-configuration/${widgetConfiguration.key}`,\n widgetConfiguration\n );\n }\n\n public deleteDashboardWidgetConfiguration(\n dashboardKey: string,\n widgetKey: string\n ): Observable<DashboardWidget> {\n return this.http.delete<DashboardWidget>(\n `${this.valtimoEndpointUri}/${dashboardKey}/widget-configuration/${widgetKey}`\n );\n }\n\n public getDataSources(): Observable<Array<WidgetDataSource>> {\n return this.http.get<Array<WidgetDataSource>>(`${this.valtimoEndpointUri}/widget-data-sources`);\n }\n\n private getDashboards(): Observable<DashboardItem[]> {\n return this.http.get<DashboardItem[]>(this.valtimoEndpointUri);\n }\n}\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\nimport {\n Component,\n ComponentRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Type,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport {BehaviorSubject, combineLatest, Subscription} from 'rxjs';\nimport {tap} from 'rxjs/operators';\nimport {\n ConfigurationComponent,\n ConfigurationOutput,\n DataSourceConfigurationComponent,\n DisplayTypeConfigurationComponent,\n WidgetService,\n} from '@valtimo/dashboard';\n\n@Component({\n standalone: false,\n selector: 'valtimo-widget-configuration-container',\n templateUrl: './widget-configuration-container.component.html',\n})\nexport class WidgetConfigurationContainerComponent\n implements OnInit, OnDestroy, ConfigurationComponent\n{\n @ViewChild('widgetConfigurationComponent', {static: true, read: ViewContainerRef})\n private readonly _dynamicContainer: ViewContainerRef;\n\n @Input() public set dataSourceKey(value: string) {\n this._dataSourceKey$.next(value);\n }\n @Input() public set displayTypeKey(value: string) {\n this._displayTypeKey$.next(value);\n }\n @Input() public set disabled(disabledValue: boolean) {\n this._disabled$.next(disabledValue);\n }\n @Input() public set prefillConfiguration(prefillConfigurationValue) {\n this._prefillConfiguration$.next(prefillConfigurationValue);\n }\n @Output() public configurationEvent = new EventEmitter<ConfigurationOutput>();\n\n private _configurationSubscription!: Subscription;\n private readonly _subscriptions = new Subscription();\n\n private readonly _componentRef$ = new BehaviorSubject<\n ComponentRef<DataSourceConfigurationComponent | DisplayTypeConfigurationComponent> | undefined\n >(undefined);\n private readonly _dataSourceKey$ = new BehaviorSubject<string>('');\n private readonly _displayTypeKey$ = new BehaviorSubject<string>('');\n private readonly _disabled$ = new BehaviorSubject<boolean>(false);\n private readonly _prefillConfiguration$ = new BehaviorSubject<object | null>(null);\n\n constructor(private readonly widgetService: WidgetService) {}\n\n public ngOnInit(): void {\n this.openConfigurationComponentSubscription();\n this.openComponentInstanceSubscription();\n this.openDisabledSubscription();\n this.openPrefillConfigurationSubscription();\n }\n\n public ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n private openConfigurationComponentSubscription(): void {\n this._subscriptions.add(\n combineLatest([\n this._displayTypeKey$,\n this._dataSourceKey$,\n this.widgetService.supportedDisplayTypes$,\n this.widgetService.supportedDataSources$,\n ])\n .pipe(\n tap(([displayTypeKey, dataSourceKey, supportedDisplayTypes, supportedDataSources]) => {\n let configurationComponent!: Type<\n DisplayTypeConfigurationComponent | DataSourceConfigurationComponent\n >;\n\n this._dynamicContainer.clear();\n\n const displayTypeSpecification =\n displayTypeKey &&\n supportedDisplayTypes.find(type => type.displayTypeKey === displayTypeKey);\n const dataSourceSpecification =\n dataSourceKey &&\n supportedDataSources.find(source => source.dataSourceKey === dataSourceKey);\n\n if (displayTypeSpecification && displayTypeSpecification.configurationComponent) {\n configurationComponent = displayTypeSpecification.configurationComponent;\n } else if (dataSourceSpecification && dataSourceSpecification.configurationComponent) {\n configurationComponent = dataSourceSpecification.configurationComponent;\n }\n\n if (configurationComponent) {\n const componentRef = this._dynamicContainer.createComponent(configurationComponent);\n this.configurationEvent.emit({valid: false, data: {}});\n this._componentRef$.next(componentRef);\n } else {\n this.configurationEvent.emit({valid: true, data: {}});\n }\n })\n )\n .subscribe()\n );\n }\n\n private openComponentInstanceSubscription(): void {\n this._subscriptions.add(\n combineLatest([this._componentRef$, this._dataSourceKey$, this._displayTypeKey$]).subscribe(\n ([ref, dataSourceKey, displayTypeKey]) => {\n const instance = ref?.instance;\n\n this._configurationSubscription?.unsubscribe();\n\n if (instance) {\n if (displayTypeKey) {\n (instance as DisplayTypeConfigurationComponent).displayTypeKey = displayTypeKey;\n } else if (dataSourceKey) {\n (instance as DataSourceConfigurationComponent).dataSourceKey = dataSourceKey;\n }\n\n this._configurationSubscription = instance.configurationEvent.subscribe(\n configuration => {\n this.configurationEvent.emit(configuration);\n }\n );\n }\n }\n )\n );\n }\n\n private openDisabledSubscription(): void {\n this._subscriptions.add(\n combineLatest([this._componentRef$, this._disabled$]).subscribe(([ref, disabled]) => {\n const instance = ref?.instance;\n\n if (instance) {\n instance.disabled = disabled;\n }\n })\n );\n }\n\n private openPrefillConfigurationSubscription(): void {\n this._subscriptions.add(\n combineLatest([this._componentRef$, this._prefillConfiguration$]).subscribe(\n ([ref, prefillConfiguration]) => {\n const instance = ref?.instance;\n\n if (instance && prefillConfiguration) {\n instance.prefillConfiguration = prefillConfiguration;\n }\n }\n )\n );\n }\n}\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\n<ng-template #widgetConfigurationComponent></ng-template>\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 */\nimport {DOCUMENT} from '@angular/common';\nimport {\n Component,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport {FormBuilder, Validators} from '@angular/forms';\nimport {TranslateService} from '@ngx-translate/core';\nimport {CARBON_CONSTANTS} from '@valtimo/components';\nimport {GlobalNotificationService} from '@valtimo/shared';\nimport {\n ConfigurationOutput,\n DashboardWidgetConfiguration,\n DisplayTypeSpecification,\n WidgetService,\n WidgetTranslationService,\n} from '@valtimo/dashboard';\nimport {ListItem} from 'carbon-components-angular';\nimport {\n BehaviorSubject,\n combineLatest,\n filter,\n map,\n Observable,\n Subscription,\n switchMap,\n take,\n tap,\n} from 'rxjs';\nimport {DASHBOARD_MANAGEMENT_TEST_IDS} from '../../constants/dashboard-management.test-ids';\nimport {DashboardItem, WidgetDataSource, WidgetModalType} from '../../models';\nimport {DashboardManagementService} from '../../services/dashboard-management.service';\n\n@Component({\n standalone: false,\n selector: 'valtimo-widget-modal',\n templateUrl: './widget-modal.component.html',\n styleUrls: ['./widget-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class WidgetModalComponent implements OnInit, OnDestroy {\n public readonly testIds = DASHBOARD_MANAGEMENT_TEST_IDS;\n\n @Input() public showModal$: Observable<boolean>;\n @Input() public type: WidgetModalType;\n @Input() public dashboard: DashboardItem;\n @Input() public widgetKey!: string;\n @Input() public set editWidgetConfiguration(configuration: DashboardWidgetConfiguration) {\n if (configuration) {\n this.title.setValue(configuration.title);\n this.url.setValue(configuration.url);\n this.dataSourceSelected({item: {key: configuration.dataSourceKey}} as any);\n this.displayTypeSelected({item: {key: configuration.displayType}} as any);\n this.dataSourcePrefillConfig$.next(configuration.dataSourceProperties);\n this.displayTypePrefillConfig$.next(configuration.displayTypeProperties);\n } else {\n this.dataSourcePrefillConfig$.next(null);\n this.displayTypePrefillConfig$.next(null);\n }\n }\n @Output() public saveEvent = new EventEmitter<ConfigurationOutput>();\n\n public readonly form = this.fb.group({\n title: this.fb.control('', [Validators.required]),\n dataSource: this.fb.control(null, [Validators.required]),\n displayType: this.fb.control(null, [Validators.required]),\n url: this.fb.control(''),\n });\n\n public readonly open$ = new BehaviorSubject<boolean>(false);\n public readonly selectedDataSourceKey$ = new BehaviorSubject<string>('');\n public readonly selectedDisplayTypeKey$ = new BehaviorSubject<string>('');\n\n public readonly dataSourceItems$: Observable<Array<ListItem>> = combineLatest([\n this.dashboardManagementService.getDataSources(),\n this.selectedDataSourceKey$,\n this.widgetService.supportedDataSources$,\n this.translateService.stream('key'),\n ]).pipe(\n filter(([dataSources]) => !!dataSources),\n tap(([dataSources, selectedDataSourceKey]) => {\n if (selectedDataSourceKey) {\n this.setCompatibleDisplayTypes(dataSources, selectedDataSourceKey);\n } else {\n this.resetCompatibleDisplayTypes();\n }\n }),\n map(([dataSources, selectedDataSourceKey, supportedDataSources]) =>\n dataSources\n .filter(dataSource =>\n supportedDataSources.find(\n supportedDataSource => supportedDataSource.dataSourceKey === dataSource.key\n )\n )\n .map(dataSource => ({\n content: this.widgetTranslationService.instant('title', dataSource.key),\n selected: selectedDataSourceKey === dataSource.key,\n key: dataSource.key,\n }))\n )\n );\n\n public readonly dataSourcePrefillConfig$ = new BehaviorSubject<object | null>(null);\n public readonly displayTypePrefillConfig$ = new BehaviorSubject<object | null>(null);\n\n private readonly _compatibleDisplayTypes$ = new BehaviorSubject<Array<DisplayTypeSpecification>>(\n []\n );\n\n public readonly displayTypeItems$: Observable<Array<ListItem>> = combineLatest([\n this._compatibleDisplayTypes$,\n this.selectedDisplayTypeKey$,\n this.translateService.stream('key'),\n ]).pipe(\n map(([compatibleDisplayTypes, selectedDisplayTypeKey]) =>\n compatibleDisplayTypes.map(displayType => ({\n content: this.widgetTranslationService.instant('title', displayType.displayTypeKey),\n selected: displayType.displayTypeKey === selectedDisplayTypeKey,\n key: displayType.displayTypeKey,\n }))\n )\n );\n\n public readonly displayTypeDropdownDisabled$: Observable<boolean> = combineLatest([\n this._compatibleDisplayTypes$,\n this.selectedDataSourceKey$,\n ]).pipe(\n map(\n ([compatibleDisplayTypes, selectedDataSourceKey]) =>\n compatibleDisplayTypes?.length === 0 || !selectedDataSourceKey\n ),\n tap(displayTypeDropdownDisabled => {\n if (displayTypeDropdownDisabled) {\n this.displayType?.disable();\n } else {\n this.displayType?.enable();\n }\n })\n );\n\n public readonly dataSourceConfiguration$ = new BehaviorSubject<ConfigurationOutput>({\n valid: false,\n data: {},\n });\n public readonly displayTypeConfiguration$ = new BehaviorSubject<ConfigurationOutput>({\n valid: false,\n data: {},\n });\n\n public readonly disabled$ = new BehaviorSubject<boolean>(false);\n\n private _openSubscription!: Subscription;\n\n public get title() {\n return this.form.get('title');\n }\n public get key() {\n return this.form.get('key');\n }\n public get dataSource() {\n return this.form.get('dataSource');\n }\n public get displayType() {\n return this.form.get('displayType');\n }\n public get url() {\n return this.form.get('url');\n }\n\n constructor(\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly fb: FormBuilder,\n private readonly translateService: TranslateService,\n private readonly notificationService: GlobalNotificationService,\n private readonly dashboardManagementService: DashboardManagementService,\n private readonly widgetService: WidgetService,\n private readonly widgetTranslationService: WidgetTranslationService\n ) {}\n\n public ngOnInit(): void {\n this.openOpenSubscription();\n }\n\n public ngOnDestroy(): void {\n this._openSubscription?.unsubscribe();\n }\n\n public closeModal(): void {\n this.open$.next(false);\n\n setTimeout(() => {\n this.enable();\n this.form.reset();\n this.selectedDataSourceKey$.next('');\n this.selectedDisplayTypeKey$.next('');\n }, CARBON_CONSTANTS.modalAnimationMs);\n }\n\n public save(): void {\n this.disable();\n\n combineLatest([\n this.selectedDataSourceKey$,\n this.selectedDisplayTypeKey$,\n this.displayTypeConfiguration$,\n this.dataSourceConfiguration$,\n ])\n .pipe(\n take(1),\n map(\n ([\n selectedDataSourceKey,\n selectedDisplayTypeKey,\n displayTypeConfiguration,\n dataSourceConfiguration,\n ]) => ({\n title: this.title.value,\n displayType: selectedDisplayTypeKey,\n dataSourceKey: selectedDataSourceKey,\n dataSourceProperties: {...dataSourceConfiguration.data},\n displayTypeProperties: {...displayTypeConfiguration.data},\n url: this.url.value,\n })\n ),\n switchMap(widgetUpdateObject =>\n this.type === 'create'\n ? this.dashboardManagementService.createDashboardWidgetConfiguration(\n this.dashboard.key,\n widgetUpdateObject\n )\n : this.dashboardManagementService.updateDashboardWidgetConfiguration(\n this.dashboard.key,\n {...widgetUpdateObject, key: this.widgetKey}\n )\n )\n )\n .subscribe({\n complete: () => {\n this.saveEvent.emit();\n this.closeModal();\n },\n error: () => {\n this.enable();\n },\n });\n }\n\n public delete(): void {\n this.disable();\n\n this.dashboardManagementService\n .deleteDashboardWidgetConfiguration(this.dashboard.key, this.widgetKey)\n .subscribe({\n complete: () => {\n this.saveEvent.emit();\n this.closeModal();\n },\n error: () => {\n this.enable();\n },\n });\n }\n\n public dataSourceSelected(dataSource: ListItem): void {\n if (!dataSource) {\n return;\n }\n\n this.selectedDataSourceKey$.next(dataSource?.item?.key);\n this.dataSource.setValue(dataSource?.item?.key);\n }\n\n public displayTypeSelected(displayType: ListItem): void {\n if (!displayType) {\n return;\n }\n\n this.selectedDisplayTypeKey$.next(displayType?.item?.key);\n this.displayType.setValue(displayType?.item?.key);\n }\n\n public dataSourceConfiguration(configuration: ConfigurationOutput): void {\n this.dataSourceConfiguration$.next(configuration);\n }\n\n public displayTypeConfiguration(configuration: ConfigurationOutput): void {\n this.displayTypeConfiguration$.next(configuration);\n }\n\n private openOpenSubscription(): void {\n this._openSubscription = this.showModal$.subscribe(show => {\n this.open$.next(show);\n });\n }\n\n private resetCompatibleDisplayTypes(): void {\n this._compatibleDisplayTypes$.next([]);\n }\n\n private setCompatibleDisplayTypes(\n dataSources: Array<WidgetDataSource>,\n selectedDataSourceKey: string\n ): void {\n this.widgetService.supportedDisplayTypes$.pipe(take(1)).subscribe(supportedDisplayTypes => {\n const selectedDataSource = dataSources.find(source => source.key === selectedDataSourceKey);\n const availableDataFeatures = selectedDataSource?.dataFeatures;\n const compatibleDisplayTypes = supportedDisplayTypes.filter(displayType => {\n const supportedDataFeatures = displayType.requiredDataFeatures.filter(\n requiredDataFeature =>\n !!availableDataFeatures?.some(\n availableDataFeature =>\n this.trimAndToUpperCase(availableDataFeature) ===\n this.trimAndToUpperCase(requiredDataFeature)\n )\n );\n return supportedDataFeatures.length === displayType.requiredDataFeatures.length;\n });\n\n this._compatibleDisplayTypes$.next(compatibleDisplayTypes);\n });\n }\n\n private disable(): void {\n this.disabled$.next(true);\n this.form.disable();\n }\n\n private enable(): void {\n this.disabled$.next(false);\n this.form.enable();\n }\n\n private trimAndToUpperCase(text: string): string {\n return `${text}`.trim().toUpperCase();\n }\n}\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\n<ng-container\n *ngIf=\"{\n disabled: disabled$ | async,\n isCreate: type === 'create',\n isDelete: type === 'delete',\n isEdit: type === 'edit',\n open: open$ | async,\n } as vars\"\n>\n <ng-container\n *ngIf=\"{\n create: vars.isCreate && ('dashboardManagement.widgets.add' | translate),\n delete: vars.isDelete && ('dashboardManagement.widgets.delete' | translate),\n edit: vars.isEdit && ('dashboardManagement.widgets.edit' | translate),\n } as titles\"\n >\n <cds-modal\n *ngIf=\"{\n title: titles.edit || titles.create || titles.delete,\n } as translations\"\n valtimoCdsModal\n [open]=\"vars.open\"\n showFooter=\"true\"\n size=\"md\"\n title=\"{{ translations.title }}\"\n class=\"widget-modal\"\n (close)=\"closeModal()\"\n >\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>\n {{ translations.title }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent [cdsLayer]=\"1\">\n <ng-container *ngIf=\"vars.isDelete\">\n {{ 'dashboardManagement.widgets.deleteDescription' | translate }}</ng-container\n >\n\n <ng-container *ngIf=\"vars.isEdit || vars.isCreate\">\n <ng-container *ngTemplateOutlet=\"widgetForm; context: {vars: vars}\"></ng-container>\n </ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngIf=\"vars.isEdit || vars.isCreate\">\n <ng-container *ngTemplateOutlet=\"editButtons; context: {vars: vars}\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"vars.isDelete\">\n <ng-container *ngTemplateOutlet=\"deleteButtons; context: {vars: vars}\"></ng-container>\n </ng-container>\n </cds-modal-footer>\n </cds-modal>\n </ng-container>\n</ng-container>\n\n<ng-template #widgetForm let-vars=\"vars\">\n <form\n *ngIf=\"\n form && {\n dataSourceItems: dataSourceItems$ | async,\n displayTypeDropdownDisabled: displayTypeDropdownDisabled$ | async,\n displayTypeItems: displayTypeItems$ | async,\n selectedDataSourceKey: selectedDataSourceKey$ | async,\n selectedDisplayTypeKey: selectedDisplayTypeKey$ | async,\n } as obs\n \"\n [formGroup]=\"form\"\n class=\"dashboard-modal__form\"\n >\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'dashboardManagement.widgets.form.titleHelperText' | translate\"\n [invalidText]=\"'dashboardManagement.widgets.form.titleHelperText' | translate\"\n [invalid]=\"title.dirty && title.invalid\"\n >\n {{ 'dashboardManagement.widgets.form.title' | translate }}\n\n <input\n cdsText\n formControlName=\"title\"\n [attr.data-test-id]=\"testIds.widgetTitleInput\"\n [invalid]=\"title.dirty && title.invalid\"\n [attr.modal-primary-focus]=\"true\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__element\" *ngIf=\"obs.dataSourceItems\">\n <cds-dropdown\n [appendInline]=\"true\"\n [attr.data-test-id]=\"testIds.widgetDataSourceDropdown\"\n formControlName=\"dataSource\"\n [helperText]=\"'dashboardManagement.widgets.form.dataSourceHelperText' | translate\"\n [invalidText]=\"'dashboardManagement.widgets.form.dateSourceHelperText' | translate\"\n [invalid]=\"dataSource.dirty && dataSource.invalid\"\n [label]=\"'dashboardManagement.widgets.form.dataSource' | translate\"\n (selected)=\"dataSourceSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.dataSourceItems\" type=\"multi\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <valtimo-widget-configuration-container\n *ngIf=\"obs.selectedDataSourceKey\"\n [dataSourceKey]=\"obs.selectedDataSourceKey\"\n [disabled]=\"vars.disabled\"\n [prefillConfiguration]=\"dataSourcePrefillConfig$ | async\"\n (configurationEvent)=\"dataSourceConfiguration($event)\"\n ></valtimo-widget-configuration-container>\n\n <div class=\"form__element\" *ngIf=\"obs.displayTypeItems\">\n <cds-dropdown\n [appendInline]=\"true\"\n [attr.data-test-id]=\"testIds.widgetDisplayTypeDropdown\"\n formControlName=\"displayType\"\n [helperText]=\"'dashboardManagement.widgets.form.displayTypeHelperText' | translate\"\n [invalid]=\"displayType.dirty && displayType.invalid\"\n [invalidText]=\"'dashboardManagement.widgets.form.displayTypeHelperText' | translate\"\n [label]=\"'dashboardManagement.widgets.form.displayType' | translate\"\n (selected)=\"displayTypeSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.displayTypeItems\" type=\"multi\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <valtimo-widget-configuration-container\n *ngIf=\"obs.selectedDisplayTypeKey\"\n [disabled]=\"vars.disabled\"\n [displayTypeKey]=\"obs.selectedDisplayTypeKey\"\n [prefillConfiguration]=\"displayTypePrefillConfig$ | async\"\n (configurationEvent)=\"displayTypeConfiguration($event)\"\n ></valtimo-widget-configuration-container>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'dashboardManagement.widgets.form.urlHelperText' | translate\"\n [invalidText]=\"'dashboardManagement.widgets.form.urlHelperText' | translate\"\n [invalid]=\"url.dirty && url.invalid\"\n >\n {{ 'dashboardManagement.widgets.form.url' | translate }}\n\n <input cdsText formControlName=\"url\" [attr.data-test-id]=\"testIds.widgetUrlInput\" [invalid]=\"url.dirty && url.invalid\" />\n </cds-label>\n </div>\n </form>\n</ng-template>\n\n<ng-template #editButtons let-vars=\"vars\">\n <ng-container\n *ngIf=\"{\n dataSourceConfiguration: dataSourceConfiguration$ | async,\n displayTypeConfiguration: displayTypeConfiguration$ | async,\n } as obs\"\n >\n <button cdsButton=\"ghost\" [attr.data-test-id]=\"testIds.widgetCancelButton\" [disabled]=\"vars.disabled\" (click)=\"closeModal()\">\n {{ 'dashboardManagement.widgets.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n [attr.data-test-id]=\"testIds.widgetSaveButton\"\n [disabled]=\"\n form.invalid ||\n !obs.dataSourceConfiguration.valid ||\n !obs.displayTypeConfiguration.valid ||\n vars.disabled\n \"\n (click)=\"save()\"\n >\n {{ 'dashboardManagement.widgets.save' | translate }}\n </button>\n </ng-container>\n</ng-template>\n\n<ng-template #deleteButtons let-vars=\"vars\">\n <button cdsButton=\"secondary\" [attr.data-test-id]=\"testIds.widgetCancelButton\" [disabled]=\"vars.disabled\" (click)=\"closeModal()\">\n {{ 'dashboardManagement.widgets.cancel' | translate }}\n </button>\n\n <button cdsButton=\"danger\" [attr.data-test-id]=\"testIds.widgetDeleteButton\" [disabled]=\"vars.disabled\" (click)=\"delete()\">\n {{ 'dashboardManagement.widgets.delete' | translate }}\n </button>\n</ng-template>\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\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport {BehaviorSubject, Observable, Subscription} from 'rxjs';\nimport {DASHBOARD_MANAGEMENT_TEST_IDS} from '../../constants/dashboard-management.test-ids';\nimport {DashboardItem} from '../../models';\nimport {FormBuilder, Validators} from '@angular/forms';\nimport {CARBON_CONSTANTS} from '@valtimo/components';\nimport {DashboardManagementService} from '../../services/dashboard-management.service';\nimport {ConfigurationOutput} from '@valtimo/dashboard';\n\n@Component({\n selector: 'valtimo-edit-dashboard-modal',\n templateUrl: './edit-dashboard-modal.html',\n styleUrls: ['./edit-dashboard-modal.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class EditDashboardModalComponent implements OnInit {\n protected readonly testIds = DASHBOARD_MANAGEMENT_TEST_IDS;\n @Input() public showModal$: Observable<boolean>;\n @Input() public dashboard: DashboardItem;\n @Output() public saveEvent = new EventEmitter<ConfigurationOutput>();\n\n public readonly open$ = new BehaviorSubject<boolean>(false);\n public readonly disabled$ = new BehaviorSubject<boolean>(false);\n public readonly editDashboardForm = this.fb.group({\n title: this.fb.control('', [Validators.required]),\n description: this.fb.control('', [Validators.required]),\n });\n\n public get dashboardTitle() {\n return this.editDashboardForm.get('title');\n }\n\n public get dashboardDescription() {\n return this.editDashboardForm.get('description');\n }\n\n private _openSubscription!: Subscription;\n\n constructor(\n private readonly fb: FormBuilder,\n private readonly dashboardManagementService: DashboardManagementService\n ) {}\n\n public ngOnInit(): void {\n this.openOpenSubscription();\n }\n\n public closeModal(): void {\n this.open$.next(false);\n\n setTimeout(() => {\n this.editDashboardForm.reset();\n }, CARBON_CONSTANTS.modalAnimationMs);\n }\n\n public saveDashboard(): void {\n this.disable();\n\n this.dashboardManagementService\n .updateDashboard({\n description: this.dashboardDescription.value,\n title: this.dashboardTitle.value,\n key: this.dashboard.key,\n })\n .subscribe(() => {\n this.saveEvent.emit();\n this.closeModal();\n });\n }\n\n private setEditDashboardForm(): void {\n if (this.dashboard) {\n this.dashboardTitle?.setValue(this.dashboard.title);\n this.dashboardDescription?.setValue(this.dashboard.description);\n }\n\n this.enable();\n }\n\n private openOpenSubscription(): void {\n this._openSubscription = this.showModal$.subscribe(show => {\n this.setEditDashboardForm();\n this.open$.next(show);\n });\n }\n\n private disable(): void {\n this.disabled$.next(true);\n }\n\n private enable(): void {\n this.disabled$.next(false);\n }\n}\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\n<cds-modal\n *ngIf=\"{disabled: disabled$ | async} as obs\"\n valtimoCdsModal\n [open]=\"open$ | async\"\n showFooter=\"true\"\n title=\"{{ 'dashboardManagement.widgets.editDashboard' | translate }}\"\n class=\"edit-dashboard-modal\"\n (close)=\"closeModal()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>{{ 'dashboardManagement.widgets.editDashboard' | translate }}</h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <ng-container *ngTemplateOutlet=\"editDashboardFormTemplate;context:{obs: obs}\"></ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"editDashboardButtons;context:{obs: obs}\"></ng-container>\n </cds-modal-footer>\n</cds-modal>\n\n<ng-template #editDashboardFormTemplate let-obs=\"obs\">\n <form\n *ngIf=\"editDashboardForm\"\n [formGroup]=\"editDashboardForm\"\n class=\"dashboard-modal__form\"\n [cdsLayer]=\"1\"\n >\n <div class=\"form__element\">\n <cds-label\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardTitle.dirty && dashboardTitle.invalid\"\n >\n {{ 'dashboardManagement.widgets.form.dashboardTitle' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.editTitleInput\"\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardTitle.dirty && dashboardTitle.invalid\"\n formControlName=\"title\"\n [attr.modal-primary-focus]=\"true\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [disabled]=\"obs.disabled\"\n [helperText]=\"'dashboardManagement.widgets.form.dashboardDescriptionHelperText' | translate\"\n [invalid]=\"dashboardDescription.dirty && dashboardDescription.invalid\"\n [invalidText]=\"\n 'dashboardManagement.widgets.form.dashboardDescriptionHelperText' | translate\n \"\n >\n {{ 'dashboardManagement.widgets.form.dashboardDescription' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.editDescriptionInput\"\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardDescription.dirty && dashboardDescription.invalid\"\n formControlName=\"description\"\n />\n </cds-label>\n </div>\n </form>\n</ng-template>\n\n<ng-template #editDashboardButtons let-obs=\"obs\">\n <button cdsButton=\"ghost\" [disabled]=\"obs.disabled\" (click)=\"closeModal()\">\n {{ 'dashboardManagement.widgets.cancel' | translate }}\n </button>\n\n <button\n [attr.data-test-id]=\"testIds.completeButton\"\n cdsButton=\"primary\"\n [disabled]=\"editDashboardForm.invalid || obs.disabled\"\n (click)=\"saveDashboard()\"\n >\n {{ 'dashboardManagement.widgets.complete' | translate }}\n </button>\n</ng-template>\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 */\nimport {DatePipe} from '@angular/common';\nimport {AfterViewInit, Component, computed, signal, ViewEncapsulation} from '@angular/core';\nimport {ActivatedRoute} from '@angular/router';\nimport {Code16, Edit16} from '@carbon/icons';\nimport {TranslateService} from '@ngx-translate/core';\nimport {\n ActionItem,\n ColumnConfig,\n EditorModel,\n PageHeaderService,\n PageTitleService,\n ViewType,\n} from '@valtimo/components';\nimport {DashboardWidgetConfiguration} from '@valtimo/dashboard';\nimport {IconService} from 'carbon-components-angular';\nimport {BehaviorSubject, combineLatest, map, Observable, switchMap, tap} from 'rxjs';\nimport {DASHBOARD_MANAGEMENT_TEST_IDS} from '../../constants/dashboard-management.test-ids';\nimport {DashboardItem, DashboardWidget, WidgetModalType} from '../../models';\nimport {DashboardManagementService} from '../../services/dashboard-management.service';\n\n@Component({\n standalone: false,\n templateUrl: './dashboard-details.component.html',\n styleUrls: ['./dashboard-details.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class DashboardDetailsComponent implements AfterViewInit {\n protected readonly testIds = DASHBOARD_MANAGEMENT_TEST_IDS;\n public modalType: WidgetModalType = 'create';\n public fields!: ColumnConfig[];\n public readonly actionItems: ActionItem[] = [\n {\n label: 'Edit',\n callback: this.editWidget.bind(this),\n },\n {\n label: 'Duplicate',\n callback: this.duplicateWidget.bind(this),\n },\n {\n label: 'Delete',\n callback: this.deleteWidget.bind(this),\n type: 'danger',\n },\n ];\n\n private readonly _dashboardKey$ = this.route.params.pipe(map(params => params.id));\n private readonly _refreshDashboardSubject$ = new BehaviorSubject<null>(null);\n public readonly currentDashboard$: Observable<DashboardItem | undefined> = combineLatest([\n this._dashboardKey$,\n this.translateService.stream('key'),\n this._refreshDashboardSubject$,\n ]).pipe(\n switchMap(([dashboardKey]) => this.dashboardManagementService.getDashboard(dashboardKey)),\n tap((currentDashboard: DashboardItem) => {\n if (!currentDashboard) {\n return;\n }\n\n this.pageTitleService.setCustomPageTitle(currentDashboard.title);\n this.pageTitleService.setCustomPageSubtitle(\n this.translateService.instant('dashboardManagement.widgets.metadata', {\n createdBy: currentDashboard.createdBy,\n createdOn: this.datePipe.transform(currentDashboard.createdOn ?? '', 'd/M/yy, H:mm'),\n key: currentDashboard.key,\n })\n );\n })\n );\n\n public readonly lastItemIndex$ = new BehaviorSubject<number>(0);\n public readonly loading$ = new BehaviorSubject<boolean>(true);\n public readonly dragAndDropDisabled$ = new BehaviorSubject<boolean>(false);\n\n public readonly _refreshWidgetsSubject$ = new BehaviorSubject<DashboardWidget[] | null>(null);\n\n private _widgetData: DashboardWidget[] | null = null;\n public readonly widgetData$: Observable<DashboardWidget[]> = combineLatest([\n this._dashboardKey$,\n this._refreshWidgetsSubject$,\n ]).pipe(\n switchMap(([dashboardKey, refreshWidgets]) => {\n if (!this._widgetData || !refreshWidgets) {\n this.loading$.next(true);\n return this.dashboardManagementService.getDashboardWidgetConfiguration(dashboardKey);\n }\n\n this.dragAndDropDisabled$.next(true);\n\n return this.dashboardManagementService.updateDashboardWidgetConfigurations(\n dashboardKey,\n refreshWidgets\n );\n }),\n tap((data: DashboardWidget[]) => {\n this._widgetData = data;\n this.lastItemIndex$.next(data.length - 1);\n this.loading$.next(false);\n this.dragAndDropDisabled$.next(false);\n })\n );\n\n public readonly jsonEditorModel$: Observable<EditorModel> = this.widgetData$.pipe(\n map((data: DashboardWidget[]) => ({\n value: JSON.stringify(data),\n language: 'json',\n }))\n );\n\n public readonly showModal$ = new BehaviorSubject<boolean>(false);\n public readonly showEditDashboardModal$ = new BehaviorSubject<boolean>(false);\n\n public readonly editWidgetConfiguration$ =\n new BehaviorSubject<DashboardWidgetConfiguration | null>(null);\n\n public readonly compactMode$ = this.pageHeaderService.compactMode$;\n\n public readonly $jsonEditorActive = signal<boolean>(false);\n public readonly $buttonTheme = computed(() => (this.$jsonEditorActive() ? 'primary' : 'ghost'));\n\n constructor(\n private readonly dashboardManagementService: DashboardManagementService,\n private readonly datePipe: DatePipe,\n private readonly iconService: IconService,\n private readonly pageTitleService: PageTitleService,\n private readonly route: ActivatedRoute,\n private readonly translateService: TranslateService,\n private readonly pageHeaderService: PageHeaderService\n ) {}\n\n public ngAfterViewInit(): void {\n this.iconService.registerAll([Code16, Edit16]);\n this.setFields();\n }\n\n public addWidget(): void {\n this.editWidgetConfiguration$.next(null);\n this.modalType = 'create';\n this.showModal();\n }\n\n public editDashboard(): void {\n this.showEditDashboardModal();\n }\n\n public refreshWidgets(): void {\n this._refreshWidgetsSubject$.next(null);\n }\n\n public refreshDashboard(): void {\n this._refreshDashboardSubject$.next(null);\n }\n\n public updateWidgetData(items: DashboardWidget[]): void {\n if (!items) return;\n\n this._refreshWidgetsSubject$.next(items);\n }\n\n public editWidget(event: DashboardWidgetConfiguration): void {\n this.editWidgetConfiguration$.next({...event});\n this.modalType = 'edit';\n this.showModal();\n }\n\n public switchView(): void {\n this.$jsonEditorActive.set(!this.$jsonEditorActive());\n\n if (!this.$jsonEditorActive()) this.refreshWidgets();\n }\n\n private duplicateWidget(event: DashboardWidgetConfiguration): void {\n this.editWidgetConfiguration$.next({...event});\n this.modalType = 'create';\n this.showModal();\n }\n\n private setFields(): void {\n this.fields = [\n {\n viewType: ViewType.TEXT,\n key: 'title',\n label: 'Name',\n },\n ];\n }\n\n private deleteWidget(event: DashboardWidgetConfiguration): void {\n this.editWidgetConfiguration$.next({...event});\n this.modalType = 'delete';\n this.showModal();\n }\n\n private showModal(): void {\n this.showModal$.next(true);\n }\n\n private showEditDashboardModal(): void {\n this.showEditDashboardModal$.next(true);\n }\n}\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\n<ng-container\n *ngIf=\"\n fields && {\n currentDashboard: currentDashboard$ | async,\n editWidgetConfiguration: editWidgetConfiguration$ | async,\n loading: loading$ | async,\n widgetData: widgetData$ | async,\n dragAndDropDisabled: dragAndDropDisabled$ | async,\n jsonEditorModel: jsonEditorModel$ | async,\n } as obs\n \"\n>\n <div class=\"dashboard-detail-table\">\n @if (!$jsonEditorActive()) {\n <valtimo-carbon-list\n [actionItems]=\"actionItems\"\n [fields]=\"fields\"\n [header]=\"false\"\n [items]=\"obs.widgetData\"\n [loading]=\"obs.loading\"\n [dragAndDrop]=\"true\"\n [dragAndDropDisabled]=\"obs.dragAndDropDisabled\"\n (itemsReordered)=\"updateWidgetData($event)\"\n (rowClicked)=\"editWidget($event)\"\n >\n <div carbonToolbarContent>\n <ng-container [ngTemplateOutlet]=\"viewToggle\"></ng-container>\n\n <ng-container [ngTemplateOutlet]=\"addWidgetButton\"></ng-container>\n </div>\n\n <valtimo-no-results\n [action]=\"addWidgetButton\"\n description=\"{{ 'dashboardManagement.widgets.noResults.description' | translate }}\"\n title=\"{{ 'dashboardManagement.widgets.noResults.title' | translate }}\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n } @else {\n <valtimo-json-editor\n [model]=\"obs.jsonEditorModel\"\n [fitPage]=\"true\"\n [fitPageSpaceAdjustment]=\"56\"\n (saveEvent)=\"updateWidgetData($event)\"\n >\n <ng-container *ngTemplateOutlet=\"viewToggle\"></ng-container>\n </valtimo-json-editor>\n }\n </div>\n\n <valtimo-widget-modal\n [dashboard]=\"obs.currentDashboard\"\n [editWidgetConfiguration]=\"obs.editWidgetConfiguration\"\n [showModal$]=\"showModal$\"\n [type]=\"modalType\"\n [widgetKey]=\"obs.editWidgetConfiguration?.key\"\n (saveEvent)=\"refreshWidgets()\"\n ></valtimo-widget-modal>\n\n <valtimo-edit-dashboard-modal\n [dashboard]=\"obs.currentDashboard\"\n [showModal$]=\"showEditDashboardModal$\"\n (saveEvent)=\"refreshDashboard()\"\n >\n </valtimo-edit-dashboard-modal>\n</ng-container>\n\n<ng-container renderInPageHeader>\n <ng-template>\n <button\n [attr.data-test-id]=\"testIds.editButton\"\n cdsButton=\"tertiary\"\n [size]=\"(compactMode$ | async) ? 'sm' : 'md'\"\n (click)=\"editDashboard()\"\n >\n {{ 'dashboardManagement.widgets.editButton' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"edit\" size=\"16\"></svg>\n </button>\n </ng-template>\n</ng-container>\n\n<ng-template #addWidgetButton>\n <button cdsButton=\"primary\" [attr.data-test-id]=\"testIds.addWidgetButton\" [disabled]=\"loading$ | async\" (click)=\"addWidget()\">\n {{ 'dashboardManagement.widgets.add' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #viewToggle>\n <cds-tooltip [description]=\"'JSON editor'\">\n <button\n [cdsButton]=\"$buttonTheme()\"\n [attr.data-test-id]=\"testIds.switchViewButton\"\n iconOnly=\"true\"\n (click)=\"switchView()\"\n >\n <svg cdsIcon=\"code\" size=\"16\"></svg>\n </button>\n </cds-tooltip>\n</ng-template>\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 */\nimport {ChangeDetectionStrategy, Component, OnInit, ViewEncapsulation} from '@angular/core';\nimport {AbstractControl, FormBuilder, FormGroup, Validators} from '@angular/forms';\nimport {Router} from '@angular/router';\nimport {ActionItem, ColumnConfig, ViewType} from '@valtimo/components';\nimport {BehaviorSubject, finalize, Observable} from 'rxjs';\nimport {DASHBOARD_MANAGEMENT_TEST_IDS} from '../../constants/dashboard-management.test-ids';\nimport {DashboardItem} from '../../models';\nimport {DashboardManagementService} from '../../services/dashboard-management.service';\n\n@Component({\n standalone: false,\n templateUrl: './dashboard-management.component.html',\n styleUrls: ['./dashboard-management.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class DashboardManagementComponent implements OnInit {\n protected readonly testIds = DASHBOARD_MANAGEMENT_TEST_IDS;\n public readonly deleteRowKey$: BehaviorSubject<string> = new BehaviorSubject('');\n public readonly openModal$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n public readonly showDeleteModal$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n\n public readonly tableData$: Observable<{items: DashboardItem[] | null; loading: boolean}> =\n this.dashboardManagementService.dashboards$;\n public fields: ColumnConfig[] = [\n {\n viewType: ViewType.TEXT,\n key: 'title',\n label: 'dashboardManagement.name',\n },\n {\n viewType: ViewType.TEXT,\n key: 'description',\n label: 'dashboardManagement.description',\n },\n {\n viewType: ViewType.TEXT,\n key: 'key',\n label: 'dashboardManagement.key',\n },\n ];\n public readonly actionItems: ActionItem[] = [\n {\n label: 'interface.delete',\n callback: this.deleteDashboard.bind(this),\n type: 'danger',\n },\n ];\n public form: FormGroup;\n\n constructor(\n private readonly dashboardManagementService: DashboardManagementService,\n private readonly fb: FormBuilder,\n private readonly router: Router\n ) {}\n\n public ngOnInit(): void {\n this.dashboardManagementService.loadData();\n this.form = this.fb.group({\n description: this.fb.control('', [Validators.required]),\n title: this.fb.control('', [Validators.required]),\n });\n }\n\n public closeModal(): void {\n this.openModal$.next(false);\n this.form.reset();\n }\n\n public createDashboard(): void {\n const control: AbstractControl | null = this.form.get('title');\n if (!control || !control.valid) {\n return;\n }\n\n const newDashboard: DashboardItem = this.form.getRawValue();\n this.dashboardManagementService.dispatchAction(\n this.dashboardManagementService.createDashboard(newDashboard).pipe(\n finalize(() => {\n this.closeModal();\n })\n )\n );\n }\n\n public onConfirmEvent(dashboardKey: string): void {\n this.dashboardManagementService.dispatchAction(\n this.dashboardManagementService.deleteDashboard(dashboardKey).pipe(\n finalize(() => {\n this.closeModal();\n })\n )\n );\n }\n\n public getControlInvalid(controlKey: string): boolean {\n const control: AbstractControl | null = this.form.get(controlKey);\n\n if (!control) {\n return true;\n }\n\n return !control.valid && !control.pristine;\n }\n\n public openModal(): void {\n this.openModal$.next(true);\n }\n\n public onRowClick(item: DashboardItem): void {\n this.router.navigate([`/dashboard-management/${item.key}`]);\n }\n\n private deleteDashboard(dashboard: DashboardItem): void {\n this.deleteRowKey$.next(dashboard.key);\n this.showDeleteModal$.next(true);\n }\n}\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\n<ng-container *ngIf=\"tableData$ | async as data\">\n <valtimo-carbon-list\n [actionItems]=\"actionItems\"\n [header]=\"false\"\n [items]=\"data.items\"\n [loading]=\"data.loading\"\n [fields]=\"fields\"\n (rowClicked)=\"onRowClick($event)\"\n class=\"valtimo-dashboard-management__table\"\n >\n <div carbonToolbarContent>\n <ng-container [ngTemplateOutlet]=\"addDashboardButton\"></ng-container>\n </div>\n\n <valtimo-no-results\n [action]=\"addDashboardButton\"\n description=\"{{ 'dashboardManagement.noResults.description' | translate }}\"\n title=\"{{ 'dashboardManagement.noResults.title' | translate }}\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n</ng-container>\n\n<cds-modal\n valtimoCdsModal\n [open]=\"openModal$ | async\"\n showFooter=\"true\"\n title=\"{{ 'dashboardManagement.addDashboard' | translate }}\"\n (close)=\"closeModal()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>\n {{ 'dashboardManagement.addDashboard' | translate }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <form [formGroup]=\"form\" class=\"valtimo-dashboard-management__form\">\n <cds-label [invalid]=\"getControlInvalid('title')\">\n {{ 'dashboardManagement.addModal.name' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.createTitleInput\"\n [attr.modal-primary-focus]=\"true\"\n [invalid]=\"getControlInvalid('title')\"\n formControlName=\"title\"\n cdsText\n placeholder=\"{{ 'dashboardManagement.addModal.namePlaceholder' | translate }}\"\n />\n </cds-label>\n\n <cds-label\n [helperText]=\"'dashboardManagement.addModal.descriptionHelperText' | translate\"\n [invalid]=\"getControlInvalid('description')\"\n >\n {{ 'dashboardManagement.description' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.createDescriptionInput\"\n [invalid]=\"getControlInvalid('description')\"\n formControlName=\"description\"\n cdsText\n placeholder=\"{{ 'dashboardManagement.addModal.descriptionPlaceholder' | translate }}\"\n />\n </cds-label>\n </form>\n </section>\n\n <cds-modal-footer>\n <button cdsButton=\"ghost\" [attr.data-test-id]=\"testIds.cancelDashboardButton\" (click)=\"closeModal()\">\n {{ 'dashboardManagement.cancel' | translate }}\n </button>\n\n <button\n [attr.data-test-id]=\"testIds.createButton\"\n [disabled]=\"this.form.invalid\"\n cdsButton=\"primary\"\n (click)=\"createDashboard()\"\n >\n {{ 'dashboardManagement.create' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"dashboardManagement.deleteModal.confirm\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"dashboardManagement.deleteModalContent\"\n [outputOnConfirm]=\"deleteRowKey$ | async\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"dashboardManagement.delete\"\n (confirmEvent)=\"onConfirmEvent($event)\"\n></valtimo-confirmation-modal>\n\n<ng-template #addDashboardButton>\n <button [attr.data-test-id]=\"testIds.addButton\" cdsButton=\"primary\" (click)=\"openModal()\">\n {{ 'dashboardManagement.addDashboard' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n</ng-template>\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\nimport {NgModule} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {AuthGuardService} from '@valtimo/security';\nimport {ROLE_ADMIN} from '@valtimo/shared';\nimport {DashboardManagementComponent} from './components/dashboard-management/dashboard-management.component';\nimport {DashboardDetailsComponent} from './components/dashboard-details/dashboard-details.component';\n\nconst routes: Routes = [\n {\n path: 'dashboard-management',\n component: DashboardManagementComponent,\n canActivate: [AuthGuardService],\n data: {title: 'Dashboard configuration', roles: [ROLE_ADMIN]},\n },\n {\n path: 'dashboard-management/:id',\n component: DashboardDetailsComponent,\n canActivate: [AuthGuardService],\n data: {\n title: 'Dashboard details',\n roles: [ROLE_ADMIN],\n customPageTitle: true,\n customPageSubtitle: true,\n },\n },\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule],\n declarations: [],\n})\nexport class DashboardManagementRoutingModule {}\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 */\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {\n CarbonListModule,\n ConfirmationModalModule,\n JsonEditorComponent,\n RenderInPageHeaderDirective,\n SpinnerModule,\n ValtimoCdsModalDirective,\n} from '@valtimo/components';\nimport {\n ButtonModule,\n DropdownModule,\n IconModule,\n InputModule,\n LayerModule,\n ModalModule,\n NotificationModule,\n} from 'carbon-components-angular';\nimport {DashboardDetailsComponent} from './components/dashboard-details/dashboard-details.component';\nimport {DashboardManagementComponent} from './components/dashboard-management/dashboard-management.component';\nimport {DashboardManagementRoutingModule} from './dashboard-management-routing.module';\nimport {WidgetModalComponent} from './components/widget-modal/widget-modal.component';\nimport {EditDashboardModalComponent} from './components/edit-dashboard-modal/edit-dashboard-modal';\nimport {WidgetTranslatePipeModule} from '@valtimo/dashboard';\nimport {WidgetConfigurationContainerComponent} from './components/widget-configuration-container/widget-configuration-container.component';\n\n@NgModule({\n declarations: [\n DashboardManagementComponent,\n DashboardDetailsComponent,\n WidgetModalComponent,\n EditDashboardModalComponent,\n WidgetConfigurationContainerComponent,\n ],\n imports: [\n ButtonModule,\n CommonModule,\n DashboardManagementRoutingModule,\n DropdownModule,\n InputModule,\n ModalModule,\n ReactiveFormsModule,\n SpinnerModule,\n TranslateModule,\n RenderInPageHeaderDirective,\n ConfirmationModalModule,\n NotificationModule,\n IconModule,\n WidgetTranslatePipeModule,\n CarbonListModule,\n LayerModule,\n ValtimoCdsModalDirective,\n JsonEditorComponent,\n ],\n exports: [],\n})\nexport class DashboardManagementModule {}\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\n/*\n * Public API Surface of dashboard-management\n */\n\nexport * from './lib/constants/dashboard-management.test-ids';\nexport * from './lib/dashboard-management.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["tap","i1","i2","i3","i4.DashboardManagementService","i6","i7","i8","i9.WidgetConfigurationContainerComponent","i2.DashboardManagementService","i4","i5","i1.DashboardManagementService","i7.WidgetModalComponent","i8.EditDashboardModalComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;AAcG;AAEU,MAAA,6BAA6B,GAAG;;AAE3C,IAAA,SAAS,EAAE,8BAA8B;AACzC,IAAA,gBAAgB,EAAE,qCAAqC;AACvD,IAAA,sBAAsB,EAAE,2CAA2C;AACnE,IAAA,YAAY,EAAE,iCAAiC;AAC/C,IAAA,qBAAqB,EAAE,0CAA0C;;AAEjE,IAAA,UAAU,EAAE,+BAA+B;AAC3C,IAAA,cAAc,EAAE,mCAAmC;AACnD,IAAA,oBAAoB,EAAE,yCAAyC;AAC/D,IAAA,cAAc,EAAE,mCAAmC;AACnD,IAAA,gBAAgB,EAAE,4BAA4B;;AAE9C,IAAA,eAAe,EAAE,oCAAoC;;AAErD,IAAA,gBAAgB,EAAE,qCAAqC;AACvD,IAAA,wBAAwB,EAAE,6CAA6C;AACvE,IAAA,yBAAyB,EAAE,8CAA8C;AACzE,IAAA,cAAc,EAAE,mCAAmC;AACnD,IAAA,gBAAgB,EAAE,qCAAqC;AACvD,IAAA,kBAAkB,EAAE,uCAAuC;AAC3D,IAAA,kBAAkB,EAAE,uCAAuC;;;MCbhD,0BAA0B,CAAA;IAQ9B,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC;AACF,aAAA,GAAG,CAAkB,IAAI,CAAC,kBAAkB;aAC5C,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;AACrD,SAAC,CAAC;AAEH,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,KAAsB,KAAI;AAC/B,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAC,CAAC;aAC/C;YACD,KAAK,EAAE,KAAK,IAAG;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;aACrB;AACF,SAAA,CAAC;;IAGN,WACmB,CAAA,IAAgB,EAChB,aAA4B,EAAA;QAD5B,IAAI,CAAA,IAAA,GAAJ,IAAI;QACJ,IAAa,CAAA,aAAA,GAAb,aAAa;QA1BzB,IAAW,CAAA,WAAA,GAAG,IAAI,eAAe,CAAoD;AAC1F,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,OAAO,EAAE,IAAI;AACd,SAAA,CAAC;AAyBA,QAAA,IAAI,CAAC,kBAAkB,GAAG,CAAA,EAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,yBAAyB;;AAGjG,IAAA,eAAe,CAAC,SAAwB,EAAA;AAC7C,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAgB,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC;;AAGnE,IAAA,gBAAgB,CAAC,UAAgC,EAAA;AACtD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAuB,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC;;AAG1E,IAAA,eAAe,CAAC,SAAwB,EAAA;AAC7C,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAA,CAAA,EAAI,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC;;AAGxF,IAAA,eAAe,CAAC,YAAoB,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAO,CAAA,EAAG,IAAI,CAAC,kBAAkB,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE,CAAC;;AAGtE,IAAA,cAAc,CAAC,YAA8C,EAAA;QAClE;AACG,aAAA,IAAI,CACH,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,EACrC,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;AACrD,SAAC,CAAC,EACF,IAAI,CAAC,CAAC,CAAC,EACP,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;AAE/B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,KAAsB,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAC,CAAC;YAChF,KAAK,EAAE,KAAK,IAAG;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;aACrB;AACF,SAAA,CAAC;;AAGC,IAAA,YAAY,CAAC,YAAoB,EAAA;AACtC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAgB,CAAA,EAAG,IAAI,CAAC,kBAAkB,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE,CAAC;;AAG5E,IAAA,+BAA+B,CAAC,YAAoB,EAAA;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAClB,CAAA,EAAG,IAAI,CAAC,kBAAkB,CAAA,CAAA,EAAI,YAAY,CAAA,qBAAA,CAAuB,CAClE;;IAGI,kCAAkC,CACvC,YAAoB,EACpB,mBAAoC,EAAA;AAEpC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAG,EAAA,IAAI,CAAC,kBAAkB,IAAI,YAAY,CAAA,qBAAA,CAAuB,EACjE,mBAAmB,CACpB;;IAGI,mCAAmC,CACxC,YAAoB,EACpB,oBAA4C,EAAA;AAE5C,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAClB,CAAG,EAAA,IAAI,CAAC,kBAAkB,IAAI,YAAY,CAAA,qBAAA,CAAuB,EACjE,oBAAoB,CACrB;;IAGI,kCAAkC,CACvC,YAAoB,EACpB,mBAAoC,EAAA;QAEpC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAClB,CAAA,EAAG,IAAI,CAAC,kBAAkB,IAAI,YAAY,CAAA,sBAAA,EAAyB,mBAAmB,CAAC,GAAG,EAAE,EAC5F,mBAAmB,CACpB;;IAGI,kCAAkC,CACvC,YAAoB,EACpB,SAAiB,EAAA;AAEjB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CACrB,CAAG,EAAA,IAAI,CAAC,kBAAkB,IAAI,YAAY,CAAA,sBAAA,EAAyB,SAAS,CAAA,CAAE,CAC/E;;IAGI,cAAc,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA0B,CAAG,EAAA,IAAI,CAAC,kBAAkB,CAAsB,oBAAA,CAAA,CAAC;;IAGzF,aAAa,GAAA;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAkB,IAAI,CAAC,kBAAkB,CAAC;;+GA1HrD,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cAFzB,MAAM,EAAA,CAAA,CAAA;;4FAEP,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACxBD;;;;;;;;;;;;;;AAcG;MA6BU,qCAAqC,CAAA;IAMhD,IAAoB,aAAa,CAAC,KAAa,EAAA;AAC7C,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;;IAElC,IAAoB,cAAc,CAAC,KAAa,EAAA;AAC9C,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;;IAEnC,IAAoB,QAAQ,CAAC,aAAsB,EAAA;AACjD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC;;IAErC,IAAoB,oBAAoB,CAAC,yBAAyB,EAAA;AAChE,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,yBAAyB,CAAC;;AAe7D,IAAA,WAAA,CAA6B,aAA4B,EAAA;QAA5B,IAAa,CAAA,aAAA,GAAb,aAAa;AAbzB,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAuB;AAG5D,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAE;AAEnC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAEnD,SAAS,CAAC;AACK,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC;AACjD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC;AAClD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAChD,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,eAAe,CAAgB,IAAI,CAAC;;IAI3E,QAAQ,GAAA;QACb,IAAI,CAAC,sCAAsC,EAAE;QAC7C,IAAI,CAAC,iCAAiC,EAAE;QACxC,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,oCAAoC,EAAE;;IAGtC,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;;IAG3B,sCAAsC,GAAA;AAC5C,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACrB,aAAa,CAAC;AACZ,YAAA,IAAI,CAAC,gBAAgB;AACrB,YAAA,IAAI,CAAC,eAAe;YACpB,IAAI,CAAC,aAAa,CAAC,sBAAsB;YACzC,IAAI,CAAC,aAAa,CAAC,qBAAqB;SACzC;AACE,aAAA,IAAI,CACHA,KAAG,CAAC,CAAC,CAAC,cAAc,EAAE,aAAa,EAAE,qBAAqB,EAAE,oBAAoB,CAAC,KAAI;AACnF,YAAA,IAAI,sBAEH;AAED,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;YAE9B,MAAM,wBAAwB,GAC5B,cAAc;AACd,gBAAA,qBAAqB,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,KAAK,cAAc,CAAC;YAC5E,MAAM,uBAAuB,GAC3B,aAAa;AACb,gBAAA,oBAAoB,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,aAAa,KAAK,aAAa,CAAC;AAE7E,YAAA,IAAI,wBAAwB,IAAI,wBAAwB,CAAC,sBAAsB,EAAE;AAC/E,gBAAA,sBAAsB,GAAG,wBAAwB,CAAC,sBAAsB;;AACnE,iBAAA,IAAI,uBAAuB,IAAI,uBAAuB,CAAC,sBAAsB,EAAE;AACpF,gBAAA,sBAAsB,GAAG,uBAAuB,CAAC,sBAAsB;;YAGzE,IAAI,sBAAsB,EAAE;gBAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,sBAAsB,CAAC;AACnF,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAC,CAAC;AACtD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC;;iBACjC;AACL,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAC,CAAC;;AAEzD,SAAC,CAAC;aAEH,SAAS,EAAE,CACf;;IAGK,iCAAiC,GAAA;AACvC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACrB,aAAa,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CACzF,CAAC,CAAC,GAAG,EAAE,aAAa,EAAE,cAAc,CAAC,KAAI;AACvC,YAAA,MAAM,QAAQ,GAAG,GAAG,EAAE,QAAQ;AAE9B,YAAA,IAAI,CAAC,0BAA0B,EAAE,WAAW,EAAE;YAE9C,IAAI,QAAQ,EAAE;gBACZ,IAAI,cAAc,EAAE;AACjB,oBAAA,QAA8C,CAAC,cAAc,GAAG,cAAc;;qBAC1E,IAAI,aAAa,EAAE;AACvB,oBAAA,QAA6C,CAAC,aAAa,GAAG,aAAa;;gBAG9E,IAAI,CAAC,0BAA0B,GAAG,QAAQ,CAAC,kBAAkB,CAAC,SAAS,CACrE,aAAa,IAAG;AACd,oBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC;AAC7C,iBAAC,CACF;;SAEJ,CACF,CACF;;IAGK,wBAAwB,GAAA;QAC9B,IAAI,CAAC,cAAc,CAAC,GAAG,CACrB,aAAa,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAI;AAClF,YAAA,MAAM,QAAQ,GAAG,GAAG,EAAE,QAAQ;YAE9B,IAAI,QAAQ,EAAE;AACZ,gBAAA,QAAQ,CAAC,QAAQ,GAAG,QAAQ;;SAE/B,CAAC,CACH;;IAGK,oCAAoC,GAAA;QAC1C,IAAI,CAAC,cAAc,CAAC,GAAG,CACrB,aAAa,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS,CACzE,CAAC,CAAC,GAAG,EAAE,oBAAoB,CAAC,KAAI;AAC9B,YAAA,MAAM,QAAQ,GAAG,GAAG,EAAE,QAAQ;AAE9B,YAAA,IAAI,QAAQ,IAAI,oBAAoB,EAAE;AACpC,gBAAA,QAAQ,CAAC,oBAAoB,GAAG,oBAAoB;;SAEvD,CACF,CACF;;+GAvIQ,qCAAqC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAArC,qCAAqC,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,8BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAGgB,gBAAgB,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9ClF,6sBAiBA,EAAA,CAAA,CAAA;;4FD0Ba,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBALjD,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,KAAK,YACP,wCAAwC,EAAA,QAAA,EAAA,6sBAAA,EAAA;kFAOjC,iBAAiB,EAAA,CAAA;sBADjC,SAAS;uBAAC,8BAA8B,EAAE,EAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAC;gBAG7D,aAAa,EAAA,CAAA;sBAAhC;gBAGmB,cAAc,EAAA,CAAA;sBAAjC;gBAGmB,QAAQ,EAAA,CAAA;sBAA3B;gBAGmB,oBAAoB,EAAA,CAAA;sBAAvC;gBAGgB,kBAAkB,EAAA,CAAA;sBAAlC;;;AE7DH;;;;;;;;;;;;;;AAcG;MA8CU,oBAAoB,CAAA;IAO/B,IAAoB,uBAAuB,CAAC,aAA2C,EAAA;QACrF,IAAI,aAAa,EAAE;YACjB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;YACxC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACpC,YAAA,IAAI,CAAC,kBAAkB,CAAC,EAAC,IAAI,EAAE,EAAC,GAAG,EAAE,aAAa,CAAC,aAAa,EAAC,EAAQ,CAAC;AAC1E,YAAA,IAAI,CAAC,mBAAmB,CAAC,EAAC,IAAI,EAAE,EAAC,GAAG,EAAE,aAAa,CAAC,WAAW,EAAC,EAAQ,CAAC;YACzE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC;YACtE,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC;;aACnE;AACL,YAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;AACxC,YAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAgG7C,IAAA,IAAW,KAAK,GAAA;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;;AAE/B,IAAA,IAAW,GAAG,GAAA;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE7B,IAAA,IAAW,UAAU,GAAA;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;;AAEpC,IAAA,IAAW,WAAW,GAAA;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;;AAErC,IAAA,IAAW,GAAG,GAAA;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;;AAG7B,IAAA,WAAA,CACqC,QAAkB,EACpC,EAAe,EACf,gBAAkC,EAClC,mBAA8C,EAC9C,0BAAsD,EACtD,aAA4B,EAC5B,wBAAkD,EAAA;QANhC,IAAQ,CAAA,QAAA,GAAR,QAAQ;QAC1B,IAAE,CAAA,EAAA,GAAF,EAAE;QACF,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAA0B,CAAA,0BAAA,GAA1B,0BAA0B;QAC1B,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;QAvI3B,IAAO,CAAA,OAAA,GAAG,6BAA6B;AAmBtC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAuB;AAEpD,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACnC,YAAA,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACjD,YAAA,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACxD,YAAA,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACzD,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;AACzB,SAAA,CAAC;AAEc,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAC3C,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC;AACxD,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC;QAEzD,IAAgB,CAAA,gBAAA,GAAgC,aAAa,CAAC;AAC5E,YAAA,IAAI,CAAC,0BAA0B,CAAC,cAAc,EAAE;AAChD,YAAA,IAAI,CAAC,sBAAsB;YAC3B,IAAI,CAAC,aAAa,CAAC,qBAAqB;AACxC,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;SACpC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,EACxC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,qBAAqB,CAAC,KAAI;YAC3C,IAAI,qBAAqB,EAAE;AACzB,gBAAA,IAAI,CAAC,yBAAyB,CAAC,WAAW,EAAE,qBAAqB,CAAC;;iBAC7D;gBACL,IAAI,CAAC,2BAA2B,EAAE;;AAEtC,SAAC,CAAC,EACF,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,qBAAqB,EAAE,oBAAoB,CAAC,KAC7D;aACG,MAAM,CAAC,UAAU,IAChB,oBAAoB,CAAC,IAAI,CACvB,mBAAmB,IAAI,mBAAmB,CAAC,aAAa,KAAK,UAAU,CAAC,GAAG,CAC5E;AAEF,aAAA,GAAG,CAAC,UAAU,KAAK;AAClB,YAAA,OAAO,EAAE,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC;AACvE,YAAA,QAAQ,EAAE,qBAAqB,KAAK,UAAU,CAAC,GAAG;YAClD,GAAG,EAAE,UAAU,CAAC,GAAG;SACpB,CAAC,CAAC,CACN,CACF;AAEe,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,eAAe,CAAgB,IAAI,CAAC;AACnE,QAAA,IAAA,CAAA,yBAAyB,GAAG,IAAI,eAAe,CAAgB,IAAI,CAAC;AAEnE,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,eAAe,CAC7D,EAAE,CACH;QAEe,IAAiB,CAAA,iBAAA,GAAgC,aAAa,CAAC;AAC7E,YAAA,IAAI,CAAC,wBAAwB;AAC7B,YAAA,IAAI,CAAC,uBAAuB;AAC5B,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;SACpC,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,CAAC,CAAC,sBAAsB,EAAE,sBAAsB,CAAC,KACnD,sBAAsB,CAAC,GAAG,CAAC,WAAW,KAAK;AACzC,YAAA,OAAO,EAAE,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,cAAc,CAAC;AACnF,YAAA,QAAQ,EAAE,WAAW,CAAC,cAAc,KAAK,sBAAsB;YAC/D,GAAG,EAAE,WAAW,CAAC,cAAc;SAChC,CAAC,CAAC,CACJ,CACF;QAEe,IAA4B,CAAA,4BAAA,GAAwB,aAAa,CAAC;AAChF,YAAA,IAAI,CAAC,wBAAwB;AAC7B,YAAA,IAAI,CAAC,sBAAsB;AAC5B,SAAA,CAAC,CAAC,IAAI,CACL,GAAG,CACD,CAAC,CAAC,sBAAsB,EAAE,qBAAqB,CAAC,KAC9C,sBAAsB,EAAE,MAAM,KAAK,CAAC,IAAI,CAAC,qBAAqB,CACjE,EACD,GAAG,CAAC,2BAA2B,IAAG;YAChC,IAAI,2BAA2B,EAAE;AAC/B,gBAAA,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE;;iBACtB;AACL,gBAAA,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;;SAE7B,CAAC,CACH;QAEe,IAAwB,CAAA,wBAAA,GAAG,IAAI,eAAe,CAAsB;AAClF,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE,EAAE;AACT,SAAA,CAAC;QACc,IAAyB,CAAA,yBAAA,GAAG,IAAI,eAAe,CAAsB;AACnF,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE,EAAE;AACT,SAAA,CAAC;AAEc,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;;IA8BxD,QAAQ,GAAA;QACb,IAAI,CAAC,oBAAoB,EAAE;;IAGtB,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,iBAAiB,EAAE,WAAW,EAAE;;IAGhC,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QAEtB,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACjB,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;AACpC,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;AACvC,SAAC,EAAE,gBAAgB,CAAC,gBAAgB,CAAC;;IAGhC,IAAI,GAAA;QACT,IAAI,CAAC,OAAO,EAAE;AAEd,QAAA,aAAa,CAAC;AACZ,YAAA,IAAI,CAAC,sBAAsB;AAC3B,YAAA,IAAI,CAAC,uBAAuB;AAC5B,YAAA,IAAI,CAAC,yBAAyB;AAC9B,YAAA,IAAI,CAAC,wBAAwB;SAC9B;aACE,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CACD,CAAC,CACC,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACxB,MAAM;AACL,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;AACvB,YAAA,WAAW,EAAE,sBAAsB;AACnC,YAAA,aAAa,EAAE,qBAAqB;AACpC,YAAA,oBAAoB,EAAE,EAAC,GAAG,uBAAuB,CAAC,IAAI,EAAC;AACvD,YAAA,qBAAqB,EAAE,EAAC,GAAG,wBAAwB,CAAC,IAAI,EAAC;AACzD,YAAA,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK;AACpB,SAAA,CAAC,CACH,EACD,SAAS,CAAC,kBAAkB,IAC1B,IAAI,CAAC,IAAI,KAAK;AACZ,cAAE,IAAI,CAAC,0BAA0B,CAAC,kCAAkC,CAChE,IAAI,CAAC,SAAS,CAAC,GAAG,EAClB,kBAAkB;cAEpB,IAAI,CAAC,0BAA0B,CAAC,kCAAkC,CAChE,IAAI,CAAC,SAAS,CAAC,GAAG,EAClB,EAAC,GAAG,kBAAkB,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,EAAC,CAC7C,CACN;AAEF,aAAA,SAAS,CAAC;YACT,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;gBACrB,IAAI,CAAC,UAAU,EAAE;aAClB;YACD,KAAK,EAAE,MAAK;gBACV,IAAI,CAAC,MAAM,EAAE;aACd;AACF,SAAA,CAAC;;IAGC,MAAM,GAAA;QACX,IAAI,CAAC,OAAO,EAAE;AAEd,QAAA,IAAI,CAAC;aACF,kCAAkC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS;AACrE,aAAA,SAAS,CAAC;YACT,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;gBACrB,IAAI,CAAC,UAAU,EAAE;aAClB;YACD,KAAK,EAAE,MAAK;gBACV,IAAI,CAAC,MAAM,EAAE;aACd;AACF,SAAA,CAAC;;AAGC,IAAA,kBAAkB,CAAC,UAAoB,EAAA;QAC5C,IAAI,CAAC,UAAU,EAAE;YACf;;QAGF,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC;QACvD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC;;AAG1C,IAAA,mBAAmB,CAAC,WAAqB,EAAA;QAC9C,IAAI,CAAC,WAAW,EAAE;YAChB;;QAGF,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,GAAG,CAAC;QACzD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,EAAE,GAAG,CAAC;;AAG5C,IAAA,uBAAuB,CAAC,aAAkC,EAAA;AAC/D,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,aAAa,CAAC;;AAG5C,IAAA,wBAAwB,CAAC,aAAkC,EAAA;AAChE,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,aAAa,CAAC;;IAG5C,oBAAoB,GAAA;QAC1B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAG;AACxD,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,SAAC,CAAC;;IAGI,2BAA2B,GAAA;AACjC,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;;IAGhC,yBAAyB,CAC/B,WAAoC,EACpC,qBAA6B,EAAA;AAE7B,QAAA,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,qBAAqB,IAAG;AACxF,YAAA,MAAM,kBAAkB,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,KAAK,qBAAqB,CAAC;AAC3F,YAAA,MAAM,qBAAqB,GAAG,kBAAkB,EAAE,YAAY;YAC9D,MAAM,sBAAsB,GAAG,qBAAqB,CAAC,MAAM,CAAC,WAAW,IAAG;gBACxE,MAAM,qBAAqB,GAAG,WAAW,CAAC,oBAAoB,CAAC,MAAM,CACnE,mBAAmB,IACjB,CAAC,CAAC,qBAAqB,EAAE,IAAI,CAC3B,oBAAoB,IAClB,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC;AAC7C,oBAAA,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAC/C,CACJ;gBACD,OAAO,qBAAqB,CAAC,MAAM,KAAK,WAAW,CAAC,oBAAoB,CAAC,MAAM;AACjF,aAAC,CAAC;AAEF,YAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,sBAAsB,CAAC;AAC5D,SAAC,CAAC;;IAGI,OAAO,GAAA;AACb,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;;IAGb,MAAM,GAAA;AACZ,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;;AAGZ,IAAA,kBAAkB,CAAC,IAAY,EAAA;QACrC,OAAO,CAAA,EAAG,IAAI,CAAE,CAAA,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;;AArS5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,kBAkIrB,QAAQ,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,0BAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAlIP,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,8QC5DjC,ypPAyMA,EAAA,MAAA,EAAA,CAAA,ypCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,cAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,KAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,KAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,MAAA,EAAA,SAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,kDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qCAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAJ,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FD7Ia,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,KAAK,EACP,QAAA,EAAA,sBAAsB,EAGjB,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,ypPAAA,EAAA,MAAA,EAAA,CAAA,ypCAAA,CAAA,EAAA;;0BAoIlC,MAAM;2BAAC,QAAQ;qPA/HF,UAAU,EAAA,CAAA;sBAAzB;gBACe,IAAI,EAAA,CAAA;sBAAnB;gBACe,SAAS,EAAA,CAAA;sBAAxB;gBACe,SAAS,EAAA,CAAA;sBAAxB;gBACmB,uBAAuB,EAAA,CAAA;sBAA1C;gBAagB,SAAS,EAAA,CAAA;sBAAzB;;;AEhFH;;;;;;;;;;;;;;AAcG;MA2BU,2BAA2B,CAAA;AAatC,IAAA,IAAW,cAAc,GAAA;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;;AAG5C,IAAA,IAAW,oBAAoB,GAAA;QAC7B,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC;;IAKlD,WACmB,CAAA,EAAe,EACf,0BAAsD,EAAA;QADtD,IAAE,CAAA,EAAA,GAAF,EAAE;QACF,IAA0B,CAAA,0BAAA,GAA1B,0BAA0B;QAxB1B,IAAO,CAAA,OAAA,GAAG,6BAA6B;AAGzC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAuB;AAEpD,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAC3C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAC/C,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AAChD,YAAA,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACjD,YAAA,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACxD,SAAA,CAAC;;IAiBK,QAAQ,GAAA;QACb,IAAI,CAAC,oBAAoB,EAAE;;IAGtB,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QAEtB,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;AAChC,SAAC,EAAE,gBAAgB,CAAC,gBAAgB,CAAC;;IAGhC,aAAa,GAAA;QAClB,IAAI,CAAC,OAAO,EAAE;AAEd,QAAA,IAAI,CAAC;AACF,aAAA,eAAe,CAAC;AACf,YAAA,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,KAAK;AAC5C,YAAA,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK;AAChC,YAAA,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG;SACxB;aACA,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;YACrB,IAAI,CAAC,UAAU,EAAE;AACnB,SAAC,CAAC;;IAGE,oBAAoB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YACnD,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;;QAGjE,IAAI,CAAC,MAAM,EAAE;;IAGP,oBAAoB,GAAA;QAC1B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAG;YACxD,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,SAAC,CAAC;;IAGI,OAAO,GAAA;AACb,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;;IAGnB,MAAM,GAAA;AACZ,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;;+GA5EjB,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAQ,0BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,4LCzCxC,g+GAoGA,EAAA,MAAA,EAAA,CAAA,yzBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,MAAA,EAAA,SAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,kDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAT,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FD3Da,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBARvC,SAAS;+BACE,8BAA8B,EAAA,aAAA,EAGzB,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,KAAK,EAAA,QAAA,EAAA,g+GAAA,EAAA,MAAA,EAAA,CAAA,yzBAAA,CAAA,EAAA;wHAID,UAAU,EAAA,CAAA;sBAAzB;gBACe,SAAS,EAAA,CAAA;sBAAxB;gBACgB,SAAS,EAAA,CAAA;sBAAzB;;;MEJU,yBAAyB,CAAA;AA8FpC,IAAA,WAAA,CACmB,0BAAsD,EACtD,QAAkB,EAClB,WAAwB,EACxB,gBAAkC,EAClC,KAAqB,EACrB,gBAAkC,EAClC,iBAAoC,EAAA;QANpC,IAA0B,CAAA,0BAAA,GAA1B,0BAA0B;QAC1B,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACR,IAAW,CAAA,WAAA,GAAX,WAAW;QACX,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QApGjB,IAAO,CAAA,OAAA,GAAG,6BAA6B;QACnD,IAAS,CAAA,SAAA,GAAoB,QAAQ;AAE5B,QAAA,IAAA,CAAA,WAAW,GAAiB;AAC1C,YAAA;AACE,gBAAA,KAAK,EAAE,MAAM;gBACb,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AACrC,aAAA;AACD,YAAA;AACE,gBAAA,KAAK,EAAE,WAAW;gBAClB,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1C,aAAA;AACD,YAAA;AACE,gBAAA,KAAK,EAAE,QAAQ;gBACf,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AACtC,gBAAA,IAAI,EAAE,QAAQ;AACf,aAAA;SACF;QAEgB,IAAc,CAAA,cAAA,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC;AACjE,QAAA,IAAA,CAAA,yBAAyB,GAAG,IAAI,eAAe,CAAO,IAAI,CAAC;QAC5D,IAAiB,CAAA,iBAAA,GAA0C,aAAa,CAAC;AACvF,YAAA,IAAI,CAAC,cAAc;AACnB,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;AACnC,YAAA,IAAI,CAAC,yBAAyB;SAC/B,CAAC,CAAC,IAAI,CACL,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,EACzF,GAAG,CAAC,CAAC,gBAA+B,KAAI;YACtC,IAAI,CAAC,gBAAgB,EAAE;gBACrB;;YAGF,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAChE,YAAA,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CACzC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,sCAAsC,EAAE;gBACpE,SAAS,EAAE,gBAAgB,CAAC,SAAS;AACrC,gBAAA,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,gBAAgB,CAAC,SAAS,IAAI,EAAE,EAAE,cAAc,CAAC;gBACpF,GAAG,EAAE,gBAAgB,CAAC,GAAG;AAC1B,aAAA,CAAC,CACH;SACF,CAAC,CACH;AAEe,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC;AAC/C,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC;AAC7C,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAE1D,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,eAAe,CAA2B,IAAI,CAAC;QAErF,IAAW,CAAA,WAAA,GAA6B,IAAI;QACpC,IAAW,CAAA,WAAA,GAAkC,aAAa,CAAC;AACzE,YAAA,IAAI,CAAC,cAAc;AACnB,YAAA,IAAI,CAAC,uBAAuB;AAC7B,SAAA,CAAC,CAAC,IAAI,CACL,SAAS,CAAC,CAAC,CAAC,YAAY,EAAE,cAAc,CAAC,KAAI;YAC3C,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,cAAc,EAAE;AACxC,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;gBACxB,OAAO,IAAI,CAAC,0BAA0B,CAAC,+BAA+B,CAAC,YAAY,CAAC;;AAGtF,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;YAEpC,OAAO,IAAI,CAAC,0BAA0B,CAAC,mCAAmC,CACxE,YAAY,EACZ,cAAc,CACf;AACH,SAAC,CAAC,EACF,GAAG,CAAC,CAAC,IAAuB,KAAI;AAC9B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;YACvB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;SACtC,CAAC,CACH;AAEe,QAAA,IAAA,CAAA,gBAAgB,GAA4B,IAAI,CAAC,WAAW,CAAC,IAAI,CAC/E,GAAG,CAAC,CAAC,IAAuB,MAAM;AAChC,YAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC3B,YAAA,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC,CACJ;AAEe,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAChD,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAE7D,QAAA,IAAA,CAAA,wBAAwB,GACtC,IAAI,eAAe,CAAsC,IAAI,CAAC;AAEhD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY;AAElD,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAU,KAAK,CAAC;QAC1C,IAAY,CAAA,YAAA,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,iBAAiB,EAAE,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC;;IAYxF,eAAe,GAAA;QACpB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,EAAE;;IAGX,SAAS,GAAA;AACd,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;AACxC,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;QACzB,IAAI,CAAC,SAAS,EAAE;;IAGX,aAAa,GAAA;QAClB,IAAI,CAAC,sBAAsB,EAAE;;IAGxB,cAAc,GAAA;AACnB,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;;IAGlC,gBAAgB,GAAA;AACrB,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGpC,IAAA,gBAAgB,CAAC,KAAwB,EAAA;AAC9C,QAAA,IAAI,CAAC,KAAK;YAAE;AAEZ,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAGnC,IAAA,UAAU,CAAC,KAAmC,EAAA;QACnD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAC,GAAG,KAAK,EAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM;QACvB,IAAI,CAAC,SAAS,EAAE;;IAGX,UAAU,GAAA;QACf,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAErD,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAAE,IAAI,CAAC,cAAc,EAAE;;AAG9C,IAAA,eAAe,CAAC,KAAmC,EAAA;QACzD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAC,GAAG,KAAK,EAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;QACzB,IAAI,CAAC,SAAS,EAAE;;IAGV,SAAS,GAAA;QACf,IAAI,CAAC,MAAM,GAAG;AACZ,YAAA;gBACE,QAAQ,EAAE,QAAQ,CAAC,IAAI;AACvB,gBAAA,GAAG,EAAE,OAAO;AACZ,gBAAA,KAAK,EAAE,MAAM;AACd,aAAA;SACF;;AAGK,IAAA,YAAY,CAAC,KAAmC,EAAA;QACtD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAC,GAAG,KAAK,EAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;QACzB,IAAI,CAAC,SAAS,EAAE;;IAGV,SAAS,GAAA;AACf,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;IAGpB,sBAAsB,GAAA;AAC5B,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;;+GA5K9B,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAE,0BAAA,EAAA,EAAA,EAAA,KAAA,EAAAV,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAS,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,yECzCtC,y5HAqHA,EAAA,MAAA,EAAA,CAAA,wqCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAT,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,6BAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,cAAA,EAAA,OAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,eAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAW,oBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,WAAA,EAAA,WAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAZ,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FD5Ea,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;iCACI,KAAK,EAAA,aAAA,EAGF,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,y5HAAA,EAAA,MAAA,EAAA,CAAA,wqCAAA,CAAA,EAAA;;;AEvCvC;;;;;;;;;;;;;;AAcG;MAiBU,4BAA4B,CAAA;AAkCvC,IAAA,WAAA,CACmB,0BAAsD,EACtD,EAAe,EACf,MAAc,EAAA;QAFd,IAA0B,CAAA,0BAAA,GAA1B,0BAA0B;QAC1B,IAAE,CAAA,EAAA,GAAF,EAAE;QACF,IAAM,CAAA,MAAA,GAAN,MAAM;QApCN,IAAO,CAAA,OAAA,GAAG,6BAA6B;AAC1C,QAAA,IAAA,CAAA,aAAa,GAA4B,IAAI,eAAe,CAAC,EAAE,CAAC;AAChE,QAAA,IAAA,CAAA,UAAU,GAA6B,IAAI,eAAe,CAAC,KAAK,CAAC;AACjE,QAAA,IAAA,CAAA,gBAAgB,GAA6B,IAAI,eAAe,CAAC,KAAK,CAAC;AAEvE,QAAA,IAAA,CAAA,UAAU,GACxB,IAAI,CAAC,0BAA0B,CAAC,WAAW;AACtC,QAAA,IAAA,CAAA,MAAM,GAAmB;AAC9B,YAAA;gBACE,QAAQ,EAAE,QAAQ,CAAC,IAAI;AACvB,gBAAA,GAAG,EAAE,OAAO;AACZ,gBAAA,KAAK,EAAE,0BAA0B;AAClC,aAAA;AACD,YAAA;gBACE,QAAQ,EAAE,QAAQ,CAAC,IAAI;AACvB,gBAAA,GAAG,EAAE,aAAa;AAClB,gBAAA,KAAK,EAAE,iCAAiC;AACzC,aAAA;AACD,YAAA;gBACE,QAAQ,EAAE,QAAQ,CAAC,IAAI;AACvB,gBAAA,GAAG,EAAE,KAAK;AACV,gBAAA,KAAK,EAAE,yBAAyB;AACjC,aAAA;SACF;AACe,QAAA,IAAA,CAAA,WAAW,GAAiB;AAC1C,YAAA;AACE,gBAAA,KAAK,EAAE,kBAAkB;gBACzB,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;AACzC,gBAAA,IAAI,EAAE,QAAQ;AACf,aAAA;SACF;;IASM,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,0BAA0B,CAAC,QAAQ,EAAE;QAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACxB,YAAA,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvD,YAAA,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAClD,SAAA,CAAC;;IAGG,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;;IAGZ,eAAe,GAAA;QACpB,MAAM,OAAO,GAA2B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;QAC9D,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YAC9B;;QAGF,MAAM,YAAY,GAAkB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAC3D,QAAA,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAC5C,IAAI,CAAC,0BAA0B,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,IAAI,CAChE,QAAQ,CAAC,MAAK;YACZ,IAAI,CAAC,UAAU,EAAE;SAClB,CAAC,CACH,CACF;;AAGI,IAAA,cAAc,CAAC,YAAoB,EAAA;AACxC,QAAA,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAC5C,IAAI,CAAC,0BAA0B,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,IAAI,CAChE,QAAQ,CAAC,MAAK;YACZ,IAAI,CAAC,UAAU,EAAE;SAClB,CAAC,CACH,CACF;;AAGI,IAAA,iBAAiB,CAAC,UAAkB,EAAA;QACzC,MAAM,OAAO,GAA2B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;QAEjE,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,IAAI;;QAGb,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ;;IAGrC,SAAS,GAAA;AACd,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGrB,IAAA,UAAU,CAAC,IAAmB,EAAA;AACnC,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAyB,sBAAA,EAAA,IAAI,CAAC,GAAG,CAAE,CAAA,CAAC,CAAC;;AAGrD,IAAA,eAAe,CAAC,SAAwB,EAAA;QAC9C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACtC,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;;+GAnGvB,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAU,0BAAA,EAAA,EAAA,EAAA,KAAA,EAAAV,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,yEC/BzC,kmIAoHA,EAAA,MAAA,EAAA,CAAA,6vBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,KAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,KAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,MAAA,EAAA,SAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,kDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,iCAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,kCAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,gCAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,eAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,6BAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,cAAA,EAAA,OAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAL,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FDrFa,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAPxC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,KAAK,mBAGA,uBAAuB,CAAC,MAAM,EAChC,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,kmIAAA,EAAA,MAAA,EAAA,CAAA,6vBAAA,CAAA,EAAA;;;AE7BvC;;;;;;;;;;;;;;AAcG;AASH,MAAM,MAAM,GAAW;AACrB,IAAA;AACE,QAAA,IAAI,EAAE,sBAAsB;AAC5B,QAAA,SAAS,EAAE,4BAA4B;QACvC,WAAW,EAAE,CAAC,gBAAgB,CAAC;QAC/B,IAAI,EAAE,EAAC,KAAK,EAAE,yBAAyB,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAC;AAC9D,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,0BAA0B;AAChC,QAAA,SAAS,EAAE,yBAAyB;QACpC,WAAW,EAAE,CAAC,gBAAgB,CAAC;AAC/B,QAAA,IAAI,EAAE;AACJ,YAAA,KAAK,EAAE,mBAAmB;YAC1B,KAAK,EAAE,CAAC,UAAU,CAAC;AACnB,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,kBAAkB,EAAE,IAAI;AACzB,SAAA;AACF,KAAA;CACF;MAOY,gCAAgC,CAAA;+GAAhC,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAhC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gCAAgC,0CAHjC,YAAY,CAAA,EAAA,CAAA,CAAA;gHAGX,gCAAgC,EAAA,OAAA,EAAA,CAJjC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAC5B,YAAY,CAAA,EAAA,CAAA,CAAA;;4FAGX,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAL5C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBACvC,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,YAAY,EAAE,EAAE;AACjB,iBAAA;;;AC/CD;;;;;;;;;;;;;;AAcG;MA4DU,yBAAyB,CAAA;+GAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,iBA5BlC,4BAA4B;YAC5B,yBAAyB;YACzB,oBAAoB;YACpB,2BAA2B;AAC3B,YAAA,qCAAqC,aAGrC,YAAY;YACZ,YAAY;YACZ,gCAAgC;YAChC,cAAc;YACd,WAAW;YACX,WAAW;YACX,mBAAmB;YACnB,aAAa;YACb,eAAe;YACf,2BAA2B;YAC3B,uBAAuB;YACvB,kBAAkB;YAClB,UAAU;YACV,yBAAyB;YACzB,gBAAgB;YAChB,WAAW;YACX,wBAAwB;YACxB,mBAAmB,CAAA,EAAA,CAAA,CAAA;AAIV,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,YArBlC,YAAY;YACZ,YAAY;YACZ,gCAAgC;YAChC,cAAc;YACd,WAAW;YACX,WAAW;YACX,mBAAmB;YACnB,aAAa;YACb,eAAe;YAEf,uBAAuB;YACvB,kBAAkB;YAClB,UAAU;YACV,yBAAyB;YACzB,gBAAgB;YAChB,WAAW;YAEX,mBAAmB,CAAA,EAAA,CAAA,CAAA;;4FAIV,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBA9BrC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,4BAA4B;wBAC5B,yBAAyB;wBACzB,oBAAoB;wBACpB,2BAA2B;wBAC3B,qCAAqC;AACtC,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,YAAY;wBACZ,gCAAgC;wBAChC,cAAc;wBACd,WAAW;wBACX,WAAW;wBACX,mBAAmB;wBACnB,aAAa;wBACb,eAAe;wBACf,2BAA2B;wBAC3B,uBAAuB;wBACvB,kBAAkB;wBAClB,UAAU;wBACV,yBAAyB;wBACzB,gBAAgB;wBAChB,WAAW;wBACX,wBAAwB;wBACxB,mBAAmB;AACpB,qBAAA;AACD,oBAAA,OAAO,EAAE,EAAE;AACZ,iBAAA;;;ACzED;;;;;;;;;;;;;;AAcG;AAEH;;AAEG;;AClBH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"valtimo-dashboard-management.mjs","sources":["../../../../projects/valtimo/dashboard-management/src/lib/constants/dashboard-management.test-ids.ts","../../../../projects/valtimo/dashboard-management/src/lib/services/dashboard-management.service.ts","../../../../projects/valtimo/dashboard-management/src/lib/components/widget-configuration-container/widget-configuration-container.component.ts","../../../../projects/valtimo/dashboard-management/src/lib/components/widget-configuration-container/widget-configuration-container.component.html","../../../../projects/valtimo/dashboard-management/src/lib/components/widget-modal/widget-modal.component.ts","../../../../projects/valtimo/dashboard-management/src/lib/components/widget-modal/widget-modal.component.html","../../../../projects/valtimo/dashboard-management/src/lib/components/edit-dashboard-modal/edit-dashboard-modal.ts","../../../../projects/valtimo/dashboard-management/src/lib/components/edit-dashboard-modal/edit-dashboard-modal.html","../../../../projects/valtimo/dashboard-management/src/lib/components/dashboard-details/dashboard-details.component.ts","../../../../projects/valtimo/dashboard-management/src/lib/components/dashboard-details/dashboard-details.component.html","../../../../projects/valtimo/dashboard-management/src/lib/components/dashboard-management/dashboard-management.component.ts","../../../../projects/valtimo/dashboard-management/src/lib/components/dashboard-management/dashboard-management.component.html","../../../../projects/valtimo/dashboard-management/src/lib/dashboard-management-routing.module.ts","../../../../projects/valtimo/dashboard-management/src/lib/dashboard-management.module.ts","../../../../projects/valtimo/dashboard-management/src/public-api.ts","../../../../projects/valtimo/dashboard-management/src/valtimo-dashboard-management.ts"],"sourcesContent":["/*\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\nexport const DASHBOARD_MANAGEMENT_TEST_IDS = {\n // Dashboard list page\n addButton: 'dashboardManagementAddButton',\n createTitleInput: 'dashboardManagementCreateTitleInput',\n createDescriptionInput: 'dashboardManagementCreateDescriptionInput',\n createButton: 'dashboardManagementCreateButton',\n cancelDashboardButton: 'dashboardManagementCancelDashboardButton',\n // Dashboard details page — edit dashboard\n editButton: 'dashboardManagementEditButton',\n editTitleInput: 'dashboardManagementEditTitleInput',\n editDescriptionInput: 'dashboardManagementEditDescriptionInput',\n completeButton: 'dashboardManagementCompleteButton',\n switchViewButton: 'dashboardDetailsSwitchView',\n // Widget list page (dashboard details)\n addWidgetButton: 'dashboardManagementAddWidgetButton',\n // Widget modal\n widgetTitleInput: 'dashboardManagementWidgetTitleInput',\n widgetDataSourceDropdown: 'dashboardManagementWidgetDataSourceDropdown',\n widgetDisplayTypeDropdown: 'dashboardManagementWidgetDisplayTypeDropdown',\n widgetUrlInput: 'dashboardManagementWidgetUrlInput',\n widgetSaveButton: 'dashboardManagementWidgetSaveButton',\n widgetCancelButton: 'dashboardManagementWidgetCancelButton',\n widgetDeleteButton: 'dashboardManagementWidgetDeleteButton',\n} as const;\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\nimport {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {ConfigService} from '@valtimo/shared';\nimport {BehaviorSubject, catchError, Observable, of, switchMap, take, tap} from 'rxjs';\nimport {DashboardItem, DashboardWidget, WidgetDataSource} from '../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DashboardManagementService {\n private valtimoEndpointUri: string;\n\n public dashboards$ = new BehaviorSubject<{items: DashboardItem[] | null; loading: boolean}>({\n items: null,\n loading: true,\n });\n\n public loadData(): void {\n this.http\n .get<DashboardItem[]>(this.valtimoEndpointUri)\n .pipe(\n take(1),\n tap(() => {\n this.dashboards$.next({items: null, loading: true});\n })\n )\n .subscribe({\n next: (items: DashboardItem[]) => {\n this.dashboards$.next({items, loading: false});\n },\n error: error => {\n console.error(error);\n },\n });\n }\n\n constructor(\n private readonly http: HttpClient,\n private readonly configService: ConfigService\n ) {\n this.valtimoEndpointUri = `${this.configService.config.valtimoApi.endpointUri}management/v1/dashboard`;\n }\n\n public createDashboard(dashboard: DashboardItem): Observable<DashboardItem> {\n return this.http.post<DashboardItem>(this.valtimoEndpointUri, dashboard);\n }\n\n public updateDashboards(dashboards: Array<DashboardItem>): Observable<Array<DashboardItem>> {\n return this.http.put<Array<DashboardItem>>(this.valtimoEndpointUri, dashboards);\n }\n\n public updateDashboard(dashboard: DashboardItem): Observable<DashboardItem> {\n return this.http.put<DashboardItem>(`${this.valtimoEndpointUri}/${dashboard.key}`, dashboard);\n }\n\n public deleteDashboard(dashboardKey: string): Observable<null> {\n return this.http.delete<null>(`${this.valtimoEndpointUri}/${dashboardKey}`);\n }\n\n public dispatchAction(actionResult: Observable<DashboardItem | null>): void {\n actionResult\n .pipe(\n switchMap(() => this.getDashboards()),\n tap(() => {\n this.dashboards$.next({items: null, loading: true});\n }),\n take(1),\n catchError(error => of(error))\n )\n .subscribe({\n next: (items: DashboardItem[]) => this.dashboards$.next({items, loading: false}),\n error: error => {\n console.error(error);\n },\n });\n }\n\n public getDashboard(dashboardKey: string): Observable<DashboardItem> {\n return this.http.get<DashboardItem>(`${this.valtimoEndpointUri}/${dashboardKey}`);\n }\n\n public getDashboardWidgetConfiguration(dashboardKey: string): Observable<Array<DashboardWidget>> {\n return this.http.get<Array<DashboardWidget>>(\n `${this.valtimoEndpointUri}/${dashboardKey}/widget-configuration`\n );\n }\n\n public createDashboardWidgetConfiguration(\n dashboardKey: string,\n widgetConfiguration: DashboardWidget\n ): Observable<DashboardWidget> {\n return this.http.post<DashboardWidget>(\n `${this.valtimoEndpointUri}/${dashboardKey}/widget-configuration`,\n widgetConfiguration\n );\n }\n\n public updateDashboardWidgetConfigurations(\n dashboardKey: string,\n widgetConfigurations: Array<DashboardWidget>\n ): Observable<Array<DashboardWidget>> {\n return this.http.put<Array<DashboardWidget>>(\n `${this.valtimoEndpointUri}/${dashboardKey}/widget-configuration`,\n widgetConfigurations\n );\n }\n\n public updateDashboardWidgetConfiguration(\n dashboardKey: string,\n widgetConfiguration: DashboardWidget\n ): Observable<DashboardWidget> {\n return this.http.put<DashboardWidget>(\n `${this.valtimoEndpointUri}/${dashboardKey}/widget-configuration/${widgetConfiguration.key}`,\n widgetConfiguration\n );\n }\n\n public deleteDashboardWidgetConfiguration(\n dashboardKey: string,\n widgetKey: string\n ): Observable<DashboardWidget> {\n return this.http.delete<DashboardWidget>(\n `${this.valtimoEndpointUri}/${dashboardKey}/widget-configuration/${widgetKey}`\n );\n }\n\n public getDataSources(): Observable<Array<WidgetDataSource>> {\n return this.http.get<Array<WidgetDataSource>>(`${this.valtimoEndpointUri}/widget-data-sources`);\n }\n\n private getDashboards(): Observable<DashboardItem[]> {\n return this.http.get<DashboardItem[]>(this.valtimoEndpointUri);\n }\n}\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\nimport {\n Component,\n ComponentRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Type,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport {BehaviorSubject, combineLatest, Subscription} from 'rxjs';\nimport {tap} from 'rxjs/operators';\nimport {\n ConfigurationComponent,\n ConfigurationOutput,\n DataSourceConfigurationComponent,\n DisplayTypeConfigurationComponent,\n WidgetService,\n} from '@valtimo/dashboard';\n\n@Component({\n standalone: false,\n selector: 'valtimo-widget-configuration-container',\n templateUrl: './widget-configuration-container.component.html',\n})\nexport class WidgetConfigurationContainerComponent\n implements OnInit, OnDestroy, ConfigurationComponent\n{\n @ViewChild('widgetConfigurationComponent', {static: true, read: ViewContainerRef})\n private readonly _dynamicContainer: ViewContainerRef;\n\n @Input() public set dataSourceKey(value: string) {\n this._dataSourceKey$.next(value);\n }\n @Input() public set displayTypeKey(value: string) {\n this._displayTypeKey$.next(value);\n }\n @Input() public set disabled(disabledValue: boolean) {\n this._disabled$.next(disabledValue);\n }\n @Input() public set prefillConfiguration(prefillConfigurationValue) {\n this._prefillConfiguration$.next(prefillConfigurationValue);\n }\n @Output() public configurationEvent = new EventEmitter<ConfigurationOutput>();\n\n private _configurationSubscription!: Subscription;\n private readonly _subscriptions = new Subscription();\n\n private readonly _componentRef$ = new BehaviorSubject<\n ComponentRef<DataSourceConfigurationComponent | DisplayTypeConfigurationComponent> | undefined\n >(undefined);\n private readonly _dataSourceKey$ = new BehaviorSubject<string>('');\n private readonly _displayTypeKey$ = new BehaviorSubject<string>('');\n private readonly _disabled$ = new BehaviorSubject<boolean>(false);\n private readonly _prefillConfiguration$ = new BehaviorSubject<object | null>(null);\n\n constructor(private readonly widgetService: WidgetService) {}\n\n public ngOnInit(): void {\n this.openConfigurationComponentSubscription();\n this.openComponentInstanceSubscription();\n this.openDisabledSubscription();\n this.openPrefillConfigurationSubscription();\n }\n\n public ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n private openConfigurationComponentSubscription(): void {\n this._subscriptions.add(\n combineLatest([\n this._displayTypeKey$,\n this._dataSourceKey$,\n this.widgetService.supportedDisplayTypes$,\n this.widgetService.supportedDataSources$,\n ])\n .pipe(\n tap(([displayTypeKey, dataSourceKey, supportedDisplayTypes, supportedDataSources]) => {\n let configurationComponent!: Type<\n DisplayTypeConfigurationComponent | DataSourceConfigurationComponent\n >;\n\n this._dynamicContainer.clear();\n\n const displayTypeSpecification =\n displayTypeKey &&\n supportedDisplayTypes.find(type => type.displayTypeKey === displayTypeKey);\n const dataSourceSpecification =\n dataSourceKey &&\n supportedDataSources.find(source => source.dataSourceKey === dataSourceKey);\n\n if (displayTypeSpecification && displayTypeSpecification.configurationComponent) {\n configurationComponent = displayTypeSpecification.configurationComponent;\n } else if (dataSourceSpecification && dataSourceSpecification.configurationComponent) {\n configurationComponent = dataSourceSpecification.configurationComponent;\n }\n\n if (configurationComponent) {\n const componentRef = this._dynamicContainer.createComponent(configurationComponent);\n this.configurationEvent.emit({valid: false, data: {}});\n this._componentRef$.next(componentRef);\n } else {\n this.configurationEvent.emit({valid: true, data: {}});\n }\n })\n )\n .subscribe()\n );\n }\n\n private openComponentInstanceSubscription(): void {\n this._subscriptions.add(\n combineLatest([this._componentRef$, this._dataSourceKey$, this._displayTypeKey$]).subscribe(\n ([ref, dataSourceKey, displayTypeKey]) => {\n const instance = ref?.instance;\n\n this._configurationSubscription?.unsubscribe();\n\n if (instance) {\n if (displayTypeKey) {\n (instance as DisplayTypeConfigurationComponent).displayTypeKey = displayTypeKey;\n } else if (dataSourceKey) {\n (instance as DataSourceConfigurationComponent).dataSourceKey = dataSourceKey;\n }\n\n this._configurationSubscription = instance.configurationEvent.subscribe(\n configuration => {\n this.configurationEvent.emit(configuration);\n }\n );\n }\n }\n )\n );\n }\n\n private openDisabledSubscription(): void {\n this._subscriptions.add(\n combineLatest([this._componentRef$, this._disabled$]).subscribe(([ref, disabled]) => {\n const instance = ref?.instance;\n\n if (instance) {\n instance.disabled = disabled;\n }\n })\n );\n }\n\n private openPrefillConfigurationSubscription(): void {\n this._subscriptions.add(\n combineLatest([this._componentRef$, this._prefillConfiguration$]).subscribe(\n ([ref, prefillConfiguration]) => {\n const instance = ref?.instance;\n\n if (instance && prefillConfiguration) {\n instance.prefillConfiguration = prefillConfiguration;\n }\n }\n )\n );\n }\n}\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\n<ng-template #widgetConfigurationComponent></ng-template>\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 */\nimport {DOCUMENT} from '@angular/common';\nimport {\n Component,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport {FormBuilder, Validators} from '@angular/forms';\nimport {TranslateService} from '@ngx-translate/core';\nimport {CARBON_CONSTANTS} from '@valtimo/components';\nimport {GlobalNotificationService} from '@valtimo/shared';\nimport {\n ConfigurationOutput,\n DashboardWidgetConfiguration,\n DisplayTypeSpecification,\n WidgetService,\n WidgetTranslationService,\n} from '@valtimo/dashboard';\nimport {ListItem} from 'carbon-components-angular';\nimport {\n BehaviorSubject,\n combineLatest,\n filter,\n map,\n Observable,\n Subscription,\n switchMap,\n take,\n tap,\n} from 'rxjs';\nimport {DASHBOARD_MANAGEMENT_TEST_IDS} from '../../constants/dashboard-management.test-ids';\nimport {DashboardItem, WidgetDataSource, WidgetModalType} from '../../models';\nimport {DashboardManagementService} from '../../services/dashboard-management.service';\n\n@Component({\n standalone: false,\n selector: 'valtimo-widget-modal',\n templateUrl: './widget-modal.component.html',\n styleUrls: ['./widget-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class WidgetModalComponent implements OnInit, OnDestroy {\n public readonly testIds = DASHBOARD_MANAGEMENT_TEST_IDS;\n\n @Input() public showModal$: Observable<boolean>;\n @Input() public type: WidgetModalType;\n @Input() public dashboard: DashboardItem;\n @Input() public widgetKey!: string;\n @Input() public set editWidgetConfiguration(configuration: DashboardWidgetConfiguration) {\n if (configuration) {\n this.title.setValue(configuration.title);\n this.url.setValue(configuration.url);\n this.dataSourceSelected({item: {key: configuration.dataSourceKey}} as any);\n this.displayTypeSelected({item: {key: configuration.displayType}} as any);\n this.dataSourcePrefillConfig$.next(configuration.dataSourceProperties);\n this.displayTypePrefillConfig$.next(configuration.displayTypeProperties);\n } else {\n this.dataSourcePrefillConfig$.next(null);\n this.displayTypePrefillConfig$.next(null);\n }\n }\n @Output() public saveEvent = new EventEmitter<ConfigurationOutput>();\n\n public readonly form = this.fb.group({\n title: this.fb.control('', [Validators.required]),\n dataSource: this.fb.control(null, [Validators.required]),\n displayType: this.fb.control(null, [Validators.required]),\n url: this.fb.control(''),\n });\n\n public readonly open$ = new BehaviorSubject<boolean>(false);\n public readonly selectedDataSourceKey$ = new BehaviorSubject<string>('');\n public readonly selectedDisplayTypeKey$ = new BehaviorSubject<string>('');\n\n public readonly dataSourceItems$: Observable<Array<ListItem>> = combineLatest([\n this.dashboardManagementService.getDataSources(),\n this.selectedDataSourceKey$,\n this.widgetService.supportedDataSources$,\n this.translateService.stream('key'),\n ]).pipe(\n filter(([dataSources]) => !!dataSources),\n tap(([dataSources, selectedDataSourceKey]) => {\n if (selectedDataSourceKey) {\n this.setCompatibleDisplayTypes(dataSources, selectedDataSourceKey);\n } else {\n this.resetCompatibleDisplayTypes();\n }\n }),\n map(([dataSources, selectedDataSourceKey, supportedDataSources]) =>\n dataSources\n .filter(dataSource =>\n supportedDataSources.find(\n supportedDataSource => supportedDataSource.dataSourceKey === dataSource.key\n )\n )\n .map(dataSource => ({\n content: this.widgetTranslationService.instant('title', dataSource.key),\n selected: selectedDataSourceKey === dataSource.key,\n key: dataSource.key,\n }))\n )\n );\n\n public readonly dataSourcePrefillConfig$ = new BehaviorSubject<object | null>(null);\n public readonly displayTypePrefillConfig$ = new BehaviorSubject<object | null>(null);\n\n private readonly _compatibleDisplayTypes$ = new BehaviorSubject<Array<DisplayTypeSpecification>>(\n []\n );\n\n public readonly displayTypeItems$: Observable<Array<ListItem>> = combineLatest([\n this._compatibleDisplayTypes$,\n this.selectedDisplayTypeKey$,\n this.translateService.stream('key'),\n ]).pipe(\n map(([compatibleDisplayTypes, selectedDisplayTypeKey]) =>\n compatibleDisplayTypes.map(displayType => ({\n content: this.widgetTranslationService.instant('title', displayType.displayTypeKey),\n selected: displayType.displayTypeKey === selectedDisplayTypeKey,\n key: displayType.displayTypeKey,\n }))\n )\n );\n\n public readonly displayTypeDropdownDisabled$: Observable<boolean> = combineLatest([\n this._compatibleDisplayTypes$,\n this.selectedDataSourceKey$,\n ]).pipe(\n map(\n ([compatibleDisplayTypes, selectedDataSourceKey]) =>\n compatibleDisplayTypes?.length === 0 || !selectedDataSourceKey\n ),\n tap(displayTypeDropdownDisabled => {\n if (displayTypeDropdownDisabled) {\n this.displayType?.disable();\n } else {\n this.displayType?.enable();\n }\n })\n );\n\n public readonly dataSourceConfiguration$ = new BehaviorSubject<ConfigurationOutput>({\n valid: false,\n data: {},\n });\n public readonly displayTypeConfiguration$ = new BehaviorSubject<ConfigurationOutput>({\n valid: false,\n data: {},\n });\n\n public readonly disabled$ = new BehaviorSubject<boolean>(false);\n\n private _openSubscription!: Subscription;\n\n public get title() {\n return this.form.get('title');\n }\n public get key() {\n return this.form.get('key');\n }\n public get dataSource() {\n return this.form.get('dataSource');\n }\n public get displayType() {\n return this.form.get('displayType');\n }\n public get url() {\n return this.form.get('url');\n }\n\n constructor(\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly fb: FormBuilder,\n private readonly translateService: TranslateService,\n private readonly notificationService: GlobalNotificationService,\n private readonly dashboardManagementService: DashboardManagementService,\n private readonly widgetService: WidgetService,\n private readonly widgetTranslationService: WidgetTranslationService\n ) {}\n\n public ngOnInit(): void {\n this.openOpenSubscription();\n }\n\n public ngOnDestroy(): void {\n this._openSubscription?.unsubscribe();\n }\n\n public closeModal(): void {\n this.open$.next(false);\n\n setTimeout(() => {\n this.enable();\n this.form.reset();\n this.selectedDataSourceKey$.next('');\n this.selectedDisplayTypeKey$.next('');\n }, CARBON_CONSTANTS.modalAnimationMs);\n }\n\n public save(): void {\n this.disable();\n\n combineLatest([\n this.selectedDataSourceKey$,\n this.selectedDisplayTypeKey$,\n this.displayTypeConfiguration$,\n this.dataSourceConfiguration$,\n ])\n .pipe(\n take(1),\n map(\n ([\n selectedDataSourceKey,\n selectedDisplayTypeKey,\n displayTypeConfiguration,\n dataSourceConfiguration,\n ]) => ({\n title: this.title.value,\n displayType: selectedDisplayTypeKey,\n dataSourceKey: selectedDataSourceKey,\n dataSourceProperties: {...dataSourceConfiguration.data},\n displayTypeProperties: {...displayTypeConfiguration.data},\n url: this.url.value,\n })\n ),\n switchMap(widgetUpdateObject =>\n this.type === 'create'\n ? this.dashboardManagementService.createDashboardWidgetConfiguration(\n this.dashboard.key,\n widgetUpdateObject\n )\n : this.dashboardManagementService.updateDashboardWidgetConfiguration(\n this.dashboard.key,\n {...widgetUpdateObject, key: this.widgetKey}\n )\n )\n )\n .subscribe({\n complete: () => {\n this.saveEvent.emit();\n this.closeModal();\n },\n error: () => {\n this.enable();\n },\n });\n }\n\n public delete(): void {\n this.disable();\n\n this.dashboardManagementService\n .deleteDashboardWidgetConfiguration(this.dashboard.key, this.widgetKey)\n .subscribe({\n complete: () => {\n this.saveEvent.emit();\n this.closeModal();\n },\n error: () => {\n this.enable();\n },\n });\n }\n\n public dataSourceSelected(dataSource: ListItem): void {\n if (!dataSource) {\n return;\n }\n\n this.selectedDataSourceKey$.next(dataSource?.item?.key);\n this.dataSource.setValue(dataSource?.item?.key);\n }\n\n public displayTypeSelected(displayType: ListItem): void {\n if (!displayType) {\n return;\n }\n\n this.selectedDisplayTypeKey$.next(displayType?.item?.key);\n this.displayType.setValue(displayType?.item?.key);\n }\n\n public dataSourceConfiguration(configuration: ConfigurationOutput): void {\n this.dataSourceConfiguration$.next(configuration);\n }\n\n public displayTypeConfiguration(configuration: ConfigurationOutput): void {\n this.displayTypeConfiguration$.next(configuration);\n }\n\n private openOpenSubscription(): void {\n this._openSubscription = this.showModal$.subscribe(show => {\n this.open$.next(show);\n });\n }\n\n private resetCompatibleDisplayTypes(): void {\n this._compatibleDisplayTypes$.next([]);\n }\n\n private setCompatibleDisplayTypes(\n dataSources: Array<WidgetDataSource>,\n selectedDataSourceKey: string\n ): void {\n this.widgetService.supportedDisplayTypes$.pipe(take(1)).subscribe(supportedDisplayTypes => {\n const selectedDataSource = dataSources.find(source => source.key === selectedDataSourceKey);\n const availableDataFeatures = selectedDataSource?.dataFeatures;\n const compatibleDisplayTypes = supportedDisplayTypes.filter(displayType => {\n const supportedDataFeatures = displayType.requiredDataFeatures.filter(\n requiredDataFeature =>\n !!availableDataFeatures?.some(\n availableDataFeature =>\n this.trimAndToUpperCase(availableDataFeature) ===\n this.trimAndToUpperCase(requiredDataFeature)\n )\n );\n return supportedDataFeatures.length === displayType.requiredDataFeatures.length;\n });\n\n this._compatibleDisplayTypes$.next(compatibleDisplayTypes);\n });\n }\n\n private disable(): void {\n this.disabled$.next(true);\n this.form.disable();\n }\n\n private enable(): void {\n this.disabled$.next(false);\n this.form.enable();\n }\n\n private trimAndToUpperCase(text: string): string {\n return `${text}`.trim().toUpperCase();\n }\n}\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\n<ng-container\n *ngIf=\"{\n disabled: disabled$ | async,\n isCreate: type === 'create',\n isDelete: type === 'delete',\n isEdit: type === 'edit',\n open: open$ | async,\n } as vars\"\n>\n <ng-container\n *ngIf=\"{\n create: vars.isCreate && ('dashboardManagement.widgets.add' | translate),\n delete: vars.isDelete && ('dashboardManagement.widgets.delete' | translate),\n edit: vars.isEdit && ('dashboardManagement.widgets.edit' | translate),\n } as titles\"\n >\n <cds-modal\n *ngIf=\"{\n title: titles.edit || titles.create || titles.delete,\n } as translations\"\n valtimoCdsModal\n [open]=\"vars.open\"\n showFooter=\"true\"\n size=\"md\"\n title=\"{{ translations.title }}\"\n class=\"widget-modal\"\n (close)=\"closeModal()\"\n >\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>\n {{ translations.title }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent [cdsLayer]=\"1\">\n <ng-container *ngIf=\"vars.isDelete\">\n {{ 'dashboardManagement.widgets.deleteDescription' | translate }}</ng-container\n >\n\n <ng-container *ngIf=\"vars.isEdit || vars.isCreate\">\n <ng-container *ngTemplateOutlet=\"widgetForm; context: {vars: vars}\"></ng-container>\n </ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngIf=\"vars.isEdit || vars.isCreate\">\n <ng-container *ngTemplateOutlet=\"editButtons; context: {vars: vars}\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"vars.isDelete\">\n <ng-container *ngTemplateOutlet=\"deleteButtons; context: {vars: vars}\"></ng-container>\n </ng-container>\n </cds-modal-footer>\n </cds-modal>\n </ng-container>\n</ng-container>\n\n<ng-template #widgetForm let-vars=\"vars\">\n <form\n *ngIf=\"\n form && {\n dataSourceItems: dataSourceItems$ | async,\n displayTypeDropdownDisabled: displayTypeDropdownDisabled$ | async,\n displayTypeItems: displayTypeItems$ | async,\n selectedDataSourceKey: selectedDataSourceKey$ | async,\n selectedDisplayTypeKey: selectedDisplayTypeKey$ | async,\n } as obs\n \"\n [formGroup]=\"form\"\n class=\"dashboard-modal__form\"\n >\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'dashboardManagement.widgets.form.titleHelperText' | translate\"\n [invalidText]=\"'dashboardManagement.widgets.form.titleHelperText' | translate\"\n [invalid]=\"title.dirty && title.invalid\"\n >\n {{ 'dashboardManagement.widgets.form.title' | translate }}\n\n <input\n cdsText\n formControlName=\"title\"\n [attr.data-test-id]=\"testIds.widgetTitleInput\"\n [invalid]=\"title.dirty && title.invalid\"\n [attr.modal-primary-focus]=\"true\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__element\" *ngIf=\"obs.dataSourceItems\">\n <cds-dropdown\n [appendInline]=\"true\"\n [attr.data-test-id]=\"testIds.widgetDataSourceDropdown\"\n formControlName=\"dataSource\"\n [helperText]=\"'dashboardManagement.widgets.form.dataSourceHelperText' | translate\"\n [invalidText]=\"'dashboardManagement.widgets.form.dateSourceHelperText' | translate\"\n [invalid]=\"dataSource.dirty && dataSource.invalid\"\n [label]=\"'dashboardManagement.widgets.form.dataSource' | translate\"\n (selected)=\"dataSourceSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.dataSourceItems\" type=\"multi\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <valtimo-widget-configuration-container\n *ngIf=\"obs.selectedDataSourceKey\"\n [dataSourceKey]=\"obs.selectedDataSourceKey\"\n [disabled]=\"vars.disabled\"\n [prefillConfiguration]=\"dataSourcePrefillConfig$ | async\"\n (configurationEvent)=\"dataSourceConfiguration($event)\"\n ></valtimo-widget-configuration-container>\n\n <div class=\"form__element\" *ngIf=\"obs.displayTypeItems\">\n <cds-dropdown\n [appendInline]=\"true\"\n [attr.data-test-id]=\"testIds.widgetDisplayTypeDropdown\"\n formControlName=\"displayType\"\n [helperText]=\"'dashboardManagement.widgets.form.displayTypeHelperText' | translate\"\n [invalid]=\"displayType.dirty && displayType.invalid\"\n [invalidText]=\"'dashboardManagement.widgets.form.displayTypeHelperText' | translate\"\n [label]=\"'dashboardManagement.widgets.form.displayType' | translate\"\n (selected)=\"displayTypeSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.displayTypeItems\" type=\"multi\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <valtimo-widget-configuration-container\n *ngIf=\"obs.selectedDisplayTypeKey\"\n [disabled]=\"vars.disabled\"\n [displayTypeKey]=\"obs.selectedDisplayTypeKey\"\n [prefillConfiguration]=\"displayTypePrefillConfig$ | async\"\n (configurationEvent)=\"displayTypeConfiguration($event)\"\n ></valtimo-widget-configuration-container>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'dashboardManagement.widgets.form.urlHelperText' | translate\"\n [invalidText]=\"'dashboardManagement.widgets.form.urlHelperText' | translate\"\n [invalid]=\"url.dirty && url.invalid\"\n >\n {{ 'dashboardManagement.widgets.form.url' | translate }}\n\n <input cdsText formControlName=\"url\" [attr.data-test-id]=\"testIds.widgetUrlInput\" [invalid]=\"url.dirty && url.invalid\" />\n </cds-label>\n </div>\n </form>\n</ng-template>\n\n<ng-template #editButtons let-vars=\"vars\">\n <ng-container\n *ngIf=\"{\n dataSourceConfiguration: dataSourceConfiguration$ | async,\n displayTypeConfiguration: displayTypeConfiguration$ | async,\n } as obs\"\n >\n <button cdsButton=\"ghost\" [attr.data-test-id]=\"testIds.widgetCancelButton\" [disabled]=\"vars.disabled\" (click)=\"closeModal()\">\n {{ 'dashboardManagement.widgets.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n [attr.data-test-id]=\"testIds.widgetSaveButton\"\n [disabled]=\"\n form.invalid ||\n !obs.dataSourceConfiguration.valid ||\n !obs.displayTypeConfiguration.valid ||\n vars.disabled\n \"\n (click)=\"save()\"\n >\n {{ 'dashboardManagement.widgets.save' | translate }}\n </button>\n </ng-container>\n</ng-template>\n\n<ng-template #deleteButtons let-vars=\"vars\">\n <button cdsButton=\"secondary\" [attr.data-test-id]=\"testIds.widgetCancelButton\" [disabled]=\"vars.disabled\" (click)=\"closeModal()\">\n {{ 'dashboardManagement.widgets.cancel' | translate }}\n </button>\n\n <button cdsButton=\"danger\" [attr.data-test-id]=\"testIds.widgetDeleteButton\" [disabled]=\"vars.disabled\" (click)=\"delete()\">\n {{ 'dashboardManagement.widgets.delete' | translate }}\n </button>\n</ng-template>\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\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport {BehaviorSubject, Observable, Subscription} from 'rxjs';\nimport {DASHBOARD_MANAGEMENT_TEST_IDS} from '../../constants/dashboard-management.test-ids';\nimport {DashboardItem} from '../../models';\nimport {FormBuilder, Validators} from '@angular/forms';\nimport {\n CARBON_CONSTANTS,\n SelectItem,\n WIDGET_LAYOUT_TRANSLATION_KEYS,\n WIDGET_LAYOUT_VALUES,\n WidgetLayout,\n} from '@valtimo/components';\nimport {DashboardManagementService} from '../../services/dashboard-management.service';\nimport {ConfigurationOutput} from '@valtimo/dashboard';\n\n@Component({\n selector: 'valtimo-edit-dashboard-modal',\n templateUrl: './edit-dashboard-modal.html',\n styleUrls: ['./edit-dashboard-modal.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class EditDashboardModalComponent implements OnInit {\n protected readonly testIds = DASHBOARD_MANAGEMENT_TEST_IDS;\n @Input() public showModal$: Observable<boolean>;\n @Input() public dashboard: DashboardItem;\n @Output() public saveEvent = new EventEmitter<ConfigurationOutput>();\n\n public readonly open$ = new BehaviorSubject<boolean>(false);\n public readonly disabled$ = new BehaviorSubject<boolean>(false);\n public readonly editDashboardForm = this.fb.group({\n title: this.fb.control('', [Validators.required]),\n description: this.fb.control('', [Validators.required]),\n widgetLayout: this.fb.control<WidgetLayout>(WidgetLayout.MUURI_GAP_FREE),\n });\n\n public get dashboardTitle() {\n return this.editDashboardForm.get('title');\n }\n\n public get dashboardDescription() {\n return this.editDashboardForm.get('description');\n }\n\n public readonly widgetLayoutSelectItems: SelectItem[] = WIDGET_LAYOUT_VALUES.map(value => ({\n id: value,\n translationKey: WIDGET_LAYOUT_TRANSLATION_KEYS[value],\n }));\n\n private _openSubscription!: Subscription;\n\n constructor(\n private readonly fb: FormBuilder,\n private readonly dashboardManagementService: DashboardManagementService\n ) {}\n\n public ngOnInit(): void {\n this.openOpenSubscription();\n }\n\n public closeModal(): void {\n this.open$.next(false);\n\n setTimeout(() => {\n this.editDashboardForm.reset();\n }, CARBON_CONSTANTS.modalAnimationMs);\n }\n\n public saveDashboard(): void {\n this.disable();\n\n this.dashboardManagementService\n .updateDashboard({\n description: this.dashboardDescription.value,\n title: this.dashboardTitle.value,\n key: this.dashboard.key,\n widgetLayout: this.editDashboardForm.get('widgetLayout').value ?? WidgetLayout.MUURI_GAP_FREE,\n })\n .subscribe(() => {\n this.saveEvent.emit();\n this.closeModal();\n });\n }\n\n private setEditDashboardForm(): void {\n if (this.dashboard) {\n this.dashboardTitle?.setValue(this.dashboard.title);\n this.dashboardDescription?.setValue(this.dashboard.description);\n this.editDashboardForm\n .get('widgetLayout')\n ?.setValue(this.dashboard.widgetLayout ?? WidgetLayout.MUURI_GAP_FREE);\n }\n\n this.enable();\n }\n\n private openOpenSubscription(): void {\n this._openSubscription = this.showModal$.subscribe(show => {\n this.setEditDashboardForm();\n this.open$.next(show);\n });\n }\n\n private disable(): void {\n this.disabled$.next(true);\n }\n\n private enable(): void {\n this.disabled$.next(false);\n }\n}\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\n<cds-modal\n *ngIf=\"{disabled: disabled$ | async} as obs\"\n valtimoCdsModal\n [open]=\"open$ | async\"\n showFooter=\"true\"\n title=\"{{ 'dashboardManagement.widgets.editDashboard' | translate }}\"\n class=\"edit-dashboard-modal\"\n (close)=\"closeModal()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>{{ 'dashboardManagement.widgets.editDashboard' | translate }}</h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <ng-container *ngTemplateOutlet=\"editDashboardFormTemplate;context:{obs: obs}\"></ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"editDashboardButtons;context:{obs: obs}\"></ng-container>\n </cds-modal-footer>\n</cds-modal>\n\n<ng-template #editDashboardFormTemplate let-obs=\"obs\">\n <form\n *ngIf=\"editDashboardForm\"\n [formGroup]=\"editDashboardForm\"\n class=\"dashboard-modal__form\"\n [cdsLayer]=\"1\"\n >\n <div class=\"form__element\">\n <cds-label\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardTitle.dirty && dashboardTitle.invalid\"\n >\n {{ 'dashboardManagement.widgets.form.dashboardTitle' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.editTitleInput\"\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardTitle.dirty && dashboardTitle.invalid\"\n formControlName=\"title\"\n [attr.modal-primary-focus]=\"true\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [disabled]=\"obs.disabled\"\n [helperText]=\"'dashboardManagement.widgets.form.dashboardDescriptionHelperText' | translate\"\n [invalid]=\"dashboardDescription.dirty && dashboardDescription.invalid\"\n [invalidText]=\"\n 'dashboardManagement.widgets.form.dashboardDescriptionHelperText' | translate\n \"\n >\n {{ 'dashboardManagement.widgets.form.dashboardDescription' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.editDescriptionInput\"\n cdsText\n [disabled]=\"obs.disabled\"\n [invalid]=\"dashboardDescription.dirty && dashboardDescription.invalid\"\n formControlName=\"description\"\n />\n </cds-label>\n </div>\n\n <div class=\"form__element\">\n <v-select\n formControlName=\"widgetLayout\"\n [items]=\"widgetLayoutSelectItems\"\n [dropUp]=\"false\"\n [appendInline]=\"false\"\n titleTranslationKey=\"widgetLayout.label\"\n ></v-select>\n </div>\n\n <valtimo-widget-layout-info></valtimo-widget-layout-info>\n </form>\n</ng-template>\n\n<ng-template #editDashboardButtons let-obs=\"obs\">\n <button cdsButton=\"ghost\" [disabled]=\"obs.disabled\" (click)=\"closeModal()\">\n {{ 'dashboardManagement.widgets.cancel' | translate }}\n </button>\n\n <button\n [attr.data-test-id]=\"testIds.completeButton\"\n cdsButton=\"primary\"\n [disabled]=\"editDashboardForm.invalid || obs.disabled\"\n (click)=\"saveDashboard()\"\n >\n {{ 'dashboardManagement.widgets.complete' | translate }}\n </button>\n</ng-template>\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 */\nimport {DatePipe} from '@angular/common';\nimport {AfterViewInit, Component, computed, signal, ViewEncapsulation} from '@angular/core';\nimport {ActivatedRoute} from '@angular/router';\nimport {Code16, Edit16} from '@carbon/icons';\nimport {TranslateService} from '@ngx-translate/core';\nimport {\n ActionItem,\n ColumnConfig,\n EditorModel,\n PageHeaderService,\n PageTitleService,\n ViewType,\n} from '@valtimo/components';\nimport {DashboardWidgetConfiguration} from '@valtimo/dashboard';\nimport {IconService} from 'carbon-components-angular';\nimport {BehaviorSubject, combineLatest, map, Observable, switchMap, tap} from 'rxjs';\nimport {DASHBOARD_MANAGEMENT_TEST_IDS} from '../../constants/dashboard-management.test-ids';\nimport {DashboardItem, DashboardWidget, WidgetModalType} from '../../models';\nimport {DashboardManagementService} from '../../services/dashboard-management.service';\n\n@Component({\n standalone: false,\n templateUrl: './dashboard-details.component.html',\n styleUrls: ['./dashboard-details.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class DashboardDetailsComponent implements AfterViewInit {\n protected readonly testIds = DASHBOARD_MANAGEMENT_TEST_IDS;\n public modalType: WidgetModalType = 'create';\n public fields!: ColumnConfig[];\n public readonly actionItems: ActionItem[] = [\n {\n label: 'Edit',\n callback: this.editWidget.bind(this),\n },\n {\n label: 'Duplicate',\n callback: this.duplicateWidget.bind(this),\n },\n {\n label: 'Delete',\n callback: this.deleteWidget.bind(this),\n type: 'danger',\n },\n ];\n\n private readonly _dashboardKey$ = this.route.params.pipe(map(params => params.id));\n private readonly _refreshDashboardSubject$ = new BehaviorSubject<null>(null);\n public readonly currentDashboard$: Observable<DashboardItem | undefined> = combineLatest([\n this._dashboardKey$,\n this.translateService.stream('key'),\n this._refreshDashboardSubject$,\n ]).pipe(\n switchMap(([dashboardKey]) => this.dashboardManagementService.getDashboard(dashboardKey)),\n tap((currentDashboard: DashboardItem) => {\n if (!currentDashboard) {\n return;\n }\n\n this.pageTitleService.setCustomPageTitle(currentDashboard.title);\n this.pageTitleService.setCustomPageSubtitle(\n this.translateService.instant('dashboardManagement.widgets.metadata', {\n createdBy: currentDashboard.createdBy,\n createdOn: this.datePipe.transform(currentDashboard.createdOn ?? '', 'd/M/yy, H:mm'),\n key: currentDashboard.key,\n })\n );\n })\n );\n\n public readonly lastItemIndex$ = new BehaviorSubject<number>(0);\n public readonly loading$ = new BehaviorSubject<boolean>(true);\n public readonly dragAndDropDisabled$ = new BehaviorSubject<boolean>(false);\n\n public readonly _refreshWidgetsSubject$ = new BehaviorSubject<DashboardWidget[] | null>(null);\n\n private _widgetData: DashboardWidget[] | null = null;\n public readonly widgetData$: Observable<DashboardWidget[]> = combineLatest([\n this._dashboardKey$,\n this._refreshWidgetsSubject$,\n ]).pipe(\n switchMap(([dashboardKey, refreshWidgets]) => {\n if (!this._widgetData || !refreshWidgets) {\n this.loading$.next(true);\n return this.dashboardManagementService.getDashboardWidgetConfiguration(dashboardKey);\n }\n\n this.dragAndDropDisabled$.next(true);\n\n return this.dashboardManagementService.updateDashboardWidgetConfigurations(\n dashboardKey,\n refreshWidgets\n );\n }),\n tap((data: DashboardWidget[]) => {\n this._widgetData = data;\n this.lastItemIndex$.next(data.length - 1);\n this.loading$.next(false);\n this.dragAndDropDisabled$.next(false);\n })\n );\n\n public readonly jsonEditorModel$: Observable<EditorModel> = this.widgetData$.pipe(\n map((data: DashboardWidget[]) => ({\n value: JSON.stringify(data),\n language: 'json',\n }))\n );\n\n public readonly showModal$ = new BehaviorSubject<boolean>(false);\n public readonly showEditDashboardModal$ = new BehaviorSubject<boolean>(false);\n\n public readonly editWidgetConfiguration$ =\n new BehaviorSubject<DashboardWidgetConfiguration | null>(null);\n\n public readonly compactMode$ = this.pageHeaderService.compactMode$;\n\n public readonly $jsonEditorActive = signal<boolean>(false);\n public readonly $buttonTheme = computed(() => (this.$jsonEditorActive() ? 'primary' : 'ghost'));\n\n constructor(\n private readonly dashboardManagementService: DashboardManagementService,\n private readonly datePipe: DatePipe,\n private readonly iconService: IconService,\n private readonly pageTitleService: PageTitleService,\n private readonly route: ActivatedRoute,\n private readonly translateService: TranslateService,\n private readonly pageHeaderService: PageHeaderService\n ) {}\n\n public ngAfterViewInit(): void {\n this.iconService.registerAll([Code16, Edit16]);\n this.setFields();\n }\n\n public addWidget(): void {\n this.editWidgetConfiguration$.next(null);\n this.modalType = 'create';\n this.showModal();\n }\n\n public editDashboard(): void {\n this.showEditDashboardModal();\n }\n\n public refreshWidgets(): void {\n this._refreshWidgetsSubject$.next(null);\n }\n\n public refreshDashboard(): void {\n this._refreshDashboardSubject$.next(null);\n }\n\n public updateWidgetData(items: DashboardWidget[]): void {\n if (!items) return;\n\n this._refreshWidgetsSubject$.next(items);\n }\n\n public editWidget(event: DashboardWidgetConfiguration): void {\n this.editWidgetConfiguration$.next({...event});\n this.modalType = 'edit';\n this.showModal();\n }\n\n public switchView(): void {\n this.$jsonEditorActive.set(!this.$jsonEditorActive());\n\n if (!this.$jsonEditorActive()) this.refreshWidgets();\n }\n\n private duplicateWidget(event: DashboardWidgetConfiguration): void {\n this.editWidgetConfiguration$.next({...event});\n this.modalType = 'create';\n this.showModal();\n }\n\n private setFields(): void {\n this.fields = [\n {\n viewType: ViewType.TEXT,\n key: 'title',\n label: 'Name',\n },\n ];\n }\n\n private deleteWidget(event: DashboardWidgetConfiguration): void {\n this.editWidgetConfiguration$.next({...event});\n this.modalType = 'delete';\n this.showModal();\n }\n\n private showModal(): void {\n this.showModal$.next(true);\n }\n\n private showEditDashboardModal(): void {\n this.showEditDashboardModal$.next(true);\n }\n}\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\n<ng-container\n *ngIf=\"\n fields && {\n currentDashboard: currentDashboard$ | async,\n editWidgetConfiguration: editWidgetConfiguration$ | async,\n loading: loading$ | async,\n widgetData: widgetData$ | async,\n dragAndDropDisabled: dragAndDropDisabled$ | async,\n jsonEditorModel: jsonEditorModel$ | async,\n } as obs\n \"\n>\n <div class=\"dashboard-detail-table\">\n @if (!$jsonEditorActive()) {\n <valtimo-carbon-list\n [actionItems]=\"actionItems\"\n [fields]=\"fields\"\n [header]=\"false\"\n [items]=\"obs.widgetData\"\n [loading]=\"obs.loading\"\n [dragAndDrop]=\"true\"\n [dragAndDropDisabled]=\"obs.dragAndDropDisabled\"\n (itemsReordered)=\"updateWidgetData($event)\"\n (rowClicked)=\"editWidget($event)\"\n >\n <div carbonToolbarContent>\n <ng-container [ngTemplateOutlet]=\"viewToggle\"></ng-container>\n\n <ng-container [ngTemplateOutlet]=\"addWidgetButton\"></ng-container>\n </div>\n\n <valtimo-no-results\n [action]=\"addWidgetButton\"\n description=\"{{ 'dashboardManagement.widgets.noResults.description' | translate }}\"\n title=\"{{ 'dashboardManagement.widgets.noResults.title' | translate }}\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n } @else {\n <valtimo-json-editor\n [model]=\"obs.jsonEditorModel\"\n [fitPage]=\"true\"\n [fitPageSpaceAdjustment]=\"56\"\n (saveEvent)=\"updateWidgetData($event)\"\n >\n <ng-container *ngTemplateOutlet=\"viewToggle\"></ng-container>\n </valtimo-json-editor>\n }\n </div>\n\n <valtimo-widget-modal\n [dashboard]=\"obs.currentDashboard\"\n [editWidgetConfiguration]=\"obs.editWidgetConfiguration\"\n [showModal$]=\"showModal$\"\n [type]=\"modalType\"\n [widgetKey]=\"obs.editWidgetConfiguration?.key\"\n (saveEvent)=\"refreshWidgets()\"\n ></valtimo-widget-modal>\n\n <valtimo-edit-dashboard-modal\n [dashboard]=\"obs.currentDashboard\"\n [showModal$]=\"showEditDashboardModal$\"\n (saveEvent)=\"refreshDashboard()\"\n >\n </valtimo-edit-dashboard-modal>\n</ng-container>\n\n<ng-container renderInPageHeader>\n <ng-template>\n <button\n [attr.data-test-id]=\"testIds.editButton\"\n cdsButton=\"tertiary\"\n [size]=\"(compactMode$ | async) ? 'sm' : 'md'\"\n (click)=\"editDashboard()\"\n >\n {{ 'dashboardManagement.widgets.editButton' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"edit\" size=\"16\"></svg>\n </button>\n </ng-template>\n</ng-container>\n\n<ng-template #addWidgetButton>\n <button cdsButton=\"primary\" [attr.data-test-id]=\"testIds.addWidgetButton\" [disabled]=\"loading$ | async\" (click)=\"addWidget()\">\n {{ 'dashboardManagement.widgets.add' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #viewToggle>\n <cds-tooltip [description]=\"'JSON editor'\">\n <button\n [cdsButton]=\"$buttonTheme()\"\n [attr.data-test-id]=\"testIds.switchViewButton\"\n iconOnly=\"true\"\n (click)=\"switchView()\"\n >\n <svg cdsIcon=\"code\" size=\"16\"></svg>\n </button>\n </cds-tooltip>\n</ng-template>\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 */\nimport {ChangeDetectionStrategy, Component, OnInit, ViewEncapsulation} from '@angular/core';\nimport {AbstractControl, FormBuilder, FormGroup, Validators} from '@angular/forms';\nimport {Router} from '@angular/router';\nimport {ActionItem, ColumnConfig, ViewType} from '@valtimo/components';\nimport {BehaviorSubject, finalize, Observable} from 'rxjs';\nimport {DASHBOARD_MANAGEMENT_TEST_IDS} from '../../constants/dashboard-management.test-ids';\nimport {DashboardItem} from '../../models';\nimport {DashboardManagementService} from '../../services/dashboard-management.service';\n\n@Component({\n standalone: false,\n templateUrl: './dashboard-management.component.html',\n styleUrls: ['./dashboard-management.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class DashboardManagementComponent implements OnInit {\n protected readonly testIds = DASHBOARD_MANAGEMENT_TEST_IDS;\n public readonly deleteRowKey$: BehaviorSubject<string> = new BehaviorSubject('');\n public readonly openModal$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n public readonly showDeleteModal$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n\n public readonly tableData$: Observable<{items: DashboardItem[] | null; loading: boolean}> =\n this.dashboardManagementService.dashboards$;\n public fields: ColumnConfig[] = [\n {\n viewType: ViewType.TEXT,\n key: 'title',\n label: 'dashboardManagement.name',\n },\n {\n viewType: ViewType.TEXT,\n key: 'description',\n label: 'dashboardManagement.description',\n },\n {\n viewType: ViewType.TEXT,\n key: 'key',\n label: 'dashboardManagement.key',\n },\n ];\n public readonly actionItems: ActionItem[] = [\n {\n label: 'interface.delete',\n callback: this.deleteDashboard.bind(this),\n type: 'danger',\n },\n ];\n public form: FormGroup;\n\n constructor(\n private readonly dashboardManagementService: DashboardManagementService,\n private readonly fb: FormBuilder,\n private readonly router: Router\n ) {}\n\n public ngOnInit(): void {\n this.dashboardManagementService.loadData();\n this.form = this.fb.group({\n description: this.fb.control('', [Validators.required]),\n title: this.fb.control('', [Validators.required]),\n });\n }\n\n public closeModal(): void {\n this.openModal$.next(false);\n this.form.reset();\n }\n\n public createDashboard(): void {\n const control: AbstractControl | null = this.form.get('title');\n if (!control || !control.valid) {\n return;\n }\n\n const newDashboard: DashboardItem = this.form.getRawValue();\n this.dashboardManagementService.dispatchAction(\n this.dashboardManagementService.createDashboard(newDashboard).pipe(\n finalize(() => {\n this.closeModal();\n })\n )\n );\n }\n\n public onConfirmEvent(dashboardKey: string): void {\n this.dashboardManagementService.dispatchAction(\n this.dashboardManagementService.deleteDashboard(dashboardKey).pipe(\n finalize(() => {\n this.closeModal();\n })\n )\n );\n }\n\n public getControlInvalid(controlKey: string): boolean {\n const control: AbstractControl | null = this.form.get(controlKey);\n\n if (!control) {\n return true;\n }\n\n return !control.valid && !control.pristine;\n }\n\n public openModal(): void {\n this.openModal$.next(true);\n }\n\n public onRowClick(item: DashboardItem): void {\n this.router.navigate([`/dashboard-management/${item.key}`]);\n }\n\n private deleteDashboard(dashboard: DashboardItem): void {\n this.deleteRowKey$.next(dashboard.key);\n this.showDeleteModal$.next(true);\n }\n}\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\n<ng-container *ngIf=\"tableData$ | async as data\">\n <valtimo-carbon-list\n [actionItems]=\"actionItems\"\n [header]=\"false\"\n [items]=\"data.items\"\n [loading]=\"data.loading\"\n [fields]=\"fields\"\n (rowClicked)=\"onRowClick($event)\"\n class=\"valtimo-dashboard-management__table\"\n >\n <div carbonToolbarContent>\n <ng-container [ngTemplateOutlet]=\"addDashboardButton\"></ng-container>\n </div>\n\n <valtimo-no-results\n [action]=\"addDashboardButton\"\n description=\"{{ 'dashboardManagement.noResults.description' | translate }}\"\n title=\"{{ 'dashboardManagement.noResults.title' | translate }}\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n</ng-container>\n\n<cds-modal\n valtimoCdsModal\n [open]=\"openModal$ | async\"\n showFooter=\"true\"\n title=\"{{ 'dashboardManagement.addDashboard' | translate }}\"\n (close)=\"closeModal()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>\n {{ 'dashboardManagement.addDashboard' | translate }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <form [formGroup]=\"form\" class=\"valtimo-dashboard-management__form\">\n <cds-label [invalid]=\"getControlInvalid('title')\">\n {{ 'dashboardManagement.addModal.name' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.createTitleInput\"\n [attr.modal-primary-focus]=\"true\"\n [invalid]=\"getControlInvalid('title')\"\n formControlName=\"title\"\n cdsText\n placeholder=\"{{ 'dashboardManagement.addModal.namePlaceholder' | translate }}\"\n />\n </cds-label>\n\n <cds-label\n [helperText]=\"'dashboardManagement.addModal.descriptionHelperText' | translate\"\n [invalid]=\"getControlInvalid('description')\"\n >\n {{ 'dashboardManagement.description' | translate }}\n\n <input\n [attr.data-test-id]=\"testIds.createDescriptionInput\"\n [invalid]=\"getControlInvalid('description')\"\n formControlName=\"description\"\n cdsText\n placeholder=\"{{ 'dashboardManagement.addModal.descriptionPlaceholder' | translate }}\"\n />\n </cds-label>\n </form>\n </section>\n\n <cds-modal-footer>\n <button cdsButton=\"ghost\" [attr.data-test-id]=\"testIds.cancelDashboardButton\" (click)=\"closeModal()\">\n {{ 'dashboardManagement.cancel' | translate }}\n </button>\n\n <button\n [attr.data-test-id]=\"testIds.createButton\"\n [disabled]=\"this.form.invalid\"\n cdsButton=\"primary\"\n (click)=\"createDashboard()\"\n >\n {{ 'dashboardManagement.create' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"dashboardManagement.deleteModal.confirm\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"dashboardManagement.deleteModalContent\"\n [outputOnConfirm]=\"deleteRowKey$ | async\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"dashboardManagement.delete\"\n (confirmEvent)=\"onConfirmEvent($event)\"\n></valtimo-confirmation-modal>\n\n<ng-template #addDashboardButton>\n <button [attr.data-test-id]=\"testIds.addButton\" cdsButton=\"primary\" (click)=\"openModal()\">\n {{ 'dashboardManagement.addDashboard' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n</ng-template>\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\nimport {NgModule} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {AuthGuardService} from '@valtimo/security';\nimport {ROLE_ADMIN} from '@valtimo/shared';\nimport {DashboardManagementComponent} from './components/dashboard-management/dashboard-management.component';\nimport {DashboardDetailsComponent} from './components/dashboard-details/dashboard-details.component';\n\nconst routes: Routes = [\n {\n path: 'dashboard-management',\n component: DashboardManagementComponent,\n canActivate: [AuthGuardService],\n data: {title: 'Dashboard configuration', roles: [ROLE_ADMIN]},\n },\n {\n path: 'dashboard-management/:id',\n component: DashboardDetailsComponent,\n canActivate: [AuthGuardService],\n data: {\n title: 'Dashboard details',\n roles: [ROLE_ADMIN],\n customPageTitle: true,\n customPageSubtitle: true,\n },\n },\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule],\n declarations: [],\n})\nexport class DashboardManagementRoutingModule {}\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 */\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {\n CarbonListModule,\n ConfirmationModalModule,\n JsonEditorComponent,\n RenderInPageHeaderDirective,\n SelectModule,\n SpinnerModule,\n ValtimoCdsModalDirective,\n WidgetLayoutInfoComponent,\n} from '@valtimo/components';\nimport {\n ButtonModule,\n DropdownModule,\n IconModule,\n InputModule,\n LayerModule,\n ModalModule,\n NotificationModule,\n} from 'carbon-components-angular';\nimport {DashboardDetailsComponent} from './components/dashboard-details/dashboard-details.component';\nimport {DashboardManagementComponent} from './components/dashboard-management/dashboard-management.component';\nimport {DashboardManagementRoutingModule} from './dashboard-management-routing.module';\nimport {WidgetModalComponent} from './components/widget-modal/widget-modal.component';\nimport {EditDashboardModalComponent} from './components/edit-dashboard-modal/edit-dashboard-modal';\nimport {WidgetTranslatePipeModule} from '@valtimo/dashboard';\nimport {WidgetConfigurationContainerComponent} from './components/widget-configuration-container/widget-configuration-container.component';\n\n@NgModule({\n declarations: [\n DashboardManagementComponent,\n DashboardDetailsComponent,\n WidgetModalComponent,\n EditDashboardModalComponent,\n WidgetConfigurationContainerComponent,\n ],\n imports: [\n ButtonModule,\n CommonModule,\n DashboardManagementRoutingModule,\n DropdownModule,\n InputModule,\n ModalModule,\n ReactiveFormsModule,\n SpinnerModule,\n TranslateModule,\n RenderInPageHeaderDirective,\n ConfirmationModalModule,\n NotificationModule,\n IconModule,\n WidgetTranslatePipeModule,\n CarbonListModule,\n LayerModule,\n ValtimoCdsModalDirective,\n JsonEditorComponent,\n SelectModule,\n WidgetLayoutInfoComponent,\n ],\n exports: [],\n})\nexport class DashboardManagementModule {}\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\n/*\n * Public API Surface of dashboard-management\n */\n\nexport * from './lib/constants/dashboard-management.test-ids';\nexport * from './lib/dashboard-management.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["tap","i1","i2","i3","i4.DashboardManagementService","i6","i7","i8","i9.WidgetConfigurationContainerComponent","i2.DashboardManagementService","i4","i5","i1.DashboardManagementService","i7.WidgetModalComponent","i8.EditDashboardModalComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;AAcG;AAEU,MAAA,6BAA6B,GAAG;;AAE3C,IAAA,SAAS,EAAE,8BAA8B;AACzC,IAAA,gBAAgB,EAAE,qCAAqC;AACvD,IAAA,sBAAsB,EAAE,2CAA2C;AACnE,IAAA,YAAY,EAAE,iCAAiC;AAC/C,IAAA,qBAAqB,EAAE,0CAA0C;;AAEjE,IAAA,UAAU,EAAE,+BAA+B;AAC3C,IAAA,cAAc,EAAE,mCAAmC;AACnD,IAAA,oBAAoB,EAAE,yCAAyC;AAC/D,IAAA,cAAc,EAAE,mCAAmC;AACnD,IAAA,gBAAgB,EAAE,4BAA4B;;AAE9C,IAAA,eAAe,EAAE,oCAAoC;;AAErD,IAAA,gBAAgB,EAAE,qCAAqC;AACvD,IAAA,wBAAwB,EAAE,6CAA6C;AACvE,IAAA,yBAAyB,EAAE,8CAA8C;AACzE,IAAA,cAAc,EAAE,mCAAmC;AACnD,IAAA,gBAAgB,EAAE,qCAAqC;AACvD,IAAA,kBAAkB,EAAE,uCAAuC;AAC3D,IAAA,kBAAkB,EAAE,uCAAuC;;;MCbhD,0BAA0B,CAAA;IAQ9B,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC;AACF,aAAA,GAAG,CAAkB,IAAI,CAAC,kBAAkB;aAC5C,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;AACrD,SAAC,CAAC;AAEH,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,KAAsB,KAAI;AAC/B,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAC,CAAC;aAC/C;YACD,KAAK,EAAE,KAAK,IAAG;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;aACrB;AACF,SAAA,CAAC;;IAGN,WACmB,CAAA,IAAgB,EAChB,aAA4B,EAAA;QAD5B,IAAI,CAAA,IAAA,GAAJ,IAAI;QACJ,IAAa,CAAA,aAAA,GAAb,aAAa;QA1BzB,IAAW,CAAA,WAAA,GAAG,IAAI,eAAe,CAAoD;AAC1F,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,OAAO,EAAE,IAAI;AACd,SAAA,CAAC;AAyBA,QAAA,IAAI,CAAC,kBAAkB,GAAG,CAAA,EAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,yBAAyB;;AAGjG,IAAA,eAAe,CAAC,SAAwB,EAAA;AAC7C,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAgB,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC;;AAGnE,IAAA,gBAAgB,CAAC,UAAgC,EAAA;AACtD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAuB,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC;;AAG1E,IAAA,eAAe,CAAC,SAAwB,EAAA;AAC7C,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAA,CAAA,EAAI,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC;;AAGxF,IAAA,eAAe,CAAC,YAAoB,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAO,CAAA,EAAG,IAAI,CAAC,kBAAkB,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE,CAAC;;AAGtE,IAAA,cAAc,CAAC,YAA8C,EAAA;QAClE;AACG,aAAA,IAAI,CACH,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,EACrC,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;AACrD,SAAC,CAAC,EACF,IAAI,CAAC,CAAC,CAAC,EACP,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;AAE/B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,KAAsB,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAC,CAAC;YAChF,KAAK,EAAE,KAAK,IAAG;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;aACrB;AACF,SAAA,CAAC;;AAGC,IAAA,YAAY,CAAC,YAAoB,EAAA;AACtC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAgB,CAAA,EAAG,IAAI,CAAC,kBAAkB,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE,CAAC;;AAG5E,IAAA,+BAA+B,CAAC,YAAoB,EAAA;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAClB,CAAA,EAAG,IAAI,CAAC,kBAAkB,CAAA,CAAA,EAAI,YAAY,CAAA,qBAAA,CAAuB,CAClE;;IAGI,kCAAkC,CACvC,YAAoB,EACpB,mBAAoC,EAAA;AAEpC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAG,EAAA,IAAI,CAAC,kBAAkB,IAAI,YAAY,CAAA,qBAAA,CAAuB,EACjE,mBAAmB,CACpB;;IAGI,mCAAmC,CACxC,YAAoB,EACpB,oBAA4C,EAAA;AAE5C,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAClB,CAAG,EAAA,IAAI,CAAC,kBAAkB,IAAI,YAAY,CAAA,qBAAA,CAAuB,EACjE,oBAAoB,CACrB;;IAGI,kCAAkC,CACvC,YAAoB,EACpB,mBAAoC,EAAA;QAEpC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAClB,CAAA,EAAG,IAAI,CAAC,kBAAkB,IAAI,YAAY,CAAA,sBAAA,EAAyB,mBAAmB,CAAC,GAAG,EAAE,EAC5F,mBAAmB,CACpB;;IAGI,kCAAkC,CACvC,YAAoB,EACpB,SAAiB,EAAA;AAEjB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CACrB,CAAG,EAAA,IAAI,CAAC,kBAAkB,IAAI,YAAY,CAAA,sBAAA,EAAyB,SAAS,CAAA,CAAE,CAC/E;;IAGI,cAAc,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA0B,CAAG,EAAA,IAAI,CAAC,kBAAkB,CAAsB,oBAAA,CAAA,CAAC;;IAGzF,aAAa,GAAA;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAkB,IAAI,CAAC,kBAAkB,CAAC;;+GA1HrD,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cAFzB,MAAM,EAAA,CAAA,CAAA;;4FAEP,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACxBD;;;;;;;;;;;;;;AAcG;MA6BU,qCAAqC,CAAA;IAMhD,IAAoB,aAAa,CAAC,KAAa,EAAA;AAC7C,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;;IAElC,IAAoB,cAAc,CAAC,KAAa,EAAA;AAC9C,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;;IAEnC,IAAoB,QAAQ,CAAC,aAAsB,EAAA;AACjD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC;;IAErC,IAAoB,oBAAoB,CAAC,yBAAyB,EAAA;AAChE,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,yBAAyB,CAAC;;AAe7D,IAAA,WAAA,CAA6B,aAA4B,EAAA;QAA5B,IAAa,CAAA,aAAA,GAAb,aAAa;AAbzB,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAuB;AAG5D,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAE;AAEnC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAEnD,SAAS,CAAC;AACK,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC;AACjD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC;AAClD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAChD,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,eAAe,CAAgB,IAAI,CAAC;;IAI3E,QAAQ,GAAA;QACb,IAAI,CAAC,sCAAsC,EAAE;QAC7C,IAAI,CAAC,iCAAiC,EAAE;QACxC,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,oCAAoC,EAAE;;IAGtC,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;;IAG3B,sCAAsC,GAAA;AAC5C,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACrB,aAAa,CAAC;AACZ,YAAA,IAAI,CAAC,gBAAgB;AACrB,YAAA,IAAI,CAAC,eAAe;YACpB,IAAI,CAAC,aAAa,CAAC,sBAAsB;YACzC,IAAI,CAAC,aAAa,CAAC,qBAAqB;SACzC;AACE,aAAA,IAAI,CACHA,KAAG,CAAC,CAAC,CAAC,cAAc,EAAE,aAAa,EAAE,qBAAqB,EAAE,oBAAoB,CAAC,KAAI;AACnF,YAAA,IAAI,sBAEH;AAED,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;YAE9B,MAAM,wBAAwB,GAC5B,cAAc;AACd,gBAAA,qBAAqB,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,KAAK,cAAc,CAAC;YAC5E,MAAM,uBAAuB,GAC3B,aAAa;AACb,gBAAA,oBAAoB,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,aAAa,KAAK,aAAa,CAAC;AAE7E,YAAA,IAAI,wBAAwB,IAAI,wBAAwB,CAAC,sBAAsB,EAAE;AAC/E,gBAAA,sBAAsB,GAAG,wBAAwB,CAAC,sBAAsB;;AACnE,iBAAA,IAAI,uBAAuB,IAAI,uBAAuB,CAAC,sBAAsB,EAAE;AACpF,gBAAA,sBAAsB,GAAG,uBAAuB,CAAC,sBAAsB;;YAGzE,IAAI,sBAAsB,EAAE;gBAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,sBAAsB,CAAC;AACnF,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAC,CAAC;AACtD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC;;iBACjC;AACL,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAC,CAAC;;AAEzD,SAAC,CAAC;aAEH,SAAS,EAAE,CACf;;IAGK,iCAAiC,GAAA;AACvC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACrB,aAAa,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CACzF,CAAC,CAAC,GAAG,EAAE,aAAa,EAAE,cAAc,CAAC,KAAI;AACvC,YAAA,MAAM,QAAQ,GAAG,GAAG,EAAE,QAAQ;AAE9B,YAAA,IAAI,CAAC,0BAA0B,EAAE,WAAW,EAAE;YAE9C,IAAI,QAAQ,EAAE;gBACZ,IAAI,cAAc,EAAE;AACjB,oBAAA,QAA8C,CAAC,cAAc,GAAG,cAAc;;qBAC1E,IAAI,aAAa,EAAE;AACvB,oBAAA,QAA6C,CAAC,aAAa,GAAG,aAAa;;gBAG9E,IAAI,CAAC,0BAA0B,GAAG,QAAQ,CAAC,kBAAkB,CAAC,SAAS,CACrE,aAAa,IAAG;AACd,oBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC;AAC7C,iBAAC,CACF;;SAEJ,CACF,CACF;;IAGK,wBAAwB,GAAA;QAC9B,IAAI,CAAC,cAAc,CAAC,GAAG,CACrB,aAAa,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAI;AAClF,YAAA,MAAM,QAAQ,GAAG,GAAG,EAAE,QAAQ;YAE9B,IAAI,QAAQ,EAAE;AACZ,gBAAA,QAAQ,CAAC,QAAQ,GAAG,QAAQ;;SAE/B,CAAC,CACH;;IAGK,oCAAoC,GAAA;QAC1C,IAAI,CAAC,cAAc,CAAC,GAAG,CACrB,aAAa,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS,CACzE,CAAC,CAAC,GAAG,EAAE,oBAAoB,CAAC,KAAI;AAC9B,YAAA,MAAM,QAAQ,GAAG,GAAG,EAAE,QAAQ;AAE9B,YAAA,IAAI,QAAQ,IAAI,oBAAoB,EAAE;AACpC,gBAAA,QAAQ,CAAC,oBAAoB,GAAG,oBAAoB;;SAEvD,CACF,CACF;;+GAvIQ,qCAAqC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAArC,qCAAqC,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,8BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAGgB,gBAAgB,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9ClF,6sBAiBA,EAAA,CAAA,CAAA;;4FD0Ba,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBALjD,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,KAAK,YACP,wCAAwC,EAAA,QAAA,EAAA,6sBAAA,EAAA;kFAOjC,iBAAiB,EAAA,CAAA;sBADjC,SAAS;uBAAC,8BAA8B,EAAE,EAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAC;gBAG7D,aAAa,EAAA,CAAA;sBAAhC;gBAGmB,cAAc,EAAA,CAAA;sBAAjC;gBAGmB,QAAQ,EAAA,CAAA;sBAA3B;gBAGmB,oBAAoB,EAAA,CAAA;sBAAvC;gBAGgB,kBAAkB,EAAA,CAAA;sBAAlC;;;AE7DH;;;;;;;;;;;;;;AAcG;MA8CU,oBAAoB,CAAA;IAO/B,IAAoB,uBAAuB,CAAC,aAA2C,EAAA;QACrF,IAAI,aAAa,EAAE;YACjB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;YACxC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACpC,YAAA,IAAI,CAAC,kBAAkB,CAAC,EAAC,IAAI,EAAE,EAAC,GAAG,EAAE,aAAa,CAAC,aAAa,EAAC,EAAQ,CAAC;AAC1E,YAAA,IAAI,CAAC,mBAAmB,CAAC,EAAC,IAAI,EAAE,EAAC,GAAG,EAAE,aAAa,CAAC,WAAW,EAAC,EAAQ,CAAC;YACzE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC;YACtE,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC;;aACnE;AACL,YAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;AACxC,YAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAgG7C,IAAA,IAAW,KAAK,GAAA;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;;AAE/B,IAAA,IAAW,GAAG,GAAA;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE7B,IAAA,IAAW,UAAU,GAAA;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;;AAEpC,IAAA,IAAW,WAAW,GAAA;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;;AAErC,IAAA,IAAW,GAAG,GAAA;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;;AAG7B,IAAA,WAAA,CACqC,QAAkB,EACpC,EAAe,EACf,gBAAkC,EAClC,mBAA8C,EAC9C,0BAAsD,EACtD,aAA4B,EAC5B,wBAAkD,EAAA;QANhC,IAAQ,CAAA,QAAA,GAAR,QAAQ;QAC1B,IAAE,CAAA,EAAA,GAAF,EAAE;QACF,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAA0B,CAAA,0BAAA,GAA1B,0BAA0B;QAC1B,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;QAvI3B,IAAO,CAAA,OAAA,GAAG,6BAA6B;AAmBtC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAuB;AAEpD,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACnC,YAAA,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACjD,YAAA,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACxD,YAAA,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACzD,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;AACzB,SAAA,CAAC;AAEc,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAC3C,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC;AACxD,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC;QAEzD,IAAgB,CAAA,gBAAA,GAAgC,aAAa,CAAC;AAC5E,YAAA,IAAI,CAAC,0BAA0B,CAAC,cAAc,EAAE;AAChD,YAAA,IAAI,CAAC,sBAAsB;YAC3B,IAAI,CAAC,aAAa,CAAC,qBAAqB;AACxC,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;SACpC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,EACxC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,qBAAqB,CAAC,KAAI;YAC3C,IAAI,qBAAqB,EAAE;AACzB,gBAAA,IAAI,CAAC,yBAAyB,CAAC,WAAW,EAAE,qBAAqB,CAAC;;iBAC7D;gBACL,IAAI,CAAC,2BAA2B,EAAE;;AAEtC,SAAC,CAAC,EACF,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,qBAAqB,EAAE,oBAAoB,CAAC,KAC7D;aACG,MAAM,CAAC,UAAU,IAChB,oBAAoB,CAAC,IAAI,CACvB,mBAAmB,IAAI,mBAAmB,CAAC,aAAa,KAAK,UAAU,CAAC,GAAG,CAC5E;AAEF,aAAA,GAAG,CAAC,UAAU,KAAK;AAClB,YAAA,OAAO,EAAE,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC;AACvE,YAAA,QAAQ,EAAE,qBAAqB,KAAK,UAAU,CAAC,GAAG;YAClD,GAAG,EAAE,UAAU,CAAC,GAAG;SACpB,CAAC,CAAC,CACN,CACF;AAEe,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,eAAe,CAAgB,IAAI,CAAC;AACnE,QAAA,IAAA,CAAA,yBAAyB,GAAG,IAAI,eAAe,CAAgB,IAAI,CAAC;AAEnE,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,eAAe,CAC7D,EAAE,CACH;QAEe,IAAiB,CAAA,iBAAA,GAAgC,aAAa,CAAC;AAC7E,YAAA,IAAI,CAAC,wBAAwB;AAC7B,YAAA,IAAI,CAAC,uBAAuB;AAC5B,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;SACpC,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,CAAC,CAAC,sBAAsB,EAAE,sBAAsB,CAAC,KACnD,sBAAsB,CAAC,GAAG,CAAC,WAAW,KAAK;AACzC,YAAA,OAAO,EAAE,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,cAAc,CAAC;AACnF,YAAA,QAAQ,EAAE,WAAW,CAAC,cAAc,KAAK,sBAAsB;YAC/D,GAAG,EAAE,WAAW,CAAC,cAAc;SAChC,CAAC,CAAC,CACJ,CACF;QAEe,IAA4B,CAAA,4BAAA,GAAwB,aAAa,CAAC;AAChF,YAAA,IAAI,CAAC,wBAAwB;AAC7B,YAAA,IAAI,CAAC,sBAAsB;AAC5B,SAAA,CAAC,CAAC,IAAI,CACL,GAAG,CACD,CAAC,CAAC,sBAAsB,EAAE,qBAAqB,CAAC,KAC9C,sBAAsB,EAAE,MAAM,KAAK,CAAC,IAAI,CAAC,qBAAqB,CACjE,EACD,GAAG,CAAC,2BAA2B,IAAG;YAChC,IAAI,2BAA2B,EAAE;AAC/B,gBAAA,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE;;iBACtB;AACL,gBAAA,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;;SAE7B,CAAC,CACH;QAEe,IAAwB,CAAA,wBAAA,GAAG,IAAI,eAAe,CAAsB;AAClF,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE,EAAE;AACT,SAAA,CAAC;QACc,IAAyB,CAAA,yBAAA,GAAG,IAAI,eAAe,CAAsB;AACnF,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE,EAAE;AACT,SAAA,CAAC;AAEc,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;;IA8BxD,QAAQ,GAAA;QACb,IAAI,CAAC,oBAAoB,EAAE;;IAGtB,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,iBAAiB,EAAE,WAAW,EAAE;;IAGhC,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QAEtB,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACjB,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;AACpC,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;AACvC,SAAC,EAAE,gBAAgB,CAAC,gBAAgB,CAAC;;IAGhC,IAAI,GAAA;QACT,IAAI,CAAC,OAAO,EAAE;AAEd,QAAA,aAAa,CAAC;AACZ,YAAA,IAAI,CAAC,sBAAsB;AAC3B,YAAA,IAAI,CAAC,uBAAuB;AAC5B,YAAA,IAAI,CAAC,yBAAyB;AAC9B,YAAA,IAAI,CAAC,wBAAwB;SAC9B;aACE,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CACD,CAAC,CACC,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACxB,MAAM;AACL,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;AACvB,YAAA,WAAW,EAAE,sBAAsB;AACnC,YAAA,aAAa,EAAE,qBAAqB;AACpC,YAAA,oBAAoB,EAAE,EAAC,GAAG,uBAAuB,CAAC,IAAI,EAAC;AACvD,YAAA,qBAAqB,EAAE,EAAC,GAAG,wBAAwB,CAAC,IAAI,EAAC;AACzD,YAAA,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK;AACpB,SAAA,CAAC,CACH,EACD,SAAS,CAAC,kBAAkB,IAC1B,IAAI,CAAC,IAAI,KAAK;AACZ,cAAE,IAAI,CAAC,0BAA0B,CAAC,kCAAkC,CAChE,IAAI,CAAC,SAAS,CAAC,GAAG,EAClB,kBAAkB;cAEpB,IAAI,CAAC,0BAA0B,CAAC,kCAAkC,CAChE,IAAI,CAAC,SAAS,CAAC,GAAG,EAClB,EAAC,GAAG,kBAAkB,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,EAAC,CAC7C,CACN;AAEF,aAAA,SAAS,CAAC;YACT,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;gBACrB,IAAI,CAAC,UAAU,EAAE;aAClB;YACD,KAAK,EAAE,MAAK;gBACV,IAAI,CAAC,MAAM,EAAE;aACd;AACF,SAAA,CAAC;;IAGC,MAAM,GAAA;QACX,IAAI,CAAC,OAAO,EAAE;AAEd,QAAA,IAAI,CAAC;aACF,kCAAkC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS;AACrE,aAAA,SAAS,CAAC;YACT,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;gBACrB,IAAI,CAAC,UAAU,EAAE;aAClB;YACD,KAAK,EAAE,MAAK;gBACV,IAAI,CAAC,MAAM,EAAE;aACd;AACF,SAAA,CAAC;;AAGC,IAAA,kBAAkB,CAAC,UAAoB,EAAA;QAC5C,IAAI,CAAC,UAAU,EAAE;YACf;;QAGF,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC;QACvD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC;;AAG1C,IAAA,mBAAmB,CAAC,WAAqB,EAAA;QAC9C,IAAI,CAAC,WAAW,EAAE;YAChB;;QAGF,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,GAAG,CAAC;QACzD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,EAAE,GAAG,CAAC;;AAG5C,IAAA,uBAAuB,CAAC,aAAkC,EAAA;AAC/D,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,aAAa,CAAC;;AAG5C,IAAA,wBAAwB,CAAC,aAAkC,EAAA;AAChE,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,aAAa,CAAC;;IAG5C,oBAAoB,GAAA;QAC1B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAG;AACxD,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,SAAC,CAAC;;IAGI,2BAA2B,GAAA;AACjC,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;;IAGhC,yBAAyB,CAC/B,WAAoC,EACpC,qBAA6B,EAAA;AAE7B,QAAA,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,qBAAqB,IAAG;AACxF,YAAA,MAAM,kBAAkB,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,KAAK,qBAAqB,CAAC;AAC3F,YAAA,MAAM,qBAAqB,GAAG,kBAAkB,EAAE,YAAY;YAC9D,MAAM,sBAAsB,GAAG,qBAAqB,CAAC,MAAM,CAAC,WAAW,IAAG;gBACxE,MAAM,qBAAqB,GAAG,WAAW,CAAC,oBAAoB,CAAC,MAAM,CACnE,mBAAmB,IACjB,CAAC,CAAC,qBAAqB,EAAE,IAAI,CAC3B,oBAAoB,IAClB,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC;AAC7C,oBAAA,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAC/C,CACJ;gBACD,OAAO,qBAAqB,CAAC,MAAM,KAAK,WAAW,CAAC,oBAAoB,CAAC,MAAM;AACjF,aAAC,CAAC;AAEF,YAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,sBAAsB,CAAC;AAC5D,SAAC,CAAC;;IAGI,OAAO,GAAA;AACb,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;;IAGb,MAAM,GAAA;AACZ,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;;AAGZ,IAAA,kBAAkB,CAAC,IAAY,EAAA;QACrC,OAAO,CAAA,EAAG,IAAI,CAAE,CAAA,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;;AArS5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,kBAkIrB,QAAQ,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,0BAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAlIP,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,8QC5DjC,ypPAyMA,EAAA,MAAA,EAAA,CAAA,ypCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,cAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,KAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,KAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,MAAA,EAAA,SAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,kDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qCAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAJ,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FD7Ia,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,KAAK,EACP,QAAA,EAAA,sBAAsB,EAGjB,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,ypPAAA,EAAA,MAAA,EAAA,CAAA,ypCAAA,CAAA,EAAA;;0BAoIlC,MAAM;2BAAC,QAAQ;qPA/HF,UAAU,EAAA,CAAA;sBAAzB;gBACe,IAAI,EAAA,CAAA;sBAAnB;gBACe,SAAS,EAAA,CAAA;sBAAxB;gBACe,SAAS,EAAA,CAAA;sBAAxB;gBACmB,uBAAuB,EAAA,CAAA;sBAA1C;gBAagB,SAAS,EAAA,CAAA;sBAAzB;;;AEhFH;;;;;;;;;;;;;;AAcG;MAiCU,2BAA2B,CAAA;AActC,IAAA,IAAW,cAAc,GAAA;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;;AAG5C,IAAA,IAAW,oBAAoB,GAAA;QAC7B,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC;;IAUlD,WACmB,CAAA,EAAe,EACf,0BAAsD,EAAA;QADtD,IAAE,CAAA,EAAA,GAAF,EAAE;QACF,IAA0B,CAAA,0BAAA,GAA1B,0BAA0B;QA9B1B,IAAO,CAAA,OAAA,GAAG,6BAA6B;AAGzC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAuB;AAEpD,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAC3C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAC/C,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AAChD,YAAA,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACjD,YAAA,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACvD,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAe,YAAY,CAAC,cAAc,CAAC;AACzE,SAAA,CAAC;QAUc,IAAuB,CAAA,uBAAA,GAAiB,oBAAoB,CAAC,GAAG,CAAC,KAAK,KAAK;AACzF,YAAA,EAAE,EAAE,KAAK;AACT,YAAA,cAAc,EAAE,8BAA8B,CAAC,KAAK,CAAC;AACtD,SAAA,CAAC,CAAC;;IASI,QAAQ,GAAA;QACb,IAAI,CAAC,oBAAoB,EAAE;;IAGtB,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QAEtB,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;AAChC,SAAC,EAAE,gBAAgB,CAAC,gBAAgB,CAAC;;IAGhC,aAAa,GAAA;QAClB,IAAI,CAAC,OAAO,EAAE;AAEd,QAAA,IAAI,CAAC;AACF,aAAA,eAAe,CAAC;AACf,YAAA,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,KAAK;AAC5C,YAAA,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK;AAChC,YAAA,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG;AACvB,YAAA,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK,IAAI,YAAY,CAAC,cAAc;SAC9F;aACA,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;YACrB,IAAI,CAAC,UAAU,EAAE;AACnB,SAAC,CAAC;;IAGE,oBAAoB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YACnD,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;AAC/D,YAAA,IAAI,CAAC;iBACF,GAAG,CAAC,cAAc;AACnB,kBAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,IAAI,YAAY,CAAC,cAAc,CAAC;;QAG1E,IAAI,CAAC,MAAM,EAAE;;IAGP,oBAAoB,GAAA;QAC1B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAG;YACxD,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,SAAC,CAAC;;IAGI,OAAO,GAAA;AACb,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;;IAGnB,MAAM,GAAA;AACZ,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;;+GAtFjB,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAQ,0BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,4LC/CxC,g0HAgHA,EAAA,MAAA,EAAA,CAAA,yzBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,MAAA,EAAA,SAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,kDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAT,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,wBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,cAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FDjEa,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBARvC,SAAS;+BACE,8BAA8B,EAAA,aAAA,EAGzB,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,KAAK,EAAA,QAAA,EAAA,g0HAAA,EAAA,MAAA,EAAA,CAAA,yzBAAA,CAAA,EAAA;wHAID,UAAU,EAAA,CAAA;sBAAzB;gBACe,SAAS,EAAA,CAAA;sBAAxB;gBACgB,SAAS,EAAA,CAAA;sBAAzB;;;MEVU,yBAAyB,CAAA;AA8FpC,IAAA,WAAA,CACmB,0BAAsD,EACtD,QAAkB,EAClB,WAAwB,EACxB,gBAAkC,EAClC,KAAqB,EACrB,gBAAkC,EAClC,iBAAoC,EAAA;QANpC,IAA0B,CAAA,0BAAA,GAA1B,0BAA0B;QAC1B,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACR,IAAW,CAAA,WAAA,GAAX,WAAW;QACX,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QApGjB,IAAO,CAAA,OAAA,GAAG,6BAA6B;QACnD,IAAS,CAAA,SAAA,GAAoB,QAAQ;AAE5B,QAAA,IAAA,CAAA,WAAW,GAAiB;AAC1C,YAAA;AACE,gBAAA,KAAK,EAAE,MAAM;gBACb,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AACrC,aAAA;AACD,YAAA;AACE,gBAAA,KAAK,EAAE,WAAW;gBAClB,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1C,aAAA;AACD,YAAA;AACE,gBAAA,KAAK,EAAE,QAAQ;gBACf,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AACtC,gBAAA,IAAI,EAAE,QAAQ;AACf,aAAA;SACF;QAEgB,IAAc,CAAA,cAAA,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC;AACjE,QAAA,IAAA,CAAA,yBAAyB,GAAG,IAAI,eAAe,CAAO,IAAI,CAAC;QAC5D,IAAiB,CAAA,iBAAA,GAA0C,aAAa,CAAC;AACvF,YAAA,IAAI,CAAC,cAAc;AACnB,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;AACnC,YAAA,IAAI,CAAC,yBAAyB;SAC/B,CAAC,CAAC,IAAI,CACL,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,EACzF,GAAG,CAAC,CAAC,gBAA+B,KAAI;YACtC,IAAI,CAAC,gBAAgB,EAAE;gBACrB;;YAGF,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAChE,YAAA,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CACzC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,sCAAsC,EAAE;gBACpE,SAAS,EAAE,gBAAgB,CAAC,SAAS;AACrC,gBAAA,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,gBAAgB,CAAC,SAAS,IAAI,EAAE,EAAE,cAAc,CAAC;gBACpF,GAAG,EAAE,gBAAgB,CAAC,GAAG;AAC1B,aAAA,CAAC,CACH;SACF,CAAC,CACH;AAEe,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC;AAC/C,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC;AAC7C,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAE1D,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,eAAe,CAA2B,IAAI,CAAC;QAErF,IAAW,CAAA,WAAA,GAA6B,IAAI;QACpC,IAAW,CAAA,WAAA,GAAkC,aAAa,CAAC;AACzE,YAAA,IAAI,CAAC,cAAc;AACnB,YAAA,IAAI,CAAC,uBAAuB;AAC7B,SAAA,CAAC,CAAC,IAAI,CACL,SAAS,CAAC,CAAC,CAAC,YAAY,EAAE,cAAc,CAAC,KAAI;YAC3C,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,cAAc,EAAE;AACxC,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;gBACxB,OAAO,IAAI,CAAC,0BAA0B,CAAC,+BAA+B,CAAC,YAAY,CAAC;;AAGtF,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;YAEpC,OAAO,IAAI,CAAC,0BAA0B,CAAC,mCAAmC,CACxE,YAAY,EACZ,cAAc,CACf;AACH,SAAC,CAAC,EACF,GAAG,CAAC,CAAC,IAAuB,KAAI;AAC9B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;YACvB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;SACtC,CAAC,CACH;AAEe,QAAA,IAAA,CAAA,gBAAgB,GAA4B,IAAI,CAAC,WAAW,CAAC,IAAI,CAC/E,GAAG,CAAC,CAAC,IAAuB,MAAM;AAChC,YAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC3B,YAAA,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC,CACJ;AAEe,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAChD,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAE7D,QAAA,IAAA,CAAA,wBAAwB,GACtC,IAAI,eAAe,CAAsC,IAAI,CAAC;AAEhD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY;AAElD,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAU,KAAK,CAAC;QAC1C,IAAY,CAAA,YAAA,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,iBAAiB,EAAE,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC;;IAYxF,eAAe,GAAA;QACpB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,EAAE;;IAGX,SAAS,GAAA;AACd,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;AACxC,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;QACzB,IAAI,CAAC,SAAS,EAAE;;IAGX,aAAa,GAAA;QAClB,IAAI,CAAC,sBAAsB,EAAE;;IAGxB,cAAc,GAAA;AACnB,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;;IAGlC,gBAAgB,GAAA;AACrB,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGpC,IAAA,gBAAgB,CAAC,KAAwB,EAAA;AAC9C,QAAA,IAAI,CAAC,KAAK;YAAE;AAEZ,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAGnC,IAAA,UAAU,CAAC,KAAmC,EAAA;QACnD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAC,GAAG,KAAK,EAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM;QACvB,IAAI,CAAC,SAAS,EAAE;;IAGX,UAAU,GAAA;QACf,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAErD,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAAE,IAAI,CAAC,cAAc,EAAE;;AAG9C,IAAA,eAAe,CAAC,KAAmC,EAAA;QACzD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAC,GAAG,KAAK,EAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;QACzB,IAAI,CAAC,SAAS,EAAE;;IAGV,SAAS,GAAA;QACf,IAAI,CAAC,MAAM,GAAG;AACZ,YAAA;gBACE,QAAQ,EAAE,QAAQ,CAAC,IAAI;AACvB,gBAAA,GAAG,EAAE,OAAO;AACZ,gBAAA,KAAK,EAAE,MAAM;AACd,aAAA;SACF;;AAGK,IAAA,YAAY,CAAC,KAAmC,EAAA;QACtD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAC,GAAG,KAAK,EAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;QACzB,IAAI,CAAC,SAAS,EAAE;;IAGV,SAAS,GAAA;AACf,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;IAGpB,sBAAsB,GAAA;AAC5B,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;;+GA5K9B,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAE,0BAAA,EAAA,EAAA,EAAA,KAAA,EAAAV,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAS,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,yECzCtC,y5HAqHA,EAAA,MAAA,EAAA,CAAA,wqCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAT,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,6BAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,cAAA,EAAA,OAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,eAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAW,oBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,WAAA,EAAA,WAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAZ,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FD5Ea,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;iCACI,KAAK,EAAA,aAAA,EAGF,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,y5HAAA,EAAA,MAAA,EAAA,CAAA,wqCAAA,CAAA,EAAA;;;AEvCvC;;;;;;;;;;;;;;AAcG;MAiBU,4BAA4B,CAAA;AAkCvC,IAAA,WAAA,CACmB,0BAAsD,EACtD,EAAe,EACf,MAAc,EAAA;QAFd,IAA0B,CAAA,0BAAA,GAA1B,0BAA0B;QAC1B,IAAE,CAAA,EAAA,GAAF,EAAE;QACF,IAAM,CAAA,MAAA,GAAN,MAAM;QApCN,IAAO,CAAA,OAAA,GAAG,6BAA6B;AAC1C,QAAA,IAAA,CAAA,aAAa,GAA4B,IAAI,eAAe,CAAC,EAAE,CAAC;AAChE,QAAA,IAAA,CAAA,UAAU,GAA6B,IAAI,eAAe,CAAC,KAAK,CAAC;AACjE,QAAA,IAAA,CAAA,gBAAgB,GAA6B,IAAI,eAAe,CAAC,KAAK,CAAC;AAEvE,QAAA,IAAA,CAAA,UAAU,GACxB,IAAI,CAAC,0BAA0B,CAAC,WAAW;AACtC,QAAA,IAAA,CAAA,MAAM,GAAmB;AAC9B,YAAA;gBACE,QAAQ,EAAE,QAAQ,CAAC,IAAI;AACvB,gBAAA,GAAG,EAAE,OAAO;AACZ,gBAAA,KAAK,EAAE,0BAA0B;AAClC,aAAA;AACD,YAAA;gBACE,QAAQ,EAAE,QAAQ,CAAC,IAAI;AACvB,gBAAA,GAAG,EAAE,aAAa;AAClB,gBAAA,KAAK,EAAE,iCAAiC;AACzC,aAAA;AACD,YAAA;gBACE,QAAQ,EAAE,QAAQ,CAAC,IAAI;AACvB,gBAAA,GAAG,EAAE,KAAK;AACV,gBAAA,KAAK,EAAE,yBAAyB;AACjC,aAAA;SACF;AACe,QAAA,IAAA,CAAA,WAAW,GAAiB;AAC1C,YAAA;AACE,gBAAA,KAAK,EAAE,kBAAkB;gBACzB,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;AACzC,gBAAA,IAAI,EAAE,QAAQ;AACf,aAAA;SACF;;IASM,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,0BAA0B,CAAC,QAAQ,EAAE;QAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACxB,YAAA,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvD,YAAA,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAClD,SAAA,CAAC;;IAGG,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;;IAGZ,eAAe,GAAA;QACpB,MAAM,OAAO,GAA2B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;QAC9D,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YAC9B;;QAGF,MAAM,YAAY,GAAkB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAC3D,QAAA,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAC5C,IAAI,CAAC,0BAA0B,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,IAAI,CAChE,QAAQ,CAAC,MAAK;YACZ,IAAI,CAAC,UAAU,EAAE;SAClB,CAAC,CACH,CACF;;AAGI,IAAA,cAAc,CAAC,YAAoB,EAAA;AACxC,QAAA,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAC5C,IAAI,CAAC,0BAA0B,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,IAAI,CAChE,QAAQ,CAAC,MAAK;YACZ,IAAI,CAAC,UAAU,EAAE;SAClB,CAAC,CACH,CACF;;AAGI,IAAA,iBAAiB,CAAC,UAAkB,EAAA;QACzC,MAAM,OAAO,GAA2B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;QAEjE,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,IAAI;;QAGb,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ;;IAGrC,SAAS,GAAA;AACd,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGrB,IAAA,UAAU,CAAC,IAAmB,EAAA;AACnC,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAyB,sBAAA,EAAA,IAAI,CAAC,GAAG,CAAE,CAAA,CAAC,CAAC;;AAGrD,IAAA,eAAe,CAAC,SAAwB,EAAA;QAC9C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACtC,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;;+GAnGvB,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAU,0BAAA,EAAA,EAAA,EAAA,KAAA,EAAAV,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,yEC/BzC,kmIAoHA,EAAA,MAAA,EAAA,CAAA,6vBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,KAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,KAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,MAAA,EAAA,SAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,kDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,iCAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,kCAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,gCAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,eAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,6BAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,cAAA,EAAA,OAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAL,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FDrFa,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAPxC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,KAAK,mBAGA,uBAAuB,CAAC,MAAM,EAChC,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,kmIAAA,EAAA,MAAA,EAAA,CAAA,6vBAAA,CAAA,EAAA;;;AE7BvC;;;;;;;;;;;;;;AAcG;AASH,MAAM,MAAM,GAAW;AACrB,IAAA;AACE,QAAA,IAAI,EAAE,sBAAsB;AAC5B,QAAA,SAAS,EAAE,4BAA4B;QACvC,WAAW,EAAE,CAAC,gBAAgB,CAAC;QAC/B,IAAI,EAAE,EAAC,KAAK,EAAE,yBAAyB,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAC;AAC9D,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,0BAA0B;AAChC,QAAA,SAAS,EAAE,yBAAyB;QACpC,WAAW,EAAE,CAAC,gBAAgB,CAAC;AAC/B,QAAA,IAAI,EAAE;AACJ,YAAA,KAAK,EAAE,mBAAmB;YAC1B,KAAK,EAAE,CAAC,UAAU,CAAC;AACnB,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,kBAAkB,EAAE,IAAI;AACzB,SAAA;AACF,KAAA;CACF;MAOY,gCAAgC,CAAA;+GAAhC,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAhC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gCAAgC,0CAHjC,YAAY,CAAA,EAAA,CAAA,CAAA;gHAGX,gCAAgC,EAAA,OAAA,EAAA,CAJjC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAC5B,YAAY,CAAA,EAAA,CAAA,CAAA;;4FAGX,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAL5C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBACvC,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,YAAY,EAAE,EAAE;AACjB,iBAAA;;;AC/CD;;;;;;;;;;;;;;AAcG;MAgEU,yBAAyB,CAAA;+GAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,iBA9BlC,4BAA4B;YAC5B,yBAAyB;YACzB,oBAAoB;YACpB,2BAA2B;AAC3B,YAAA,qCAAqC,aAGrC,YAAY;YACZ,YAAY;YACZ,gCAAgC;YAChC,cAAc;YACd,WAAW;YACX,WAAW;YACX,mBAAmB;YACnB,aAAa;YACb,eAAe;YACf,2BAA2B;YAC3B,uBAAuB;YACvB,kBAAkB;YAClB,UAAU;YACV,yBAAyB;YACzB,gBAAgB;YAChB,WAAW;YACX,wBAAwB;YACxB,mBAAmB;YACnB,YAAY;YACZ,yBAAyB,CAAA,EAAA,CAAA,CAAA;AAIhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,YAvBlC,YAAY;YACZ,YAAY;YACZ,gCAAgC;YAChC,cAAc;YACd,WAAW;YACX,WAAW;YACX,mBAAmB;YACnB,aAAa;YACb,eAAe;YAEf,uBAAuB;YACvB,kBAAkB;YAClB,UAAU;YACV,yBAAyB;YACzB,gBAAgB;YAChB,WAAW;YAEX,mBAAmB;YACnB,YAAY;YACZ,yBAAyB,CAAA,EAAA,CAAA,CAAA;;4FAIhB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAhCrC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,4BAA4B;wBAC5B,yBAAyB;wBACzB,oBAAoB;wBACpB,2BAA2B;wBAC3B,qCAAqC;AACtC,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,YAAY;wBACZ,gCAAgC;wBAChC,cAAc;wBACd,WAAW;wBACX,WAAW;wBACX,mBAAmB;wBACnB,aAAa;wBACb,eAAe;wBACf,2BAA2B;wBAC3B,uBAAuB;wBACvB,kBAAkB;wBAClB,UAAU;wBACV,yBAAyB;wBACzB,gBAAgB;wBAChB,WAAW;wBACX,wBAAwB;wBACxB,mBAAmB;wBACnB,YAAY;wBACZ,yBAAyB;AAC1B,qBAAA;AACD,oBAAA,OAAO,EAAE,EAAE;AACZ,iBAAA;;;AC7ED;;;;;;;;;;;;;;AAcG;AAEH;;AAEG;;AClBH;;AAEG;;;;"}
|
|
@@ -2,6 +2,7 @@ import { EventEmitter, OnInit } from '@angular/core';
|
|
|
2
2
|
import { BehaviorSubject, Observable } from 'rxjs';
|
|
3
3
|
import { DashboardItem } from '../../models';
|
|
4
4
|
import { FormBuilder } from '@angular/forms';
|
|
5
|
+
import { SelectItem, WidgetLayout } from '@valtimo/components';
|
|
5
6
|
import { DashboardManagementService } from '../../services/dashboard-management.service';
|
|
6
7
|
import { ConfigurationOutput } from '@valtimo/dashboard';
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
@@ -36,9 +37,11 @@ export declare class EditDashboardModalComponent implements OnInit {
|
|
|
36
37
|
readonly editDashboardForm: import("@angular/forms").FormGroup<{
|
|
37
38
|
title: import("@angular/forms").FormControl<string>;
|
|
38
39
|
description: import("@angular/forms").FormControl<string>;
|
|
40
|
+
widgetLayout: import("@angular/forms").FormControl<WidgetLayout>;
|
|
39
41
|
}>;
|
|
40
42
|
get dashboardTitle(): import("@angular/forms").AbstractControl<string, string>;
|
|
41
43
|
get dashboardDescription(): import("@angular/forms").AbstractControl<string, string>;
|
|
44
|
+
readonly widgetLayoutSelectItems: SelectItem[];
|
|
42
45
|
private _openSubscription;
|
|
43
46
|
constructor(fb: FormBuilder, dashboardManagementService: DashboardManagementService);
|
|
44
47
|
ngOnInit(): void;
|
|
@@ -13,6 +13,6 @@ import * as i11 from "@ngx-translate/core";
|
|
|
13
13
|
import * as i12 from "@valtimo/dashboard";
|
|
14
14
|
export declare class DashboardManagementModule {
|
|
15
15
|
static ɵfac: i0.ɵɵFactoryDeclaration<DashboardManagementModule, never>;
|
|
16
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<DashboardManagementModule, [typeof i1.DashboardManagementComponent, typeof i2.DashboardDetailsComponent, typeof i3.WidgetModalComponent, typeof i4.EditDashboardModalComponent, typeof i5.WidgetConfigurationContainerComponent], [typeof i6.ButtonModule, typeof i7.CommonModule, typeof i8.DashboardManagementRoutingModule, typeof i6.DropdownModule, typeof i6.InputModule, typeof i6.ModalModule, typeof i9.ReactiveFormsModule, typeof i10.SpinnerModule, typeof i11.TranslateModule, typeof i10.RenderInPageHeaderDirective, typeof i10.ConfirmationModalModule, typeof i6.NotificationModule, typeof i6.IconModule, typeof i12.WidgetTranslatePipeModule, typeof i10.CarbonListModule, typeof i6.LayerModule, typeof i10.ValtimoCdsModalDirective, typeof i10.JsonEditorComponent], never>;
|
|
16
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<DashboardManagementModule, [typeof i1.DashboardManagementComponent, typeof i2.DashboardDetailsComponent, typeof i3.WidgetModalComponent, typeof i4.EditDashboardModalComponent, typeof i5.WidgetConfigurationContainerComponent], [typeof i6.ButtonModule, typeof i7.CommonModule, typeof i8.DashboardManagementRoutingModule, typeof i6.DropdownModule, typeof i6.InputModule, typeof i6.ModalModule, typeof i9.ReactiveFormsModule, typeof i10.SpinnerModule, typeof i11.TranslateModule, typeof i10.RenderInPageHeaderDirective, typeof i10.ConfirmationModalModule, typeof i6.NotificationModule, typeof i6.IconModule, typeof i12.WidgetTranslatePipeModule, typeof i10.CarbonListModule, typeof i6.LayerModule, typeof i10.ValtimoCdsModalDirective, typeof i10.JsonEditorComponent, typeof i10.SelectModule, typeof i10.WidgetLayoutInfoComponent], never>;
|
|
17
17
|
static ɵinj: i0.ɵɵInjectorDeclaration<DashboardManagementModule>;
|
|
18
18
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { WidgetLayout } from '@valtimo/components';
|
|
1
2
|
export interface DashboardItem {
|
|
2
3
|
description: string;
|
|
3
4
|
key: string;
|
|
@@ -6,4 +7,5 @@ export interface DashboardItem {
|
|
|
6
7
|
createdBy?: string;
|
|
7
8
|
createdOn?: string;
|
|
8
9
|
url?: string;
|
|
10
|
+
widgetLayout?: WidgetLayout;
|
|
9
11
|
}
|