@acorex/modules 20.0.21 → 20.0.23

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 (44) hide show
  1. package/document-management/index.d.ts +3 -0
  2. package/fesm2022/{acorex-modules-document-management-acorex-modules-document-management-CJYBHKUf.mjs → acorex-modules-document-management-acorex-modules-document-management-Bte3VGKC.mjs} +243 -51
  3. package/fesm2022/acorex-modules-document-management-acorex-modules-document-management-Bte3VGKC.mjs.map +1 -0
  4. package/fesm2022/{acorex-modules-document-management-attachment-widget.component-Cc-hsCCX.mjs → acorex-modules-document-management-attachment-widget.component-Cc0anIMV.mjs} +2 -2
  5. package/fesm2022/{acorex-modules-document-management-attachment-widget.component-Cc-hsCCX.mjs.map → acorex-modules-document-management-attachment-widget.component-Cc0anIMV.mjs.map} +1 -1
  6. package/fesm2022/{acorex-modules-document-management-create-folder-dialog.component-CMhwz1-0.mjs → acorex-modules-document-management-create-folder-dialog.component-BNcu8bzT.mjs} +2 -2
  7. package/fesm2022/{acorex-modules-document-management-create-folder-dialog.component-CMhwz1-0.mjs.map → acorex-modules-document-management-create-folder-dialog.component-BNcu8bzT.mjs.map} +1 -1
  8. package/fesm2022/{acorex-modules-document-management-details-view.component-CqK0rCnR.mjs → acorex-modules-document-management-details-view.component-BeN0NPcy.mjs} +2 -2
  9. package/fesm2022/{acorex-modules-document-management-details-view.component-CqK0rCnR.mjs.map → acorex-modules-document-management-details-view.component-BeN0NPcy.mjs.map} +1 -1
  10. package/fesm2022/{acorex-modules-document-management-drive-choose.component-r8KKbY1d.mjs → acorex-modules-document-management-drive-choose.component-B66wODCQ.mjs} +2 -2
  11. package/fesm2022/{acorex-modules-document-management-drive-choose.component-r8KKbY1d.mjs.map → acorex-modules-document-management-drive-choose.component-B66wODCQ.mjs.map} +1 -1
  12. package/fesm2022/{acorex-modules-document-management-drive.component-0wxNHSJr.mjs → acorex-modules-document-management-drive.component-CUej0GjY.mjs} +2 -2
  13. package/fesm2022/{acorex-modules-document-management-drive.component-0wxNHSJr.mjs.map → acorex-modules-document-management-drive.component-CUej0GjY.mjs.map} +1 -1
  14. package/fesm2022/{acorex-modules-document-management-large-icons-view.component-z-EQb_uG.mjs → acorex-modules-document-management-large-icons-view.component-BuwrkLhe.mjs} +2 -2
  15. package/fesm2022/{acorex-modules-document-management-large-icons-view.component-z-EQb_uG.mjs.map → acorex-modules-document-management-large-icons-view.component-BuwrkLhe.mjs.map} +1 -1
  16. package/fesm2022/{acorex-modules-document-management-large-tiles-view.component-Ce9h5m2O.mjs → acorex-modules-document-management-large-tiles-view.component-Cs-mjiQX.mjs} +2 -2
  17. package/fesm2022/{acorex-modules-document-management-large-tiles-view.component-Ce9h5m2O.mjs.map → acorex-modules-document-management-large-tiles-view.component-Cs-mjiQX.mjs.map} +1 -1
  18. package/fesm2022/{acorex-modules-document-management-list-view.component-DZKdXqAA.mjs → acorex-modules-document-management-list-view.component-1M2rIOGv.mjs} +2 -2
  19. package/fesm2022/{acorex-modules-document-management-list-view.component-DZKdXqAA.mjs.map → acorex-modules-document-management-list-view.component-1M2rIOGv.mjs.map} +1 -1
  20. package/fesm2022/{acorex-modules-document-management-permission-definition.provider-C31fYGZT.mjs → acorex-modules-document-management-permission-definition.provider-BEq3ySY3.mjs} +2 -2
  21. package/fesm2022/{acorex-modules-document-management-permission-definition.provider-C31fYGZT.mjs.map → acorex-modules-document-management-permission-definition.provider-BEq3ySY3.mjs.map} +1 -1
  22. package/fesm2022/{acorex-modules-document-management-rename-node-dialog.component-CMmT_vVe.mjs → acorex-modules-document-management-rename-node-dialog.component-DWzD41AV.mjs} +2 -2
  23. package/fesm2022/{acorex-modules-document-management-rename-node-dialog.component-CMmT_vVe.mjs.map → acorex-modules-document-management-rename-node-dialog.component-DWzD41AV.mjs.map} +1 -1
  24. package/fesm2022/{acorex-modules-document-management-small-icons-view.component-DI7c4jHZ.mjs → acorex-modules-document-management-small-icons-view.component-Dh5Di_2Y.mjs} +2 -2
  25. package/fesm2022/{acorex-modules-document-management-small-icons-view.component-DI7c4jHZ.mjs.map → acorex-modules-document-management-small-icons-view.component-Dh5Di_2Y.mjs.map} +1 -1
  26. package/fesm2022/{acorex-modules-document-management-small-tiles-view.component-BYJfNu6O.mjs → acorex-modules-document-management-small-tiles-view.component-mOjQbw-f.mjs} +2 -2
  27. package/fesm2022/{acorex-modules-document-management-small-tiles-view.component-BYJfNu6O.mjs.map → acorex-modules-document-management-small-tiles-view.component-mOjQbw-f.mjs.map} +1 -1
  28. package/fesm2022/acorex-modules-document-management.mjs +1 -1
  29. package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-C3UP9Jsi.mjs +478 -0
  30. package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-C3UP9Jsi.mjs.map +1 -0
  31. package/fesm2022/acorex-modules-report-management.mjs +71 -125
  32. package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
  33. package/fesm2022/{acorex-modules-workflow-management-task-board.page-Dp7SJ3NA.mjs → acorex-modules-workflow-management-task-board.page-zaSchG-u.mjs} +207 -86
  34. package/fesm2022/acorex-modules-workflow-management-task-board.page-zaSchG-u.mjs.map +1 -0
  35. package/fesm2022/acorex-modules-workflow-management.mjs +2 -2
  36. package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
  37. package/package.json +1 -1
  38. package/report-management/index.d.ts +74 -36
  39. package/fesm2022/acorex-modules-document-management-acorex-modules-document-management-CJYBHKUf.mjs.map +0 -1
  40. package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-S8qyvs79.mjs +0 -634
  41. package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-S8qyvs79.mjs.map +0 -1
  42. package/fesm2022/acorex-modules-report-management-run.command-DHPmdkSZ.mjs +0 -20
  43. package/fesm2022/acorex-modules-report-management-run.command-DHPmdkSZ.mjs.map +0 -1
  44. package/fesm2022/acorex-modules-workflow-management-task-board.page-Dp7SJ3NA.mjs.map +0 -1
