@acorex-platform/module-report-management-client 0.0.57 → 0.0.59

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (15) hide show
  1. package/fesm2022/{acorex-platform-module-report-management-client-acorex-platform-module-report-management-client-DhTbq8K0.mjs → acorex-platform-module-report-management-client-acorex-platform-module-report-management-client-eSjEqt5D.mjs} +22 -18
  2. package/fesm2022/{acorex-platform-module-report-management-client-acorex-platform-module-report-management-client-DhTbq8K0.mjs.map → acorex-platform-module-report-management-client-acorex-platform-module-report-management-client-eSjEqt5D.mjs.map} +1 -1
  3. package/fesm2022/{acorex-platform-module-report-management-client-entity-reports-page-component.provider-DaX9owYf.mjs → acorex-platform-module-report-management-client-entity-reports-page-component.provider-CaxletoS.mjs} +3 -3
  4. package/fesm2022/{acorex-platform-module-report-management-client-entity-reports-page-component.provider-DaX9owYf.mjs.map → acorex-platform-module-report-management-client-entity-reports-page-component.provider-CaxletoS.mjs.map} +1 -1
  5. package/fesm2022/{acorex-platform-module-report-management-client-entity-reports-page.component-1pkBoTlX.mjs → acorex-platform-module-report-management-client-entity-reports-page.component-CK5bCQhm.mjs} +2 -2
  6. package/fesm2022/{acorex-platform-module-report-management-client-entity-reports-page.component-1pkBoTlX.mjs.map → acorex-platform-module-report-management-client-entity-reports-page.component-CK5bCQhm.mjs.map} +1 -1
  7. package/fesm2022/{acorex-platform-module-report-management-client-report-layout-switcher.util-GNdaXlQx.mjs → acorex-platform-module-report-management-client-report-layout-switcher.util-C3OVIaEz.mjs} +2 -2
  8. package/fesm2022/{acorex-platform-module-report-management-client-report-layout-switcher.util-GNdaXlQx.mjs.map → acorex-platform-module-report-management-client-report-layout-switcher.util-C3OVIaEz.mjs.map} +1 -1
  9. package/fesm2022/{acorex-platform-module-report-management-client-report-popup-viewer.component-Bjb6ECKz.mjs → acorex-platform-module-report-management-client-report-popup-viewer.component-CKE8NG5T.mjs} +3 -3
  10. package/fesm2022/{acorex-platform-module-report-management-client-report-popup-viewer.component-Bjb6ECKz.mjs.map → acorex-platform-module-report-management-client-report-popup-viewer.component-CKE8NG5T.mjs.map} +1 -1
  11. package/fesm2022/{acorex-platform-module-report-management-client-report-viewer-page.component-uKCoRWfX.mjs → acorex-platform-module-report-management-client-report-viewer-page.component-CPlbhBa_.mjs} +3 -3
  12. package/fesm2022/{acorex-platform-module-report-management-client-report-viewer-page.component-uKCoRWfX.mjs.map → acorex-platform-module-report-management-client-report-viewer-page.component-CPlbhBa_.mjs.map} +1 -1
  13. package/fesm2022/acorex-platform-module-report-management-client.mjs +1 -1
  14. package/package.json +1 -1
  15. package/types/acorex-platform-module-report-management-client.d.ts +1 -0
@@ -13,8 +13,8 @@ import * as i2$1 from '@angular/common';
13
13
  import { CommonModule } from '@angular/common';
14
14
  import * as i0 from '@angular/core';
15
15
  import { inject, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
16
- import { a as AXPOpenReportViewerCommand, r as resolveReportFilterDefaultValue } from './acorex-platform-module-report-management-client-acorex-platform-module-report-management-client-DhTbq8K0.mjs';
17
- import { A as AXPReportViewerViewModel, r as reportLayoutPageIcon, i as isDistinctLayoutTitle, a as reportLayoutTitleKey, c as AXPReportTableViewComponent, d as AXPReportChartViewComponent, e as AXPReportPdfViewComponent } from './acorex-platform-module-report-management-client-report-layout-switcher.util-GNdaXlQx.mjs';
16
+ import { a as AXPOpenReportViewerCommand, r as resolveReportFilterDefaultValue } from './acorex-platform-module-report-management-client-acorex-platform-module-report-management-client-eSjEqt5D.mjs';
17
+ import { A as AXPReportViewerViewModel, r as reportLayoutPageIcon, i as isDistinctLayoutTitle, a as reportLayoutTitleKey, c as AXPReportTableViewComponent, d as AXPReportChartViewComponent, e as AXPReportPdfViewComponent } from './acorex-platform-module-report-management-client-report-layout-switcher.util-C3OVIaEz.mjs';
18
18
 
19
19
  //#region ----- Imports -----
20
20
  //#endregion
@@ -111,4 +111,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
111
111
  }] });
112
112
 
113
113
  export { AXPReportPopupViewerComponent };
114
- //# sourceMappingURL=acorex-platform-module-report-management-client-report-popup-viewer.component-Bjb6ECKz.mjs.map
114
+ //# sourceMappingURL=acorex-platform-module-report-management-client-report-popup-viewer.component-CKE8NG5T.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-report-management-client-report-popup-viewer.component-Bjb6ECKz.mjs","sources":["../../../../libs/modules/report-management/client/src/lib/features/report-viewer/report-popup-viewer/report-popup-viewer.component.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/report-popup-viewer/report-popup-viewer.component.html"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTabsModule, type AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport type { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport type { AXPLayoutSwitcherOption } from '@acorex-platform/module-report-management-client/contracts';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPOpenReportViewerCommand } from '../../../commands/open-report-viewer.command';\nimport { resolveReportFilterDefaultValue } from '../../../reports/report-parameter.util';\nimport {\n isDistinctLayoutTitle,\n reportLayoutPageIcon,\n reportLayoutTitleKey,\n} from '../report-layout-switcher.util';\nimport { AXPReportViewerViewModel } from '../report-viewer.viewmodel';\nimport { AXPReportChartViewComponent } from '../views/report-chart-view/report-chart-view.component';\nimport { AXPReportPdfViewComponent } from '../views/report-pdf-view/report-pdf-view.component';\nimport { AXPReportTableViewComponent } from '../views/report-table-view/report-table-view.component';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axp-report-popup-viewer',\n templateUrl: './report-popup-viewer.component.html',\n styleUrl: './report-popup-viewer.component.css',\n imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXTabsModule,\n AXTranslationModule,\n AXPStateMessageComponent,\n AXPReportTableViewComponent,\n AXPReportChartViewComponent,\n AXPReportPdfViewComponent,\n ],\n providers: [AXPReportViewerViewModel],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'axp-report-popup-viewer flex h-full min-h-0 flex-1 flex-col overflow-hidden',\n },\n})\nexport class AXPReportPopupViewerComponent extends AXBasePageComponent {\n //#region ----- Popup Data -----\n\n reportId!: string;\n layoutId?: string;\n runId?: string;\n parameters: Record<string, unknown> = {};\n hideColumnFields: string[] = [];\n\n //#endregion\n\n //#region ----- Services & Dependencies -----\n\n protected readonly vm = inject(AXPReportViewerViewModel);\n private readonly openViewer = inject(AXPOpenReportViewerCommand);\n private readonly translateService = inject(AXTranslationService);\n protected readonly layoutPageIcon = reportLayoutPageIcon;\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n const runId = this.runId?.trim();\n if (runId) {\n await this.vm.loadFrozenRun(runId);\n // Table mounts after this tick; nudge so the grid refresh effect sees a ready view child.\n setTimeout(() => this.vm.nudgeFetch());\n return;\n }\n\n await this.vm.loadReport(this.reportId);\n\n if (this.layoutId) {\n this.vm.switchLayout(this.layoutId);\n }\n\n if (this.hideColumnFields.length > 0) {\n this.vm.applyDrillView({ hideColumnFields: this.hideColumnFields });\n }\n\n if (this.parameters && Object.keys(this.parameters).length > 0) {\n const resolvedParameters = Object.fromEntries(\n Object.entries(this.parameters).map(([key, value]) => [key, resolveReportFilterDefaultValue(value)]),\n );\n this.vm.updateFilterContext(resolvedParameters);\n }\n\n await this.vm.executeReport();\n }\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected async openInFullViewer(): Promise<void> {\n if (!this.reportId) {\n return;\n }\n\n const runId = this.runId?.trim() || this.vm.runId()?.trim();\n await this.openViewer.execute({\n reportId: this.reportId,\n ...(runId ? { runId } : {}),\n });\n this.close();\n }\n\n protected getLayoutSwitcherLabel(layout: AXPLayoutSwitcherOption): AXPMultiLanguageString {\n const locale = this.translateService.getActiveLang() || 'en-US';\n const reportTitle = this.vm.reportDefinition()?.title;\n if (isDistinctLayoutTitle(layout.title, reportTitle, locale)) {\n return layout.title ?? reportLayoutTitleKey(layout);\n }\n return reportLayoutTitleKey(layout);\n }\n\n protected handleLayoutSwitch(layoutId: string): void {\n if (this.vm.activeLayoutId() === layoutId) {\n return;\n }\n this.vm.switchLayout(layoutId);\n this.vm.nudgeFetch();\n }\n\n protected handleLayoutTabChanged(event: AXTabStripChangedEvent): void {\n const layout = this.vm.availableLayouts()[event.index];\n if (layout) {\n this.handleLayoutSwitch(layout.id);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","<ax-content class=\"flex min-h-0 flex-1 flex-col overflow-hidden\" *translate=\"let t\">\n <div class=\"__popup-content\">\n <!-- ----- Layout switcher for multi-layout reports ----- -->\n @if (vm.hasMultipleLayouts() && vm.canSwitchLayout()) {\n <div class=\"__layout-switcher mb-3\">\n <ax-tabs\n class=\"__layout-tabs\"\n [look]=\"'with-line'\"\n [location]=\"'bottom'\"\n [fitParent]=\"false\"\n (onActiveTabChanged)=\"handleLayoutTabChanged($event)\"\n >\n @for (layout of vm.availableLayouts(); track layout.id) {\n <ax-tab-item\n [key]=\"layout.id\"\n [text]=\"(getLayoutSwitcherLabel(layout) | translate | async) ?? ''\"\n [active]=\"vm.activeLayoutId() === layout.id\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"layoutPageIcon(layout.icon, layout)\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n }\n </ax-tabs>\n </div>\n }\n <!-- ----- Error or results ----- -->\n @if (vm.hasError()) {\n <axp-state-message\n icon=\"fa-light fa-exclamation-triangle\"\n [title]=\"'@report-management:report-viewer.messages.error.fetch-title'\"\n [description]=\"vm.error() || '@report-management:report-viewer.messages.error.unexpected'\"\n >\n </axp-state-message>\n }\n <!-- ----- Table layout results ----- -->\n @else if (vm.isTableLayout()) {\n <axp-report-table-view class=\"__popup-view\"></axp-report-table-view>\n }\n <!-- ----- Chart layout results ----- -->\n @else if (vm.isChartLayout()) {\n <axp-report-chart-view class=\"__popup-view\"></axp-report-chart-view>\n }\n <!-- ----- PDF layout results ----- -->\n @else if (vm.isPdfLayout()) {\n <axp-report-pdf-view class=\"__popup-view\"></axp-report-pdf-view>\n }\n <!-- ----- Unsupported layout types ----- -->\n @else {\n <axp-state-message\n icon=\"fa-light fa-chart-line\"\n [title]=\"'@report-management:report-viewer.components.report-popup-viewer.unsupported-layout.title'\"\n [description]=\"'@report-management:report-viewer.components.report-popup-viewer.unsupported-layout.description'\"\n >\n </axp-state-message>\n }\n </div>\n</ax-content>\n<ax-footer class=\"__popup-footer\">\n <ax-prefix>\n <ax-button\n look=\"outline\"\n color=\"secondary\"\n [text]=\"'@report-management:report-viewer.actions.open-in-report-viewer.title' | translate | async\"\n (onClick)=\"openInFullViewer()\"\n >\n <ax-suffix>\n <ax-icon icon=\"fa-light fa-file-chart-column\"></ax-icon>\n </ax-suffix>\n </ax-button>\n </ax-prefix>\n <ax-suffix>\n <ax-button\n [text]=\"'@general:actions.close.title' | translate | async\"\n look=\"solid\"\n color=\"default\"\n (onClick)=\"close()\"\n >\n </ax-button>\n </ax-suffix>\n</ax-footer>\n"],"names":["i5"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-report-management-client-report-popup-viewer.component-CKE8NG5T.mjs","sources":["../../../../libs/modules/report-management/client/src/lib/features/report-viewer/report-popup-viewer/report-popup-viewer.component.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/report-popup-viewer/report-popup-viewer.component.html"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTabsModule, type AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport type { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport type { AXPLayoutSwitcherOption } from '@acorex-platform/module-report-management-client/contracts';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPOpenReportViewerCommand } from '../../../commands/open-report-viewer.command';\nimport { resolveReportFilterDefaultValue } from '../../../reports/report-parameter.util';\nimport {\n isDistinctLayoutTitle,\n reportLayoutPageIcon,\n reportLayoutTitleKey,\n} from '../report-layout-switcher.util';\nimport { AXPReportViewerViewModel } from '../report-viewer.viewmodel';\nimport { AXPReportChartViewComponent } from '../views/report-chart-view/report-chart-view.component';\nimport { AXPReportPdfViewComponent } from '../views/report-pdf-view/report-pdf-view.component';\nimport { AXPReportTableViewComponent } from '../views/report-table-view/report-table-view.component';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axp-report-popup-viewer',\n templateUrl: './report-popup-viewer.component.html',\n styleUrl: './report-popup-viewer.component.css',\n imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXTabsModule,\n AXTranslationModule,\n AXPStateMessageComponent,\n AXPReportTableViewComponent,\n AXPReportChartViewComponent,\n AXPReportPdfViewComponent,\n ],\n providers: [AXPReportViewerViewModel],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'axp-report-popup-viewer flex h-full min-h-0 flex-1 flex-col overflow-hidden',\n },\n})\nexport class AXPReportPopupViewerComponent extends AXBasePageComponent {\n //#region ----- Popup Data -----\n\n reportId!: string;\n layoutId?: string;\n runId?: string;\n parameters: Record<string, unknown> = {};\n hideColumnFields: string[] = [];\n\n //#endregion\n\n //#region ----- Services & Dependencies -----\n\n protected readonly vm = inject(AXPReportViewerViewModel);\n private readonly openViewer = inject(AXPOpenReportViewerCommand);\n private readonly translateService = inject(AXTranslationService);\n protected readonly layoutPageIcon = reportLayoutPageIcon;\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n const runId = this.runId?.trim();\n if (runId) {\n await this.vm.loadFrozenRun(runId);\n // Table mounts after this tick; nudge so the grid refresh effect sees a ready view child.\n setTimeout(() => this.vm.nudgeFetch());\n return;\n }\n\n await this.vm.loadReport(this.reportId);\n\n if (this.layoutId) {\n this.vm.switchLayout(this.layoutId);\n }\n\n if (this.hideColumnFields.length > 0) {\n this.vm.applyDrillView({ hideColumnFields: this.hideColumnFields });\n }\n\n if (this.parameters && Object.keys(this.parameters).length > 0) {\n const resolvedParameters = Object.fromEntries(\n Object.entries(this.parameters).map(([key, value]) => [key, resolveReportFilterDefaultValue(value)]),\n );\n this.vm.updateFilterContext(resolvedParameters);\n }\n\n await this.vm.executeReport();\n }\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected async openInFullViewer(): Promise<void> {\n if (!this.reportId) {\n return;\n }\n\n const runId = this.runId?.trim() || this.vm.runId()?.trim();\n await this.openViewer.execute({\n reportId: this.reportId,\n ...(runId ? { runId } : {}),\n });\n this.close();\n }\n\n protected getLayoutSwitcherLabel(layout: AXPLayoutSwitcherOption): AXPMultiLanguageString {\n const locale = this.translateService.getActiveLang() || 'en-US';\n const reportTitle = this.vm.reportDefinition()?.title;\n if (isDistinctLayoutTitle(layout.title, reportTitle, locale)) {\n return layout.title ?? reportLayoutTitleKey(layout);\n }\n return reportLayoutTitleKey(layout);\n }\n\n protected handleLayoutSwitch(layoutId: string): void {\n if (this.vm.activeLayoutId() === layoutId) {\n return;\n }\n this.vm.switchLayout(layoutId);\n this.vm.nudgeFetch();\n }\n\n protected handleLayoutTabChanged(event: AXTabStripChangedEvent): void {\n const layout = this.vm.availableLayouts()[event.index];\n if (layout) {\n this.handleLayoutSwitch(layout.id);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","<ax-content class=\"flex min-h-0 flex-1 flex-col overflow-hidden\" *translate=\"let t\">\n <div class=\"__popup-content\">\n <!-- ----- Layout switcher for multi-layout reports ----- -->\n @if (vm.hasMultipleLayouts() && vm.canSwitchLayout()) {\n <div class=\"__layout-switcher mb-3\">\n <ax-tabs\n class=\"__layout-tabs\"\n [look]=\"'with-line'\"\n [location]=\"'bottom'\"\n [fitParent]=\"false\"\n (onActiveTabChanged)=\"handleLayoutTabChanged($event)\"\n >\n @for (layout of vm.availableLayouts(); track layout.id) {\n <ax-tab-item\n [key]=\"layout.id\"\n [text]=\"(getLayoutSwitcherLabel(layout) | translate | async) ?? ''\"\n [active]=\"vm.activeLayoutId() === layout.id\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"layoutPageIcon(layout.icon, layout)\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n }\n </ax-tabs>\n </div>\n }\n <!-- ----- Error or results ----- -->\n @if (vm.hasError()) {\n <axp-state-message\n icon=\"fa-light fa-exclamation-triangle\"\n [title]=\"'@report-management:report-viewer.messages.error.fetch-title'\"\n [description]=\"vm.error() || '@report-management:report-viewer.messages.error.unexpected'\"\n >\n </axp-state-message>\n }\n <!-- ----- Table layout results ----- -->\n @else if (vm.isTableLayout()) {\n <axp-report-table-view class=\"__popup-view\"></axp-report-table-view>\n }\n <!-- ----- Chart layout results ----- -->\n @else if (vm.isChartLayout()) {\n <axp-report-chart-view class=\"__popup-view\"></axp-report-chart-view>\n }\n <!-- ----- PDF layout results ----- -->\n @else if (vm.isPdfLayout()) {\n <axp-report-pdf-view class=\"__popup-view\"></axp-report-pdf-view>\n }\n <!-- ----- Unsupported layout types ----- -->\n @else {\n <axp-state-message\n icon=\"fa-light fa-chart-line\"\n [title]=\"'@report-management:report-viewer.components.report-popup-viewer.unsupported-layout.title'\"\n [description]=\"'@report-management:report-viewer.components.report-popup-viewer.unsupported-layout.description'\"\n >\n </axp-state-message>\n }\n </div>\n</ax-content>\n<ax-footer class=\"__popup-footer\">\n <ax-prefix>\n <ax-button\n look=\"outline\"\n color=\"secondary\"\n [text]=\"'@report-management:report-viewer.actions.open-in-report-viewer.title' | translate | async\"\n (onClick)=\"openInFullViewer()\"\n >\n <ax-suffix>\n <ax-icon icon=\"fa-light fa-file-chart-column\"></ax-icon>\n </ax-suffix>\n </ax-button>\n </ax-prefix>\n <ax-suffix>\n <ax-button\n [text]=\"'@general:actions.close.title' | translate | async\"\n look=\"solid\"\n color=\"default\"\n (onClick)=\"close()\"\n >\n </ax-button>\n </ax-suffix>\n</ax-footer>\n"],"names":["i5"],"mappings":"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"}
@@ -27,8 +27,8 @@ import { FormsModule } from '@angular/forms';
27
27
  import { ActivatedRoute, NavigationStart } from '@angular/router';
