@acorex/modules 20.3.0-next.4 → 20.3.0-next.6

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 (86) hide show
  1. package/fesm2022/acorex-modules-content-management.mjs.map +1 -1
  2. package/fesm2022/{acorex-modules-document-management-acorex-modules-document-management-DDriJFmP.mjs → acorex-modules-document-management-acorex-modules-document-management-DhEDQZru.mjs} +122 -80
  3. package/fesm2022/{acorex-modules-document-management-acorex-modules-document-management-DDriJFmP.mjs.map → acorex-modules-document-management-acorex-modules-document-management-DhEDQZru.mjs.map} +1 -1
  4. package/fesm2022/{acorex-modules-document-management-attachment-widget.component-OYJu4IJz.mjs → acorex-modules-document-management-attachment-widget.component-Bx2Ps7uX.mjs} +2 -2
  5. package/fesm2022/{acorex-modules-document-management-attachment-widget.component-OYJu4IJz.mjs.map → acorex-modules-document-management-attachment-widget.component-Bx2Ps7uX.mjs.map} +1 -1
  6. package/fesm2022/{acorex-modules-document-management-create-folder-dialog.component-CZzlGMcu.mjs → acorex-modules-document-management-create-folder-dialog.component-B26m8qWj.mjs} +2 -2
  7. package/fesm2022/{acorex-modules-document-management-create-folder-dialog.component-CZzlGMcu.mjs.map → acorex-modules-document-management-create-folder-dialog.component-B26m8qWj.mjs.map} +1 -1
  8. package/fesm2022/{acorex-modules-document-management-details-view.component-VdV7xGPS.mjs → acorex-modules-document-management-details-view.component-3DmulyK_.mjs} +2 -2
  9. package/fesm2022/{acorex-modules-document-management-details-view.component-VdV7xGPS.mjs.map → acorex-modules-document-management-details-view.component-3DmulyK_.mjs.map} +1 -1
  10. package/fesm2022/{acorex-modules-document-management-document-signature-popup.component-Gi0_m0oe.mjs → acorex-modules-document-management-document-signature-popup.component-DmR6gFdD.mjs} +2 -2
  11. package/fesm2022/{acorex-modules-document-management-document-signature-popup.component-Gi0_m0oe.mjs.map → acorex-modules-document-management-document-signature-popup.component-DmR6gFdD.mjs.map} +1 -1
  12. package/fesm2022/{acorex-modules-document-management-drive-choose.component-BgRZ_nhs.mjs → acorex-modules-document-management-drive-choose.component-BNyPOrzl.mjs} +2 -2
  13. package/fesm2022/{acorex-modules-document-management-drive-choose.component-BgRZ_nhs.mjs.map → acorex-modules-document-management-drive-choose.component-BNyPOrzl.mjs.map} +1 -1
  14. package/fesm2022/{acorex-modules-document-management-drive.component-BRCGsnuI.mjs → acorex-modules-document-management-drive.component-D5X_bI5D.mjs} +2 -2
  15. package/fesm2022/{acorex-modules-document-management-drive.component-BRCGsnuI.mjs.map → acorex-modules-document-management-drive.component-D5X_bI5D.mjs.map} +1 -1
  16. package/fesm2022/{acorex-modules-document-management-large-icons-view.component-CnsPx3K3.mjs → acorex-modules-document-management-large-icons-view.component-AzDtXQqt.mjs} +2 -2
  17. package/fesm2022/{acorex-modules-document-management-large-icons-view.component-CnsPx3K3.mjs.map → acorex-modules-document-management-large-icons-view.component-AzDtXQqt.mjs.map} +1 -1
  18. package/fesm2022/{acorex-modules-document-management-large-tiles-view.component-D4OUme1W.mjs → acorex-modules-document-management-large-tiles-view.component-DCG_v9JT.mjs} +2 -2
  19. package/fesm2022/{acorex-modules-document-management-large-tiles-view.component-D4OUme1W.mjs.map → acorex-modules-document-management-large-tiles-view.component-DCG_v9JT.mjs.map} +1 -1
  20. package/fesm2022/{acorex-modules-document-management-list-view.component-C7i4jI9h.mjs → acorex-modules-document-management-list-view.component-Cb2OVElN.mjs} +2 -2
  21. package/fesm2022/{acorex-modules-document-management-list-view.component-C7i4jI9h.mjs.map → acorex-modules-document-management-list-view.component-Cb2OVElN.mjs.map} +1 -1
  22. package/fesm2022/{acorex-modules-document-management-rename-node-dialog.component-DHVn7RIv.mjs → acorex-modules-document-management-rename-node-dialog.component-B7gcoDDb.mjs} +2 -2
  23. package/fesm2022/{acorex-modules-document-management-rename-node-dialog.component-DHVn7RIv.mjs.map → acorex-modules-document-management-rename-node-dialog.component-B7gcoDDb.mjs.map} +1 -1
  24. package/fesm2022/{acorex-modules-document-management-small-icons-view.component-By36moe5.mjs → acorex-modules-document-management-small-icons-view.component-EN4ttbvx.mjs} +2 -2
  25. package/fesm2022/{acorex-modules-document-management-small-icons-view.component-By36moe5.mjs.map → acorex-modules-document-management-small-icons-view.component-EN4ttbvx.mjs.map} +1 -1
  26. package/fesm2022/{acorex-modules-document-management-small-tiles-view.component-CO6MfsEU.mjs → acorex-modules-document-management-small-tiles-view.component-C-HjbNwe.mjs} +2 -2
  27. package/fesm2022/{acorex-modules-document-management-small-tiles-view.component-CO6MfsEU.mjs.map → acorex-modules-document-management-small-tiles-view.component-C-HjbNwe.mjs.map} +1 -1
  28. package/fesm2022/acorex-modules-document-management.mjs +1 -1
  29. package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-WkDn4mpE.mjs → acorex-modules-human-capital-management-acorex-modules-human-capital-management-BQ_KNd7M.mjs} +23 -12
  30. package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-WkDn4mpE.mjs.map → acorex-modules-human-capital-management-acorex-modules-human-capital-management-BQ_KNd7M.mjs.map} +1 -1
  31. package/fesm2022/{acorex-modules-human-capital-management-employee-skill.entity-DsUYujPr.mjs → acorex-modules-human-capital-management-employee-skill.entity-3wofaUXu.mjs} +2 -2
  32. package/fesm2022/{acorex-modules-human-capital-management-employee-skill.entity-DsUYujPr.mjs.map → acorex-modules-human-capital-management-employee-skill.entity-3wofaUXu.mjs.map} +1 -1
  33. package/fesm2022/{acorex-modules-human-capital-management-employee.entity-CC-LIIki.mjs → acorex-modules-human-capital-management-employee.entity-1fVathnk.mjs} +10 -8
  34. package/fesm2022/acorex-modules-human-capital-management-employee.entity-1fVathnk.mjs.map +1 -0
  35. package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-Mgkdm2vo.mjs → acorex-modules-human-capital-management-employment-type.entity-BWrwli0P.mjs} +2 -2
  36. package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-Mgkdm2vo.mjs.map → acorex-modules-human-capital-management-employment-type.entity-BWrwli0P.mjs.map} +1 -1
  37. package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-BJyciZGL.mjs → acorex-modules-human-capital-management-leave-request.entity-4ddc6R_K.mjs} +2 -2
  38. package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-BJyciZGL.mjs.map → acorex-modules-human-capital-management-leave-request.entity-4ddc6R_K.mjs.map} +1 -1
  39. package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-IewYlMLV.mjs → acorex-modules-human-capital-management-leave-type.entity-DYYJVRju.mjs} +2 -2
  40. package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-IewYlMLV.mjs.map → acorex-modules-human-capital-management-leave-type.entity-DYYJVRju.mjs.map} +1 -1
  41. package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-BlKFRnO0.mjs → acorex-modules-human-capital-management-position-assignment.entity-DIqdhqk4.mjs} +7 -53
  42. package/fesm2022/acorex-modules-human-capital-management-position-assignment.entity-DIqdhqk4.mjs.map +1 -0
  43. package/fesm2022/{acorex-modules-human-capital-management-skill-level.entity-De1qKpcU.mjs → acorex-modules-human-capital-management-skill-level.entity-BN67pBaa.mjs} +2 -2
  44. package/fesm2022/{acorex-modules-human-capital-management-skill-level.entity-De1qKpcU.mjs.map → acorex-modules-human-capital-management-skill-level.entity-BN67pBaa.mjs.map} +1 -1
  45. package/fesm2022/{acorex-modules-human-capital-management-skill.entity-RrnBU0M5.mjs → acorex-modules-human-capital-management-skill.entity-D4CglCC7.mjs} +2 -2
  46. package/fesm2022/{acorex-modules-human-capital-management-skill.entity-RrnBU0M5.mjs.map → acorex-modules-human-capital-management-skill.entity-D4CglCC7.mjs.map} +1 -1
  47. package/fesm2022/acorex-modules-human-capital-management.mjs +1 -1
  48. package/fesm2022/acorex-modules-organization-management-org-chart.page-keZ4Gk7y.mjs +544 -0
  49. package/fesm2022/acorex-modules-organization-management-org-chart.page-keZ4Gk7y.mjs.map +1 -0
  50. package/fesm2022/{acorex-modules-organization-management-position.entity-DK-i78ck.mjs → acorex-modules-organization-management-position.entity-CzBbuApR.mjs} +47 -1
  51. package/fesm2022/acorex-modules-organization-management-position.entity-CzBbuApR.mjs.map +1 -0
  52. package/fesm2022/{acorex-modules-organization-management-settings.provider-feVwZnkw.mjs → acorex-modules-organization-management-settings.provider-BvOAb0jb.mjs} +21 -2
  53. package/fesm2022/acorex-modules-organization-management-settings.provider-BvOAb0jb.mjs.map +1 -0
  54. package/fesm2022/acorex-modules-organization-management.mjs +358 -240
  55. package/fesm2022/acorex-modules-organization-management.mjs.map +1 -1
  56. package/fesm2022/acorex-modules-report-management.mjs +76 -16
  57. package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
  58. package/fesm2022/{acorex-modules-settings-management-setting-page.component-Y-liTcuX.mjs → acorex-modules-settings-management-setting-page.component-IG1o_0Dp.mjs} +17 -14
  59. package/fesm2022/acorex-modules-settings-management-setting-page.component-IG1o_0Dp.mjs.map +1 -0
  60. package/fesm2022/acorex-modules-settings-management.mjs +1 -1
  61. package/fesm2022/acorex-modules-settings-management.mjs.map +1 -1
  62. package/organization-management/README.md +98 -2
  63. package/organization-management/index.d.ts +44 -123
  64. package/package.json +1 -1
  65. package/report-management/index.d.ts +31 -3
  66. package/fesm2022/acorex-modules-human-capital-management-employee.entity-CC-LIIki.mjs.map +0 -1
  67. package/fesm2022/acorex-modules-human-capital-management-position-assignment.entity-BlKFRnO0.mjs.map +0 -1
  68. package/fesm2022/acorex-modules-organization-management-add-item.component-CtuULLkY.mjs +0 -89
  69. package/fesm2022/acorex-modules-organization-management-add-item.component-CtuULLkY.mjs.map +0 -1
  70. package/fesm2022/acorex-modules-organization-management-branch.entity-C4Le6Kv6.mjs +0 -317
  71. package/fesm2022/acorex-modules-organization-management-branch.entity-C4Le6Kv6.mjs.map +0 -1
  72. package/fesm2022/acorex-modules-organization-management-department.entity-BkEbajpN.mjs +0 -288
  73. package/fesm2022/acorex-modules-organization-management-department.entity-BkEbajpN.mjs.map +0 -1
  74. package/fesm2022/acorex-modules-organization-management-division.entity-Cds8jkR5.mjs +0 -515
  75. package/fesm2022/acorex-modules-organization-management-division.entity-Cds8jkR5.mjs.map +0 -1
  76. package/fesm2022/acorex-modules-organization-management-org-chart-configuration.page-DfwjhVRX.mjs +0 -116
  77. package/fesm2022/acorex-modules-organization-management-org-chart-configuration.page-DfwjhVRX.mjs.map +0 -1
  78. package/fesm2022/acorex-modules-organization-management-org-chart-configuration.service-D7NlQXp2.mjs +0 -147
  79. package/fesm2022/acorex-modules-organization-management-org-chart-configuration.service-D7NlQXp2.mjs.map +0 -1
  80. package/fesm2022/acorex-modules-organization-management-org-chart.page-DeqD7PyH.mjs +0 -989
  81. package/fesm2022/acorex-modules-organization-management-org-chart.page-DeqD7PyH.mjs.map +0 -1
  82. package/fesm2022/acorex-modules-organization-management-position.entity-DK-i78ck.mjs.map +0 -1
  83. package/fesm2022/acorex-modules-organization-management-settings.keys-B3cgSi_S.mjs +0 -22
  84. package/fesm2022/acorex-modules-organization-management-settings.keys-B3cgSi_S.mjs.map +0 -1
  85. package/fesm2022/acorex-modules-organization-management-settings.provider-feVwZnkw.mjs.map +0 -1
  86. package/fesm2022/acorex-modules-settings-management-setting-page.component-Y-liTcuX.mjs.map +0 -1