@@ -0,0 +1,478 @@
1
+ import { AXBadgeModule } from '@acorex/components/badge';
2
+ import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';
3
+ import { AXButtonModule } from '@acorex/components/button';
4
+ import * as i4 from '@acorex/components/decorators';
5
+ import { AXDecoratorModule } from '@acorex/components/decorators';
6
+ import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
7
+ import { AXLoadingModule } from '@acorex/components/loading';
8
+ import * as i3 from '@acorex/components/search-box';
9
+ import { AXSearchBoxModule } from '@acorex/components/search-box';
10
+ import { AXTabsModule } from '@acorex/components/tabs';
11
+ import * as i5 from '@acorex/core/translation';
12
+ import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
13
+ import { AXUnsubscriber } from '@acorex/core/utils';
14
+ import { AXPReportDefinitionService } from '@acorex/platform/common';
15
+ import { AXPThemeLayoutBlockComponent, AXPThemeLayoutToolbarComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutStartSideComponent } from '@acorex/platform/layout/components';
16
+ import { AXPPageLayoutBaseComponent, AXPPageLayoutComponent, AXPPageLayoutBase } from '@acorex/platform/layout/views';
17
+ import { AXPLayoutThemeService } from '@acorex/platform/themes/shared';
18
+ import * as i1 from '@angular/common';
19
+ import { CommonModule } from '@angular/common';
20
+ import * as i0 from '@angular/core';
21
+ import { computed, inject, output, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
22
+ import * as i1$1 from '@angular/forms';
23
+ import { FormsModule } from '@angular/forms';
24
+ import { ActivatedRoute, Router, NavigationEnd, RouterModule } from '@angular/router';
25
+ import { merge, filter, startWith, firstValueFrom } from 'rxjs';
26
+ import { AXPPageStatus } from '@acorex/platform/layout/builder';
27
+ import { signalStore, withState, withComputed, withMethods, patchState, withHooks } from '@ngrx/signals';
28
+ import { isNil, isEmpty } from 'lodash-es';
29
+ import { AXLocaleService } from '@acorex/core/locale';
30
+ import { RootConfig } from './acorex-modules-report-management.mjs';
31
+ import * as i2 from '@acorex/components/tree-view';
32
+ import { AXTreeViewModule } from '@acorex/components/tree-view';
33
+ import { AXPWorkflowService } from '@acorex/platform/workflow';
34
+
35
+ const AXPReportRunnerRootViewModel = signalStore(withState(() => ({
36
+ activeCategory: undefined,
37
+ categories: [],
38
+ reports: [],
39
+ activeCategoriesPath: [],
40
+ //
41
+ searchExpression: null,
42
+ //
43
+ status: AXPPageStatus.Processing,
44
+ })), withComputed((store, layout = inject(AXPLayoutThemeService)) => ({
45
+ searchResults: computed(() => []),
46
+ hasActiveCategory: computed(() => store.activeCategory() != null),
47
+ showSideMenu: computed(() => layout.isLarge()),
48
+ isSearching: computed(() => store.searchExpression() != null),
49
+ isBusy: computed(() => store.status() == AXPPageStatus.Processing),
50
+ isLoaded: computed(() => store.activeCategory() != null),
51
+ title: computed(() => store.activeCategory()?.title ?? `@${RootConfig.config.i18n}:features.report-runner.page-title`),
52
+ description: computed(() => store.activeCategory()?.description ?? `@${RootConfig.config.i18n}:features.report-runner.page-description`),
53
+ })), withMethods((store, reportDefinitionService = inject(AXPReportDefinitionService)) => ({
54
+ async loadRootCategories() {
55
+ patchState(store, {
56
+ activeCategory: undefined,
57
+ reports: [],
58
+ activeCategoriesPath: [],
59
+ });
60
+ //
61
+ patchState(store, {
62
+ status: AXPPageStatus.Processing,
63
+ });
64
+ patchState(store, {
65
+ categories: await reportDefinitionService.getCategories(),
66
+ });
67
+ patchState(store, {
68
+ status: AXPPageStatus.Idle,
69
+ });
70
+ },
71
+ async getCategories(parentId) {
72
+ patchState(store, {
73
+ status: AXPPageStatus.Processing,
74
+ });
75
+ //
76
+ const result = await reportDefinitionService.getCategories(parentId);
77
+ //
78
+ patchState(store, {
79
+ status: AXPPageStatus.Idle,
80
+ });
81
+ //
82
+ return result;
83
+ },
84
+ async getReports(categoryId) {
85
+ patchState(store, {
86
+ status: AXPPageStatus.Processing,
87
+ });
88
+ //
89
+ const result = await reportDefinitionService.getReportsByCategoryId(categoryId);
90
+ //
91
+ patchState(store, {
92
+ status: AXPPageStatus.Idle,
93
+ });
94
+ //
95
+ return result;
96
+ },
97
+ async setActiveCategory(category) {
98
+ //
99
+ patchState(store, {
100
+ status: AXPPageStatus.Processing,
101
+ });
102
+ //
103
+ patchState(store, {
104
+ activeCategory: category,
105
+ });
106
+ //
107
+ patchState(store, {
108
+ categories: await reportDefinitionService.getCategories(category.id),
109
+ reports: await reportDefinitionService.getReportsByCategoryId(category.id),
110
+ activeCategoriesPath: await reportDefinitionService.getCategoriesPathById(category.id),
111
+ });
112
+ //
113
+ patchState(store, {
114
+ status: AXPPageStatus.Idle,
115
+ });
116
+ },
117
+ async setActiveCategoryById(id) {
118
+ //
119
+ patchState(store, {
120
+ status: AXPPageStatus.Processing,
121
+ });
122
+ //
123
+ const category = await reportDefinitionService.getCategoryById(id);
124
+ if (category) {
125
+ patchState(store, {
126
+ activeCategory: category,
127
+ });
128
+ //
129
+ patchState(store, {
130
+ categories: await reportDefinitionService.getCategories(category.id),
131
+ reports: await reportDefinitionService.getReportsByCategoryId(category.id),
132
+ activeCategoriesPath: await reportDefinitionService.getCategoriesPathById(category.id),
133
+ });
134
+ }
135
+ //
136
+ patchState(store, {
137
+ status: AXPPageStatus.Idle,
138
+ });
139
+ },
140
+ //
141
+ async search(expression) {
142
+ if (!isNil(expression) && !isEmpty(expression)) {
143
+ patchState(store, {
144
+ searchExpression: expression,
145
+ });
146
+ }
147
+ else {
148
+ patchState(store, {
149
+ searchExpression: null,
150
+ });
151
+ }
152
+ },
153
+ clearSearch() {
154
+ patchState(store, {
155
+ searchExpression: null,
156
+ });
157
+ },
158
+ })), withHooks((store, translationService = inject(AXTranslationService), localeService = inject(AXLocaleService)) => ({
159
+ async onInit() {
160
+ merge(translationService.langChanges$, localeService.profileChanged$).subscribe(async () => {
161
+ });
162
+ //
163
+ await store.loadRootCategories();
164
+ },
165
+ onDestroy() { },
166
+ })));
167
+
168
+ //#region ---- Imports ----
169
+ //#endregion
170
+ class AXPReportCategoriesTreeComponent {
171
+ constructor() {
172
+ //#region ---- Services & Dependencies ----
173
+ this.reportDefinitionService = inject(AXPReportDefinitionService);
174
+ //#endregion
175
+ //#region ---- Output Events ----
176
+ /**
177
+ * Emitted when a category node is clicked
178
+ */
179
+ this.categoryClick = output();
180
+ /**
181
+ * Emitted when a report node is clicked
182
+ */
183
+ this.reportClick = output();
184
+ //#endregion
185
+ //#region ---- Data Loading Methods ----
186
+ /**
187
+ * Provide lazy loading tree data
188
+ */
189
+ this.provideLazyTreeView = async (selectedItemId) => {
190
+ if (selectedItemId) {
191
+ const categories = (await this.reportDefinitionService.getCategories(selectedItemId)).map((item) => ({
192
+ id: item.id,
193
+ title: item.title,
194
+ hasChild: (item.hasChild || item.hasReport) ?? false,
195
+ item: item,
196
+ type: 'category',
197
+ expanded: isNil(item.parentId) ? true : false,
198
+ }));
199
+ const definitions = (await this.reportDefinitionService.getReportsByCategoryId(selectedItemId)).map((item) => ({
200
+ id: item.id,
201
+ title: item.title,
202
+ hasChild: false,
203
+ item: item,
204
+ type: 'definition',
205
+ expanded: false,
206
+ }));
207
+ return [...categories, ...definitions];
208
+ }
209
+ else {
210
+ const categories = await this.reportDefinitionService.getCategories();
211
+ const items = categories.map((item) => ({
212
+ id: item.id,
213
+ title: item.title,
214
+ hasChild: (item.hasChild || item.hasReport) ?? false,
215
+ item: item,
216
+ type: 'category',
217
+ expanded: false,
218
+ }));
219
+ return items;
220
+ }
221
+ };
222
+ }
223
+ //#endregion
224
+ //#region ---- Event Handlers ----
225
+ /**
226
+ * Handle tree node click events
227
+ */
228
+ async handleNodeClick(event) {
229
+ const node = event.data;
230
+ if (node.type === 'category') {
231
+ this.categoryClick.emit(node.item);
232
+ }
233
+ else if (node.type === 'definition') {
234
+ this.reportClick.emit(node.item);
235
+ }
236
+ }
237
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPReportCategoriesTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
238
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.7", type: AXPReportCategoriesTreeComponent, isStandalone: true, selector: "axp-report-categories-tree", outputs: { categoryClick: "categoryClick", reportClick: "reportClick" }, host: { classAttribute: "axp-report-categories-tree" }, ngImport: i0, template: "<ax-tree-view\n [showCheckbox]=\"false\"\n [itemTemplate]=\"itemTemplate\"\n [textField]=\"'title'\"\n [hasChildField]=\"'hasChild'\"\n [valueField]=\"'id'\"\n [expandedField]=\"'expanded'\"\n [items]=\"provideLazyTreeView\"\n (onNodeClick)=\"handleNodeClick($event)\"\n>\n</ax-tree-view>\n\n<ng-template #itemTemplate let-item>\n @if (item.type === 'category') {\n <ax-icon class=\"fas ax-text-warning fa-folder\"></ax-icon>\n } @else {\n <ax-icon class=\"fas ax-text-accent1 fa-file-chart-column\"></ax-icon>\n }\n {{ item.title }}\n</ng-template>\n", styles: [".axp-report-categories-tree{height:100%;width:100%}.axp-report-categories-tree .__tree-view .__item{display:flex;align-items:center;gap:.5rem}.axp-report-categories-tree .__tree-view .__item .__icon{flex-shrink:0}.axp-report-categories-tree .__tree-view .__item .__title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.axp-report-categories-tree .__tree-view .__item:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i4.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXTreeViewModule }, { kind: "component", type: i2.AXTreeViewComponent, selector: "ax-tree-view", inputs: ["items", "showCheckbox", "hasCheckboxField", "selectionMode", "selectionBehavior", "selectionScope", "focusNodeEnabled", "valueField", "textField", "visibleField", "disableField", "hasChildField", "selectedField", "expandedField", "tooltipField", "childrenField", "activeField", "indeterminateField", "parentField", "iconField", "toggleIcons", "look", "showEmptyNodeMassage", "itemTemplate", "emptyTemplate", "expandOn"], outputs: ["onSelectionChanged", "onItemSelectedChanged", "onNodeClick", "onCollapsedChanged", "onNodedbClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
239
+ }
240
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPReportCategoriesTreeComponent, decorators: [{
241
+ type: Component,
242
+ args: [{ selector: 'axp-report-categories-tree', standalone: true, imports: [
243
+ CommonModule,
244
+ AXDecoratorModule,
245
+ AXTreeViewModule,
246
+ ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { class: 'axp-report-categories-tree' }, template: "<ax-tree-view\n [showCheckbox]=\"false\"\n [itemTemplate]=\"itemTemplate\"\n [textField]=\"'title'\"\n [hasChildField]=\"'hasChild'\"\n [valueField]=\"'id'\"\n [expandedField]=\"'expanded'\"\n [items]=\"provideLazyTreeView\"\n (onNodeClick)=\"handleNodeClick($event)\"\n>\n</ax-tree-view>\n\n<ng-template #itemTemplate let-item>\n @if (item.type === 'category') {\n <ax-icon class=\"fas ax-text-warning fa-folder\"></ax-icon>\n } @else {\n <ax-icon class=\"fas ax-text-accent1 fa-file-chart-column\"></ax-icon>\n }\n {{ item.title }}\n</ng-template>\n", styles: [".axp-report-categories-tree{height:100%;width:100%}.axp-report-categories-tree .__tree-view .__item{display:flex;align-items:center;gap:.5rem}.axp-report-categories-tree .__tree-view .__item .__icon{flex-shrink:0}.axp-report-categories-tree .__tree-view .__item .__title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.axp-report-categories-tree .__tree-view .__item:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}\n"] }]
247
+ }] });
248
+
249
+ class AXMReportRunnerRootPageComponent extends AXPPageLayoutBaseComponent {
250
+ constructor() {
251
+ super(...arguments);
252
+ this.vm = inject(AXPReportRunnerRootViewModel);
253
+ this.layoutService = inject(AXPLayoutThemeService);
254
+ this.activatedRoute = inject(ActivatedRoute);
255
+ this.unsubscribe = inject(AXUnsubscriber);
256
+ this.reportDefinitionService = inject(AXPReportDefinitionService);
257
+ this.workflow = inject(AXPWorkflowService);
258
+ this.router = inject(Router);
259
+ this.baseRoutes = [this.sessionService.application?.name, 'report-management', 'reports'];
260
+ }
261
+ async ngOnInit() {
262
+ await super.ngOnInit();
263
+ //
264
+ this.router.events
265
+ .pipe(this.unsubscribe.takeUntilDestroy, filter((event) => event instanceof NavigationEnd), startWith(null))
266
+ .subscribe(async () => {
267
+ await this.loadFromRoute();
268
+ });
269
+ }
270
+ async loadFromRoute() {
271
+ const snapshot = this.activatedRoute.snapshot;
272
+ const segments = await firstValueFrom(this.activatedRoute.url);
273
+ let categoryId = segments[segments.length - 1]?.path ?? null;
274
+ if (categoryId) {
275
+ await this.vm.setActiveCategoryById(categoryId);
276
+ }
277
+ else {
278
+ await this.vm.loadRootCategories();
279
+ return;
280
+ }
281
+ //
282
+ let reportId = snapshot.queryParamMap.get('report') ?? null;
283
+ if (reportId) {
284
+ // Navigate directly to viewer instead of showing parameters
285
+ await this.navigateToViewer(reportId);
286
+ }
287
+ }
288
+ //#region ---- Event Handlers ----
289
+ /**
290
+ * Handle category selection from tree
291
+ */
292
+ async onCategoryClick(category) {
293
+ await this.navigateToCategory(category);
294
+ }
295
+ /**
296
+ * Handle report selection from tree
297
+ */
298
+ async onReportClick(report) {
299
+ await this.navigateToReport(report);
300
+ }
301
+ /**
302
+ * Navigate directly to report viewer with the selected report
303
+ */
304
+ async navigateToViewer(reportId) {
305
+ const baseViewerRoute = [this.sessionService.application?.name, 'report-management', 'viewer'];
306
+ await this.router.navigate(baseViewerRoute, {
307
+ queryParams: { reportId }
308
+ });
309
+ }
310
+ //#endregion
311
+ async navigateToCategory(category) {
312
+ // Find the path to this category
313
+ const path = await this.reportDefinitionService.getCategoriesPathById(category.id);
314
+ // Find the index of the target category in the path
315
+ let urlParts = [...this.baseRoutes];
316
+ for (const cat of path) {
317
+ urlParts.push(cat.id);
318
+ }
319
+ await this.router.navigate(urlParts);
320
+ }
321
+ async navigateToReport(report) {
322
+ // Navigate directly to viewer instead of showing parameters in runner
323
+ await this.navigateToViewer(report.id);
324
+ }
325
+ //#region ---- Page Configuration Overrides ----
326
+ async getPageBreadcrumbs() {
327
+ const path = this.vm.activeCategoriesPath();
328
+ const report = {
329
+ name: 'reports',
330
+ title: await this.translateService.translateAsync('@report-management:root-menu'),
331
+ command: {
332
+ name: 'navigate-to-reports-root',
333
+ },
334
+ };
335
+ if (!path || path.length === 0) {
336
+ return [report];
337
+ }
338
+ const breadcrumbs = [report];
339
+ let urlParts = [...this.baseRoutes];
340
+ for (const cat of path) {
341
+ urlParts = [...urlParts, cat.id];
342
+ breadcrumbs.push({
343
+ name: cat.id,
344
+ title: cat.title,
345
+ command: {
346
+ name: 'navigate-to-category',
347
+ options: {
348
+ category: cat,
349
+ },
350
+ },
351
+ });
352
+ }
353
+ return breadcrumbs;
354
+ }
355
+ async getSecondaryMenuItems() {
356
+ return [];
357
+ }
358
+ async getPageTitle() {
359
+ return this.vm.title();
360
+ }
361
+ async getPageDescription() {
362
+ return this.vm.description();
363
+ }
364
+ async getBackButton() {
365
+ const categoriesPath = this.vm.activeCategoriesPath();
366
+ if (!categoriesPath || categoriesPath.length === 0) {
367
+ // At root level, no back button
368
+ return null;
369
+ }
370
+ if (categoriesPath.length === 1) {
371
+ // At first level category, back to reports root
372
+ return {
373
+ title: await this.translateService.translateAsync('@report-management:root-menu'),
374
+ };
375
+ }
376
+ // At deeper level, back to parent category
377
+ const parentCategory = categoriesPath[categoriesPath.length - 2];
378
+ return {
379
+ title: parentCategory.title,
380
+ };
381
+ }
382
+ async onBackButtonClick() {
383
+ const categoriesPath = this.vm.activeCategoriesPath();
384
+ if (!categoriesPath || categoriesPath.length <= 1) {
385
+ // Navigate back to reports root
386
+ await this.router.navigate([...this.baseRoutes]);
387
+ }
388
+ else {
389
+ // Navigate to parent category
390
+ const parentCategoriesPath = categoriesPath.slice(0, -1);
391
+ let urlParts = [...this.baseRoutes];
392
+ for (const cat of parentCategoriesPath) {
393
+ urlParts.push(cat.id);
394
+ }
395
+ await this.router.navigate(urlParts);
396
+ }
397
+ }
398
+ async execute(command) {
399
+ switch (command.name) {
400
+ case 'navigate-to-category':
401
+ await this.navigateToCategory(command.options?.['category']);
402
+ break;
403
+ case 'navigate-to-reports-root':
404
+ await this.router.navigate([...this.baseRoutes]);
405
+ break;
406
+ case 'create-report':
407
+ await this.workflow.execute('report-create', {
408
+ data: {
409
+ categoryId: this.vm.activeCategory()?.id ?? null,
410
+ },
411
+ });
412
+ break;
413
+ }
414
+ }
415
+ async getPrimaryMenuItems() {
416
+ return [
417
+ {
418
+ title: 't("actions.create")',
419
+ icon: 'fa-light fa-plus',
420
+ color: 'primary',
421
+ command: {
422
+ name: 'create-report',
423
+ },
424
+ },
425
+ ];
426
+ }
427
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXMReportRunnerRootPageComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
428
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.7", type: AXMReportRunnerRootPageComponent, isStandalone: true, selector: "ng-component", host: { classAttribute: "axp-report-runner-root-page" }, providers: [
429
+ AXUnsubscriber,
430
+ AXPReportRunnerRootViewModel,
431
+ {
432
+ provide: AXPPageLayoutBase,
433
+ useExisting: AXMReportRunnerRootPageComponent,
434
+ },
435
+ ], usesInheritance: true, ngImport: i0, template: "<axp-page-layout *translate=\"let t\">\n @if (vm.showSideMenu()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>{{ t('@report-management:features.report-runner.menu-title') | async }}</axp-layout-title>\n <axp-layout-toolbar>\n <ax-search-box\n [delayTime]=\"300\"\n [ngModel]=\"vm.searchExpression()\"\n (onValueChanged)=\"vm.search($event.value)\"\n [placeholder]=\"t('search.placeholder') | async\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </axp-layout-toolbar>\n </axp-layout-header>\n <axp-layout-content>\n <axp-report-categories-tree (categoryClick)=\"onCategoryClick($event)\" (reportClick)=\"onReportClick($event)\" />\n </axp-layout-content>\n </axp-layout-start-side>\n }\n\n <axp-page-content>\n <!-- Desktop and Mobile: Always show browser template -->\n <ng-container *ngTemplateOutlet=\"browser\"> </ng-container>\n </axp-page-content>\n\n <!-- Desktop: Grid-based browser for main content -->\n <ng-template #browser>\n <div class=\"__reports-browser\">\n @if (vm.categories().length > 0) {\n <div class=\"__section\">\n <h3 class=\"__section-title\">Categories</h3>\n <div class=\"__items-grid\">\n @for (category of vm.categories(); track category.id) {\n <div class=\"__item __category\" (click)=\"navigateToCategory(category)\">\n <div class=\"__item-icon\">\n <ax-icon class=\"fa-solid fa-folder\"></ax-icon>\n </div>\n <div class=\"__item-content\">\n <div class=\"__item-title\">{{ category.title }}</div>\n @if (category.description) {\n <div class=\"__item-description\">{{ category.description }}</div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n @if (vm.reports().length > 0) {\n <div class=\"__section\">\n <h3 class=\"__section-title\">Reports</h3>\n <div class=\"__items-grid\">\n @for (report of vm.reports(); track report.id) {\n <div class=\"__item __report\" (click)=\"navigateToReport(report)\">\n <div class=\"__item-icon\">\n <ax-icon class=\"fa-solid fa-file-chart-column\"></ax-icon>\n </div>\n <div class=\"__item-content\">\n <div class=\"__item-title\">{{ report.title }}</div>\n @if (report.description) {\n <div class=\"__item-description\">{{ report.description }}</div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n @if (vm.categories().length === 0 && vm.reports().length === 0) {\n <div class=\"__empty-state\">\n <div class=\"__empty-icon\">\n <ax-icon class=\"fa-light fa-folder-open\"></ax-icon>\n </div>\n <div class=\"__empty-content\">\n <h4>No items found</h4>\n <p>There are no categories or reports available in this location.</p>\n </div>\n </div>\n }\n </div>\n </ng-template>\n</axp-page-layout>\n", styles: [".axp-report-runner-root-page axp-layout-start-side{height:100%;width:20rem;border-inline-end-width:1px;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}@media (min-width: 1920px){.axp-report-runner-root-page axp-layout-start-side{width:24rem}}.axp-report-runner-root-page axp-layout-start-side axp-layout-content{overflow-x:auto;padding-left:1rem;padding-right:1rem}.axp-report-runner-root-page .__reports-browser>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.axp-report-runner-root-page .__reports-browser{padding:.75rem}@media (min-width: 1024px){.axp-report-runner-root-page .__reports-browser{padding:1.5rem}}.axp-report-runner-root-page .__reports-browser .__section>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.axp-report-runner-root-page .__reports-browser .__section .__section-title{display:flex;align-items:center;gap:.5rem;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axp-report-runner-root-page .__reports-browser .__section .__section-title ax-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid{display:grid;grid-template-columns:repeat(1,minmax(0,1fr));gap:1rem}@media (min-width: 768px){.axp-report-runner-root-page .__reports-browser .__section .__items-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 1280px){.axp-report-runner-root-page .__reports-browser .__section .__items-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width: 1536px){.axp-report-runner-root-page .__reports-browser .__section .__items-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width: 2560px){.axp-report-runner-root-page .__reports-browser .__section .__items-grid{grid-template-columns:repeat(5,minmax(0,1fr))}}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item{cursor:pointer;border-radius:.5rem;border-width:1px;padding:1rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item{display:flex;align-items:flex-start;gap:.75rem}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item .__item-icon{display:flex;height:2.5rem;width:2.5rem;flex-shrink:0;align-items:center;justify-content:center;border-radius:.25rem;font-size:1.125rem;line-height:1.75rem}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item .__item-content{min-width:0px;flex:1 1 0%}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item .__item-content .__item-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item .__item-content .__item-description{margin-top:.25rem;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;font-size:.875rem;line-height:1.25rem;opacity:.75}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__category .__item-icon{background-color:rgba(var(--ax-sys-color-warning-500),.1)}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__category .__item-icon ax-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-500),var(--tw-text-opacity, 1))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__category:hover{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-warning-500),var(--tw-border-opacity, 1));background-color:rgba(var(--ax-sys-color-warning-500),.05)}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__report .__item-icon{background-color:rgba(var(--ax-sys-color-primary-500),.1)}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__report .__item-icon ax-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__report:hover{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1));background-color:rgba(var(--ax-sys-color-primary-500),.05)}.axp-report-runner-root-page .__reports-browser .__empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding-top:4rem;padding-bottom:4rem;text-align:center}.axp-report-runner-root-page .__reports-browser .__empty-state .__empty-icon{margin-bottom:1rem;font-size:3.75rem;line-height:1;opacity:.5}.axp-report-runner-root-page .__reports-browser .__empty-state .__empty-content h4{margin-bottom:.5rem;font-size:1.5rem;font-weight:500;line-height:1.5rem}.axp-report-runner-root-page .__reports-browser .__empty-state .__empty-content p{max-width:28rem;opacity:74%;display:block;font-size:1rem;font-weight:400;line-height:1.625rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type:
436
+ //
437
+ AXSearchBoxModule }, { kind: "component", type: i3.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i4.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i4.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i5.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXTabsModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "component", type:
438
+ //
439
+ AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXPThemeLayoutToolbarComponent, selector: "axp-layout-toolbar" }, { kind: "component", type: AXPThemeLayoutHeaderComponent, selector: "axp-layout-header" }, { kind: "component", type: AXPThemeLayoutStartSideComponent, selector: "axp-layout-page-start-side, axp-layout-start-side" }, { kind: "component", type:
440
+ //
441
+ AXPReportCategoriesTreeComponent, selector: "axp-report-categories-tree", outputs: ["categoryClick", "reportClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
442
+ }
443
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXMReportRunnerRootPageComponent, decorators: [{
444
+ type: Component,
445
+ args: [{ standalone: true, imports: [
446
+ CommonModule,
447
+ FormsModule,
448
+ RouterModule,
449
+ //
450
+ AXSearchBoxModule,
451
+ AXDecoratorModule,
452
+ AXBreadcrumbsModule,
453
+ AXTranslationModule,
454
+ AXButtonModule,
455
+ AXTabsModule,
456
+ AXBadgeModule,
457
+ AXLoadingModule,
458
+ AXDropdownButtonModule,
459
+ //
460
+ AXPPageLayoutComponent,
461
+ AXPThemeLayoutBlockComponent,
462
+ AXPThemeLayoutToolbarComponent,
463
+ AXPThemeLayoutHeaderComponent,
464
+ AXPThemeLayoutStartSideComponent,
465
+ //
466
+ AXPReportCategoriesTreeComponent,
467
+ ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
468
+ AXUnsubscriber,
469
+ AXPReportRunnerRootViewModel,
470
+ {
471
+ provide: AXPPageLayoutBase,
472
+ useExisting: AXMReportRunnerRootPageComponent,
473
+ },
474
+ ], host: { class: 'axp-report-runner-root-page' }, template: "<axp-page-layout *translate=\"let t\">\n @if (vm.showSideMenu()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>{{ t('@report-management:features.report-runner.menu-title') | async }}</axp-layout-title>\n <axp-layout-toolbar>\n <ax-search-box\n [delayTime]=\"300\"\n [ngModel]=\"vm.searchExpression()\"\n (onValueChanged)=\"vm.search($event.value)\"\n [placeholder]=\"t('search.placeholder') | async\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </axp-layout-toolbar>\n </axp-layout-header>\n <axp-layout-content>\n <axp-report-categories-tree (categoryClick)=\"onCategoryClick($event)\" (reportClick)=\"onReportClick($event)\" />\n </axp-layout-content>\n </axp-layout-start-side>\n }\n\n <axp-page-content>\n <!-- Desktop and Mobile: Always show browser template -->\n <ng-container *ngTemplateOutlet=\"browser\"> </ng-container>\n </axp-page-content>\n\n <!-- Desktop: Grid-based browser for main content -->\n <ng-template #browser>\n <div class=\"__reports-browser\">\n @if (vm.categories().length > 0) {\n <div class=\"__section\">\n <h3 class=\"__section-title\">Categories</h3>\n <div class=\"__items-grid\">\n @for (category of vm.categories(); track category.id) {\n <div class=\"__item __category\" (click)=\"navigateToCategory(category)\">\n <div class=\"__item-icon\">\n <ax-icon class=\"fa-solid fa-folder\"></ax-icon>\n </div>\n <div class=\"__item-content\">\n <div class=\"__item-title\">{{ category.title }}</div>\n @if (category.description) {\n <div class=\"__item-description\">{{ category.description }}</div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n @if (vm.reports().length > 0) {\n <div class=\"__section\">\n <h3 class=\"__section-title\">Reports</h3>\n <div class=\"__items-grid\">\n @for (report of vm.reports(); track report.id) {\n <div class=\"__item __report\" (click)=\"navigateToReport(report)\">\n <div class=\"__item-icon\">\n <ax-icon class=\"fa-solid fa-file-chart-column\"></ax-icon>\n </div>\n <div class=\"__item-content\">\n <div class=\"__item-title\">{{ report.title }}</div>\n @if (report.description) {\n <div class=\"__item-description\">{{ report.description }}</div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n @if (vm.categories().length === 0 && vm.reports().length === 0) {\n <div class=\"__empty-state\">\n <div class=\"__empty-icon\">\n <ax-icon class=\"fa-light fa-folder-open\"></ax-icon>\n </div>\n <div class=\"__empty-content\">\n <h4>No items found</h4>\n <p>There are no categories or reports available in this location.</p>\n </div>\n </div>\n }\n </div>\n </ng-template>\n</axp-page-layout>\n", styles: [".axp-report-runner-root-page axp-layout-start-side{height:100%;width:20rem;border-inline-end-width:1px;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}@media (min-width: 1920px){.axp-report-runner-root-page axp-layout-start-side{width:24rem}}.axp-report-runner-root-page axp-layout-start-side axp-layout-content{overflow-x:auto;padding-left:1rem;padding-right:1rem}.axp-report-runner-root-page .__reports-browser>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.axp-report-runner-root-page .__reports-browser{padding:.75rem}@media (min-width: 1024px){.axp-report-runner-root-page .__reports-browser{padding:1.5rem}}.axp-report-runner-root-page .__reports-browser .__section>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.axp-report-runner-root-page .__reports-browser .__section .__section-title{display:flex;align-items:center;gap:.5rem;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axp-report-runner-root-page .__reports-browser .__section .__section-title ax-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid{display:grid;grid-template-columns:repeat(1,minmax(0,1fr));gap:1rem}@media (min-width: 768px){.axp-report-runner-root-page .__reports-browser .__section .__items-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 1280px){.axp-report-runner-root-page .__reports-browser .__section .__items-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width: 1536px){.axp-report-runner-root-page .__reports-browser .__section .__items-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width: 2560px){.axp-report-runner-root-page .__reports-browser .__section .__items-grid{grid-template-columns:repeat(5,minmax(0,1fr))}}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item{cursor:pointer;border-radius:.5rem;border-width:1px;padding:1rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item{display:flex;align-items:flex-start;gap:.75rem}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item .__item-icon{display:flex;height:2.5rem;width:2.5rem;flex-shrink:0;align-items:center;justify-content:center;border-radius:.25rem;font-size:1.125rem;line-height:1.75rem}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item .__item-content{min-width:0px;flex:1 1 0%}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item .__item-content .__item-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item .__item-content .__item-description{margin-top:.25rem;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;font-size:.875rem;line-height:1.25rem;opacity:.75}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__category .__item-icon{background-color:rgba(var(--ax-sys-color-warning-500),.1)}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__category .__item-icon ax-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-500),var(--tw-text-opacity, 1))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__category:hover{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-warning-500),var(--tw-border-opacity, 1));background-color:rgba(var(--ax-sys-color-warning-500),.05)}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__report .__item-icon{background-color:rgba(var(--ax-sys-color-primary-500),.1)}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__report .__item-icon ax-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__report:hover{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1));background-color:rgba(var(--ax-sys-color-primary-500),.05)}.axp-report-runner-root-page .__reports-browser .__empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding-top:4rem;padding-bottom:4rem;text-align:center}.axp-report-runner-root-page .__reports-browser .__empty-state .__empty-icon{margin-bottom:1rem;font-size:3.75rem;line-height:1;opacity:.5}.axp-report-runner-root-page .__reports-browser .__empty-state .__empty-content h4{margin-bottom:.5rem;font-size:1.5rem;font-weight:500;line-height:1.5rem}.axp-report-runner-root-page .__reports-browser .__empty-state .__empty-content p{max-width:28rem;opacity:74%;display:block;font-size:1rem;font-weight:400;line-height:1.625rem}\n"] }]
475
+ }] });
476
+
477
+ export { AXMReportRunnerRootPageComponent };
478
+ //# sourceMappingURL=acorex-modules-report-management-report-runner-root-page.component-C3UP9Jsi.mjs.map