28
28
  import { combineLatest } from 'rxjs';
29
29
  import { filter } from 'rxjs/operators';
30
- import { A as AXPReportViewerViewModel, r as reportLayoutPageIcon, i as isDistinctLayoutTitle, a as reportLayoutTitleKey, b as reportLayoutGlyph, c as AXPReportTableViewComponent, d as AXPReportChartViewComponent, e as AXPReportPdfViewComponent } from './acorex-platform-module-report-management-client-report-layout-switcher.util-GNdaXlQx.mjs';
31
- import { A as AXPReportViewerService, r as resolveReportFilterDefaultValue, q as queryResultToPdfSource } from './acorex-platform-module-report-management-client-acorex-platform-module-report-management-client-DhTbq8K0.mjs';
30
+ import { A as AXPReportViewerViewModel, r as reportLayoutPageIcon, i as isDistinctLayoutTitle, a as reportLayoutTitleKey, b as reportLayoutGlyph, c as AXPReportTableViewComponent, d as AXPReportChartViewComponent, e as AXPReportPdfViewComponent } from './acorex-platform-module-report-management-client-report-layout-switcher.util-C3OVIaEz.mjs';
31
+ import { A as AXPReportViewerService, r as resolveReportFilterDefaultValue, q as queryResultToPdfSource } from './acorex-platform-module-report-management-client-acorex-platform-module-report-management-client-eSjEqt5D.mjs';
32
32
 
33
33
  class AXPReportViewerPageComponent extends AXPPageLayoutBaseComponent {
34
34
  constructor() {
@@ -931,4 +931,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
931
931
  }], ctorParameters: () => [], propDecorators: { reportId: [{ type: i0.Input, args: [{ isSignal: true, alias: "reportId", required: false }] }], reportParameters: [{ type: i0.Input, args: [{ isSignal: true, alias: "reportParameters", required: false }] }], filtersForm: [{ type: i0.ViewChild, args: ['filtersForm', { isSignal: true }] }] } });
932
932
 
933
933
  export { AXPReportViewerPageComponent };
