@acorex/modules 20.0.20 → 20.0.22

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.
@@ -1,634 +0,0 @@
1
- import { AXBadgeModule } from '@acorex/components/badge';
2
- import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';
3
- import * as i2$1 from '@acorex/components/button';
4
- import { AXButtonModule } from '@acorex/components/button';
5
- import * as i4 from '@acorex/components/decorators';
6
- import { AXDecoratorModule } from '@acorex/components/decorators';
7
- import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
8
- import { AXLoadingModule } from '@acorex/components/loading';
9
- import * as i3 from '@acorex/components/search-box';
10
- import { AXSearchBoxModule } from '@acorex/components/search-box';
11
- import { AXTabsModule } from '@acorex/components/tabs';
12
- import * as i5 from '@acorex/core/translation';
13
- import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
14
- import { AXUnsubscriber } from '@acorex/core/utils';
15
- import { AXPReportDefinitionService } from '@acorex/platform/common';
16
- import { AXPDynamicFormComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutToolbarComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutStartSideComponent } from '@acorex/platform/layout/components';
17
- import { AXPPageLayoutBaseComponent, AXPPageLayoutComponent, AXPPageLayoutBase } from '@acorex/platform/layout/views';
18
- import { AXPLayoutThemeService } from '@acorex/platform/themes/shared';
19
- import * as i1 from '@angular/common';
20
- import { CommonModule } from '@angular/common';
21
- import * as i0 from '@angular/core';
22
- import { computed, inject, output, ViewEncapsulation, ChangeDetectionStrategy, Component, viewChild } from '@angular/core';
23
- import * as i1$1 from '@angular/forms';
24
- import { FormsModule } from '@angular/forms';
25
- import { ActivatedRoute, Router, NavigationEnd, RouterModule } from '@angular/router';
26
- import { merge, filter, startWith, firstValueFrom } from 'rxjs';
27
- import { AXPPageStatus } from '@acorex/platform/layout/builder';
28
- import { signalStore, withState, withComputed, withMethods, patchState, withHooks } from '@ngrx/signals';
29
- import { isNil, isEmpty } from 'lodash-es';
30
- import { AXLocaleService } from '@acorex/core/locale';
31
- import { RootConfig } from './acorex-modules-report-management.mjs';
32
- import { AXPCommandService } from '@acorex/platform/runtime';
33
- import * as i2 from '@acorex/components/tree-view';
34
- import { AXTreeViewModule } from '@acorex/components/tree-view';
35
- import { AXPWorkflowService } from '@acorex/platform/workflow';
36
-
37
- const AXPReportRunnerRootViewModel = signalStore(withState(() => ({
38
- activeCategory: undefined,
39
- categories: [],
40
- activeReport: undefined,
41
- reports: [],
42
- activeCategoriesPath: [],
43
- //
44
- searchExpression: null,
45
- //
46
- previousContext: {},
47
- context: {},
48
- //
49
- status: AXPPageStatus.Processing,
50
- form: null,
51
- })), withComputed((store, layout = inject(AXPLayoutThemeService)) => ({
52
- searchResults: computed(() => []),
53
- hasActiveReport: computed(() => store.activeReport() != null),
54
- hasActiveCategory: computed(() => store.activeCategory() != null),
55
- showSideMenu: computed(() => layout.isLarge()),
56
- isSearching: computed(() => store.searchExpression() != null),
57
- isBusy: computed(() => store.status() == AXPPageStatus.Processing),
58
- isRunning: computed(() => store.status() == AXPPageStatus.Submitting),
59
- isLoaded: computed(() => store.activeCategory() != null),
60
- title: computed(() => store.activeReport() ?
61
- store.activeReport()?.title :
62
- store.activeCategory()?.title ?? `@${RootConfig.config.i18n}:features.report-runner.page-title`),
63
- description: computed(() => store.activeReport() ?
64
- store.activeReport()?.description :
65
- store.activeCategory()?.description ?? `@${RootConfig.config.i18n}:features.report-runner.page-description`),
66
- formDefinition: computed(() => {
67
- const report = store.activeReport();
68
- if (!report || !report.parameterGroups) {
69
- return { groups: [] };
70
- }
71
- return {
72
- groups: report.parameterGroups.map(group => ({
73
- name: group.name,
74
- title: group.title,
75
- description: group.description,
76
- parameters: group.parameters.map(param => ({
77
- path: param.path,
78
- title: param.title,
79
- description: param.description,
80
- widget: param.widget
81
- }))
82
- }))
83
- };
84
- }),
85
- })), withMethods((store, reportDefinitionService = inject(AXPReportDefinitionService), commandService = inject(AXPCommandService)) => ({
86
- async loadRootCategories() {
87
- patchState(store, {
88
- activeCategory: undefined,
89
- activeReport: undefined,
90
- reports: [],
91
- activeCategoriesPath: [],
92
- });
93
- //
94
- patchState(store, {
95
- status: AXPPageStatus.Processing,
96
- });
97
- patchState(store, {
98
- categories: await reportDefinitionService.getCategories(),
99
- });
100
- patchState(store, {
101
- status: AXPPageStatus.Idle,
102
- });
103
- },
104
- async getCategories(parentId) {
105
- patchState(store, {
106
- status: AXPPageStatus.Processing,
107
- });
108
- //
109
- const result = await reportDefinitionService.getCategories(parentId);
110
- //
111
- patchState(store, {
112
- status: AXPPageStatus.Idle,
113
- });
114
- //
115
- return result;
116
- },
117
- async getReports(categoryId) {
118
- patchState(store, {
119
- status: AXPPageStatus.Processing,
120
- });
121
- //
122
- const result = await reportDefinitionService.getReportsByCategoryId(categoryId);
123
- //
124
- patchState(store, {
125
- status: AXPPageStatus.Idle,
126
- });
127
- //
128
- return result;
129
- },
130
- registerForm(form) {
131
- patchState(store, {
132
- form: form,
133
- });
134
- },
135
- updateContext(context) {
136
- patchState(store, {
137
- context: { ...store.context(), ...context },
138
- });
139
- },
140
- updatePreviousContext(context) {
141
- patchState(store, {
142
- previousContext: { ...store.previousContext(), ...context },
143
- });
144
- },
145
- async setActiveCategory(category) {
146
- //
147
- patchState(store, {
148
- status: AXPPageStatus.Processing,
149
- });
150
- //
151
- patchState(store, {
152
- activeCategory: category,
153
- });
154
- //
155
- patchState(store, {
156
- categories: await reportDefinitionService.getCategories(category.id),
157
- reports: await reportDefinitionService.getReportsByCategoryId(category.id),
158
- activeCategoriesPath: await reportDefinitionService.getCategoriesPathById(category.id),
159
- });
160
- //
161
- patchState(store, {
162
- status: AXPPageStatus.Idle,
163
- });
164
- },
165
- async setActiveCategoryById(id) {
166
- //
167
- patchState(store, {
168
- status: AXPPageStatus.Processing,
169
- });
170
- //
171
- const category = await reportDefinitionService.getCategoryById(id);
172
- if (category) {
173
- patchState(store, {
174
- activeCategory: category,
175
- });
176
- //
177
- patchState(store, {
178
- categories: await reportDefinitionService.getCategories(category.id),
179
- reports: await reportDefinitionService.getReportsByCategoryId(category.id),
180
- activeCategoriesPath: await reportDefinitionService.getCategoriesPathById(category.id),
181
- });
182
- }
183
- //
184
- patchState(store, {
185
- status: AXPPageStatus.Idle,
186
- });
187
- },
188
- unsetActiveReport() {
189
- patchState(store, {
190
- activeReport: undefined,
191
- });
192
- },
193
- async setActivateReportById(id) {
194
- const report = await reportDefinitionService.getReportById(id);
195
- if (report) {
196
- report?.parameterGroups.forEach(group => {
197
- group.parameters.forEach(param => {
198
- param.widget.path = param.path;
199
- });
200
- });
201
- patchState(store, {
202
- activeReport: report,
203
- });
204
- }
205
- },
206
- //
207
- async search(expression) {
208
- if (!isNil(expression) && !isEmpty(expression)) {
209
- patchState(store, {
210
- searchExpression: expression,
211
- });
212
- }
213
- else {
214
- patchState(store, {
215
- searchExpression: null,
216
- });
217
- }
218
- },
219
- clearSearch() {
220
- patchState(store, {
221
- searchExpression: null,
222
- });
223
- },
224
- async run() {
225
- patchState(store, {
226
- status: AXPPageStatus.Submitting,
227
- });
228
- //
229
- try {
230
- await commandService.execute(`${RootConfig.entities.report.fullName}:Run`, {
231
- reportId: store.activeReport()?.id,
232
- context: store.context(),
233
- });
234
- }
235
- catch (error) {
236
- console.error(error);
237
- }
238
- finally {
239
- patchState(store, {
240
- status: AXPPageStatus.Idle,
241
- });
242
- }
243
- },
244
- async discard() {
245
- const form = store.form();
246
- form.resetErrors();
247
- //
248
- patchState(store, {
249
- status: AXPPageStatus.Idle,
250
- });
251
- patchState(store, {
252
- context: store.previousContext(),
253
- });
254
- },
255
- async resetToDefault() {
256
- },
257
- })), withHooks((store, translationService = inject(AXTranslationService), localeService = inject(AXLocaleService)) => ({
258
- async onInit() {
259
- merge(translationService.langChanges$, localeService.profileChanged$).subscribe(async () => {
260
- });
261
- //
262
- await store.loadRootCategories();
263
- },
264
- onDestroy() { },
265
- })));
266
-
267
- //#region ---- Imports ----
268
- //#endregion
269
- class AXPReportCategoriesTreeComponent {
270
- constructor() {
271
- //#region ---- Services & Dependencies ----
272
- this.reportDefinitionService = inject(AXPReportDefinitionService);
273
- //#endregion
274
- //#region ---- Output Events ----
275
- /**
276
- * Emitted when a category node is clicked
277
- */
278
- this.categoryClick = output();
279
- /**
280
- * Emitted when a report node is clicked
281
- */
282
- this.reportClick = output();
283
- //#endregion
284
- //#region ---- Data Loading Methods ----
285
- /**
286
- * Provide lazy loading tree data
287
- */
288
- this.provideLazyTreeView = async (selectedItemId) => {
289
- if (selectedItemId) {
290
- const categories = (await this.reportDefinitionService.getCategories(selectedItemId)).map((item) => ({
291
- id: item.id,
292
- title: item.title,
293
- hasChild: (item.hasChild || item.hasReport) ?? false,
294
- item: item,
295
- type: 'category',
296
- expanded: isNil(item.parentId) ? true : false,
297
- }));
298
- const definitions = (await this.reportDefinitionService.getReportsByCategoryId(selectedItemId)).map((item) => ({
299
- id: item.id,
300
- title: item.title,
301
- hasChild: false,
302
- item: item,
303
- type: 'definition',
304
- expanded: false,
305
- }));
306
- return [...categories, ...definitions];
307
- }
308
- else {
309
- const categories = await this.reportDefinitionService.getCategories();
310
- const items = categories.map((item) => ({
311
- id: item.id,
312
- title: item.title,
313
- hasChild: (item.hasChild || item.hasReport) ?? false,
314
- item: item,
315
- type: 'category',
316
- expanded: false,
317
- }));
318
- return items;
319
- }
320
- };
321
- }
322
- //#endregion
323
- //#region ---- Event Handlers ----
324
- /**
325
- * Handle tree node click events
326
- */
327
- async handleNodeClick(event) {
328
- const node = event.data;
329
- if (node.type === 'category') {
330
- this.categoryClick.emit(node.item);
331
- }
332
- else if (node.type === 'definition') {
333
- this.reportClick.emit(node.item);
334
- }
335
- }
336
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPReportCategoriesTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
337
- 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 }); }
338
- }
339
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPReportCategoriesTreeComponent, decorators: [{
340
- type: Component,
341
- args: [{ selector: 'axp-report-categories-tree', standalone: true, imports: [
342
- CommonModule,
343
- AXDecoratorModule,
344
- AXTreeViewModule,
345
- ], 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"] }]
346
- }] });
347
-
348
- class AXMReportRunnerRootPageComponent extends AXPPageLayoutBaseComponent {
349
- constructor() {
350
- super(...arguments);
351
- this.vm = inject(AXPReportRunnerRootViewModel);
352
- this.layoutService = inject(AXPLayoutThemeService);
353
- this.activatedRoute = inject(ActivatedRoute);
354
- this.unsubscribe = inject(AXUnsubscriber);
355
- this.reportDefinitionService = inject(AXPReportDefinitionService);
356
- this.dynamicForm = viewChild(AXPDynamicFormComponent);
357
- this.workflow = inject(AXPWorkflowService);
358
- this.router = inject(Router);
359
- this.baseRoutes = [this.sessionService.application?.name, 'report-management', 'reports'];
360
- this.defaultLayout = computed(() => {
361
- return {
362
- positions: {
363
- default: { colSpan: 12 },
364
- md: { colSpan: 8 },
365
- lg: { colSpan: 6 },
366
- xl: { colSpan: this.layoutService.isSideMenuOpen() ? 5 : 4 },
367
- xxl: { colSpan: 4 },
368
- },
369
- };
370
- });
371
- }
372
- async ngOnInit() {
373
- await super.ngOnInit();
374
- //
375
- this.router.events
376
- .pipe(this.unsubscribe.takeUntilDestroy, filter((event) => event instanceof NavigationEnd), startWith(null))
377
- .subscribe(async () => {
378
- await this.loadFromRoute();
379
- });
380
- }
381
- ngAfterViewInit() {
382
- // Register the form from the dynamic form component when available
383
- const form = this.dynamicForm()?.getForm();
384
- if (form) {
385
- this.vm.registerForm(form);
386
- }
387
- }
388
- handleContextChanged(context) {
389
- this.vm.updateContext(context);
390
- }
391
- handleContextInitiated(context) {
392
- this.vm.updatePreviousContext(context);
393
- }
394
- async loadFromRoute() {
395
- const snapshot = this.activatedRoute.snapshot;
396
- const segments = await firstValueFrom(this.activatedRoute.url);
397
- let categoryId = segments[segments.length - 1]?.path ?? null;
398
- if (categoryId) {
399
- await this.vm.setActiveCategoryById(categoryId);
400
- }
401
- else {
402
- await this.vm.loadRootCategories();
403
- return;
404
- }
405
- //
406
- let reportId = snapshot.queryParamMap.get('report') ?? null;
407
- if (reportId) {
408
- await this.vm.setActivateReportById(reportId);
409
- }
410
- else {
411
- await this.vm.unsetActiveReport();
412
- }
413
- }
414
- //#region ---- Event Handlers ----
415
- /**
416
- * Handle category selection from tree
417
- */
418
- async onCategoryClick(category) {
419
- await this.navigateToCategory(category);
420
- }
421
- /**
422
- * Handle report selection from tree
423
- */
424
- async onReportClick(report) {
425
- await this.navigateToReport(report);
426
- }
427
- /**
428
- * Navigate to report viewer with current report and parameters
429
- */
430
- async navigateToViewer() {
431
- const activeReport = this.vm.activeReport();
432
- if (!activeReport) {
433
- return;
434
- }
435
- const parameters = this.vm.context();
436
- const baseViewerRoute = [this.sessionService.application?.name, 'report-management', 'viewer'];
437
- await this.router.navigate(baseViewerRoute, {
438
- queryParams: {
439
- reportId: activeReport.id,
440
- // Include current form parameters as query params for auto-execution
441
- ...parameters
442
- }
443
- });
444
- }
445
- //#endregion
446
- async navigateToCategory(category) {
447
- // Find the path to this category
448
- const path = await this.reportDefinitionService.getCategoriesPathById(category.id);
449
- // Find the index of the target category in the path
450
- let urlParts = [...this.baseRoutes];
451
- for (const cat of path) {
452
- urlParts.push(cat.id);
453
- }
454
- await this.router.navigate(urlParts);
455
- }
456
- async navigateToReport(report) {
457
- // Use the current category path for the URL
458
- const path = await this.reportDefinitionService.getCategoriesPathByReportId(report.id);
459
- let urlParts = [...this.baseRoutes];
460
- for (const cat of path) {
461
- urlParts.push(cat.id);
462
- }
463
- await this.router.navigate(urlParts, { queryParams: { report: report.id } });
464
- }
465
- //#region ---------------- Page Configuration Overrides ----------------
466
- async getPageBreadcrumbs() {
467
- const path = this.vm.activeCategoriesPath();
468
- const report = {
469
- name: 'reports',
470
- title: await this.translateService.translateAsync('@report-management:features.report-runner.menu-title'),
471
- command: {
472
- name: 'navigate-to-reports-root',
473
- },
474
- };
475
- if (!path || path.length === 0) {
476
- return [report];
477
- }
478
- const breadcrumbs = [report];
479
- let urlParts = [...this.baseRoutes];
480
- for (const cat of path) {
481
- urlParts = [...urlParts, cat.id];
482
- breadcrumbs.push({
483
- name: cat.id,
484
- title: cat.title,
485
- command: {
486
- name: 'navigate-to-category',
487
- options: {
488
- category: cat,
489
- },
490
- },
491
- });
492
- }
493
- return breadcrumbs;
494
- }
495
- async getSecondaryMenuItems() {
496
- if (this.vm.activeCategory()) {
497
- return [
498
- {
499
- title: await this.translateService.translateAsync('actions.restore-defaults.title', { scope: 'settings' }),
500
- icon: 'fa-light fa-rotate-left',
501
- color: 'danger',
502
- command: {
503
- name: 'restore-defaults',
504
- },
505
- },
506
- ];
507
- }
508
- return [];
509
- }
510
- async getPageTitle() {
511
- return this.vm.title();
512
- }
513
- async getPageDescription() {
514
- return this.vm.description();
515
- }
516
- async getBackButton() {
517
- const categoriesPath = this.vm.activeCategoriesPath();
518
- if (!categoriesPath || categoriesPath.length === 0) {
519
- // At root level, no back button
520
- return null;
521
- }
522
- if (categoriesPath.length === 1) {
523
- // At first level category, back to reports root
524
- return {
525
- title: await this.translateService.translateAsync('@report-management:features.report-runner.menu-title'),
526
- };
527
- }
528
- // At deeper level, back to parent category
529
- const parentCategory = categoriesPath[categoriesPath.length - 2];
530
- return {
531
- title: parentCategory.title,
532
- };
533
- }
534
- async onBackButtonClick() {
535
- const categoriesPath = this.vm.activeCategoriesPath();
536
- if (!categoriesPath || categoriesPath.length <= 1) {
537
- // Navigate back to reports root
538
- await this.router.navigate([...this.baseRoutes]);
539
- }
540
- else {
541
- // Navigate to parent category
542
- const parentCategoriesPath = categoriesPath.slice(0, -1);
543
- let urlParts = [...this.baseRoutes];
544
- for (const cat of parentCategoriesPath) {
545
- urlParts.push(cat.id);
546
- }
547
- await this.router.navigate(urlParts);
548
- }
549
- }
550
- async execute(command) {
551
- switch (command.name) {
552
- case 'restore-defaults':
553
- await this.vm.resetToDefault();
554
- break;
555
- case 'navigate-to-category':
556
- await this.navigateToCategory(command.options?.['category']);
557
- break;
558
- case 'navigate-to-reports-root':
559
- await this.router.navigate([...this.baseRoutes]);
560
- break;
561
- case 'create-report':
562
- await this.workflow.execute('report-create', {
563
- data: {
564
- categoryId: this.vm.activeCategory()?.id ?? null,
565
- },
566
- });
567
- break;
568
- }
569
- }
570
- async getPrimaryMenuItems() {
571
- return [
572
- {
573
- title: 't("actions.create")',
574
- icon: 'fa-light fa-plus',
575
- color: 'primary',
576
- command: {
577
- name: 'create-report',
578
- },
579
- },
580
- ];
581
- }
582
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXMReportRunnerRootPageComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
583
- 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: [
584
- AXUnsubscriber,
585
- AXPReportRunnerRootViewModel,
586
- {
587
- provide: AXPPageLayoutBase,
588
- useExisting: AXMReportRunnerRootPageComponent,
589
- },
590
- ], viewQueries: [{ propertyName: "dynamicForm", first: true, predicate: AXPDynamicFormComponent, descendants: true, isSignal: true }], 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 @if (vm.showSideMenu()) {\n <!-- Desktop: Show parameters view when report is selected, or grid browser when no report -->\n @if (vm.hasActiveReport()) {\n <div class=\"__parameters-view\">\n <axp-dynamic-form\n [formDefinition]=\"vm.formDefinition()\"\n [context]=\"vm.context()\"\n [layoutConfig]=\"defaultLayout()\"\n (contextChange)=\"handleContextChanged($event)\"\n (contextInitiated)=\"handleContextInitiated($event)\"\n >\n </axp-dynamic-form>\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"browser\"> </ng-container>\n }\n } @else {\n <!-- Mobile: Show parameters view when report is selected, or mobile browser for navigation -->\n @if (vm.hasActiveReport()) {\n <div class=\"__parameters-view\">\n <axp-dynamic-form\n [formDefinition]=\"vm.formDefinition()\"\n [context]=\"vm.context()\"\n [layoutConfig]=\"defaultLayout()\"\n (contextChange)=\"handleContextChanged($event)\"\n (contextInitiated)=\"handleContextInitiated($event)\"\n >\n </axp-dynamic-form>\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"browser\"> </ng-container>\n }\n }\n </axp-page-content>\n\n <!-- Desktop: Grid-based browser for main content when no report selected -->\n <ng-template #browser>\n <div class=\"__reports-browser __desktop\">\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\n @if (vm.hasActiveReport()) {\n <axp-page-footer class=\"--animated\">\n <axp-layout-suffix>\n <ax-button\n [class.ax-sm]=\"layoutService.isSmall()\"\n [disabled]=\"vm.isBusy()\"\n [text]=\"t('@report-management:features.report-viewer.actions.execute') | async\"\n (onClick)=\"navigateToViewer()\"\n [color]=\"'primary'\"\n >\n <ax-prefix>\n <ax-icon class=\"fa-light fa-play\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </axp-layout-suffix>\n </axp-page-footer>\n }\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:1.5rem}.axp-report-runner-root-page .__reports-browser.__mobile>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.axp-report-runner-root-page .__reports-browser.__mobile{padding:1rem}.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.__mobile .__mobile-search{margin-bottom:1.5rem}.axp-report-runner-root-page .__reports-browser.__mobile .__section .__items-grid{grid-template-columns:repeat(1,minmax(0,1fr));gap:.75rem}.axp-report-runner-root-page .__reports-browser.__mobile .__section .__items-grid .__item{padding:.75rem}.axp-report-runner-root-page .__reports-browser.__mobile .__section .__items-grid .__item .__item-icon{height:2rem;width:2rem;font-size:1rem;line-height:1.5rem}.axp-report-runner-root-page .__reports-browser.__mobile .__section .__items-grid .__item .__item-content .__item-title{font-size:1rem;line-height:1.5rem}.axp-report-runner-root-page .__reports-browser.__mobile .__section .__items-grid .__item .__item-content .__item-description{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;font-size:.75rem;line-height:1rem}.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:
591
- //
592
- 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: "component", type: i4.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i5.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTabsModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "component", type:
593
- //
594
- 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:
595
- //
596
- AXPDynamicFormComponent, selector: "axp-dynamic-form", inputs: ["formDefinition", "context", "layoutStyle", "layoutConfig"], outputs: ["contextChange", "contextInitiated", "validityChange"] }, { kind: "component", type: AXPReportCategoriesTreeComponent, selector: "axp-report-categories-tree", outputs: ["categoryClick", "reportClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
597
- }
598
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXMReportRunnerRootPageComponent, decorators: [{
599
- type: Component,
600
- args: [{ standalone: true, imports: [
601
- CommonModule,
602
- FormsModule,
603
- RouterModule,
604
- //
605
- AXSearchBoxModule,
606
- AXDecoratorModule,
607
- AXBreadcrumbsModule,
608
- AXTranslationModule,
609
- AXButtonModule,
610
- AXTabsModule,
611
- AXBadgeModule,
612
- AXLoadingModule,
613
- AXDropdownButtonModule,
614
- //
615
- AXPPageLayoutComponent,
616
- AXPThemeLayoutBlockComponent,
617
- AXPThemeLayoutToolbarComponent,
618
- AXPThemeLayoutHeaderComponent,
619
- AXPThemeLayoutStartSideComponent,
620
- //
621
- AXPDynamicFormComponent,
622
- AXPReportCategoriesTreeComponent,
623
- ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
624
- AXUnsubscriber,
625
- AXPReportRunnerRootViewModel,
626
- {
627
- provide: AXPPageLayoutBase,
628
- useExisting: AXMReportRunnerRootPageComponent,
629
- },
630
- ], 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 @if (vm.showSideMenu()) {\n <!-- Desktop: Show parameters view when report is selected, or grid browser when no report -->\n @if (vm.hasActiveReport()) {\n <div class=\"__parameters-view\">\n <axp-dynamic-form\n [formDefinition]=\"vm.formDefinition()\"\n [context]=\"vm.context()\"\n [layoutConfig]=\"defaultLayout()\"\n (contextChange)=\"handleContextChanged($event)\"\n (contextInitiated)=\"handleContextInitiated($event)\"\n >\n </axp-dynamic-form>\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"browser\"> </ng-container>\n }\n } @else {\n <!-- Mobile: Show parameters view when report is selected, or mobile browser for navigation -->\n @if (vm.hasActiveReport()) {\n <div class=\"__parameters-view\">\n <axp-dynamic-form\n [formDefinition]=\"vm.formDefinition()\"\n [context]=\"vm.context()\"\n [layoutConfig]=\"defaultLayout()\"\n (contextChange)=\"handleContextChanged($event)\"\n (contextInitiated)=\"handleContextInitiated($event)\"\n >\n </axp-dynamic-form>\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"browser\"> </ng-container>\n }\n }\n </axp-page-content>\n\n <!-- Desktop: Grid-based browser for main content when no report selected -->\n <ng-template #browser>\n <div class=\"__reports-browser __desktop\">\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\n @if (vm.hasActiveReport()) {\n <axp-page-footer class=\"--animated\">\n <axp-layout-suffix>\n <ax-button\n [class.ax-sm]=\"layoutService.isSmall()\"\n [disabled]=\"vm.isBusy()\"\n [text]=\"t('@report-management:features.report-viewer.actions.execute') | async\"\n (onClick)=\"navigateToViewer()\"\n [color]=\"'primary'\"\n >\n <ax-prefix>\n <ax-icon class=\"fa-light fa-play\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </axp-layout-suffix>\n </axp-page-footer>\n }\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:1.5rem}.axp-report-runner-root-page .__reports-browser.__mobile>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.axp-report-runner-root-page .__reports-browser.__mobile{padding:1rem}.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.__mobile .__mobile-search{margin-bottom:1.5rem}.axp-report-runner-root-page .__reports-browser.__mobile .__section .__items-grid{grid-template-columns:repeat(1,minmax(0,1fr));gap:.75rem}.axp-report-runner-root-page .__reports-browser.__mobile .__section .__items-grid .__item{padding:.75rem}.axp-report-runner-root-page .__reports-browser.__mobile .__section .__items-grid .__item .__item-icon{height:2rem;width:2rem;font-size:1rem;line-height:1.5rem}.axp-report-runner-root-page .__reports-browser.__mobile .__section .__items-grid .__item .__item-content .__item-title{font-size:1rem;line-height:1.5rem}.axp-report-runner-root-page .__reports-browser.__mobile .__section .__items-grid .__item .__item-content .__item-description{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;font-size:.75rem;line-height:1rem}.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"] }]
631
- }] });
632
-
633
- export { AXMReportRunnerRootPageComponent };
634
- //# sourceMappingURL=acorex-modules-report-management-report-runner-root-page.component-S8qyvs79.mjs.map