@@ -39,6 +39,7 @@ import { AXDonutChartComponent } from '@acorex/charts/donut-chart';
39
39
  import { AXLineChartComponent } from '@acorex/charts/line-chart';
40
40
  import * as i1$3 from '@acorex/components/data-table';
41
41
  import { AXDataTableModule } from '@acorex/components/data-table';
42
+ import { AXBadgeModule } from '@acorex/components/badge';
42
43
 
43
44
  const config = {
44
45
  i18n: 'report-management',
@@ -1493,6 +1494,9 @@ const AXPReportViewerViewModel = signalStore(withState(() => ({
1493
1494
  filterContext: {},
1494
1495
  categoriesPath: [],
1495
1496
  allowFetchData: false,
1497
+ shouldExecuteReport: false,
1498
+ lastAppliedFilterContext: null, // Track last applied filters
1499
+ hasBeenExecuted: false, // Track if report has been executed at least once
1496
1500
  status: AXPPageStatus.Idle,
1497
1501
  error: null,
1498
1502
  })), withComputed((store) => ({
@@ -1558,7 +1562,14 @@ const AXPReportViewerViewModel = signalStore(withState(() => ({
1558
1562
  path: param.path,
1559
1563
  title: param.title,
1560
1564
  description: param.description,
1561
- widget: param.widget
1565
+ widget: {
1566
+ ...param.widget,
1567
+ options: {
1568
+ ...param.widget.options,
1569
+ clearButton: true,
1570
+ hasClearButton: true
1571
+ }
1572
+ }
1562
1573
  }))
1563
1574
  }))
1564
1575
  };
@@ -1568,6 +1579,34 @@ const AXPReportViewerViewModel = signalStore(withState(() => ({
1568
1579
  isTableLayout: computed(() => store.currentLayout()?.layout?.type === 'table'),
1569
1580
  isChartLayout: computed(() => store.currentLayout()?.layout?.type === 'chart'),
1570
1581
  //#endregion
1582
+ //#region ---- Filter States ----
1583
+ hasUnappliedFilters: computed(() => {
1584
+ const currentContext = store.filterContext();
1585
+ const lastApplied = store.lastAppliedFilterContext();
1586
+ const hasBeenExecuted = store.hasBeenExecuted();
1587
+ // If report has never been executed, don't show unapplied filters warning
1588
+ if (!hasBeenExecuted) {
1589
+ return false;
1590
+ }
1591
+ // If no filters have been applied yet, return true
1592
+ if (lastApplied === null) {
1593
+ return true;
1594
+ }
1595
+ // Check if current filters are different from last applied filters
1596
+ const currentKeys = Object.keys(currentContext);
1597
+ const lastKeys = Object.keys(lastApplied);
1598
+ if (currentKeys.length !== lastKeys.length) {
1599
+ return true;
1600
+ }
1601
+ // Check if any values are different
1602
+ for (const key of currentKeys) {
1603
+ if (currentContext[key] !== lastApplied[key]) {
1604
+ return true;
1605
+ }
1606
+ }
1607
+ return false;
1608
+ }),
1609
+ //#endregion
1571
1610
  //#region ---- Action States ----
1572
1611
  canExecute: computed(() => store.reportDefinition() !== null &&
1573
1612
  store.currentLayout() !== null &&
@@ -1594,10 +1633,11 @@ const AXPReportViewerViewModel = signalStore(withState(() => ({
1594
1633
  }
1595
1634
  patchState(store, {
1596
1635
  status: AXPPageStatus.Submitting,
1597
- error: null
1598
- });
1599
- patchState(store, {
1600
- allowFetchData: true
1636
+ error: null,
1637
+ allowFetchData: true,
1638
+ shouldExecuteReport: true,
1639
+ lastAppliedFilterContext: { ...store.filterContext() }, // Mark current filters as applied
1640
+ hasBeenExecuted: true // Mark that report has been executed at least once
1601
1641
  });
1602
1642
  patchState(store, {
1603
1643
  status: AXPPageStatus.Submitted,
@@ -1671,6 +1711,7 @@ const AXPReportViewerViewModel = signalStore(withState(() => ({
1671
1711
  categoriesPath: categoriesPath || [],
1672
1712
  filterContext: {}, // Reset context when loading new report
1673
1713
  allowFetchData: false,
1714
+ hasBeenExecuted: false, // Reset execution state for new report
1674
1715
  });
1675
1716
  }
1676
1717
  }
@@ -1708,12 +1749,16 @@ const AXPReportViewerViewModel = signalStore(withState(() => ({
1708
1749
  updateFilterContext(context) {
1709
1750
  patchState(store, {
1710
1751
  filterContext: { ...store.filterContext(), ...context },
1752
+ shouldExecuteReport: false, // Reset execution flag when filters change
1711
1753
  });
1712
1754
  },
1713
1755
  clearFilters() {
1714
1756
  patchState(store, {
1715
1757
  allowFetchData: false,
1758
+ shouldExecuteReport: false,
1716
1759
  filterContext: {},
1760
+ lastAppliedFilterContext: null, // Reset applied filters when clearing
1761
+ hasBeenExecuted: false, // Reset execution state when clearing filters
1717
1762
  });
1718
1763
  },
1719
1764
  resetFilters() {
@@ -1754,6 +1799,9 @@ const AXPReportViewerViewModel = signalStore(withState(() => ({
1754
1799
  currentLayout: null,
1755
1800
  filterContext: {},
1756
1801
  allowFetchData: false,
1802
+ shouldExecuteReport: false,
1803
+ lastAppliedFilterContext: null,
1804
+ hasBeenExecuted: false,
1757
1805
  categoriesPath: [],
1758
1806
  status: AXPPageStatus.Idle,
1759
1807
  error: null,
@@ -1817,7 +1865,7 @@ class AXPReportChartViewComponent {
1817
1865
  * Effect to fetch chart data when conditions are met
1818
1866
  */
1819
1867
  this.#fetchData = effect(() => {
1820
- if (this.vm.allowFetchData() && this.chartOptions()) {
1868
+ if (this.vm.allowFetchData() && this.vm.shouldExecuteReport() && this.chartOptions()) {
1821
1869
  this.vm.fetchData().then((data) => {
1822
1870
  const raw = ((data?.data).data ?? {});
1823
1871
  switch (this.chartType()) {
@@ -1897,15 +1945,20 @@ class AXPReportTableViewComponent {
1897
1945
  this.commandService = inject(AXPCommandService);
1898
1946
  this.grid = viewChild('grid', ...(ngDevMode ? [{ debugName: "grid" }] : []));
1899
1947
  //#endregion
1900
- //#region ---- Computed Properties ----
1901
- this.layout = computed(() => {
1902
- return this.vm.currentLayout()?.layout;
1903
- }, ...(ngDevMode ? [{ debugName: "layout" }] : []));
1948
+ //#region ---- Effects ----
1949
+ /**
1950
+ * Effect to handle data fetching when report is executed
1951
+ */
1904
1952
  this.#fetchData = effect(() => {
1905
- if (this.grid() && this.vm.allowFetchData()) {
1953
+ if (this.grid() && this.vm.allowFetchData() && this.vm.shouldExecuteReport()) {
1906
1954
  this.grid()?.refresh();
1907
1955
  }
1908
1956
  }, ...(ngDevMode ? [{ debugName: "#fetchData" }] : []));
1957
+ //#endregion
1958
+ //#region ---- Computed Properties ----
1959
+ this.layout = computed(() => {
1960
+ return this.vm.currentLayout()?.layout;
1961
+ }, ...(ngDevMode ? [{ debugName: "layout" }] : []));
1909
1962
  this.dataSource = new AXDataSource({
1910
1963
  load: async (e) => {
1911
1964
  if (!this.vm.allowFetchData()) {
@@ -1970,6 +2023,11 @@ class AXPReportTableViewComponent {
1970
2023
  handleRowAction(name, data) {
1971
2024
  this.commandService.execute(name, data);
1972
2025
  }
2026
+ //#endregion
2027
+ //#region ---- Effects ----
2028
+ /**
2029
+ * Effect to handle data fetching when report is executed
2030
+ */
1973
2031
  #fetchData;
1974
2032
  //#endregion
1975
2033
  //#region ---- Helpers ----
@@ -1979,7 +2037,7 @@ class AXPReportTableViewComponent {
1979
2037
  return {
1980
2038
  icon: action.icon ?? 'fa-light fa-eye',
1981
2039
  text: action.title,
1982
- name: action.name,
2040
+ name: action.command?.name ?? action.name,
1983
2041
  divided: action.break,
1984
2042
  color: action.color,
1985
2043
  };
@@ -1988,7 +2046,7 @@ class AXPReportTableViewComponent {
1988
2046
  return {
1989
2047
  icon: defaultAction.icon ?? 'fa-light fa-eye',
1990
2048
  text: defaultAction.title,
1991
- name: defaultAction.name,
2049
+ name: defaultAction.name ?? defaultAction.command?.name,
1992
2050
  divided: defaultAction.break,
1993
2051
  color: defaultAction.color,
1994
2052
  };
@@ -2100,6 +2158,7 @@ class AXPReportViewerPageComponent extends AXPPageLayoutBaseComponent {
2100
2158
  await this.vm.executeReport();
2101
2159
  }
2102
2160
  handleRefresh() {
2161
+ debugger;
2103
2162
  this.vm.refresh();
2104
2163
  }
2105
2164
  handleClearFilters() {
@@ -2258,7 +2317,7 @@ class AXPReportViewerPageComponent extends AXPPageLayoutBaseComponent {
2258
2317
  provide: AXPPageLayoutBase,
2259
2318
  useExisting: AXPReportViewerPageComponent,
2260
2319
  },
2261
- ], viewQueries: [{ propertyName: "filtersForm", first: true, predicate: ["filtersForm"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<axp-page-layout *translate=\"let t\">\n <!-- Left Panel: Filters (Always visible for desktop) -->\n @if (showFiltersPanel()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>\n {{ t('@report-management:features.report-viewer.filters.title') | async }}\n </axp-layout-title>\n </axp-layout-header>\n <axp-layout-content>\n <div class=\"__filters-container\">\n <axp-dynamic-form\n #filtersForm\n [formDefinition]=\"vm.formDefinition()\"\n [context]=\"vm.filterContext()\"\n [layoutConfig]=\"defaultLayout()\"\n [layoutLook]=\"'compact'\"\n (contextChange)=\"handleFiltersChange($event)\"\n (contextInitiated)=\"handleFiltersInitiated($event)\"\n >\n </axp-dynamic-form>\n </div>\n </axp-layout-content>\n <axp-layout-footer class=\"ax-p-4 ax-border-t\">\n <ax-button\n [class.ax-sm]=\"layoutService.isSmall()\"\n class=\"ax-w-full\"\n [text]=\"t('@report-management:features.report-viewer.actions.execute') | async\"\n [color]=\"'primary'\"\n (onClick)=\"execute({ name: 'execute-report' })\"\n >\n <ax-prefix>\n <ax-icon class=\"fa-light fa-play\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </axp-layout-footer>\n </axp-layout-start-side>\n }\n\n <axp-page-toolbar>\n <axp-layout-prefix>\n @if (vm.hasMultipleLayouts()) {\n <ax-button [text]=\"vm.currentLayout()?.title\">\n <ax-icon icon=\"fa-light {{ vm.currentLayout()?.icon }}\"></ax-icon>\n <ax-dropdown-panel>\n @for (layout of vm.availableLayouts(); track layout.id) {\n <ax-button-item-list>\n <ax-button-item\n [text]=\"layout.title\"\n [selected]=\"vm.currentLayout()?.id === layout.id\"\n (onClick)=\"vm.switchLayout(layout.id)\"\n >\n <ax-icon icon=\"fa-light {{ layout.icon }}\"></ax-icon>\n </ax-button-item>\n </ax-button-item-list>\n }\n </ax-dropdown-panel>\n </ax-button>\n }\n </axp-layout-prefix>\n <axp-layout-suffix> </axp-layout-suffix>\n </axp-page-toolbar>\n\n <!-- Main Content: Report Display -->\n <axp-page-content class=\"ax-overflow-auto\">\n @if (!vm.reportDefinition()) {\n <ng-container *ngTemplateOutlet=\"noReport\"></ng-container>\n } @else {\n <ng-container *ngTemplateOutlet=\"reportDisplay\"></ng-container>\n }\n </axp-page-content>\n</axp-page-layout>\n\n<!-- Report Display Area -->\n<ng-template #reportDisplay>\n @if (vm.isTableLayout()) {\n <axp-report-table-view> </axp-report-table-view>\n } @else if (vm.isChartLayout()) {\n <axp-report-chart-view> </axp-report-chart-view>\n }\n</ng-template>\n\n<!-- No Report Selected State -->\n<ng-template #noReport>\n <div class=\"__no-report\" *translate=\"let t\">\n <div class=\"__no-report-icon\">\n <ax-icon class=\"fa-light fa-chart-line\"></ax-icon>\n </div>\n <div class=\"__no-report-content\">\n <h3 class=\"__no-report-title\">\n {{ t('@report-management:features.report-viewer.no-report.title') | async }}\n </h3>\n <p class=\"__no-report-description\">\n {{ t('@report-management:features.report-viewer.no-report.description') | async }}\n </p>\n <div class=\"__no-report-actions\">\n <ax-button\n look=\"outline\"\n color=\"primary\"\n [text]=\"t('@report-management:features.report-viewer.no-report.browse-reports') | async\"\n >\n <ax-prefix>\n <ax-icon class=\"fa-light fa-folder-open\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [".axp-report-viewer-page{display:flex;height:100%;width:100%;flex-direction:column}.axp-report-viewer-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-viewer-page axp-layout-start-side{width:24rem}}.axp-report-viewer-page axp-layout-start-side>axp-layout-header{height:73px;border-bottom-width:1px}.axp-report-viewer-page axp-layout-start-side axp-layout-content{overflow-x:auto;padding:.5rem}.axp-report-viewer-page axp-layout-start-side axp-layout-content .__filters-container axp-layout-sections{gap:0px!important}.axp-report-viewer-page axp-layout-start-side axp-layout-content .__filters-container axp-layout-sections axp-layout-section{border-style:none!important;padding:0!important;--tw-shadow: 0 0 #0000 !important;--tw-shadow-colored: 0 0 #0000 !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.axp-report-viewer-page .__mobile-filters{flex-shrink:0;border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));padding:1rem;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-viewer-page axp-page-content{display:flex;height:100%;flex-direction:column}.axp-report-viewer-page .__no-report{display:flex;height:100%;flex-direction:column;align-items:center;justify-content:center;padding:2rem;text-align:center}.axp-report-viewer-page .__no-report .__no-report-icon{margin-bottom:1rem;font-size:3.75rem;line-height:1;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1));opacity:.5}.axp-report-viewer-page .__no-report .__no-report-content{max-width:28rem}.axp-report-viewer-page .__no-report .__no-report-content .__no-report-title{margin-bottom:.5rem;font-size:1.25rem;line-height:1.75rem;font-weight:600}.axp-report-viewer-page .__no-report .__no-report-content .__no-report-description{margin-bottom:1.5rem;font-size:.875rem;line-height:1.25rem;opacity:.75}.axp-report-viewer-page .__no-report .__no-report-content .__no-report-actions{display:flex;justify-content:center}.axp-report-viewer-page axp-report-table-view{flex:1 1 0%;overflow:hidden}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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: "component", type: i2$1.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i2$1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.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: AXLoadingModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i1$1.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i5.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type:
2320
+ ], viewQueries: [{ propertyName: "filtersForm", first: true, predicate: ["filtersForm"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<axp-page-layout *translate=\"let t\">\n <!-- Left Panel: Filters (Always visible for desktop) -->\n @if (showFiltersPanel()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>\n {{ t('@report-management:features.report-viewer.filters.title') | async }}\n </axp-layout-title>\n </axp-layout-header>\n <axp-layout-content>\n <div class=\"__filters-container\">\n <axp-dynamic-form #filtersForm [formDefinition]=\"vm.formDefinition()\" [context]=\"vm.filterContext()\"\n [layoutConfig]=\"defaultLayout()\" [layoutLook]=\"'compact'\" (contextChange)=\"handleFiltersChange($event)\"\n (contextInitiated)=\"handleFiltersInitiated($event)\">\n </axp-dynamic-form>\n </div>\n </axp-layout-content>\n <axp-layout-footer class=\"ax-p-4 ax-border-t\" *translate=\"let t\">\n @if (vm.hasUnappliedFilters()) {\n <div class=\"ax-w-full ax-warning-lightest ax-mb-2 ax-p-2 ax-rounded ax-border ax-border-warning-200\">\n <div class=\"ax-flex ax-items-center ax-gap-2 ax-text-warning-800\">\n <ax-icon class=\"fa-light fa-exclamation-triangle ax-text-sm\"></ax-icon>\n <span class=\"ax-text-xs\">Filters have been changed but not applied. Click 'Execute Report' to apply\n changes.</span>\n </div>\n </div>\n }\n <ax-button [class.ax-sm]=\"layoutService.isSmall()\" class=\"ax-w-full\"\n [disabled]=\"vm.hasUnappliedFilters() === false && vm.hasBeenExecuted()\"\n [text]=\"t('@report-management:features.report-viewer.actions.execute') | async\" [color]=\"'primary'\"\n (onClick)=\"execute({ name: 'execute-report' })\">\n <ax-prefix>\n <ax-icon class=\"fa-light fa-play\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </axp-layout-footer>\n </axp-layout-start-side>\n }\n\n <axp-page-toolbar>\n <axp-layout-prefix>\n @if (vm.hasMultipleLayouts()) {\n <ax-button [text]=\"vm.currentLayout()?.title\">\n <ax-icon icon=\"fa-light {{ vm.currentLayout()?.icon }}\"></ax-icon>\n <ax-dropdown-panel>\n @for (layout of vm.availableLayouts(); track layout.id) {\n <ax-button-item-list>\n <ax-button-item [text]=\"layout.title\" [selected]=\"vm.currentLayout()?.id === layout.id\"\n (onClick)=\"vm.switchLayout(layout.id)\">\n <ax-icon icon=\"fa-light {{ layout.icon }}\"></ax-icon>\n </ax-button-item>\n </ax-button-item-list>\n }\n </ax-dropdown-panel>\n </ax-button>\n }\n </axp-layout-prefix>\n <axp-layout-suffix> </axp-layout-suffix>\n </axp-page-toolbar>\n\n <!-- Main Content: Report Display -->\n <axp-page-content class=\"ax-overflow-auto\">\n @if (!vm.reportDefinition()) {\n <ng-container *ngTemplateOutlet=\"noReport\"></ng-container>\n } @else {\n <ng-container *ngTemplateOutlet=\"reportDisplay\"></ng-container>\n }\n </axp-page-content>\n</axp-page-layout>\n\n<!-- Report Display Area -->\n<ng-template #reportDisplay>\n @if (vm.isTableLayout()) {\n <axp-report-table-view> </axp-report-table-view>\n } @else if (vm.isChartLayout()) {\n <axp-report-chart-view> </axp-report-chart-view>\n }\n</ng-template>\n\n<!-- No Report Selected State -->\n<ng-template #noReport>\n <div class=\"__no-report\" *translate=\"let t\">\n <div class=\"__no-report-icon\">\n <ax-icon class=\"fa-light fa-chart-line\"></ax-icon>\n </div>\n <div class=\"__no-report-content\">\n <h3 class=\"__no-report-title\">\n {{ t('@report-management:features.report-viewer.no-report.title') | async }}\n </h3>\n <p class=\"__no-report-description\">\n {{ t('@report-management:features.report-viewer.no-report.description') | async }}\n </p>\n <div class=\"__no-report-actions\">\n <ax-button look=\"outline\" color=\"primary\"\n [text]=\"t('@report-management:features.report-viewer.no-report.browse-reports') | async\">\n <ax-prefix>\n <ax-icon class=\"fa-light fa-folder-open\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </div>\n </div>\n</ng-template>", styles: [".axp-report-viewer-page{display:flex;height:100%;width:100%;flex-direction:column}.axp-report-viewer-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-viewer-page axp-layout-start-side{width:24rem}}.axp-report-viewer-page axp-layout-start-side>axp-layout-header{height:73px;border-bottom-width:1px}.axp-report-viewer-page axp-layout-start-side axp-layout-content{overflow-x:auto;padding:.5rem}.axp-report-viewer-page axp-layout-start-side axp-layout-content .__filters-container axp-layout-sections{gap:0px!important}.axp-report-viewer-page axp-layout-start-side axp-layout-content .__filters-container axp-layout-sections axp-layout-section{border-style:none!important;padding:0!important;--tw-shadow: 0 0 #0000 !important;--tw-shadow-colored: 0 0 #0000 !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.axp-report-viewer-page .__mobile-filters{flex-shrink:0;border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));padding:1rem;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-viewer-page axp-page-content{display:flex;height:100%;flex-direction:column}.axp-report-viewer-page .__no-report{display:flex;height:100%;flex-direction:column;align-items:center;justify-content:center;padding:2rem;text-align:center}.axp-report-viewer-page .__no-report .__no-report-icon{margin-bottom:1rem;font-size:3.75rem;line-height:1;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1));opacity:.5}.axp-report-viewer-page .__no-report .__no-report-content{max-width:28rem}.axp-report-viewer-page .__no-report .__no-report-content .__no-report-title{margin-bottom:.5rem;font-size:1.25rem;line-height:1.75rem;font-weight:600}.axp-report-viewer-page .__no-report .__no-report-content .__no-report-description{margin-bottom:1.5rem;font-size:.875rem;line-height:1.25rem;opacity:.75}.axp-report-viewer-page .__no-report .__no-report-content .__no-report-actions{display:flex;justify-content:center}.axp-report-viewer-page axp-report-table-view{flex:1 1 0%;overflow:hidden}.axp-report-viewer-page .ax-filter{filter:grayscale(100%) blur(1px)}.axp-report-viewer-page .ax-grayscale{filter:grayscale(100%)}.axp-report-viewer-page .ax-blur-sm{filter:blur(1px)}.axp-report-viewer-page .ax-pointer-events-none{pointer-events:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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: "component", type: i2$1.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i2$1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.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: AXLoadingModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i1$1.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i5.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type:
2262
2321
  //
2263
2322
  AXPDynamicFormComponent, selector: "axp-dynamic-form", inputs: ["formDefinition", "context", "layoutLook", "layoutDirection", "layoutConfig"], outputs: ["contextChange", "contextInitiated", "validityChange"] }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPThemeLayoutStartSideComponent, selector: "axp-layout-page-start-side, axp-layout-start-side" }, { kind: "component", type: AXPThemeLayoutHeaderComponent, selector: "axp-layout-header" }, { 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: AXPReportTableViewComponent, selector: "axp-report-table-view" }, { kind: "component", type: AXPThemeLayoutFooterComponent, selector: "axp-layout-footer, axp-layout-page-footer" }, { kind: "component", type: AXPReportChartViewComponent, selector: "axp-report-chart-view" }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
2264
2323
  }
@@ -2272,6 +2331,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImpor
2272
2331
  AXTranslationModule,
2273
2332
  AXDropdownButtonModule,
2274
2333
  AXDropdownModule,
2334
+ AXBadgeModule,
2275
2335
  //
2276
2336
  AXPDynamicFormComponent,
2277
2337
  AXPPageLayoutComponent,
@@ -2288,7 +2348,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImpor
2288
2348
  provide: AXPPageLayoutBase,
2289
2349
  useExisting: AXPReportViewerPageComponent,
2290
2350
  },
2291
- ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { class: 'axp-report-viewer-page' }, template: "<axp-page-layout *translate=\"let t\">\n <!-- Left Panel: Filters (Always visible for desktop) -->\n @if (showFiltersPanel()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>\n {{ t('@report-management:features.report-viewer.filters.title') | async }}\n </axp-layout-title>\n </axp-layout-header>\n <axp-layout-content>\n <div class=\"__filters-container\">\n <axp-dynamic-form\n #filtersForm\n [formDefinition]=\"vm.formDefinition()\"\n [context]=\"vm.filterContext()\"\n [layoutConfig]=\"defaultLayout()\"\n [layoutLook]=\"'compact'\"\n (contextChange)=\"handleFiltersChange($event)\"\n (contextInitiated)=\"handleFiltersInitiated($event)\"\n >\n </axp-dynamic-form>\n </div>\n </axp-layout-content>\n <axp-layout-footer class=\"ax-p-4 ax-border-t\">\n <ax-button\n [class.ax-sm]=\"layoutService.isSmall()\"\n class=\"ax-w-full\"\n [text]=\"t('@report-management:features.report-viewer.actions.execute') | async\"\n [color]=\"'primary'\"\n (onClick)=\"execute({ name: 'execute-report' })\"\n >\n <ax-prefix>\n <ax-icon class=\"fa-light fa-play\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </axp-layout-footer>\n </axp-layout-start-side>\n }\n\n <axp-page-toolbar>\n <axp-layout-prefix>\n @if (vm.hasMultipleLayouts()) {\n <ax-button [text]=\"vm.currentLayout()?.title\">\n <ax-icon icon=\"fa-light {{ vm.currentLayout()?.icon }}\"></ax-icon>\n <ax-dropdown-panel>\n @for (layout of vm.availableLayouts(); track layout.id) {\n <ax-button-item-list>\n <ax-button-item\n [text]=\"layout.title\"\n [selected]=\"vm.currentLayout()?.id === layout.id\"\n (onClick)=\"vm.switchLayout(layout.id)\"\n >\n <ax-icon icon=\"fa-light {{ layout.icon }}\"></ax-icon>\n </ax-button-item>\n </ax-button-item-list>\n }\n </ax-dropdown-panel>\n </ax-button>\n }\n </axp-layout-prefix>\n <axp-layout-suffix> </axp-layout-suffix>\n </axp-page-toolbar>\n\n <!-- Main Content: Report Display -->\n <axp-page-content class=\"ax-overflow-auto\">\n @if (!vm.reportDefinition()) {\n <ng-container *ngTemplateOutlet=\"noReport\"></ng-container>\n } @else {\n <ng-container *ngTemplateOutlet=\"reportDisplay\"></ng-container>\n }\n </axp-page-content>\n</axp-page-layout>\n\n<!-- Report Display Area -->\n<ng-template #reportDisplay>\n @if (vm.isTableLayout()) {\n <axp-report-table-view> </axp-report-table-view>\n } @else if (vm.isChartLayout()) {\n <axp-report-chart-view> </axp-report-chart-view>\n }\n</ng-template>\n\n<!-- No Report Selected State -->\n<ng-template #noReport>\n <div class=\"__no-report\" *translate=\"let t\">\n <div class=\"__no-report-icon\">\n <ax-icon class=\"fa-light fa-chart-line\"></ax-icon>\n </div>\n <div class=\"__no-report-content\">\n <h3 class=\"__no-report-title\">\n {{ t('@report-management:features.report-viewer.no-report.title') | async }}\n </h3>\n <p class=\"__no-report-description\">\n {{ t('@report-management:features.report-viewer.no-report.description') | async }}\n </p>\n <div class=\"__no-report-actions\">\n <ax-button\n look=\"outline\"\n color=\"primary\"\n [text]=\"t('@report-management:features.report-viewer.no-report.browse-reports') | async\"\n >\n <ax-prefix>\n <ax-icon class=\"fa-light fa-folder-open\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [".axp-report-viewer-page{display:flex;height:100%;width:100%;flex-direction:column}.axp-report-viewer-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-viewer-page axp-layout-start-side{width:24rem}}.axp-report-viewer-page axp-layout-start-side>axp-layout-header{height:73px;border-bottom-width:1px}.axp-report-viewer-page axp-layout-start-side axp-layout-content{overflow-x:auto;padding:.5rem}.axp-report-viewer-page axp-layout-start-side axp-layout-content .__filters-container axp-layout-sections{gap:0px!important}.axp-report-viewer-page axp-layout-start-side axp-layout-content .__filters-container axp-layout-sections axp-layout-section{border-style:none!important;padding:0!important;--tw-shadow: 0 0 #0000 !important;--tw-shadow-colored: 0 0 #0000 !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.axp-report-viewer-page .__mobile-filters{flex-shrink:0;border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));padding:1rem;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-viewer-page axp-page-content{display:flex;height:100%;flex-direction:column}.axp-report-viewer-page .__no-report{display:flex;height:100%;flex-direction:column;align-items:center;justify-content:center;padding:2rem;text-align:center}.axp-report-viewer-page .__no-report .__no-report-icon{margin-bottom:1rem;font-size:3.75rem;line-height:1;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1));opacity:.5}.axp-report-viewer-page .__no-report .__no-report-content{max-width:28rem}.axp-report-viewer-page .__no-report .__no-report-content .__no-report-title{margin-bottom:.5rem;font-size:1.25rem;line-height:1.75rem;font-weight:600}.axp-report-viewer-page .__no-report .__no-report-content .__no-report-description{margin-bottom:1.5rem;font-size:.875rem;line-height:1.25rem;opacity:.75}.axp-report-viewer-page .__no-report .__no-report-content .__no-report-actions{display:flex;justify-content:center}.axp-report-viewer-page axp-report-table-view{flex:1 1 0%;overflow:hidden}\n"] }]
2351
+ ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { class: 'axp-report-viewer-page' }, template: "<axp-page-layout *translate=\"let t\">\n <!-- Left Panel: Filters (Always visible for desktop) -->\n @if (showFiltersPanel()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>\n {{ t('@report-management:features.report-viewer.filters.title') | async }}\n </axp-layout-title>\n </axp-layout-header>\n <axp-layout-content>\n <div class=\"__filters-container\">\n <axp-dynamic-form #filtersForm [formDefinition]=\"vm.formDefinition()\" [context]=\"vm.filterContext()\"\n [layoutConfig]=\"defaultLayout()\" [layoutLook]=\"'compact'\" (contextChange)=\"handleFiltersChange($event)\"\n (contextInitiated)=\"handleFiltersInitiated($event)\">\n </axp-dynamic-form>\n </div>\n </axp-layout-content>\n <axp-layout-footer class=\"ax-p-4 ax-border-t\" *translate=\"let t\">\n @if (vm.hasUnappliedFilters()) {\n <div class=\"ax-w-full ax-warning-lightest ax-mb-2 ax-p-2 ax-rounded ax-border ax-border-warning-200\">\n <div class=\"ax-flex ax-items-center ax-gap-2 ax-text-warning-800\">\n <ax-icon class=\"fa-light fa-exclamation-triangle ax-text-sm\"></ax-icon>\n <span class=\"ax-text-xs\">Filters have been changed but not applied. Click 'Execute Report' to apply\n changes.</span>\n </div>\n </div>\n }\n <ax-button [class.ax-sm]=\"layoutService.isSmall()\" class=\"ax-w-full\"\n [disabled]=\"vm.hasUnappliedFilters() === false && vm.hasBeenExecuted()\"\n [text]=\"t('@report-management:features.report-viewer.actions.execute') | async\" [color]=\"'primary'\"\n (onClick)=\"execute({ name: 'execute-report' })\">\n <ax-prefix>\n <ax-icon class=\"fa-light fa-play\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </axp-layout-footer>\n </axp-layout-start-side>\n }\n\n <axp-page-toolbar>\n <axp-layout-prefix>\n @if (vm.hasMultipleLayouts()) {\n <ax-button [text]=\"vm.currentLayout()?.title\">\n <ax-icon icon=\"fa-light {{ vm.currentLayout()?.icon }}\"></ax-icon>\n <ax-dropdown-panel>\n @for (layout of vm.availableLayouts(); track layout.id) {\n <ax-button-item-list>\n <ax-button-item [text]=\"layout.title\" [selected]=\"vm.currentLayout()?.id === layout.id\"\n (onClick)=\"vm.switchLayout(layout.id)\">\n <ax-icon icon=\"fa-light {{ layout.icon }}\"></ax-icon>\n </ax-button-item>\n </ax-button-item-list>\n }\n </ax-dropdown-panel>\n </ax-button>\n }\n </axp-layout-prefix>\n <axp-layout-suffix> </axp-layout-suffix>\n </axp-page-toolbar>\n\n <!-- Main Content: Report Display -->\n <axp-page-content class=\"ax-overflow-auto\">\n @if (!vm.reportDefinition()) {\n <ng-container *ngTemplateOutlet=\"noReport\"></ng-container>\n } @else {\n <ng-container *ngTemplateOutlet=\"reportDisplay\"></ng-container>\n }\n </axp-page-content>\n</axp-page-layout>\n\n<!-- Report Display Area -->\n<ng-template #reportDisplay>\n @if (vm.isTableLayout()) {\n <axp-report-table-view> </axp-report-table-view>\n } @else if (vm.isChartLayout()) {\n <axp-report-chart-view> </axp-report-chart-view>\n }\n</ng-template>\n\n<!-- No Report Selected State -->\n<ng-template #noReport>\n <div class=\"__no-report\" *translate=\"let t\">\n <div class=\"__no-report-icon\">\n <ax-icon class=\"fa-light fa-chart-line\"></ax-icon>\n </div>\n <div class=\"__no-report-content\">\n <h3 class=\"__no-report-title\">\n {{ t('@report-management:features.report-viewer.no-report.title') | async }}\n </h3>\n <p class=\"__no-report-description\">\n {{ t('@report-management:features.report-viewer.no-report.description') | async }}\n </p>\n <div class=\"__no-report-actions\">\n <ax-button look=\"outline\" color=\"primary\"\n [text]=\"t('@report-management:features.report-viewer.no-report.browse-reports') | async\">\n <ax-prefix>\n <ax-icon class=\"fa-light fa-folder-open\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </div>\n </div>\n</ng-template>", styles: [".axp-report-viewer-page{display:flex;height:100%;width:100%;flex-direction:column}.axp-report-viewer-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-viewer-page axp-layout-start-side{width:24rem}}.axp-report-viewer-page axp-layout-start-side>axp-layout-header{height:73px;border-bottom-width:1px}.axp-report-viewer-page axp-layout-start-side axp-layout-content{overflow-x:auto;padding:.5rem}.axp-report-viewer-page axp-layout-start-side axp-layout-content .__filters-container axp-layout-sections{gap:0px!important}.axp-report-viewer-page axp-layout-start-side axp-layout-content .__filters-container axp-layout-sections axp-layout-section{border-style:none!important;padding:0!important;--tw-shadow: 0 0 #0000 !important;--tw-shadow-colored: 0 0 #0000 !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.axp-report-viewer-page .__mobile-filters{flex-shrink:0;border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));padding:1rem;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-viewer-page axp-page-content{display:flex;height:100%;flex-direction:column}.axp-report-viewer-page .__no-report{display:flex;height:100%;flex-direction:column;align-items:center;justify-content:center;padding:2rem;text-align:center}.axp-report-viewer-page .__no-report .__no-report-icon{margin-bottom:1rem;font-size:3.75rem;line-height:1;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1));opacity:.5}.axp-report-viewer-page .__no-report .__no-report-content{max-width:28rem}.axp-report-viewer-page .__no-report .__no-report-content .__no-report-title{margin-bottom:.5rem;font-size:1.25rem;line-height:1.75rem;font-weight:600}.axp-report-viewer-page .__no-report .__no-report-content .__no-report-description{margin-bottom:1.5rem;font-size:.875rem;line-height:1.25rem;opacity:.75}.axp-report-viewer-page .__no-report .__no-report-content .__no-report-actions{display:flex;justify-content:center}.axp-report-viewer-page axp-report-table-view{flex:1 1 0%;overflow:hidden}.axp-report-viewer-page .ax-filter{filter:grayscale(100%) blur(1px)}.axp-report-viewer-page .ax-grayscale{filter:grayscale(100%)}.axp-report-viewer-page .ax-blur-sm{filter:blur(1px)}.axp-report-viewer-page .ax-pointer-events-none{pointer-events:none}\n"] }]
2292
2352
  }] });
2293
2353
 
2294
2354
  var reportViewerPage_component = /*#__PURE__*/Object.freeze({
@@ -2337,7 +2397,7 @@ class AXPReportBarChartViewComponent {
2337
2397
  * Effect to handle data fetching when chart configuration changes
2338
2398
  */
2339
2399
  this.#fetchData = effect(() => {
2340
- if (this.vm.allowFetchData() && this.chartOptions()) {
2400
+ if (this.vm.allowFetchData() && this.vm.shouldExecuteReport() && this.chartOptions()) {
2341
2401
  // TODO: Implement chart data fetching
2342
2402
  console.log('Chart data fetch triggered', {
2343
2403
  chartType: this.chartType(),