934
- //# sourceMappingURL=acorex-platform-module-report-management-client-report-viewer-page.component-uKCoRWfX.mjs.map
934
+ //# sourceMappingURL=acorex-platform-module-report-management-client-report-viewer-page.component-CPlbhBa_.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-report-management-client-report-viewer-page.component-uKCoRWfX.mjs","sources":["../../../../libs/modules/report-management/client/src/lib/features/report-viewer/report-viewer-page/report-viewer-page.component.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/report-viewer-page/report-viewer-page.component.html"],"sourcesContent":["\nimport { AXPActionMenuItem, AXPBackButton, AXPBreadcrumbItem, AXPContextData, AXPExecuteCommand, AXPGridLayoutOptions, type AXPMultiLanguageString, resolveMultiLanguageString, runtimeQueryPayloadData } from '@acorex-platform/framework-shared/core';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXLoadingDialogModule, AXLoadingDialogService } from '@acorex/components/loading-dialog';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\n\nimport { AXPDeviceService } from '@acorex-platform/framework-client/core';\nimport { AXPLayoutRendererComponent } from '@acorex-platform/framework-client/layout/builder';\nimport {\n AXPStateMessageComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutFooterComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutStartSideComponent,\n} from '@acorex-platform/framework-client/layout/components';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex-platform/framework-client/layout/views';\nimport { AXPLayoutThemeService } from '@acorex-platform/framework-client/themes/shared';\nimport {\n AXPReportManagementFeatureKeys,\n RootConfig,\n type AXPLayoutSwitcherOption,\n} from '@acorex-platform/module-report-management-client/contracts';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n inject,\n input,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, NavigationStart } from '@angular/router';\nimport { combineLatest } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { AXPReportViewerViewModel } from '../report-viewer.viewmodel';\nimport { AXPReportChartViewComponent } from '../views/report-chart-view/report-chart-view.component';\nimport { AXPReportPdfViewComponent } from '../views/report-pdf-view/report-pdf-view.component';\nimport { AXPReportTableViewComponent } from '../views/report-table-view/report-table-view.component';\nimport { AXPReportViewerService } from '../../../reports';\nimport { resolveReportFilterDefaultValue } from '../../../reports/report-parameter.util';\nimport { queryResultToPdfSource } from '../../../reports/report-mapper';\nimport {\n isDistinctLayoutTitle,\n reportLayoutGlyph,\n reportLayoutPageIcon,\n reportLayoutTitleKey,\n} from '../report-layout-switcher.util';\n\n@Component({\n selector: 'axp-report-viewer-page',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n AXButtonModule,\n AXCheckBoxModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXTranslationModule,\n AXBadgeModule,\n AXLoadingDialogModule,\n //\n AXPLayoutRendererComponent,\n AXPPageLayoutComponent,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutBlockComponent,\n AXPReportTableViewComponent,\n AXPThemeLayoutFooterComponent,\n AXPReportChartViewComponent,\n AXPReportPdfViewComponent,\n AXPStateMessageComponent,\n ],\n providers: [\n AXUnsubscriber,\n AXPReportViewerViewModel,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXPReportViewerPageComponent,\n },\n ],\n templateUrl: './report-viewer-page.component.html',\n styleUrls: ['./report-viewer-page.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'axp-report-viewer-page' },\n})\nexport class AXPReportViewerPageComponent extends AXPPageLayoutBaseComponent {\n //#region ---- Dependencies ----\n\n protected override layoutService = inject(AXPLayoutThemeService);\n protected readonly deviceService = inject(AXPDeviceService);\n private readonly route = inject(ActivatedRoute);\n private unsubscriber = inject(AXUnsubscriber);\n private readonly loadingDialog = inject(AXLoadingDialogService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly reportViewerService = inject(AXPReportViewerService);\n private readonly entityService = inject(AXPEntityService);\n\n //#endregion\n\n //#region ---- Inputs ----\n\n reportId = input<string>();\n reportParameters = input<Record<string, any>>({});\n\n //#endregion\n\n //#region ---- ViewChildren ----\n\n private filtersForm = viewChild<AXPLayoutRendererComponent>('filtersForm');\n\n //#endregion\n\n //#region ---- ViewModel ----\n\n protected readonly vm = inject(AXPReportViewerViewModel);\n\n //#endregion\n\n //#region ---- Effects ----\n\n private readonly watchNavigationLoading = effect(() => {\n const isBusy = this.vm.isLoading() || this.vm.isExecuting();\n untracked(() => {\n this.layoutService.setNavigationLoading(isBusy);\n //\n if (isBusy) {\n void this.openContentLoading();\n } else {\n this.closeContentLoading();\n }\n });\n });\n\n private readonly syncFrozenRunUrl = effect(() => {\n const runId = this.vm.runId();\n const frozen = this.vm.isFrozen();\n const queued = this.vm.isBackgroundQueued();\n if (queued) {\n untracked(() => {\n const currentRunId = this.route.snapshot.queryParamMap.get('runId')?.trim();\n if (!currentRunId) {\n return;\n }\n void this.router.navigate([], {\n relativeTo: this.route,\n queryParams: { runId: null },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n });\n return;\n }\n if (!frozen || !runId) {\n return;\n }\n untracked(() => {\n const currentRunId = this.route.snapshot.queryParamMap.get('runId')?.trim();\n if (currentRunId === runId) {\n return;\n }\n void this.router.navigate([], {\n relativeTo: this.route,\n queryParams: { runId },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n this.recompute();\n });\n });\n\n //#endregion\n\n private loadingDialogRef: { close: () => void } | null = null;\n private isDialogOpening = false;\n private lastReportRouteKey: string | null = null;\n\n constructor() {\n super();\n this.destroyRef.onDestroy(() => {\n this.closeContentLoading();\n void this.vm.releaseInlineNotificationWatch();\n });\n }\n\n //#region ---- Computed Properties ----\n\n protected showFiltersPanel = () => this.deviceService.isLarge();\n\n protected showReportDisplay = () =>\n (!this.vm.isBackgroundReportMode() || this.vm.isFrozen()) &&\n (this.deviceService.isLarge() || (this.deviceService.isSmall() && this.vm.hasBeenExecuted()));\n\n private reportsListPath(): string {\n return this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.report.name)\n .createPath();\n }\n\n private isReportViewerUrl(url: string): boolean {\n return url.includes(`/${RootConfig.module.route}/viewer`);\n }\n\n //#endregion\n\n //#region ---- Layout Configurations ----\n\n protected defaultLayout = (): AXPGridLayoutOptions => ({\n positions: {\n sm: { colSpan: 12 },\n md: { colSpan: 6 },\n lg: { colSpan: 12 },\n },\n });\n\n protected compactLayout = (): AXPGridLayoutOptions => ({\n positions: {\n sm: { colSpan: 12 },\n md: { colSpan: 4 },\n lg: { colSpan: 3 },\n },\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n\n this.unsubscriber\n .takeUntilDestroy(this.router.events.pipe(filter((event) => event instanceof NavigationStart)))\n .subscribe((event) => {\n const navigation = event as NavigationStart;\n if (this.isReportViewerUrl(this.router.url) && !this.isReportViewerUrl(navigation.url)) {\n void this.vm.releaseInlineNotificationWatch();\n }\n });\n\n // Reload when reportId or runId changes. Ignore other query params (live filters).\n this.unsubscriber\n .takeUntilDestroy(combineLatest([this.route.paramMap, this.route.queryParamMap]))\n .subscribe(async ([params, queryParams]) => {\n const reportId = params.get('reportId') || queryParams.get('reportId') || this.reportId();\n if (!reportId) {\n return;\n }\n const runId = queryParams.get('runId')?.trim() || '';\n const routeKey = `${reportId}::${runId}`;\n if (routeKey === this.lastReportRouteKey) {\n return;\n }\n this.lastReportRouteKey = routeKey;\n await this.loadReportAndRefresh(reportId);\n });\n }\n\n /**\n * Effect to handle data fetching when chart configuration changes\n */\n\n //#endregion\n\n //#region ---- Helper Methods ----\n\n private async loadReportAndRefresh(reportId: string): Promise<void> {\n const runId = this.route.snapshot.queryParamMap.get('runId')?.trim();\n if (runId) {\n await this.vm.loadReport(reportId);\n await this.vm.loadFrozenRun(runId);\n this.recompute();\n return;\n }\n\n await this.vm.loadReport(reportId);\n\n // Force refresh of page layout (breadcrumbs, title, etc.) after report loads\n this.recompute();\n\n // Handle initial parameters from query string\n const queryParams = this.route.snapshot.queryParams;\n const initialParams = { ...queryParams };\n delete initialParams['reportId'];\n delete initialParams['runId'];\n\n // Parse filter context values coming from URL (they are strings)\n const parsedInitialParams = this.parseFilterContextFromUrl(initialParams);\n\n // Merge with component input parameters (`today` / `{ from, to }` → filter shape)\n const rawParams = { ...parsedInitialParams, ...this.reportParameters() };\n const allParams = Object.fromEntries(\n Object.entries(rawParams).map(([key, value]) => [key, resolveReportFilterDefaultValue(value)]),\n );\n\n if (Object.keys(allParams).length > 0) {\n console.log('Applying initial parameters:', allParams);\n this.vm.updateFilterContext(allParams);\n // Auto-execute if parameters are provided\n setTimeout(async () => {\n await this.vm.executeReport();\n }, 500); // Small delay to ensure form is ready\n }\n }\n\n private async openContentLoading(): Promise<void> {\n if (this.loadingDialogRef || this.isDialogOpening) {\n return;\n }\n\n this.isDialogOpening = true;\n\n try {\n const [title, description, cancelText] = await Promise.all([\n this.translateService.translateAsync('@report-management:report-viewer.messages.loading.in-progress-title'),\n this.translateService.translateAsync(\n '@report-management:report-viewer.messages.loading.in-progress-description',\n ),\n\n this.translateService.translateAsync('@report-management:report-viewer.messages.loading.cancel-button'),\n ]);\n\n this.loadingDialogRef = this.loadingDialog.show({\n title,\n mode: 'indeterminate',\n progressColor: 'primary',\n text: description,\n buttons: [\n {\n text: cancelText,\n color: 'danger',\n onClick: () => {\n this.closeContentLoading();\n this.vm.cancel();\n },\n },\n ],\n });\n } finally {\n this.isDialogOpening = false;\n }\n }\n\n private closeContentLoading(): void {\n if (!this.loadingDialogRef) {\n return;\n }\n\n this.loadingDialogRef.close();\n this.loadingDialogRef = null;\n }\n\n /**\n * Synchronizes filter context to URL query parameters using dot notation\n * @param filterContext The current filter context to sync\n */\n private syncFiltersToUrl(filterContext: AXPContextData): void {\n // Get current query params\n const currentParams = this.route.snapshot.queryParams;\n const reportId = currentParams['reportId'];\n\n // Get all filter keys from current params (excluding reportId and internal fields)\n const currentFilterKeys = new Set<string>();\n Object.keys(currentParams).forEach((key) => {\n if (\n key !== 'reportId' &&\n key !== 'runId' &&\n !key.endsWith('EditorObj') &&\n !key.startsWith('__') &&\n !key.endsWith('EditorValue') &&\n !key.includes('.displayText')\n ) {\n // Extract root key (before first dot) for filter identification\n const rootKey = key.includes('.') ? key.split('.')[0] : key;\n currentFilterKeys.add(rootKey);\n }\n });\n\n // Build new query params - start with current params and remove filter-related ones\n const queryParams: Record<string, string | undefined> = { ...currentParams };\n\n // Remove all filter-related params first (we'll add them back if they have values)\n Object.keys(queryParams).forEach((key) => {\n if (\n key !== 'reportId' &&\n key !== 'runId' &&\n !key.endsWith('EditorObj') &&\n !key.startsWith('__') &&\n !key.endsWith('EditorValue') &&\n !key.includes('.displayText')\n ) {\n delete queryParams[key];\n }\n });\n\n const processedFilterKeys = new Set<string>();\n\n // Add filter params that have values\n Object.keys(filterContext).forEach((key) => {\n // Skip internal editor fields (EditorObj, __EditorValue)\n if (key.endsWith('EditorObj') || key.startsWith('__') || key.endsWith('EditorValue')) {\n return;\n }\n\n processedFilterKeys.add(key);\n const value = filterContext[key];\n\n // Check if value is empty (null, undefined, empty string, or empty array)\n const isEmpty = this.isFilterValueEmpty(value);\n\n if (!isEmpty) {\n const flattened = this.flattenToDotNotation(key, value);\n Object.assign(queryParams, flattened);\n }\n // If empty, we don't add it to queryParams, so it will be removed from URL\n });\n\n // Remove filter keys that are no longer in filterContext\n currentFilterKeys.forEach((filterKey) => {\n if (!processedFilterKeys.has(filterKey)) {\n // This filter was removed - ensure all related params are removed\n Object.keys(currentParams).forEach((paramKey) => {\n if (paramKey === filterKey || paramKey.startsWith(`${filterKey}.`)) {\n delete queryParams[paramKey];\n }\n });\n }\n });\n\n // Preserve reportId / runId if exists\n if (reportId) {\n queryParams['reportId'] = String(reportId);\n } else {\n delete queryParams['reportId'];\n }\n const runId = currentParams['runId'];\n if (runId) {\n queryParams['runId'] = String(runId);\n } else {\n delete queryParams['runId'];\n }\n\n // Update URL without reloading\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: queryParams,\n replaceUrl: true, // Don't add to browser history\n });\n }\n\n /**\n * Checks if a filter value is considered empty\n */\n private isFilterValueEmpty(value: unknown): boolean {\n if (value === null || value === undefined || value === '') {\n return true;\n }\n\n // Check if it's a filter object with empty value\n if (typeof value === 'object' && !Array.isArray(value)) {\n const filterObj = value as any;\n const filterValue = filterObj.value;\n\n if (filterValue === null || filterValue === undefined || filterValue === '') {\n return true;\n }\n\n if (Array.isArray(filterValue) && filterValue.length === 0) {\n return true;\n }\n\n // Check nested object values\n if (typeof filterValue === 'object' && !Array.isArray(filterValue)) {\n const hasAnyValue = Object.values(filterValue).some((v) => v !== null && v !== undefined && v !== '');\n return !hasAnyValue;\n }\n }\n\n // Check if it's an empty array\n if (Array.isArray(value) && value.length === 0) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Flattens filter context to dot notation query parameters\n * Only includes operation.type and value - skips displayText and other fields\n * Example: { operation: { type: 'in' }, value: ['POST', 'GET'] } \n * -> { 'fieldName.operation.type': 'in', 'fieldName.value': 'POST,GET' }\n */\n private flattenToDotNotation(prefix: string, value: unknown): Record<string, string> {\n const result: Record<string, string> = {};\n\n if (value == null) {\n return result;\n }\n\n // Handle filter context object - only extract operation.type and value\n if (typeof value === 'object' && !Array.isArray(value)) {\n const filterObj = value as any;\n\n // Extract operation.type if exists\n if (filterObj.operation?.type) {\n result[`${prefix}.operation.type`] = String(filterObj.operation.type);\n }\n\n // Extract value - handle arrays and primitives\n if (filterObj.value !== undefined && filterObj.value !== null && filterObj.value !== '') {\n if (Array.isArray(filterObj.value)) {\n if (filterObj.value.length > 0) {\n result[`${prefix}.value`] = filterObj.value.map((v: any) => String(v)).join(',');\n }\n } else if (typeof filterObj.value === 'object') {\n // If value is an object, flatten it recursively\n const flattenedValue = this.flattenValueObject(filterObj.value);\n Object.assign(result, flattenedValue);\n } else {\n result[`${prefix}.value`] = String(filterObj.value);\n }\n }\n\n return result;\n }\n\n // Handle primitives directly\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n result[prefix] = String(value);\n return result;\n }\n\n // Handle arrays - join with comma\n if (Array.isArray(value)) {\n if (value.length > 0) {\n result[prefix] = value.map(v => String(v)).join(',');\n }\n return result;\n }\n\n // Fallback: convert to string\n result[prefix] = String(value);\n return result;\n }\n\n /**\n * Flattens a value object (for nested objects in value field)\n */\n private flattenValueObject(obj: any, prefix = ''): Record<string, string> {\n const result: Record<string, string> = {};\n\n if (obj == null || typeof obj !== 'object') {\n return result;\n }\n\n for (const [key, val] of Object.entries(obj)) {\n const newPrefix = prefix ? `${prefix}.${key}` : key;\n\n if (val == null) {\n continue;\n }\n\n if (typeof val === 'string' || typeof val === 'number' || typeof val === 'boolean') {\n result[newPrefix] = String(val);\n } else if (Array.isArray(val)) {\n if (val.length > 0) {\n result[newPrefix] = val.map((v: any) => String(v)).join(',');\n }\n } else if (typeof val === 'object') {\n const flattened = this.flattenValueObject(val, newPrefix);\n Object.assign(result, flattened);\n }\n }\n\n return result;\n }\n\n /**\n * Reconstructs filter context from dot notation query parameters\n * Only parses operation.type and value - ignores other fields\n * Example: { 'fieldName.operation.type': 'in', 'fieldName.value': 'POST,GET' }\n * -> { fieldName: { operation: { type: 'in' }, value: ['POST', 'GET'] } }\n */\n private parseFilterContextFromUrl(params: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, any> = {};\n\n // Filter out reportId and internal editor fields\n const filteredParams: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(params)) {\n // Skip reportId and internal editor fields (EditorObj, __EditorValue, displayText)\n if (\n key !== 'reportId' &&\n key !== 'runId' &&\n !key.endsWith('EditorObj') &&\n !key.startsWith('__') &&\n !key.endsWith('EditorValue') &&\n !key.includes('.displayText')\n ) {\n filteredParams[key] = value;\n }\n }\n\n // Group by root key (before first dot)\n for (const [key, value] of Object.entries(filteredParams)) {\n if (!key.includes('.')) {\n // Simple key without dot notation - skip (we only want operation.type and value)\n continue;\n }\n\n // Split by dot and reconstruct nested structure\n const parts = key.split('.');\n const rootKey = parts[0];\n const path = parts.slice(1);\n\n // Only process operation.type and value paths\n if (path.length === 2 && path[0] === 'operation' && path[1] === 'type') {\n // operation.type\n if (!result[rootKey]) {\n result[rootKey] = { operation: {} };\n }\n if (!result[rootKey].operation) {\n result[rootKey].operation = {};\n }\n result[rootKey].operation.type = String(value);\n } else if (path.length === 1 && path[0] === 'value') {\n // value\n if (!result[rootKey]) {\n result[rootKey] = {};\n }\n result[rootKey].value = this.parseValue(String(value));\n } else if (path.length > 1 && path[0] === 'value') {\n // nested value object (e.g., value.from, value.to for between)\n if (!result[rootKey]) {\n result[rootKey] = {};\n }\n if (!result[rootKey].value) {\n result[rootKey].value = {};\n }\n const valuePath = path.slice(1);\n this.setNestedValue(result[rootKey].value, valuePath, this.parseValue(String(value)));\n }\n }\n\n // Post-process: Convert values to arrays if operation.type is 'in' or 'notIn'\n // Also reconstruct EditorObj for lookup widgets (from value only, no displayText)\n for (const [key, value] of Object.entries(result)) {\n if (value && typeof value === 'object' && value.operation?.type) {\n const operationType = value.operation.type;\n\n // If operation is 'in' or 'notIn', ensure value is an array\n if ((operationType === 'in' || operationType === 'notIn') && typeof value.value === 'string') {\n // Convert comma-separated string to array\n value.value = value.value.split(',').map((v: string) => v.trim()).filter((v: string) => v !== '');\n }\n\n // Reconstruct EditorObj for lookup widgets from value only\n // This is needed because lookup widget expects EditorObj to exist\n if (value.value !== undefined && value.value !== null && value.value !== '') {\n const editorObjKey = `${key}EditorObj`;\n const valueField = 'id'; // Default value field for lookup\n const textField = 'title'; // Default text field for lookup\n\n if (operationType === 'in' || operationType === 'notIn') {\n // Multiple selection: create array of objects with value as both id and title\n const values = Array.isArray(value.value) ? value.value : [value.value];\n result[editorObjKey] = values.map((val: string) => ({\n [valueField]: val,\n [textField]: val // Use value as title since we don't have displayText\n }));\n } else {\n // Single selection: create single object\n result[editorObjKey] = {\n [valueField]: value.value,\n [textField]: value.value // Use value as title since we don't have displayText\n };\n }\n }\n }\n }\n\n return result;\n }\n\n /**\n * Sets a value in a nested object using a path array\n */\n private setNestedValue(obj: any, path: string[], value: unknown): void {\n let current = obj;\n for (let i = 0; i < path.length - 1; i++) {\n const key = path[i];\n if (!current[key] || typeof current[key] !== 'object') {\n current[key] = {};\n }\n current = current[key];\n }\n const lastKey = path[path.length - 1];\n current[lastKey] = value;\n }\n\n /**\n * Parses a string value, handling arrays (comma-separated) and primitives\n */\n private parseValue(value: string): unknown {\n if (value === '') {\n return value;\n }\n\n // Check if it's a comma-separated array\n if (value.includes(',')) {\n return value.split(',').map(v => this.parsePrimitive(v.trim()));\n }\n\n return this.parsePrimitive(value);\n }\n\n /**\n * Parses a primitive value\n * For query params, we keep everything as string to match user requirement\n * Arrays are handled separately in parseValue\n */\n private parsePrimitive(value: string): string {\n return value;\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleFiltersChange(event: AXPContextData): void {\n this.vm.updateFilterContext(event);\n this.syncFiltersToUrl(event);\n }\n\n protected handleFiltersInitiated(event: AXPContextData): void {\n this.vm.updateFilterContext(event);\n }\n\n protected async handleExecuteReport(): Promise<void> {\n if (this.vm.isFrozen() && !this.vm.isBackgroundReportMode()) {\n return;\n }\n const isValid = await this.filtersForm()?.validate();\n if (!isValid?.result) {\n return;\n }\n await this.vm.executeReport();\n this.recompute();\n }\n\n protected async handleGenerateInBackground(): Promise<void> {\n if (this.vm.isFrozen() && !this.vm.isBackgroundReportMode()) {\n return;\n }\n const isValid = await this.filtersForm()?.validate();\n if (!isValid?.result) {\n return;\n }\n await this.vm.generateInBackground();\n this.recompute();\n }\n\n protected canGenerateInBackground(): boolean {\n return (\n this.sessionService.isFeatureEnabled(AXPReportManagementFeatureKeys.BackgroundReports) &&\n !this.vm.isFrozen() &&\n (this.vm.generationMode() === 'choose' || this.vm.generationMode() === 'background')\n );\n }\n\n protected handleRefresh(): void {\n this.vm.refresh();\n }\n\n protected handleClearFilters(): void {\n this.vm.clearFilters();\n\n // Reset form if available\n const form = this.filtersForm();\n if (form) {\n form.reset();\n }\n\n // Clear URL query parameters (preserve reportId if exists)\n const currentParams = this.route.snapshot.queryParams;\n const reportId = currentParams['reportId'];\n const runId = currentParams['runId'];\n\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: {\n ...(reportId ? { reportId } : {}),\n ...(runId ? { runId } : {}),\n },\n replaceUrl: true,\n });\n }\n\n /**\n * Handle download report action\n * Gets PDF data from viewmodel and calls service executeAction method\n */\n protected async handleDownloadReport(): Promise<void> {\n if (!this.vm.isPdfLayout()) {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.download-pdf-only');\n console.warn(warning);\n return;\n }\n\n // Fetch PDF data if not already available\n const pdfData = queryResultToPdfSource(await this.vm.fetchData());\n if (pdfData) {\n await this.reportViewerService.executeAction('download-report', { pdfData });\n } else {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.no-pdf-download');\n console.warn(warning);\n }\n }\n\n /**\n * Handle print report action\n * Gets PDF data from viewmodel and calls service executeAction method\n */\n protected async handlePrintReport(): Promise<void> {\n if (!this.vm.isPdfLayout()) {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.print-pdf-only');\n console.warn(warning);\n return;\n }\n\n // Fetch PDF data if not already available\n const pdfData = queryResultToPdfSource(await this.vm.fetchData());\n if (pdfData) {\n await this.reportViewerService.executeAction('print-report', { pdfData });\n } else {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.no-pdf-print');\n console.warn(warning);\n }\n }\n\n /**\n * Handle export report action\n * Gets report data from viewmodel and calls service executeAction method\n * @param format - Export format (excel, csv, pdf, image)\n */\n protected async handleExportReport(format?: string): Promise<void> {\n if (!format) {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.export-format-required');\n console.warn(warning);\n return;\n }\n\n // Fetch report data\n const result = await this.vm.fetchData();\n const reportData = runtimeQueryPayloadData(result);\n if (reportData == null) {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.no-report-data-export');\n console.warn(warning);\n return;\n }\n\n const layout = this.vm.currentLayout();\n await this.reportViewerService.executeAction('export-report', {\n format,\n reportData,\n layoutDefinition: layout || undefined,\n });\n }\n\n protected readonly layoutPageIcon = reportLayoutPageIcon;\n\n protected getLayoutSelectionLabel(layout: AXPLayoutSwitcherOption): AXPMultiLanguageString {\n const locale = this.translateService.getActiveLang() || 'en-US';\n const reportTitle = this.vm.reportDefinition()?.title;\n if (isDistinctLayoutTitle(layout.title, reportTitle, locale)) {\n return layout.title ?? reportLayoutTitleKey(layout);\n }\n return reportLayoutTitleKey(layout);\n }\n\n protected handleBackgroundLayoutToggle(layoutId: string, selected: boolean): void {\n this.vm.setBackgroundLayoutSelected(layoutId, selected);\n }\n\n //#endregion\n\n //#region ---- Page Configuration Overrides ----\n\n protected override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n const breadcrumbs: AXPBreadcrumbItem[] = [\n {\n name: 'reports',\n title: await this.translateService.translateAsync('@report-management:module.menus.root.title'),\n command: {\n name: 'navigate',\n options: {\n path: this.reportsListPath(),\n },\n },\n },\n ];\n\n const reportDefinition = this.vm.reportDefinition();\n if (reportDefinition) {\n breadcrumbs.push({\n name: 'report-viewer',\n title: reportDefinition.title,\n });\n }\n\n return breadcrumbs;\n }\n\n override async getPageTitle(): Promise<AXPMultiLanguageString> {\n const reportDefinition = this.vm.reportDefinition();\n if (reportDefinition) {\n return reportDefinition.title;\n }\n return await this.translateService.translateAsync(\n '@report-management:report-viewer.components.report-viewer.title',\n );\n }\n\n override async getPageDescription(): Promise<AXPMultiLanguageString | null> {\n const reportDefinition = this.vm.reportDefinition();\n return reportDefinition?.description || null;\n }\n\n protected override getPageIcon(): string | null {\n if (\n (this.vm.isBackgroundReportMode() && !this.vm.isFrozen()) ||\n !this.vm.hasMultipleLayouts() ||\n !this.showReportDisplay()\n ) {\n return null;\n }\n\n const currentLayout = this.vm.currentLayout();\n if (!currentLayout) {\n return null;\n }\n\n return reportLayoutPageIcon(currentLayout.icon, {\n type: currentLayout.layout.type,\n });\n }\n\n protected override async getTitleActions(): Promise<AXPActionMenuItem[]> {\n if (\n (this.vm.isBackgroundReportMode() && !this.vm.isFrozen()) ||\n !this.vm.hasMultipleLayouts() ||\n !this.showReportDisplay()\n ) {\n return [];\n }\n\n const currentLayoutId = this.vm.currentLayout()?.id;\n const reportTitle = this.vm.reportDefinition()?.title;\n const locale = this.translateService.getActiveLang() || 'en-US';\n\n const items: AXPActionMenuItem[] = [];\n for (const layout of this.vm.availableLayouts()) {\n items.push({\n title: await this.resolveLayoutSwitcherTitle(layout, reportTitle, locale),\n icon: reportLayoutGlyph(layout.icon, layout),\n command: {\n name: 'switch-layout',\n metadata: { isLayout: true, layoutId: layout.id, isSelected: layout.id === currentLayoutId },\n },\n });\n }\n\n return items.sort((a, b) =>\n resolveMultiLanguageString(a.title, locale).localeCompare(\n resolveMultiLanguageString(b.title, locale),\n undefined,\n { sensitivity: 'base' },\n ),\n );\n }\n\n private async resolveLayoutSwitcherTitle(\n layout: AXPLayoutSwitcherOption,\n reportTitle: AXPMultiLanguageString | undefined,\n locale: string,\n ): Promise<AXPMultiLanguageString> {\n if (isDistinctLayoutTitle(layout.title, reportTitle, locale)) {\n if (typeof layout.title === 'string' && layout.title.startsWith('@')) {\n return await this.translateService.translateAsync(layout.title);\n }\n if (typeof layout.title === 'object') {\n return this.translateService.resolve(layout.title) || layout.title;\n }\n return layout.title;\n }\n\n return await this.translateService.translateAsync(reportLayoutTitleKey(layout));\n }\n\n override async getBackButton(): Promise<AXPBackButton | null> {\n // On mobile, if report has been executed (showing report), show \"Filters\" as back button\n if (this.deviceService.isSmall() && this.vm.hasBeenExecuted()) {\n return {\n title: await this.translateService.translateAsync('@general:terms.interface.filter.title'),\n };\n }\n\n return {\n title: await this.translateService.translateAsync('@report-management:module.menus.root.title'),\n };\n }\n\n override async onBackButtonClick(): Promise<void> {\n // On mobile, if report has been executed (showing report), go back to filters\n if (this.deviceService.isSmall() && this.vm.hasBeenExecuted()) {\n this.vm.clearExecutionState();\n return;\n }\n\n await this.router.navigateByUrl(this.reportsListPath());\n }\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (this.vm.isBackgroundReportMode() && !this.vm.isFrozen()) {\n return [];\n }\n\n const currentLayout = this.vm.currentLayout();\n if (!currentLayout) {\n return [];\n }\n\n // Get primary actions from service (includes general actions + layout-specific actions)\n const primaryActions = this.reportViewerService.getPrimaryActions(currentLayout);\n\n // Convert AXPReportLayoutAction[] to AXPActionMenuItem[] (remove priority property)\n return primaryActions.map(({ priority, ...action }) => action);\n }\n\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (this.vm.isBackgroundReportMode() && !this.vm.isFrozen()) {\n return [];\n }\n\n const currentLayout = this.vm.currentLayout();\n if (!currentLayout) {\n return [];\n }\n\n const secondaryActions = this.reportViewerService.getSecondaryActions(currentLayout);\n const items = secondaryActions.map(({ priority, ...action }) => action);\n if (this.canGenerateInBackground() && this.vm.generationMode() === 'choose') {\n items.unshift({\n title: '@report-management:report-generation.actions.generate-in-background',\n icon: 'fa-light fa-clock',\n command: { name: 'generate-in-background' },\n });\n }\n return items;\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n // Handle layout switching from title actions\n if (command.metadata?.['isLayout']) {\n const layoutId = command.metadata?.['layoutId'] as string;\n if (layoutId) {\n this.vm.switchLayout(layoutId);\n this.recompute();\n }\n return;\n }\n\n switch (command.name) {\n case 'execute-report':\n await this.handleExecuteReport();\n break;\n case 'generate-in-background':\n await this.handleGenerateInBackground();\n break;\n case 'refresh-report':\n this.handleRefresh();\n break;\n case 'reset-filters':\n this.handleClearFilters();\n break;\n case 'download-report':\n this.handleDownloadReport();\n break;\n case 'print-report':\n this.handlePrintReport();\n break;\n case 'export-report':\n await this.handleExportReport(command.options?.['format'] as string);\n break;\n default:\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.unknown-command', {\n params: { commandName: command.name },\n });\n console.warn(warning);\n break;\n }\n }\n\n //#endregion\n}\n","<axp-page-layout *translate=\"let t\">\n <!-- Left Panel: Filters (Always visible for desktop) -->\n @if (showFiltersPanel()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>\n {{ t('@report-management:report-viewer.components.filters.title') | async }}\n </axp-layout-title>\n </axp-layout-header>\n <axp-layout-content>\n @if (vm.reportDefinition()) {\n <axp-layout-renderer #filtersForm [layout]=\"vm.formDefinition()\" [context]=\"vm.filterContext()\" [look]=\"'card'\"\n (contextChange)=\"handleFiltersChange($event)\" (contextInitiated)=\"handleFiltersInitiated($event)\">\n </axp-layout-renderer>\n <!-- ----- Background report layout multi-select ----- -->\n @if (vm.isBackgroundReportMode() && !vm.isBackgroundQueued() && vm.availableLayouts().length > 0) {\n <div class=\"mt-4 pt-4 border-t\">\n <div class=\"mb-2\">\n <span class=\"text-sm font-medium\">\n {{ t('@report-management:report-generation.components.background-layouts.title') | async }}\n </span>\n </div>\n <p class=\"text-xs opacity-70 mb-3\">\n {{ t('@report-management:report-generation.components.background-layouts.description') | async }}\n </p>\n <div class=\"flex flex-col gap-2\">\n @for (layout of vm.availableLayouts(); track layout.id) {\n <label class=\"flex items-center gap-2 p-2 rounded border cursor-pointer hover:bg-neutral-50\">\n <ax-check-box\n [ngModel]=\"vm.isBackgroundLayoutSelected(layout.id)\"\n (ngModelChange)=\"handleBackgroundLayoutToggle(layout.id, $event)\"\n ></ax-check-box>\n <ax-icon [icon]=\"layoutPageIcon(layout.icon, layout)\"></ax-icon>\n <span class=\"text-sm\">{{ getLayoutSelectionLabel(layout) | translate | async }}</span>\n </label>\n }\n </div>\n </div>\n }\n }\n </axp-layout-content>\n <axp-layout-footer class=\"p-4 border-t\" *translate=\"let t\">\n @if (vm.hasUnappliedFilters()) {\n <div class=\"w-full warning-lightest-surface mb-2 p-2 rounded border border-warning-200\">\n <div class=\"flex items-center gap-2 text-warning-800\">\n <ax-icon class=\"fa-light fa-exclamation-triangle text-sm\"></ax-icon>\n <span class=\"text-xs\">{{\n t('@report-management:report-viewer.components.filters.messages.warning.unapplied') | async\n }}</span>\n </div>\n </div>\n }\n @if (vm.isBackgroundReportMode() && !vm.hasSelectedBackgroundLayouts() && !vm.isBackgroundQueued()) {\n <div class=\"w-full warning-lightest-surface mb-2 p-2 rounded border border-warning-200\">\n <div class=\"flex items-center gap-2 text-warning-800\">\n <ax-icon class=\"fa-light fa-exclamation-triangle text-sm\"></ax-icon>\n <span class=\"text-xs\">{{\n t('@report-management:report-generation.errors.no-layouts-selected') | async\n }}</span>\n </div>\n </div>\n }\n <ax-button class=\"w-full\" [disabled]=\"vm.isBackgroundReportMode() ? vm.isBackgroundGenerateDisabled() : (!vm.canExecute() || vm.areParametersReadonly())\"\n [text]=\"(vm.isBackgroundReportMode()\n ? t('@report-management:report-generation.actions.generate-in-background')\n : t('@report-management:report-viewer.actions.execute.title')) | async\" [color]=\"'primary'\"\n (onClick)=\"execute({ name: 'execute-report' })\">\n <ax-prefix>\n <ax-icon [icon]=\"vm.isBackgroundReportMode() ? 'fa-light fa-clock' : 'fa-light fa-play'\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <!-- ----- Secondary background generate for choose mode ----- -->\n @if (canGenerateInBackground() && vm.generationMode() === 'choose') {\n <ax-button class=\"w-full mt-2\" [disabled]=\"vm.areParametersReadonly()\"\n [text]=\"t('@report-management:report-generation.actions.generate-in-background') | async\" [color]=\"'default'\"\n (onClick)=\"execute({ name: 'generate-in-background' })\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-clock\"></ax-icon>\n </ax-prefix>\n </ax-button>\n }\n </axp-layout-footer>\n </axp-layout-start-side>\n }\n <!-- Main Content: Report Display -->\n <axp-page-content class=\"overflow-auto\">\n @if (vm.isFrozen()) {\n <!-- ----- Frozen run banner ----- -->\n <div class=\"warning-lightest-surface mb-3 p-3 rounded border border-warning-200 text-warning-800 text-sm\">\n {{ t('@report-management:report-generation.banners.frozen') | async }}\n </div>\n }\n @if (vm.hasError()) {\n <!-- Error State -->\n <axp-state-message icon=\"fa-light fa-exclamation-triangle\"\n [title]=\"'@report-management:report-viewer.messages.error.fetch-title'\"\n [description]=\"vm.error() || '@report-management:report-viewer.messages.error.unexpected'\">\n <div slot=\"actions\">\n <ax-button look=\"outline\" color=\"primary\"\n [text]=\"t('@report-management:report-viewer.actions.retry.title') | async\" (onClick)=\"vm.clearError()\">\n <ax-prefix>\n <ax-icon class=\"fa-light fa-refresh\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </axp-state-message>\n } @else if (!vm.reportDefinition()) {\n <!-- No Report Selected State -->\n <axp-state-message icon=\"fa-light fa-chart-line\"\n [title]=\"'@report-management:report-viewer.components.report-viewer.empty-states.no-report.title'\"\n [description]=\"'@report-management:report-viewer.components.report-viewer.empty-states.no-report.description'\">\n <div slot=\"actions\">\n <ax-button look=\"outline\" color=\"primary\"\n [text]=\"t('@report-management:report-viewer.actions.browse-reports.title') | async\">\n <ax-prefix>\n <ax-icon class=\"fa-light fa-folder-open\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </axp-state-message>\n <!-- ----- Background report message state (no live layout preview) ----- -->\n } @else if (vm.isBackgroundReportMode() && !vm.isFrozen()) {\n <!-- ----- Mobile filters and layout selection for background reports ----- -->\n @if (deviceService.isSmall() && !vm.isBackgroundQueued()) {\n <axp-layout-renderer #filtersForm [layout]=\"vm.formDefinition()\" [context]=\"vm.filterContext()\" [look]=\"'fieldset'\"\n (contextChange)=\"handleFiltersChange($event)\" (contextInitiated)=\"handleFiltersInitiated($event)\">\n </axp-layout-renderer>\n @if (vm.availableLayouts().length > 0) {\n <div class=\"mt-4 pt-4 border-t\">\n <div class=\"flex items-center justify-between gap-2 mb-2\">\n <span class=\"text-sm font-medium\">\n {{ t('@report-management:report-generation.components.background-layouts.title') | async }}\n </span>\n </div>\n <p class=\"text-xs opacity-70 mb-3\">\n {{ t('@report-management:report-generation.components.background-layouts.description') | async }}\n </p>\n <div class=\"flex flex-col gap-2\">\n @for (layout of vm.availableLayouts(); track layout.id) {\n <label class=\"flex items-center gap-2 p-2 rounded border cursor-pointer\">\n <ax-check-box\n [ngModel]=\"vm.isBackgroundLayoutSelected(layout.id)\"\n (ngModelChange)=\"handleBackgroundLayoutToggle(layout.id, $event)\"\n ></ax-check-box>\n <ax-icon [icon]=\"layoutPageIcon(layout.icon, layout)\"></ax-icon>\n <span class=\"text-sm\">{{ getLayoutSelectionLabel(layout) | translate | async }}</span>\n </label>\n }\n </div>\n </div>\n }\n }\n @if (vm.isBackgroundQueued()) {\n <axp-state-message icon=\"fa-light fa-clock\"\n [title]=\"'@report-management:report-generation.empty-states.background.queued-title'\"\n [description]=\"'@report-management:report-generation.empty-states.background.queued-description'\">\n </axp-state-message>\n } @else {\n <axp-state-message icon=\"fa-light fa-clock\"\n [title]=\"'@report-management:report-generation.empty-states.background.title'\"\n [description]=\"'@report-management:report-generation.empty-states.background.description'\">\n </axp-state-message>\n }\n } @else {\n <ng-container *ngTemplateOutlet=\"reportDisplay\"></ng-container>\n }\n </axp-page-content>\n</axp-page-layout>\n\n<!-- Desktop: Report Display Area -->\n<ng-template #reportDisplay>\n @if (showReportDisplay()) {\n <!-- Desktop & Mobile: Report Display Area -->\n @if (vm.isTableLayout()) {\n <axp-report-table-view> </axp-report-table-view>\n } @else if (vm.isChartLayout()) {\n <axp-report-chart-view> </axp-report-chart-view>\n } @else if (vm.isPdfLayout()) {\n <axp-report-pdf-view> </axp-report-pdf-view>\n }\n } @else if (vm.reportDefinition()) {\n <!-- Mobile: Show filters -->\n <axp-layout-renderer #filtersForm [layout]=\"vm.formDefinition()\" [context]=\"vm.filterContext()\" [look]=\"'fieldset'\">\n </axp-layout-renderer>\n }\n</ng-template>\n\n<!-- Mobile: Execute Button -->\n@if (deviceService.isSmall() && ((!vm.isBackgroundReportMode() && !vm.hasBeenExecuted()) || (vm.isBackgroundReportMode() && !vm.isBackgroundQueued()))) {\n<axp-page-footer class=\"p-2 border-t\">\n <ax-button class=\"w-full\" [disabled]=\"vm.isBackgroundReportMode() ? vm.isBackgroundGenerateDisabled() : (!vm.canExecute() || vm.areParametersReadonly())\"\n [text]=\"(vm.isBackgroundReportMode()\n ? '@report-management:report-generation.actions.generate-in-background'\n : '@report-management:report-viewer.actions.execute.title') | translate | async\" [color]=\"'primary'\"\n (onClick)=\"execute({ name: 'execute-report' })\">\n <ax-prefix>\n <ax-icon [icon]=\"vm.isBackgroundReportMode() ? 'fa-light fa-clock' : 'fa-light fa-play'\"></ax-icon>\n </ax-prefix>\n </ax-button>\n</axp-page-footer>\n}\n"],"names":["i2","i3","i6","i1"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-report-management-client-report-viewer-page.component-CPlbhBa_.mjs","sources":["../../../../libs/modules/report-management/client/src/lib/features/report-viewer/report-viewer-page/report-viewer-page.component.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/report-viewer-page/report-viewer-page.component.html"],"sourcesContent":["\nimport { AXPActionMenuItem, AXPBackButton, AXPBreadcrumbItem, AXPContextData, AXPExecuteCommand, AXPGridLayoutOptions, type AXPMultiLanguageString, resolveMultiLanguageString, runtimeQueryPayloadData } from '@acorex-platform/framework-shared/core';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXLoadingDialogModule, AXLoadingDialogService } from '@acorex/components/loading-dialog';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\n\nimport { AXPDeviceService } from '@acorex-platform/framework-client/core';\nimport { AXPLayoutRendererComponent } from '@acorex-platform/framework-client/layout/builder';\nimport {\n AXPStateMessageComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutFooterComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutStartSideComponent,\n} from '@acorex-platform/framework-client/layout/components';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex-platform/framework-client/layout/views';\nimport { AXPLayoutThemeService } from '@acorex-platform/framework-client/themes/shared';\nimport {\n AXPReportManagementFeatureKeys,\n RootConfig,\n type AXPLayoutSwitcherOption,\n} from '@acorex-platform/module-report-management-client/contracts';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n inject,\n input,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, NavigationStart } from '@angular/router';\nimport { combineLatest } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { AXPReportViewerViewModel } from '../report-viewer.viewmodel';\nimport { AXPReportChartViewComponent } from '../views/report-chart-view/report-chart-view.component';\nimport { AXPReportPdfViewComponent } from '../views/report-pdf-view/report-pdf-view.component';\nimport { AXPReportTableViewComponent } from '../views/report-table-view/report-table-view.component';\nimport { AXPReportViewerService } from '../../../reports';\nimport { resolveReportFilterDefaultValue } from '../../../reports/report-parameter.util';\nimport { queryResultToPdfSource } from '../../../reports/report-mapper';\nimport {\n isDistinctLayoutTitle,\n reportLayoutGlyph,\n reportLayoutPageIcon,\n reportLayoutTitleKey,\n} from '../report-layout-switcher.util';\n\n@Component({\n selector: 'axp-report-viewer-page',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n AXButtonModule,\n AXCheckBoxModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXTranslationModule,\n AXBadgeModule,\n AXLoadingDialogModule,\n //\n AXPLayoutRendererComponent,\n AXPPageLayoutComponent,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutBlockComponent,\n AXPReportTableViewComponent,\n AXPThemeLayoutFooterComponent,\n AXPReportChartViewComponent,\n AXPReportPdfViewComponent,\n AXPStateMessageComponent,\n ],\n providers: [\n AXUnsubscriber,\n AXPReportViewerViewModel,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXPReportViewerPageComponent,\n },\n ],\n templateUrl: './report-viewer-page.component.html',\n styleUrls: ['./report-viewer-page.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'axp-report-viewer-page' },\n})\nexport class AXPReportViewerPageComponent extends AXPPageLayoutBaseComponent {\n //#region ---- Dependencies ----\n\n protected override layoutService = inject(AXPLayoutThemeService);\n protected readonly deviceService = inject(AXPDeviceService);\n private readonly route = inject(ActivatedRoute);\n private unsubscriber = inject(AXUnsubscriber);\n private readonly loadingDialog = inject(AXLoadingDialogService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly reportViewerService = inject(AXPReportViewerService);\n private readonly entityService = inject(AXPEntityService);\n\n //#endregion\n\n //#region ---- Inputs ----\n\n reportId = input<string>();\n reportParameters = input<Record<string, any>>({});\n\n //#endregion\n\n //#region ---- ViewChildren ----\n\n private filtersForm = viewChild<AXPLayoutRendererComponent>('filtersForm');\n\n //#endregion\n\n //#region ---- ViewModel ----\n\n protected readonly vm = inject(AXPReportViewerViewModel);\n\n //#endregion\n\n //#region ---- Effects ----\n\n private readonly watchNavigationLoading = effect(() => {\n const isBusy = this.vm.isLoading() || this.vm.isExecuting();\n untracked(() => {\n this.layoutService.setNavigationLoading(isBusy);\n //\n if (isBusy) {\n void this.openContentLoading();\n } else {\n this.closeContentLoading();\n }\n });\n });\n\n private readonly syncFrozenRunUrl = effect(() => {\n const runId = this.vm.runId();\n const frozen = this.vm.isFrozen();\n const queued = this.vm.isBackgroundQueued();\n if (queued) {\n untracked(() => {\n const currentRunId = this.route.snapshot.queryParamMap.get('runId')?.trim();\n if (!currentRunId) {\n return;\n }\n void this.router.navigate([], {\n relativeTo: this.route,\n queryParams: { runId: null },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n });\n return;\n }\n if (!frozen || !runId) {\n return;\n }\n untracked(() => {\n const currentRunId = this.route.snapshot.queryParamMap.get('runId')?.trim();\n if (currentRunId === runId) {\n return;\n }\n void this.router.navigate([], {\n relativeTo: this.route,\n queryParams: { runId },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n this.recompute();\n });\n });\n\n //#endregion\n\n private loadingDialogRef: { close: () => void } | null = null;\n private isDialogOpening = false;\n private lastReportRouteKey: string | null = null;\n\n constructor() {\n super();\n this.destroyRef.onDestroy(() => {\n this.closeContentLoading();\n void this.vm.releaseInlineNotificationWatch();\n });\n }\n\n //#region ---- Computed Properties ----\n\n protected showFiltersPanel = () => this.deviceService.isLarge();\n\n protected showReportDisplay = () =>\n (!this.vm.isBackgroundReportMode() || this.vm.isFrozen()) &&\n (this.deviceService.isLarge() || (this.deviceService.isSmall() && this.vm.hasBeenExecuted()));\n\n private reportsListPath(): string {\n return this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.report.name)\n .createPath();\n }\n\n private isReportViewerUrl(url: string): boolean {\n return url.includes(`/${RootConfig.module.route}/viewer`);\n }\n\n //#endregion\n\n //#region ---- Layout Configurations ----\n\n protected defaultLayout = (): AXPGridLayoutOptions => ({\n positions: {\n sm: { colSpan: 12 },\n md: { colSpan: 6 },\n lg: { colSpan: 12 },\n },\n });\n\n protected compactLayout = (): AXPGridLayoutOptions => ({\n positions: {\n sm: { colSpan: 12 },\n md: { colSpan: 4 },\n lg: { colSpan: 3 },\n },\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n\n this.unsubscriber\n .takeUntilDestroy(this.router.events.pipe(filter((event) => event instanceof NavigationStart)))\n .subscribe((event) => {\n const navigation = event as NavigationStart;\n if (this.isReportViewerUrl(this.router.url) && !this.isReportViewerUrl(navigation.url)) {\n void this.vm.releaseInlineNotificationWatch();\n }\n });\n\n // Reload when reportId or runId changes. Ignore other query params (live filters).\n this.unsubscriber\n .takeUntilDestroy(combineLatest([this.route.paramMap, this.route.queryParamMap]))\n .subscribe(async ([params, queryParams]) => {\n const reportId = params.get('reportId') || queryParams.get('reportId') || this.reportId();\n if (!reportId) {\n return;\n }\n const runId = queryParams.get('runId')?.trim() || '';\n const routeKey = `${reportId}::${runId}`;\n if (routeKey === this.lastReportRouteKey) {\n return;\n }\n this.lastReportRouteKey = routeKey;\n await this.loadReportAndRefresh(reportId);\n });\n }\n\n /**\n * Effect to handle data fetching when chart configuration changes\n */\n\n //#endregion\n\n //#region ---- Helper Methods ----\n\n private async loadReportAndRefresh(reportId: string): Promise<void> {\n const runId = this.route.snapshot.queryParamMap.get('runId')?.trim();\n if (runId) {\n await this.vm.loadReport(reportId);\n await this.vm.loadFrozenRun(runId);\n this.recompute();\n return;\n }\n\n await this.vm.loadReport(reportId);\n\n // Force refresh of page layout (breadcrumbs, title, etc.) after report loads\n this.recompute();\n\n // Handle initial parameters from query string\n const queryParams = this.route.snapshot.queryParams;\n const initialParams = { ...queryParams };\n delete initialParams['reportId'];\n delete initialParams['runId'];\n\n // Parse filter context values coming from URL (they are strings)\n const parsedInitialParams = this.parseFilterContextFromUrl(initialParams);\n\n // Merge with component input parameters (`today` / `{ from, to }` → filter shape)\n const rawParams = { ...parsedInitialParams, ...this.reportParameters() };\n const allParams = Object.fromEntries(\n Object.entries(rawParams).map(([key, value]) => [key, resolveReportFilterDefaultValue(value)]),\n );\n\n if (Object.keys(allParams).length > 0) {\n console.log('Applying initial parameters:', allParams);\n this.vm.updateFilterContext(allParams);\n // Auto-execute if parameters are provided\n setTimeout(async () => {\n await this.vm.executeReport();\n }, 500); // Small delay to ensure form is ready\n }\n }\n\n private async openContentLoading(): Promise<void> {\n if (this.loadingDialogRef || this.isDialogOpening) {\n return;\n }\n\n this.isDialogOpening = true;\n\n try {\n const [title, description, cancelText] = await Promise.all([\n this.translateService.translateAsync('@report-management:report-viewer.messages.loading.in-progress-title'),\n this.translateService.translateAsync(\n '@report-management:report-viewer.messages.loading.in-progress-description',\n ),\n\n this.translateService.translateAsync('@report-management:report-viewer.messages.loading.cancel-button'),\n ]);\n\n this.loadingDialogRef = this.loadingDialog.show({\n title,\n mode: 'indeterminate',\n progressColor: 'primary',\n text: description,\n buttons: [\n {\n text: cancelText,\n color: 'danger',\n onClick: () => {\n this.closeContentLoading();\n this.vm.cancel();\n },\n },\n ],\n });\n } finally {\n this.isDialogOpening = false;\n }\n }\n\n private closeContentLoading(): void {\n if (!this.loadingDialogRef) {\n return;\n }\n\n this.loadingDialogRef.close();\n this.loadingDialogRef = null;\n }\n\n /**\n * Synchronizes filter context to URL query parameters using dot notation\n * @param filterContext The current filter context to sync\n */\n private syncFiltersToUrl(filterContext: AXPContextData): void {\n // Get current query params\n const currentParams = this.route.snapshot.queryParams;\n const reportId = currentParams['reportId'];\n\n // Get all filter keys from current params (excluding reportId and internal fields)\n const currentFilterKeys = new Set<string>();\n Object.keys(currentParams).forEach((key) => {\n if (\n key !== 'reportId' &&\n key !== 'runId' &&\n !key.endsWith('EditorObj') &&\n !key.startsWith('__') &&\n !key.endsWith('EditorValue') &&\n !key.includes('.displayText')\n ) {\n // Extract root key (before first dot) for filter identification\n const rootKey = key.includes('.') ? key.split('.')[0] : key;\n currentFilterKeys.add(rootKey);\n }\n });\n\n // Build new query params - start with current params and remove filter-related ones\n const queryParams: Record<string, string | undefined> = { ...currentParams };\n\n // Remove all filter-related params first (we'll add them back if they have values)\n Object.keys(queryParams).forEach((key) => {\n if (\n key !== 'reportId' &&\n key !== 'runId' &&\n !key.endsWith('EditorObj') &&\n !key.startsWith('__') &&\n !key.endsWith('EditorValue') &&\n !key.includes('.displayText')\n ) {\n delete queryParams[key];\n }\n });\n\n const processedFilterKeys = new Set<string>();\n\n // Add filter params that have values\n Object.keys(filterContext).forEach((key) => {\n // Skip internal editor fields (EditorObj, __EditorValue)\n if (key.endsWith('EditorObj') || key.startsWith('__') || key.endsWith('EditorValue')) {\n return;\n }\n\n processedFilterKeys.add(key);\n const value = filterContext[key];\n\n // Check if value is empty (null, undefined, empty string, or empty array)\n const isEmpty = this.isFilterValueEmpty(value);\n\n if (!isEmpty) {\n const flattened = this.flattenToDotNotation(key, value);\n Object.assign(queryParams, flattened);\n }\n // If empty, we don't add it to queryParams, so it will be removed from URL\n });\n\n // Remove filter keys that are no longer in filterContext\n currentFilterKeys.forEach((filterKey) => {\n if (!processedFilterKeys.has(filterKey)) {\n // This filter was removed - ensure all related params are removed\n Object.keys(currentParams).forEach((paramKey) => {\n if (paramKey === filterKey || paramKey.startsWith(`${filterKey}.`)) {\n delete queryParams[paramKey];\n }\n });\n }\n });\n\n // Preserve reportId / runId if exists\n if (reportId) {\n queryParams['reportId'] = String(reportId);\n } else {\n delete queryParams['reportId'];\n }\n const runId = currentParams['runId'];\n if (runId) {\n queryParams['runId'] = String(runId);\n } else {\n delete queryParams['runId'];\n }\n\n // Update URL without reloading\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: queryParams,\n replaceUrl: true, // Don't add to browser history\n });\n }\n\n /**\n * Checks if a filter value is considered empty\n */\n private isFilterValueEmpty(value: unknown): boolean {\n if (value === null || value === undefined || value === '') {\n return true;\n }\n\n // Check if it's a filter object with empty value\n if (typeof value === 'object' && !Array.isArray(value)) {\n const filterObj = value as any;\n const filterValue = filterObj.value;\n\n if (filterValue === null || filterValue === undefined || filterValue === '') {\n return true;\n }\n\n if (Array.isArray(filterValue) && filterValue.length === 0) {\n return true;\n }\n\n // Check nested object values\n if (typeof filterValue === 'object' && !Array.isArray(filterValue)) {\n const hasAnyValue = Object.values(filterValue).some((v) => v !== null && v !== undefined && v !== '');\n return !hasAnyValue;\n }\n }\n\n // Check if it's an empty array\n if (Array.isArray(value) && value.length === 0) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Flattens filter context to dot notation query parameters\n * Only includes operation.type and value - skips displayText and other fields\n * Example: { operation: { type: 'in' }, value: ['POST', 'GET'] } \n * -> { 'fieldName.operation.type': 'in', 'fieldName.value': 'POST,GET' }\n */\n private flattenToDotNotation(prefix: string, value: unknown): Record<string, string> {\n const result: Record<string, string> = {};\n\n if (value == null) {\n return result;\n }\n\n // Handle filter context object - only extract operation.type and value\n if (typeof value === 'object' && !Array.isArray(value)) {\n const filterObj = value as any;\n\n // Extract operation.type if exists\n if (filterObj.operation?.type) {\n result[`${prefix}.operation.type`] = String(filterObj.operation.type);\n }\n\n // Extract value - handle arrays and primitives\n if (filterObj.value !== undefined && filterObj.value !== null && filterObj.value !== '') {\n if (Array.isArray(filterObj.value)) {\n if (filterObj.value.length > 0) {\n result[`${prefix}.value`] = filterObj.value.map((v: any) => String(v)).join(',');\n }\n } else if (typeof filterObj.value === 'object') {\n // If value is an object, flatten it recursively\n const flattenedValue = this.flattenValueObject(filterObj.value);\n Object.assign(result, flattenedValue);\n } else {\n result[`${prefix}.value`] = String(filterObj.value);\n }\n }\n\n return result;\n }\n\n // Handle primitives directly\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n result[prefix] = String(value);\n return result;\n }\n\n // Handle arrays - join with comma\n if (Array.isArray(value)) {\n if (value.length > 0) {\n result[prefix] = value.map(v => String(v)).join(',');\n }\n return result;\n }\n\n // Fallback: convert to string\n result[prefix] = String(value);\n return result;\n }\n\n /**\n * Flattens a value object (for nested objects in value field)\n */\n private flattenValueObject(obj: any, prefix = ''): Record<string, string> {\n const result: Record<string, string> = {};\n\n if (obj == null || typeof obj !== 'object') {\n return result;\n }\n\n for (const [key, val] of Object.entries(obj)) {\n const newPrefix = prefix ? `${prefix}.${key}` : key;\n\n if (val == null) {\n continue;\n }\n\n if (typeof val === 'string' || typeof val === 'number' || typeof val === 'boolean') {\n result[newPrefix] = String(val);\n } else if (Array.isArray(val)) {\n if (val.length > 0) {\n result[newPrefix] = val.map((v: any) => String(v)).join(',');\n }\n } else if (typeof val === 'object') {\n const flattened = this.flattenValueObject(val, newPrefix);\n Object.assign(result, flattened);\n }\n }\n\n return result;\n }\n\n /**\n * Reconstructs filter context from dot notation query parameters\n * Only parses operation.type and value - ignores other fields\n * Example: { 'fieldName.operation.type': 'in', 'fieldName.value': 'POST,GET' }\n * -> { fieldName: { operation: { type: 'in' }, value: ['POST', 'GET'] } }\n */\n private parseFilterContextFromUrl(params: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, any> = {};\n\n // Filter out reportId and internal editor fields\n const filteredParams: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(params)) {\n // Skip reportId and internal editor fields (EditorObj, __EditorValue, displayText)\n if (\n key !== 'reportId' &&\n key !== 'runId' &&\n !key.endsWith('EditorObj') &&\n !key.startsWith('__') &&\n !key.endsWith('EditorValue') &&\n !key.includes('.displayText')\n ) {\n filteredParams[key] = value;\n }\n }\n\n // Group by root key (before first dot)\n for (const [key, value] of Object.entries(filteredParams)) {\n if (!key.includes('.')) {\n // Simple key without dot notation - skip (we only want operation.type and value)\n continue;\n }\n\n // Split by dot and reconstruct nested structure\n const parts = key.split('.');\n const rootKey = parts[0];\n const path = parts.slice(1);\n\n // Only process operation.type and value paths\n if (path.length === 2 && path[0] === 'operation' && path[1] === 'type') {\n // operation.type\n if (!result[rootKey]) {\n result[rootKey] = { operation: {} };\n }\n if (!result[rootKey].operation) {\n result[rootKey].operation = {};\n }\n result[rootKey].operation.type = String(value);\n } else if (path.length === 1 && path[0] === 'value') {\n // value\n if (!result[rootKey]) {\n result[rootKey] = {};\n }\n result[rootKey].value = this.parseValue(String(value));\n } else if (path.length > 1 && path[0] === 'value') {\n // nested value object (e.g., value.from, value.to for between)\n if (!result[rootKey]) {\n result[rootKey] = {};\n }\n if (!result[rootKey].value) {\n result[rootKey].value = {};\n }\n const valuePath = path.slice(1);\n this.setNestedValue(result[rootKey].value, valuePath, this.parseValue(String(value)));\n }\n }\n\n // Post-process: Convert values to arrays if operation.type is 'in' or 'notIn'\n // Also reconstruct EditorObj for lookup widgets (from value only, no displayText)\n for (const [key, value] of Object.entries(result)) {\n if (value && typeof value === 'object' && value.operation?.type) {\n const operationType = value.operation.type;\n\n // If operation is 'in' or 'notIn', ensure value is an array\n if ((operationType === 'in' || operationType === 'notIn') && typeof value.value === 'string') {\n // Convert comma-separated string to array\n value.value = value.value.split(',').map((v: string) => v.trim()).filter((v: string) => v !== '');\n }\n\n // Reconstruct EditorObj for lookup widgets from value only\n // This is needed because lookup widget expects EditorObj to exist\n if (value.value !== undefined && value.value !== null && value.value !== '') {\n const editorObjKey = `${key}EditorObj`;\n const valueField = 'id'; // Default value field for lookup\n const textField = 'title'; // Default text field for lookup\n\n if (operationType === 'in' || operationType === 'notIn') {\n // Multiple selection: create array of objects with value as both id and title\n const values = Array.isArray(value.value) ? value.value : [value.value];\n result[editorObjKey] = values.map((val: string) => ({\n [valueField]: val,\n [textField]: val // Use value as title since we don't have displayText\n }));\n } else {\n // Single selection: create single object\n result[editorObjKey] = {\n [valueField]: value.value,\n [textField]: value.value // Use value as title since we don't have displayText\n };\n }\n }\n }\n }\n\n return result;\n }\n\n /**\n * Sets a value in a nested object using a path array\n */\n private setNestedValue(obj: any, path: string[], value: unknown): void {\n let current = obj;\n for (let i = 0; i < path.length - 1; i++) {\n const key = path[i];\n if (!current[key] || typeof current[key] !== 'object') {\n current[key] = {};\n }\n current = current[key];\n }\n const lastKey = path[path.length - 1];\n current[lastKey] = value;\n }\n\n /**\n * Parses a string value, handling arrays (comma-separated) and primitives\n */\n private parseValue(value: string): unknown {\n if (value === '') {\n return value;\n }\n\n // Check if it's a comma-separated array\n if (value.includes(',')) {\n return value.split(',').map(v => this.parsePrimitive(v.trim()));\n }\n\n return this.parsePrimitive(value);\n }\n\n /**\n * Parses a primitive value\n * For query params, we keep everything as string to match user requirement\n * Arrays are handled separately in parseValue\n */\n private parsePrimitive(value: string): string {\n return value;\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleFiltersChange(event: AXPContextData): void {\n this.vm.updateFilterContext(event);\n this.syncFiltersToUrl(event);\n }\n\n protected handleFiltersInitiated(event: AXPContextData): void {\n this.vm.updateFilterContext(event);\n }\n\n protected async handleExecuteReport(): Promise<void> {\n if (this.vm.isFrozen() && !this.vm.isBackgroundReportMode()) {\n return;\n }\n const isValid = await this.filtersForm()?.validate();\n if (!isValid?.result) {\n return;\n }\n await this.vm.executeReport();\n this.recompute();\n }\n\n protected async handleGenerateInBackground(): Promise<void> {\n if (this.vm.isFrozen() && !this.vm.isBackgroundReportMode()) {\n return;\n }\n const isValid = await this.filtersForm()?.validate();\n if (!isValid?.result) {\n return;\n }\n await this.vm.generateInBackground();\n this.recompute();\n }\n\n protected canGenerateInBackground(): boolean {\n return (\n this.sessionService.isFeatureEnabled(AXPReportManagementFeatureKeys.BackgroundReports) &&\n !this.vm.isFrozen() &&\n (this.vm.generationMode() === 'choose' || this.vm.generationMode() === 'background')\n );\n }\n\n protected handleRefresh(): void {\n this.vm.refresh();\n }\n\n protected handleClearFilters(): void {\n this.vm.clearFilters();\n\n // Reset form if available\n const form = this.filtersForm();\n if (form) {\n form.reset();\n }\n\n // Clear URL query parameters (preserve reportId if exists)\n const currentParams = this.route.snapshot.queryParams;\n const reportId = currentParams['reportId'];\n const runId = currentParams['runId'];\n\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: {\n ...(reportId ? { reportId } : {}),\n ...(runId ? { runId } : {}),\n },\n replaceUrl: true,\n });\n }\n\n /**\n * Handle download report action\n * Gets PDF data from viewmodel and calls service executeAction method\n */\n protected async handleDownloadReport(): Promise<void> {\n if (!this.vm.isPdfLayout()) {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.download-pdf-only');\n console.warn(warning);\n return;\n }\n\n // Fetch PDF data if not already available\n const pdfData = queryResultToPdfSource(await this.vm.fetchData());\n if (pdfData) {\n await this.reportViewerService.executeAction('download-report', { pdfData });\n } else {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.no-pdf-download');\n console.warn(warning);\n }\n }\n\n /**\n * Handle print report action\n * Gets PDF data from viewmodel and calls service executeAction method\n */\n protected async handlePrintReport(): Promise<void> {\n if (!this.vm.isPdfLayout()) {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.print-pdf-only');\n console.warn(warning);\n return;\n }\n\n // Fetch PDF data if not already available\n const pdfData = queryResultToPdfSource(await this.vm.fetchData());\n if (pdfData) {\n await this.reportViewerService.executeAction('print-report', { pdfData });\n } else {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.no-pdf-print');\n console.warn(warning);\n }\n }\n\n /**\n * Handle export report action\n * Gets report data from viewmodel and calls service executeAction method\n * @param format - Export format (excel, csv, pdf, image)\n */\n protected async handleExportReport(format?: string): Promise<void> {\n if (!format) {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.export-format-required');\n console.warn(warning);\n return;\n }\n\n // Fetch report data\n const result = await this.vm.fetchData();\n const reportData = runtimeQueryPayloadData(result);\n if (reportData == null) {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.no-report-data-export');\n console.warn(warning);\n return;\n }\n\n const layout = this.vm.currentLayout();\n await this.reportViewerService.executeAction('export-report', {\n format,\n reportData,\n layoutDefinition: layout || undefined,\n });\n }\n\n protected readonly layoutPageIcon = reportLayoutPageIcon;\n\n protected getLayoutSelectionLabel(layout: AXPLayoutSwitcherOption): AXPMultiLanguageString {\n const locale = this.translateService.getActiveLang() || 'en-US';\n const reportTitle = this.vm.reportDefinition()?.title;\n if (isDistinctLayoutTitle(layout.title, reportTitle, locale)) {\n return layout.title ?? reportLayoutTitleKey(layout);\n }\n return reportLayoutTitleKey(layout);\n }\n\n protected handleBackgroundLayoutToggle(layoutId: string, selected: boolean): void {\n this.vm.setBackgroundLayoutSelected(layoutId, selected);\n }\n\n //#endregion\n\n //#region ---- Page Configuration Overrides ----\n\n protected override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n const breadcrumbs: AXPBreadcrumbItem[] = [\n {\n name: 'reports',\n title: await this.translateService.translateAsync('@report-management:module.menus.root.title'),\n command: {\n name: 'navigate',\n options: {\n path: this.reportsListPath(),\n },\n },\n },\n ];\n\n const reportDefinition = this.vm.reportDefinition();\n if (reportDefinition) {\n breadcrumbs.push({\n name: 'report-viewer',\n title: reportDefinition.title,\n });\n }\n\n return breadcrumbs;\n }\n\n override async getPageTitle(): Promise<AXPMultiLanguageString> {\n const reportDefinition = this.vm.reportDefinition();\n if (reportDefinition) {\n return reportDefinition.title;\n }\n return await this.translateService.translateAsync(\n '@report-management:report-viewer.components.report-viewer.title',\n );\n }\n\n override async getPageDescription(): Promise<AXPMultiLanguageString | null> {\n const reportDefinition = this.vm.reportDefinition();\n return reportDefinition?.description || null;\n }\n\n protected override getPageIcon(): string | null {\n if (\n (this.vm.isBackgroundReportMode() && !this.vm.isFrozen()) ||\n !this.vm.hasMultipleLayouts() ||\n !this.showReportDisplay()\n ) {\n return null;\n }\n\n const currentLayout = this.vm.currentLayout();\n if (!currentLayout) {\n return null;\n }\n\n return reportLayoutPageIcon(currentLayout.icon, {\n type: currentLayout.layout.type,\n });\n }\n\n protected override async getTitleActions(): Promise<AXPActionMenuItem[]> {\n if (\n (this.vm.isBackgroundReportMode() && !this.vm.isFrozen()) ||\n !this.vm.hasMultipleLayouts() ||\n !this.showReportDisplay()\n ) {\n return [];\n }\n\n const currentLayoutId = this.vm.currentLayout()?.id;\n const reportTitle = this.vm.reportDefinition()?.title;\n const locale = this.translateService.getActiveLang() || 'en-US';\n\n const items: AXPActionMenuItem[] = [];\n for (const layout of this.vm.availableLayouts()) {\n items.push({\n title: await this.resolveLayoutSwitcherTitle(layout, reportTitle, locale),\n icon: reportLayoutGlyph(layout.icon, layout),\n command: {\n name: 'switch-layout',\n metadata: { isLayout: true, layoutId: layout.id, isSelected: layout.id === currentLayoutId },\n },\n });\n }\n\n return items.sort((a, b) =>\n resolveMultiLanguageString(a.title, locale).localeCompare(\n resolveMultiLanguageString(b.title, locale),\n undefined,\n { sensitivity: 'base' },\n ),\n );\n }\n\n private async resolveLayoutSwitcherTitle(\n layout: AXPLayoutSwitcherOption,\n reportTitle: AXPMultiLanguageString | undefined,\n locale: string,\n ): Promise<AXPMultiLanguageString> {\n if (isDistinctLayoutTitle(layout.title, reportTitle, locale)) {\n if (typeof layout.title === 'string' && layout.title.startsWith('@')) {\n return await this.translateService.translateAsync(layout.title);\n }\n if (typeof layout.title === 'object') {\n return this.translateService.resolve(layout.title) || layout.title;\n }\n return layout.title;\n }\n\n return await this.translateService.translateAsync(reportLayoutTitleKey(layout));\n }\n\n override async getBackButton(): Promise<AXPBackButton | null> {\n // On mobile, if report has been executed (showing report), show \"Filters\" as back button\n if (this.deviceService.isSmall() && this.vm.hasBeenExecuted()) {\n return {\n title: await this.translateService.translateAsync('@general:terms.interface.filter.title'),\n };\n }\n\n return {\n title: await this.translateService.translateAsync('@report-management:module.menus.root.title'),\n };\n }\n\n override async onBackButtonClick(): Promise<void> {\n // On mobile, if report has been executed (showing report), go back to filters\n if (this.deviceService.isSmall() && this.vm.hasBeenExecuted()) {\n this.vm.clearExecutionState();\n return;\n }\n\n await this.router.navigateByUrl(this.reportsListPath());\n }\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (this.vm.isBackgroundReportMode() && !this.vm.isFrozen()) {\n return [];\n }\n\n const currentLayout = this.vm.currentLayout();\n if (!currentLayout) {\n return [];\n }\n\n // Get primary actions from service (includes general actions + layout-specific actions)\n const primaryActions = this.reportViewerService.getPrimaryActions(currentLayout);\n\n // Convert AXPReportLayoutAction[] to AXPActionMenuItem[] (remove priority property)\n return primaryActions.map(({ priority, ...action }) => action);\n }\n\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (this.vm.isBackgroundReportMode() && !this.vm.isFrozen()) {\n return [];\n }\n\n const currentLayout = this.vm.currentLayout();\n if (!currentLayout) {\n return [];\n }\n\n const secondaryActions = this.reportViewerService.getSecondaryActions(currentLayout);\n const items = secondaryActions.map(({ priority, ...action }) => action);\n if (this.canGenerateInBackground() && this.vm.generationMode() === 'choose') {\n items.unshift({\n title: '@report-management:report-generation.actions.generate-in-background',\n icon: 'fa-light fa-clock',\n command: { name: 'generate-in-background' },\n });\n }\n return items;\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n // Handle layout switching from title actions\n if (command.metadata?.['isLayout']) {\n const layoutId = command.metadata?.['layoutId'] as string;\n if (layoutId) {\n this.vm.switchLayout(layoutId);\n this.recompute();\n }\n return;\n }\n\n switch (command.name) {\n case 'execute-report':\n await this.handleExecuteReport();\n break;\n case 'generate-in-background':\n await this.handleGenerateInBackground();\n break;\n case 'refresh-report':\n this.handleRefresh();\n break;\n case 'reset-filters':\n this.handleClearFilters();\n break;\n case 'download-report':\n this.handleDownloadReport();\n break;\n case 'print-report':\n this.handlePrintReport();\n break;\n case 'export-report':\n await this.handleExportReport(command.options?.['format'] as string);\n break;\n default:\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.unknown-command', {\n params: { commandName: command.name },\n });\n console.warn(warning);\n break;\n }\n }\n\n //#endregion\n}\n","<axp-page-layout *translate=\"let t\">\n <!-- Left Panel: Filters (Always visible for desktop) -->\n @if (showFiltersPanel()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>\n {{ t('@report-management:report-viewer.components.filters.title') | async }}\n </axp-layout-title>\n </axp-layout-header>\n <axp-layout-content>\n @if (vm.reportDefinition()) {\n <axp-layout-renderer #filtersForm [layout]=\"vm.formDefinition()\" [context]=\"vm.filterContext()\" [look]=\"'card'\"\n (contextChange)=\"handleFiltersChange($event)\" (contextInitiated)=\"handleFiltersInitiated($event)\">\n </axp-layout-renderer>\n <!-- ----- Background report layout multi-select ----- -->\n @if (vm.isBackgroundReportMode() && !vm.isBackgroundQueued() && vm.availableLayouts().length > 0) {\n <div class=\"mt-4 pt-4 border-t\">\n <div class=\"mb-2\">\n <span class=\"text-sm font-medium\">\n {{ t('@report-management:report-generation.components.background-layouts.title') | async }}\n </span>\n </div>\n <p class=\"text-xs opacity-70 mb-3\">\n {{ t('@report-management:report-generation.components.background-layouts.description') | async }}\n </p>\n <div class=\"flex flex-col gap-2\">\n @for (layout of vm.availableLayouts(); track layout.id) {\n <label class=\"flex items-center gap-2 p-2 rounded border cursor-pointer hover:bg-neutral-50\">\n <ax-check-box\n [ngModel]=\"vm.isBackgroundLayoutSelected(layout.id)\"\n (ngModelChange)=\"handleBackgroundLayoutToggle(layout.id, $event)\"\n ></ax-check-box>\n <ax-icon [icon]=\"layoutPageIcon(layout.icon, layout)\"></ax-icon>\n <span class=\"text-sm\">{{ getLayoutSelectionLabel(layout) | translate | async }}</span>\n </label>\n }\n </div>\n </div>\n }\n }\n </axp-layout-content>\n <axp-layout-footer class=\"p-4 border-t\" *translate=\"let t\">\n @if (vm.hasUnappliedFilters()) {\n <div class=\"w-full warning-lightest-surface mb-2 p-2 rounded border border-warning-200\">\n <div class=\"flex items-center gap-2 text-warning-800\">\n <ax-icon class=\"fa-light fa-exclamation-triangle text-sm\"></ax-icon>\n <span class=\"text-xs\">{{\n t('@report-management:report-viewer.components.filters.messages.warning.unapplied') | async\n }}</span>\n </div>\n </div>\n }\n @if (vm.isBackgroundReportMode() && !vm.hasSelectedBackgroundLayouts() && !vm.isBackgroundQueued()) {\n <div class=\"w-full warning-lightest-surface mb-2 p-2 rounded border border-warning-200\">\n <div class=\"flex items-center gap-2 text-warning-800\">\n <ax-icon class=\"fa-light fa-exclamation-triangle text-sm\"></ax-icon>\n <span class=\"text-xs\">{{\n t('@report-management:report-generation.errors.no-layouts-selected') | async\n }}</span>\n </div>\n </div>\n }\n <ax-button class=\"w-full\" [disabled]=\"vm.isBackgroundReportMode() ? vm.isBackgroundGenerateDisabled() : (!vm.canExecute() || vm.areParametersReadonly())\"\n [text]=\"(vm.isBackgroundReportMode()\n ? t('@report-management:report-generation.actions.generate-in-background')\n : t('@report-management:report-viewer.actions.execute.title')) | async\" [color]=\"'primary'\"\n (onClick)=\"execute({ name: 'execute-report' })\">\n <ax-prefix>\n <ax-icon [icon]=\"vm.isBackgroundReportMode() ? 'fa-light fa-clock' : 'fa-light fa-play'\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <!-- ----- Secondary background generate for choose mode ----- -->\n @if (canGenerateInBackground() && vm.generationMode() === 'choose') {\n <ax-button class=\"w-full mt-2\" [disabled]=\"vm.areParametersReadonly()\"\n [text]=\"t('@report-management:report-generation.actions.generate-in-background') | async\" [color]=\"'default'\"\n (onClick)=\"execute({ name: 'generate-in-background' })\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-clock\"></ax-icon>\n </ax-prefix>\n </ax-button>\n }\n </axp-layout-footer>\n </axp-layout-start-side>\n }\n <!-- Main Content: Report Display -->\n <axp-page-content class=\"overflow-auto\">\n @if (vm.isFrozen()) {\n <!-- ----- Frozen run banner ----- -->\n <div class=\"warning-lightest-surface mb-3 p-3 rounded border border-warning-200 text-warning-800 text-sm\">\n {{ t('@report-management:report-generation.banners.frozen') | async }}\n </div>\n }\n @if (vm.hasError()) {\n <!-- Error State -->\n <axp-state-message icon=\"fa-light fa-exclamation-triangle\"\n [title]=\"'@report-management:report-viewer.messages.error.fetch-title'\"\n [description]=\"vm.error() || '@report-management:report-viewer.messages.error.unexpected'\">\n <div slot=\"actions\">\n <ax-button look=\"outline\" color=\"primary\"\n [text]=\"t('@report-management:report-viewer.actions.retry.title') | async\" (onClick)=\"vm.clearError()\">\n <ax-prefix>\n <ax-icon class=\"fa-light fa-refresh\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </axp-state-message>\n } @else if (!vm.reportDefinition()) {\n <!-- No Report Selected State -->\n <axp-state-message icon=\"fa-light fa-chart-line\"\n [title]=\"'@report-management:report-viewer.components.report-viewer.empty-states.no-report.title'\"\n [description]=\"'@report-management:report-viewer.components.report-viewer.empty-states.no-report.description'\">\n <div slot=\"actions\">\n <ax-button look=\"outline\" color=\"primary\"\n [text]=\"t('@report-management:report-viewer.actions.browse-reports.title') | async\">\n <ax-prefix>\n <ax-icon class=\"fa-light fa-folder-open\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </axp-state-message>\n <!-- ----- Background report message state (no live layout preview) ----- -->\n } @else if (vm.isBackgroundReportMode() && !vm.isFrozen()) {\n <!-- ----- Mobile filters and layout selection for background reports ----- -->\n @if (deviceService.isSmall() && !vm.isBackgroundQueued()) {\n <axp-layout-renderer #filtersForm [layout]=\"vm.formDefinition()\" [context]=\"vm.filterContext()\" [look]=\"'fieldset'\"\n (contextChange)=\"handleFiltersChange($event)\" (contextInitiated)=\"handleFiltersInitiated($event)\">\n </axp-layout-renderer>\n @if (vm.availableLayouts().length > 0) {\n <div class=\"mt-4 pt-4 border-t\">\n <div class=\"flex items-center justify-between gap-2 mb-2\">\n <span class=\"text-sm font-medium\">\n {{ t('@report-management:report-generation.components.background-layouts.title') | async }}\n </span>\n </div>\n <p class=\"text-xs opacity-70 mb-3\">\n {{ t('@report-management:report-generation.components.background-layouts.description') | async }}\n </p>\n <div class=\"flex flex-col gap-2\">\n @for (layout of vm.availableLayouts(); track layout.id) {\n <label class=\"flex items-center gap-2 p-2 rounded border cursor-pointer\">\n <ax-check-box\n [ngModel]=\"vm.isBackgroundLayoutSelected(layout.id)\"\n (ngModelChange)=\"handleBackgroundLayoutToggle(layout.id, $event)\"\n ></ax-check-box>\n <ax-icon [icon]=\"layoutPageIcon(layout.icon, layout)\"></ax-icon>\n <span class=\"text-sm\">{{ getLayoutSelectionLabel(layout) | translate | async }}</span>\n </label>\n }\n </div>\n </div>\n }\n }\n @if (vm.isBackgroundQueued()) {\n <axp-state-message icon=\"fa-light fa-clock\"\n [title]=\"'@report-management:report-generation.empty-states.background.queued-title'\"\n [description]=\"'@report-management:report-generation.empty-states.background.queued-description'\">\n </axp-state-message>\n } @else {\n <axp-state-message icon=\"fa-light fa-clock\"\n [title]=\"'@report-management:report-generation.empty-states.background.title'\"\n [description]=\"'@report-management:report-generation.empty-states.background.description'\">\n </axp-state-message>\n }\n } @else {\n <ng-container *ngTemplateOutlet=\"reportDisplay\"></ng-container>\n }\n </axp-page-content>\n</axp-page-layout>\n\n<!-- Desktop: Report Display Area -->\n<ng-template #reportDisplay>\n @if (showReportDisplay()) {\n <!-- Desktop & Mobile: Report Display Area -->\n @if (vm.isTableLayout()) {\n <axp-report-table-view> </axp-report-table-view>\n } @else if (vm.isChartLayout()) {\n <axp-report-chart-view> </axp-report-chart-view>\n } @else if (vm.isPdfLayout()) {\n <axp-report-pdf-view> </axp-report-pdf-view>\n }\n } @else if (vm.reportDefinition()) {\n <!-- Mobile: Show filters -->\n <axp-layout-renderer #filtersForm [layout]=\"vm.formDefinition()\" [context]=\"vm.filterContext()\" [look]=\"'fieldset'\">\n </axp-layout-renderer>\n }\n</ng-template>\n\n<!-- Mobile: Execute Button -->\n@if (deviceService.isSmall() && ((!vm.isBackgroundReportMode() && !vm.hasBeenExecuted()) || (vm.isBackgroundReportMode() && !vm.isBackgroundQueued()))) {\n<axp-page-footer class=\"p-2 border-t\">\n <ax-button class=\"w-full\" [disabled]=\"vm.isBackgroundReportMode() ? vm.isBackgroundGenerateDisabled() : (!vm.canExecute() || vm.areParametersReadonly())\"\n [text]=\"(vm.isBackgroundReportMode()\n ? '@report-management:report-generation.actions.generate-in-background'\n : '@report-management:report-viewer.actions.execute.title') | translate | async\" [color]=\"'primary'\"\n (onClick)=\"execute({ name: 'execute-report' })\">\n <ax-prefix>\n <ax-icon [icon]=\"vm.isBackgroundReportMode() ? 'fa-light fa-clock' : 'fa-light fa-play'\"></ax-icon>\n </ax-prefix>\n </ax-button>\n</axp-page-footer>\n}\n"],"names":["i2","i3","i6","i1"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiGM,MAAO,4BAA6B,SAAQ,0BAA0B,CAAA;AA2F1E,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;;AAzFU,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC7C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC1C,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AAC5B,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAC9C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACpD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;;;AAMzD,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK;gGAAU;QAC1B,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAsB,EAAE;6FAAC;;;QAMzC,IAAA,CAAA,WAAW,GAAG,SAAS,CAA6B,aAAa;wFAAC;;;AAMvD,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,wBAAwB,CAAC;;;AAMvC,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,MAAK;AACpD,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;YAC3D,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,MAAM,CAAC;;gBAE/C,IAAI,MAAM,EAAE;AACV,oBAAA,KAAK,IAAI,CAAC,kBAAkB,EAAE;gBAChC;qBAAO;oBACL,IAAI,CAAC,mBAAmB,EAAE;gBAC5B;AACF,YAAA,CAAC,CAAC;QACJ,CAAC;mGAAC;AAEe,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,MAAK;YAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;YACjC,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE;YAC3C,IAAI,MAAM,EAAE;gBACV,SAAS,CAAC,MAAK;AACb,oBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE;oBAC3E,IAAI,CAAC,YAAY,EAAE;wBACjB;oBACF;AACA,oBAAA,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE;wBAC5B,UAAU,EAAE,IAAI,CAAC,KAAK;AACtB,wBAAA,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;AAC5B,wBAAA,mBAAmB,EAAE,OAAO;AAC5B,wBAAA,UAAU,EAAE,IAAI;AACjB,qBAAA,CAAC;AACJ,gBAAA,CAAC,CAAC;gBACF;YACF;AACA,YAAA,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE;gBACrB;YACF;YACA,SAAS,CAAC,MAAK;AACb,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE;AAC3E,gBAAA,IAAI,YAAY,KAAK,KAAK,EAAE;oBAC1B;gBACF;AACA,gBAAA,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE;oBAC5B,UAAU,EAAE,IAAI,CAAC,KAAK;oBACtB,WAAW,EAAE,EAAE,KAAK,EAAE;AACtB,oBAAA,mBAAmB,EAAE,OAAO;AAC5B,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA,CAAC;gBACF,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,CAAC,CAAC;QACJ,CAAC;6FAAC;;QAIM,IAAA,CAAA,gBAAgB,GAAiC,IAAI;QACrD,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,kBAAkB,GAAkB,IAAI;;QAYtC,IAAA,CAAA,gBAAgB,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;AAErD,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAC5B,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,sBAAsB,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;aACvD,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC;;;AAgBrF,QAAA,IAAA,CAAA,aAAa,GAAG,OAA6B;AACrD,YAAA,SAAS,EAAE;AACT,gBAAA,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;AACnB,gBAAA,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;AAClB,gBAAA,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;AACpB,aAAA;AACF,SAAA,CAAC;AAEQ,QAAA,IAAA,CAAA,aAAa,GAAG,OAA6B;AACrD,YAAA,SAAS,EAAE;AACT,gBAAA,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;AACnB,gBAAA,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;AAClB,gBAAA,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;AACnB,aAAA;AACF,SAAA,CAAC;QAsoBiB,IAAA,CAAA,cAAc,GAAG,oBAAoB;AAhrBtD,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;YAC7B,IAAI,CAAC,mBAAmB,EAAE;AAC1B,YAAA,KAAK,IAAI,CAAC,EAAE,CAAC,8BAA8B,EAAE;AAC/C,QAAA,CAAC,CAAC;IACJ;IAUQ,eAAe,GAAA;QACrB,OAAO,IAAI,CAAC;AACT,aAAA,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI;AAClE,aAAA,UAAU,EAAE;IACjB;AAEQ,IAAA,iBAAiB,CAAC,GAAW,EAAA;AACnC,QAAA,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAA,CAAA,EAAI,UAAU,CAAC,MAAM,CAAC,KAAK,CAAA,OAAA,CAAS,CAAC;IAC3D;;;AA0BS,IAAA,MAAM,QAAQ,GAAA;AACrB,QAAA,MAAM,KAAK,CAAC,QAAQ,EAAE;AAEtB,QAAA,IAAI,CAAC;aACF,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,YAAY,eAAe,CAAC,CAAC;AAC7F,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;YACnB,MAAM,UAAU,GAAG,KAAwB;YAC3C,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACtF,gBAAA,KAAK,IAAI,CAAC,EAAE,CAAC,8BAA8B,EAAE;YAC/C;AACF,QAAA,CAAC,CAAC;;AAGJ,QAAA,IAAI,CAAC;AACF,aAAA,gBAAgB,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;aAC/E,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,KAAI;YACzC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;YACzF,IAAI,CAAC,QAAQ,EAAE;gBACb;YACF;AACA,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;AACpD,YAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,QAAQ,CAAA,EAAA,EAAK,KAAK,EAAE;AACxC,YAAA,IAAI,QAAQ,KAAK,IAAI,CAAC,kBAAkB,EAAE;gBACxC;YACF;AACA,YAAA,IAAI,CAAC,kBAAkB,GAAG,QAAQ;AAClC,YAAA,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;AAC3C,QAAA,CAAC,CAAC;IACN;AAEA;;AAEG;;;IAMK,MAAM,oBAAoB,CAAC,QAAgB,EAAA;AACjD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE;QACpE,IAAI,KAAK,EAAE;YACT,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAClC,MAAM,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC;YAClC,IAAI,CAAC,SAAS,EAAE;YAChB;QACF;QAEA,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;;QAGlC,IAAI,CAAC,SAAS,EAAE;;QAGhB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW;AACnD,QAAA,MAAM,aAAa,GAAG,EAAE,GAAG,WAAW,EAAE;AACxC,QAAA,OAAO,aAAa,CAAC,UAAU,CAAC;AAChC,QAAA,OAAO,aAAa,CAAC,OAAO,CAAC;;QAG7B,MAAM,mBAAmB,GAAG,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC;;AAGzE,QAAA,MAAM,SAAS,GAAG,EAAE,GAAG,mBAAmB,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,EAAE;AACxE,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAClC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,+BAA+B,CAAC,KAAK,CAAC,CAAC,CAAC,CAC/F;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACrC,YAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,SAAS,CAAC;AACtD,YAAA,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC;;YAEtC,UAAU,CAAC,YAAW;AACpB,gBAAA,MAAM,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AAC/B,YAAA,CAAC,EAAE,GAAG,CAAC,CAAC;QACV;IACF;AAEQ,IAAA,MAAM,kBAAkB,GAAA;QAC9B,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,eAAe,EAAE;YACjD;QACF;AAEA,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAE3B,QAAA,IAAI;AACF,YAAA,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;AACzD,gBAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,qEAAqE,CAAC;AAC3G,gBAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAClC,2EAA2E,CAC5E;AAED,gBAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,iEAAiE,CAAC;AACxG,aAAA,CAAC;YAEF,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;gBAC9C,KAAK;AACL,gBAAA,IAAI,EAAE,eAAe;AACrB,gBAAA,aAAa,EAAE,SAAS;AACxB,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,OAAO,EAAE;AACP,oBAAA;AACE,wBAAA,IAAI,EAAE,UAAU;AAChB,wBAAA,KAAK,EAAE,QAAQ;wBACf,OAAO,EAAE,MAAK;4BACZ,IAAI,CAAC,mBAAmB,EAAE;AAC1B,4BAAA,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;wBAClB,CAAC;AACF,qBAAA;AACF,iBAAA;AACF,aAAA,CAAC;QACJ;gBAAU;AACR,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAC9B;IACF;IAEQ,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC1B;QACF;AAEA,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAC7B,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;IAC9B;AAEA;;;AAGG;AACK,IAAA,gBAAgB,CAAC,aAA6B,EAAA;;QAEpD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW;AACrD,QAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAC;;AAG1C,QAAA,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU;QAC3C,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YACzC,IACE,GAAG,KAAK,UAAU;AAClB,gBAAA,GAAG,KAAK,OAAO;AACf,gBAAA,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;AAC1B,gBAAA,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;AACrB,gBAAA,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;AAC5B,gBAAA,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,EAC7B;;gBAEA,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;AAC3D,gBAAA,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;YAChC;AACF,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,WAAW,GAAuC,EAAE,GAAG,aAAa,EAAE;;QAG5E,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YACvC,IACE,GAAG,KAAK,UAAU;AAClB,gBAAA,GAAG,KAAK,OAAO;AACf,gBAAA,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;AAC1B,gBAAA,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;AACrB,gBAAA,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;AAC5B,gBAAA,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,EAC7B;AACA,gBAAA,OAAO,WAAW,CAAC,GAAG,CAAC;YACzB;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU;;QAG7C,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;;YAEzC,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;gBACpF;YACF;AAEA,YAAA,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC;AAC5B,YAAA,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC;;YAGhC,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;YAE9C,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,KAAK,CAAC;AACvD,gBAAA,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC;YACvC;;AAEF,QAAA,CAAC,CAAC;;AAGF,QAAA,iBAAiB,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;YACtC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;;gBAEvC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AAC9C,oBAAA,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAA,EAAG,SAAS,CAAA,CAAA,CAAG,CAAC,EAAE;AAClE,wBAAA,OAAO,WAAW,CAAC,QAAQ,CAAC;oBAC9B;AACF,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;;QAGF,IAAI,QAAQ,EAAE;YACZ,WAAW,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC5C;aAAO;AACL,YAAA,OAAO,WAAW,CAAC,UAAU,CAAC;QAChC;AACA,QAAA,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC;QACpC,IAAI,KAAK,EAAE;YACT,WAAW,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QACtC;aAAO;AACL,YAAA,OAAO,WAAW,CAAC,OAAO,CAAC;QAC7B;;AAGA,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE;YACvB,UAAU,EAAE,IAAI,CAAC,KAAK;AACtB,YAAA,WAAW,EAAE,WAAW;YACxB,UAAU,EAAE,IAAI;AACjB,SAAA,CAAC;IACJ;AAEA;;AAEG;AACK,IAAA,kBAAkB,CAAC,KAAc,EAAA;AACvC,QAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE;AACzD,YAAA,OAAO,IAAI;QACb;;AAGA,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACtD,MAAM,SAAS,GAAG,KAAY;AAC9B,YAAA,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK;AAEnC,YAAA,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,EAAE,EAAE;AAC3E,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1D,gBAAA,OAAO,IAAI;YACb;;AAGA,YAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AAClE,gBAAA,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC;gBACrG,OAAO,CAAC,WAAW;YACrB;QACF;;AAGA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9C,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,KAAK;IACd;AAEA;;;;;AAKG;IACK,oBAAoB,CAAC,MAAc,EAAE,KAAc,EAAA;QACzD,MAAM,MAAM,GAA2B,EAAE;AAEzC,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,YAAA,OAAO,MAAM;QACf;;AAGA,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACtD,MAAM,SAAS,GAAG,KAAY;;AAG9B,YAAA,IAAI,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE;AAC7B,gBAAA,MAAM,CAAC,CAAA,EAAG,MAAM,CAAA,eAAA,CAAiB,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC;YACvE;;AAGA,YAAA,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS,IAAI,SAAS,CAAC,KAAK,KAAK,IAAI,IAAI,SAAS,CAAC,KAAK,KAAK,EAAE,EAAE;gBACvF,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;oBAClC,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC9B,MAAM,CAAC,CAAA,EAAG,MAAM,CAAA,MAAA,CAAQ,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;oBAClF;gBACF;AAAO,qBAAA,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,EAAE;;oBAE9C,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,KAAK,CAAC;AAC/D,oBAAA,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC;gBACvC;qBAAO;AACL,oBAAA,MAAM,CAAC,CAAA,EAAG,MAAM,CAAA,MAAA,CAAQ,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;gBACrD;YACF;AAEA,YAAA,OAAO,MAAM;QACf;;AAGA,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;YACxF,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;AAC9B,YAAA,OAAO,MAAM;QACf;;AAGA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBACpB,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YACtD;AACA,YAAA,OAAO,MAAM;QACf;;QAGA,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;AAC9B,QAAA,OAAO,MAAM;IACf;AAEA;;AAEG;AACK,IAAA,kBAAkB,CAAC,GAAQ,EAAE,MAAM,GAAG,EAAE,EAAA;QAC9C,MAAM,MAAM,GAA2B,EAAE;QAEzC,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC1C,YAAA,OAAO,MAAM;QACf;AAEA,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAC5C,YAAA,MAAM,SAAS,GAAG,MAAM,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,GAAG,GAAG;AAEnD,YAAA,IAAI,GAAG,IAAI,IAAI,EAAE;gBACf;YACF;AAEA,YAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE;gBAClF,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;YACjC;AAAO,iBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAC7B,gBAAA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClB,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC9D;YACF;AAAO,iBAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;gBAClC,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,SAAS,CAAC;AACzD,gBAAA,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;YAClC;QACF;AAEA,QAAA,OAAO,MAAM;IACf;AAEA;;;;;AAKG;AACK,IAAA,yBAAyB,CAAC,MAA+B,EAAA;QAC/D,MAAM,MAAM,GAAwB,EAAE;;QAGtC,MAAM,cAAc,GAA4B,EAAE;AAClD,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;;YAEjD,IACE,GAAG,KAAK,UAAU;AAClB,gBAAA,GAAG,KAAK,OAAO;AACf,gBAAA,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;AAC1B,gBAAA,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;AACrB,gBAAA,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;AAC5B,gBAAA,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,EAC7B;AACA,gBAAA,cAAc,CAAC,GAAG,CAAC,GAAG,KAAK;YAC7B;QACF;;AAGA,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;YACzD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;;gBAEtB;YACF;;YAGA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AAC5B,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC;YACxB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;;YAG3B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;;AAEtE,gBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;oBACpB,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE;gBACrC;gBACA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE;AAC9B,oBAAA,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,GAAG,EAAE;gBAChC;AACA,gBAAA,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;YAChD;AAAO,iBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;;AAEnD,gBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AACpB,oBAAA,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;gBACtB;AACA,gBAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxD;AAAO,iBAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;;AAEjD,gBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AACpB,oBAAA,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;gBACtB;gBACA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE;AAC1B,oBAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,GAAG,EAAE;gBAC5B;gBACA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC/B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACvF;QACF;;;AAIA,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACjD,YAAA,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE;AAC/D,gBAAA,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI;;AAG1C,gBAAA,IAAI,CAAC,aAAa,KAAK,IAAI,IAAI,aAAa,KAAK,OAAO,KAAK,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE;;AAE5F,oBAAA,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAS,KAAK,CAAC,KAAK,EAAE,CAAC;gBACnG;;;AAIA,gBAAA,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,EAAE;AAC3E,oBAAA,MAAM,YAAY,GAAG,CAAA,EAAG,GAAG,WAAW;AACtC,oBAAA,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,oBAAA,MAAM,SAAS,GAAG,OAAO,CAAC;oBAE1B,IAAI,aAAa,KAAK,IAAI,IAAI,aAAa,KAAK,OAAO,EAAE;;wBAEvD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;AACvE,wBAAA,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAW,MAAM;4BAClD,CAAC,UAAU,GAAG,GAAG;AACjB,4BAAA,CAAC,SAAS,GAAG,GAAG;AACjB,yBAAA,CAAC,CAAC;oBACL;yBAAO;;wBAEL,MAAM,CAAC,YAAY,CAAC,GAAG;AACrB,4BAAA,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK;AACzB,4BAAA,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK;yBACzB;oBACH;gBACF;YACF;QACF;AAEA,QAAA,OAAO,MAAM;IACf;AAEA;;AAEG;AACK,IAAA,cAAc,CAAC,GAAQ,EAAE,IAAc,EAAE,KAAc,EAAA;QAC7D,IAAI,OAAO,GAAG,GAAG;AACjB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;AACnB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;AACrD,gBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;YACnB;AACA,YAAA,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;QACxB;QACA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACrC,QAAA,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK;IAC1B;AAEA;;AAEG;AACK,IAAA,UAAU,CAAC,KAAa,EAAA;AAC9B,QAAA,IAAI,KAAK,KAAK,EAAE,EAAE;AAChB,YAAA,OAAO,KAAK;QACd;;AAGA,QAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACvB,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACjE;AAEA,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;IACnC;AAEA;;;;AAIG;AACK,IAAA,cAAc,CAAC,KAAa,EAAA;AAClC,QAAA,OAAO,KAAK;IACd;;;AAMU,IAAA,mBAAmB,CAAC,KAAqB,EAAA;AACjD,QAAA,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC;AAClC,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;IAC9B;AAEU,IAAA,sBAAsB,CAAC,KAAqB,EAAA;AACpD,QAAA,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC;IACpC;AAEU,IAAA,MAAM,mBAAmB,GAAA;AACjC,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,sBAAsB,EAAE,EAAE;YAC3D;QACF;QACA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE;AACpD,QAAA,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE;YACpB;QACF;AACA,QAAA,MAAM,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;QAC7B,IAAI,CAAC,SAAS,EAAE;IAClB;AAEU,IAAA,MAAM,0BAA0B,GAAA;AACxC,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,sBAAsB,EAAE,EAAE;YAC3D;QACF;QACA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE;AACpD,QAAA,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE;YACpB;QACF;AACA,QAAA,MAAM,IAAI,CAAC,EAAE,CAAC,oBAAoB,EAAE;QACpC,IAAI,CAAC,SAAS,EAAE;IAClB;IAEU,uBAAuB,GAAA;QAC/B,QACE,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,8BAA8B,CAAC,iBAAiB,CAAC;AACtF,YAAA,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;AACnB,aAAC,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,KAAK,YAAY,CAAC;IAExF;IAEU,aAAa,GAAA;AACrB,QAAA,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;IACnB;IAEU,kBAAkB,GAAA;AAC1B,QAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE;;AAGtB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;QAC/B,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,KAAK,EAAE;QACd;;QAGA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW;AACrD,QAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAC;AAC1C,QAAA,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC;AAEpC,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE;YACvB,UAAU,EAAE,IAAI,CAAC,KAAK;AACtB,YAAA,WAAW,EAAE;AACX,gBAAA,IAAI,QAAQ,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AACjC,gBAAA,IAAI,KAAK,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAC5B,aAAA;AACD,YAAA,UAAU,EAAE,IAAI;AACjB,SAAA,CAAC;IACJ;AAEA;;;AAGG;AACO,IAAA,MAAM,oBAAoB,GAAA;QAClC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE;YAC1B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,sEAAsE,CAAC;AAClI,YAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;YACrB;QACF;;AAGA,QAAA,MAAM,OAAO,GAAG,sBAAsB,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;QACjE,IAAI,OAAO,EAAE;AACX,YAAA,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,CAAC;QAC9E;aAAO;YACL,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,oEAAoE,CAAC;AAChI,YAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QACvB;IACF;AAEA;;;AAGG;AACO,IAAA,MAAM,iBAAiB,GAAA;QAC/B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE;YAC1B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,mEAAmE,CAAC;AAC/H,YAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;YACrB;QACF;;AAGA,QAAA,MAAM,OAAO,GAAG,sBAAsB,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;QACjE,IAAI,OAAO,EAAE;AACX,YAAA,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,CAAC;QAC3E;aAAO;YACL,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,iEAAiE,CAAC;AAC7H,YAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QACvB;IACF;AAEA;;;;AAIG;IACO,MAAM,kBAAkB,CAAC,MAAe,EAAA;QAChD,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,2EAA2E,CAAC;AACvI,YAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;YACrB;QACF;;QAGA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE;AACxC,QAAA,MAAM,UAAU,GAAG,uBAAuB,CAAC,MAAM,CAAC;AAClD,QAAA,IAAI,UAAU,IAAI,IAAI,EAAE;YACtB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,0EAA0E,CAAC;AACtI,YAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;YACrB;QACF;QAEA,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACtC,QAAA,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,eAAe,EAAE;YAC5D,MAAM;YACN,UAAU;YACV,gBAAgB,EAAE,MAAM,IAAI,SAAS;AACtC,SAAA,CAAC;IACJ;AAIU,IAAA,uBAAuB,CAAC,MAA+B,EAAA;QAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,OAAO;QAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,EAAE,KAAK;QACrD,IAAI,qBAAqB,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE;YAC5D,OAAO,MAAM,CAAC,KAAK,IAAI,oBAAoB,CAAC,MAAM,CAAC;QACrD;AACA,QAAA,OAAO,oBAAoB,CAAC,MAAM,CAAC;IACrC;IAEU,4BAA4B,CAAC,QAAgB,EAAE,QAAiB,EAAA;QACxE,IAAI,CAAC,EAAE,CAAC,2BAA2B,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACzD;;;AAMmB,IAAA,MAAM,kBAAkB,GAAA;AACzC,QAAA,MAAM,WAAW,GAAwB;AACvC,YAAA;AACE,gBAAA,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,4CAA4C,CAAC;AAC/F,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,OAAO,EAAE;AACP,wBAAA,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE;AAC7B,qBAAA;AACF,iBAAA;AACF,aAAA;SACF;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE;QACnD,IAAI,gBAAgB,EAAE;YACpB,WAAW,CAAC,IAAI,CAAC;AACf,gBAAA,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,gBAAgB,CAAC,KAAK;AAC9B,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,WAAW;IACpB;AAES,IAAA,MAAM,YAAY,GAAA;QACzB,MAAM,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE;QACnD,IAAI,gBAAgB,EAAE;YACpB,OAAO,gBAAgB,CAAC,KAAK;QAC/B;QACA,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAC/C,iEAAiE,CAClE;IACH;AAES,IAAA,MAAM,kBAAkB,GAAA;QAC/B,MAAM,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE;AACnD,QAAA,OAAO,gBAAgB,EAAE,WAAW,IAAI,IAAI;IAC9C;IAEmB,WAAW,GAAA;AAC5B,QAAA,IACE,CAAC,IAAI,CAAC,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;AACxD,YAAA,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE;AAC7B,YAAA,CAAC,IAAI,CAAC,iBAAiB,EAAE,EACzB;AACA,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;QAC7C,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,oBAAoB,CAAC,aAAa,CAAC,IAAI,EAAE;AAC9C,YAAA,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI;AAChC,SAAA,CAAC;IACJ;AAEmB,IAAA,MAAM,eAAe,GAAA;AACtC,QAAA,IACE,CAAC,IAAI,CAAC,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;AACxD,YAAA,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE;AAC7B,YAAA,CAAC,IAAI,CAAC,iBAAiB,EAAE,EACzB;AACA,YAAA,OAAO,EAAE;QACX;QAEA,MAAM,eAAe,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,EAAE;QACnD,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,EAAE,KAAK;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,OAAO;QAE/D,MAAM,KAAK,GAAwB,EAAE;QACrC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,EAAE;YAC/C,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,MAAM,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC;gBACzE,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;AAC5C,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE,eAAe;AACrB,oBAAA,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,KAAK,eAAe,EAAE;AAC7F,iBAAA;AACF,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KACrB,0BAA0B,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,aAAa,CACvD,0BAA0B,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,EAC3C,SAAS,EACT,EAAE,WAAW,EAAE,MAAM,EAAE,CACxB,CACF;IACH;AAEQ,IAAA,MAAM,0BAA0B,CACtC,MAA+B,EAC/B,WAA+C,EAC/C,MAAc,EAAA;QAEd,IAAI,qBAAqB,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE;AAC5D,YAAA,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;gBACpE,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC;YACjE;AACA,YAAA,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE;AACpC,gBAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK;YACpE;YACA,OAAO,MAAM,CAAC,KAAK;QACrB;AAEA,QAAA,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACjF;AAES,IAAA,MAAM,aAAa,GAAA;;AAE1B,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,EAAE;YAC7D,OAAO;gBACL,KAAK,EAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,uCAAuC,CAAC;aAC3F;QACH;QAEA,OAAO;YACL,KAAK,EAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,4CAA4C,CAAC;SAChG;IACH;AAES,IAAA,MAAM,iBAAiB,GAAA;;AAE9B,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,EAAE;AAC7D,YAAA,IAAI,CAAC,EAAE,CAAC,mBAAmB,EAAE;YAC7B;QACF;QAEA,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;IACzD;AAES,IAAA,MAAM,mBAAmB,GAAA;AAChC,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE;AAC3D,YAAA,OAAO,EAAE;QACX;QAEA,MAAM,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;QAC7C,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,OAAO,EAAE;QACX;;QAGA,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,aAAa,CAAC;;AAGhF,QAAA,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,KAAK,MAAM,CAAC;IAChE;AAES,IAAA,MAAM,qBAAqB,GAAA;AAClC,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE;AAC3D,YAAA,OAAO,EAAE;QACX;QAEA,MAAM,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;QAC7C,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,OAAO,EAAE;QACX;QAEA,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,aAAa,CAAC;AACpF,QAAA,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,KAAK,MAAM,CAAC;AACvE,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,KAAK,QAAQ,EAAE;YAC3E,KAAK,CAAC,OAAO,CAAC;AACZ,gBAAA,KAAK,EAAE,qEAAqE;AAC5E,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE;AAC5C,aAAA,CAAC;QACJ;AACA,QAAA,OAAO,KAAK;IACd;IAES,MAAM,OAAO,CAAC,OAA0B,EAAA;;QAE/C,IAAI,OAAO,CAAC,QAAQ,GAAG,UAAU,CAAC,EAAE;YAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,UAAU,CAAW;YACzD,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC;gBAC9B,IAAI,CAAC,SAAS,EAAE;YAClB;YACA;QACF;AAEA,QAAA,QAAQ,OAAO,CAAC,IAAI;AAClB,YAAA,KAAK,gBAAgB;AACnB,gBAAA,MAAM,IAAI,CAAC,mBAAmB,EAAE;gBAChC;AACF,YAAA,KAAK,wBAAwB;AAC3B,gBAAA,MAAM,IAAI,CAAC,0BAA0B,EAAE;gBACvC;AACF,YAAA,KAAK,gBAAgB;gBACnB,IAAI,CAAC,aAAa,EAAE;gBACpB;AACF,YAAA,KAAK,eAAe;gBAClB,IAAI,CAAC,kBAAkB,EAAE;gBACzB;AACF,YAAA,KAAK,iBAAiB;gBACpB,IAAI,CAAC,oBAAoB,EAAE;gBAC3B;AACF,YAAA,KAAK,cAAc;gBACjB,IAAI,CAAC,iBAAiB,EAAE;gBACxB;AACF,YAAA,KAAK,eAAe;AAClB,gBAAA,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,GAAG,QAAQ,CAAW,CAAC;gBACpE;AACF,YAAA;gBACE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,oEAAoE,EAAE;AAC/H,oBAAA,MAAM,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE;AACtC,iBAAA,CAAC;AACF,gBAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;gBACrB;;IAEN;8GAr/BW,4BAA4B,EAAA,IAAA,EAAA,EAAA,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,QAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,EAAA,SAAA,EAd5B;YACT,cAAc;YACd,wBAAwB;AACxB,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,4BAA4B;AAC1C,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1FH,8qUAyMA,EAAA,MAAA,EAAA,CAAA,qnDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED3II,YAAY,qMACZ,WAAW,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,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,IAAA,EAAA,WAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,iBAAiB,0VACjB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,aAAa,8BACb,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA;;AAErB,gBAAA,0BAA0B,iLAC1B,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,gCAAgC,EAAA,QAAA,EAAA,mDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChC,6BAA6B,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC7B,4BAA4B,EAAA,QAAA,EAAA,qfAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC5B,2BAA2B,kEAC3B,6BAA6B,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC7B,2BAA2B,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC3B,yBAAyB,gEACzB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,aAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,gBAAA,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;;2FAgBf,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAvCxC,SAAS;+BACE,wBAAwB,EAAA,UAAA,EACtB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,WAAW;wBACX,cAAc;wBACd,gBAAgB;wBAChB,iBAAiB;wBACjB,eAAe;wBACf,mBAAmB;wBACnB,aAAa;wBACb,qBAAqB;;wBAErB,0BAA0B;wBAC1B,sBAAsB;wBACtB,gCAAgC;wBAChC,6BAA6B;wBAC7B,4BAA4B;wBAC5B,2BAA2B;wBAC3B,6BAA6B;wBAC7B,2BAA2B;wBAC3B,yBAAyB;wBACzB,wBAAwB;qBACzB,EAAA,SAAA,EACU;wBACT,cAAc;wBACd,wBAAwB;AACxB,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,4BAA8B;AAC1C,yBAAA;AACF,qBAAA,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B,EAAE,KAAK,EAAE,wBAAwB,EAAE,EAAA,QAAA,EAAA,8qUAAA,EAAA,MAAA,EAAA,CAAA,qnDAAA,CAAA,EAAA;mTAyBmB,aAAa,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;"}
@@ -1,3 +1,3 @@
1
- export { l as AXMPermissionDefinitionProvider, m as AXMReportManagementModule, n as AXPOpenReportInPopupCommand, a as AXPOpenReportViewerCommand, A as AXPReportViewerService } from './acorex-platform-module-report-management-client-acorex-platform-module-report-management-client-DhTbq8K0.mjs';
1
+ export { l as AXMPermissionDefinitionProvider, m as AXMReportManagementModule, n as AXPOpenReportInPopupCommand, a as AXPOpenReportViewerCommand, A as AXPReportViewerService } from './acorex-platform-module-report-management-client-acorex-platform-module-report-management-client-eSjEqt5D.mjs';
2
2
  export * from '@acorex-platform/module-report-management-client/contracts';
3
3
  //# sourceMappingURL=acorex-platform-module-report-management-client.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acorex-platform/module-report-management-client",
3
- "version": "0.0.57",
3
+ "version": "0.0.59",
4
4
  "sideEffects": false,
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0 || ^22.0.0",
@@ -26,6 +26,7 @@ interface AXPOpenReportInPopupCommandInput {
26
26
  /** Opens a report in a results-only popup. Pass `runId` to show a frozen generation run. */
27
27
  declare class AXPOpenReportInPopupCommand implements AXPCommand<AXPOpenReportInPopupCommandInput | Record<string, unknown>, void> {
28
28
  private readonly popupService;
29
+ private readonly dialogOpener;
29
30
  private readonly expressionEvaluator;
30
31
  private readonly translate;
31
32
  private readonly reportViewerService;