@acorex/platform 21.0.0-next.7 → 21.0.0-next.71

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 (126) hide show
  1. package/fesm2022/acorex-platform-auth.mjs +281 -23
  2. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  3. package/fesm2022/acorex-platform-common-common-settings.provider-Bi1RYif5.mjs +163 -0
  4. package/fesm2022/acorex-platform-common-common-settings.provider-Bi1RYif5.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-common.mjs +1381 -276
  6. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-core.mjs +1538 -611
  8. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-domain.mjs +557 -826
  10. package/fesm2022/acorex-platform-domain.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-layout-builder.mjs +1372 -210
  12. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  13. package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs +121 -0
  14. package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-layout-components.mjs +6298 -1929
  16. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  17. package/fesm2022/acorex-platform-layout-designer.mjs +456 -204
  18. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-layout-entity-attachments-page.component-D8iQnT-R.mjs +371 -0
  20. package/fesm2022/acorex-platform-layout-entity-attachments-page.component-D8iQnT-R.mjs.map +1 -0
  21. package/fesm2022/acorex-platform-layout-entity-file-list-popup.component-_yrP5SQe.mjs +100 -0
  22. package/fesm2022/acorex-platform-layout-entity-file-list-popup.component-_yrP5SQe.mjs.map +1 -0
  23. package/fesm2022/acorex-platform-layout-entity.mjs +22537 -9975
  24. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  25. package/fesm2022/acorex-platform-layout-views.mjs +865 -218
  26. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  27. package/fesm2022/acorex-platform-layout-widget-core.mjs +2138 -487
  28. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  29. package/fesm2022/{acorex-platform-layout-widgets-button-widget-designer.component-C3VoBb_b.mjs → acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs} +10 -10
  30. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs.map +1 -0
  31. package/fesm2022/{acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs → acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs} +6 -7
  32. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs.map +1 -0
  33. package/fesm2022/{acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs → acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs} +12 -12
  34. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs.map +1 -0
  35. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-J0zcGKBX.mjs +116 -0
  36. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-J0zcGKBX.mjs.map +1 -0
  37. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-BcpRkpJp.mjs} +6 -6
  38. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-BcpRkpJp.mjs.map +1 -0
  39. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-DQtK4lxl.mjs} +5 -5
  40. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-DQtK4lxl.mjs.map +1 -0
  41. package/fesm2022/{acorex-platform-layout-widgets-text-block-widget-designer.component-Df1BFkSa.mjs → acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs} +6 -6
  42. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs.map +1 -0
  43. package/fesm2022/acorex-platform-layout-widgets.mjs +10434 -7982
  44. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  45. package/fesm2022/acorex-platform-native.mjs +8 -7
  46. package/fesm2022/acorex-platform-native.mjs.map +1 -1
  47. package/fesm2022/acorex-platform-runtime.mjs +391 -166
  48. package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
  49. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-CWLfNqV0.mjs +160 -0
  50. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-CWLfNqV0.mjs.map +1 -0
  51. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-C7cT82K2.mjs +120 -0
  52. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-C7cT82K2.mjs.map +1 -0
  53. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs → acorex-platform-themes-default-entity-master-single-view.component-Br9p5aXT.mjs} +21 -28
  54. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-Br9p5aXT.mjs.map +1 -0
  55. package/fesm2022/{acorex-platform-themes-default-error-401.component-cfREo88K.mjs → acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs} +4 -4
  56. package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs.map +1 -0
  57. package/fesm2022/{acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs → acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs} +4 -4
  58. package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs.map +1 -0
  59. package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs +19 -0
  60. package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs.map +1 -0
  61. package/fesm2022/acorex-platform-themes-default.mjs +2289 -90
  62. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  63. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs → acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs} +6 -6
  64. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs.map +1 -0
  65. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs → acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs} +6 -6
  66. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs.map +1 -0
  67. package/fesm2022/{acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs → acorex-platform-themes-shared-settings.provider-BjuzSe0T.mjs} +52 -33
  68. package/fesm2022/acorex-platform-themes-shared-settings.provider-BjuzSe0T.mjs.map +1 -0
  69. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs +94 -0
  70. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs.map +1 -0
  71. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs +86 -0
  72. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs.map +1 -0
  73. package/fesm2022/acorex-platform-themes-shared.mjs +790 -612
  74. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  75. package/fesm2022/acorex-platform-workflow.mjs +978 -238
  76. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  77. package/fesm2022/acorex-platform.mjs.map +1 -1
  78. package/package.json +40 -38
  79. package/{auth/index.d.ts → types/acorex-platform-auth.d.ts} +241 -4
  80. package/{common/index.d.ts → types/acorex-platform-common.d.ts} +833 -89
  81. package/{core/index.d.ts → types/acorex-platform-core.d.ts} +779 -164
  82. package/{domain/index.d.ts → types/acorex-platform-domain.d.ts} +744 -412
  83. package/{layout/builder/index.d.ts → types/acorex-platform-layout-builder.d.ts} +277 -55
  84. package/types/acorex-platform-layout-components.d.ts +3257 -0
  85. package/{layout/designer/index.d.ts → types/acorex-platform-layout-designer.d.ts} +96 -18
  86. package/types/acorex-platform-layout-entity.d.ts +4492 -0
  87. package/{layout/views/index.d.ts → types/acorex-platform-layout-views.d.ts} +247 -62
  88. package/{layout/widget-core/index.d.ts → types/acorex-platform-layout-widget-core.d.ts} +437 -131
  89. package/{layout/widgets/index.d.ts → types/acorex-platform-layout-widgets.d.ts} +1140 -506
  90. package/{native/index.d.ts → types/acorex-platform-native.d.ts} +0 -7
  91. package/types/acorex-platform-runtime.d.ts +571 -0
  92. package/{themes/default/index.d.ts → types/acorex-platform-themes-default.d.ts} +254 -7
  93. package/{themes/shared/index.d.ts → types/acorex-platform-themes-shared.d.ts} +30 -2
  94. package/{workflow/index.d.ts → types/acorex-platform-workflow.d.ts} +620 -617
  95. package/fesm2022/acorex-platform-common-common-settings.provider-zhqNP3xb.mjs +0 -71
  96. package/fesm2022/acorex-platform-common-common-settings.provider-zhqNP3xb.mjs.map +0 -1
  97. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-C3VoBb_b.mjs.map +0 -1
  98. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs +0 -135
  99. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs.map +0 -1
  100. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs.map +0 -1
  101. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs.map +0 -1
  102. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs.map +0 -1
  103. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs.map +0 -1
  104. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Df1BFkSa.mjs.map +0 -1
  105. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs +0 -157
  106. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs.map +0 -1
  107. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DfJEx_bs.mjs +0 -1542
  108. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DfJEx_bs.mjs.map +0 -1
  109. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs +0 -101
  110. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs.map +0 -1
  111. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs.map +0 -1
  112. package/fesm2022/acorex-platform-themes-default-error-401.component-cfREo88K.mjs.map +0 -1
  113. package/fesm2022/acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs.map +0 -1
  114. package/fesm2022/acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs +0 -19
  115. package/fesm2022/acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs.map +0 -1
  116. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs.map +0 -1
  117. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs.map +0 -1
  118. package/fesm2022/acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs.map +0 -1
  119. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs +0 -65
  120. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs.map +0 -1
  121. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs +0 -64
  122. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs.map +0 -1
  123. package/layout/components/index.d.ts +0 -1669
  124. package/layout/entity/index.d.ts +0 -2287
  125. package/runtime/index.d.ts +0 -307
  126. /package/{index.d.ts → types/acorex-platform.d.ts} +0 -0
@@ -6,19 +6,20 @@ import { AXClickEvent } from '@acorex/cdk/common';
6
6
  import * as i1 from '@acorex/cdk/drawer';
7
7
  import { AXDrawerItemDirective } from '@acorex/cdk/drawer';
8
8
  import * as _acorex_platform_core from '@acorex/platform/core';
9
- import { AXPActionMenuItem, AXPBreadcrumbItem, AXPBadge, AXPBackButton, AXPExecuteCommand, AXPDeviceService, AXPExecuteCommandResult, AXPExpressionEvaluatorScope, AXPBroadcastEventService } from '@acorex/platform/core';
9
+ import { AXPActionMenuItem, AXPBreadcrumbItem, AXPMultiLanguageString, AXPBadge, AXPPageStatus, AXPBackButton, AXPExecuteCommand, AXPDeviceService, AXPExecuteCommandResult, AXPExpressionEvaluatorScope, AXPBroadcastEventService, AXPContextChangeEvent } from '@acorex/platform/core';
10
10
  import { AXPCommandService, AXPPolicyEngineService } from '@acorex/platform/runtime';
11
11
  import { AXPWorkflowService } from '@acorex/platform/workflow';
12
+ import * as _acorex_core_translation from '@acorex/core/translation';
13
+ import { AXTranslationService } from '@acorex/core/translation';
12
14
  import { AXToastService } from '@acorex/components/toast';
13
15
  import { AXFormatService } from '@acorex/core/format';
14
- import { AXTranslationService } from '@acorex/core/translation';
15
16
  import { AXPSessionService } from '@acorex/platform/auth';
16
- import { AXPHomePageService } from '@acorex/platform/common';
17
+ import { AXPHomePageService, AXPEntityCommandScope } from '@acorex/platform/common';
17
18
  import { AXBasePageComponent } from '@acorex/components/page';
18
19
  import * as _acorex_platform_layout_widget_core from '@acorex/platform/layout/widget-core';
19
- import { AXPWidgetNode, AXPPageStatus, AXPWidgetContainerComponent, AXPWidgetCoreContextChangeEvent } from '@acorex/platform/layout/widget-core';
20
- import { AXFormComponent } from '@acorex/components/form';
20
+ import { AXPWidgetNode, AXPPageStatus as AXPPageStatus$1, AXPWidgetContainerComponent } from '@acorex/platform/layout/widget-core';
21
21
  import * as _acorex_platform_layout_views from '@acorex/platform/layout/views';
22
+ import { AXFormComponent } from '@acorex/components/form';
22
23
  import { Router, ActivatedRoute } from '@angular/router';
23
24
 
24
25
  declare abstract class AXPPageLayoutBase {
@@ -30,15 +31,19 @@ declare abstract class AXPPageLayoutBase {
30
31
  abstract hasSecondaryActions: Signal<boolean>;
31
32
  abstract hasActions: Signal<boolean>;
32
33
  abstract breadcrumbs: Signal<AXPBreadcrumbItem[]>;
33
- abstract title: Signal<string>;
34
+ abstract title: Signal<AXPMultiLanguageString>;
35
+ abstract titleIcon: Signal<string | null>;
34
36
  abstract hasTitle: Signal<boolean>;
37
+ abstract hasTitleIcon: Signal<boolean>;
35
38
  abstract hasDescription: Signal<boolean>;
36
- abstract description: Signal<string>;
39
+ abstract description: Signal<AXPMultiLanguageString | null>;
37
40
  abstract hasBreadcrumbs: Signal<boolean>;
38
41
  abstract hasBadge: Signal<boolean>;
39
42
  abstract badge: Signal<AXPBadge | null>;
43
+ abstract hasStatus: Signal<boolean>;
44
+ abstract status: Signal<AXPPageStatus | null>;
40
45
  abstract hasBackButton: Signal<boolean>;
41
- abstract backButton: Signal<AXPBackButton>;
46
+ abstract backButton: Signal<AXPBackButton | null>;
42
47
  abstract onBackButtonClick: () => void | Promise<void>;
43
48
  abstract startSideToggle: () => void | Promise<void>;
44
49
  abstract execute: (command: AXPExecuteCommand) => void | Promise<void>;
@@ -60,7 +65,10 @@ declare class AXPPageLayoutComponent {
60
65
  overlayLoadingTaskCount: _angular_core.Signal<number>;
61
66
  navigationLoadingTaskCount: _angular_core.Signal<number>;
62
67
  sideMenuState: _angular_core.Signal<_acorex_platform_themes_shared.AXPSideMenuState>;
68
+ overlaySideMenuOpen: _angular_core.Signal<boolean>;
63
69
  sideMenuWidth: _angular_core.Signal<number>;
70
+ sideMenuCompactWidth: _angular_core.Signal<number>;
71
+ menuVerticalMode: _angular_core.Signal<_acorex_platform_themes_shared.AXPMenuVerticalMode>;
64
72
  menuOrientation: _angular_core.Signal<_acorex_platform_themes_shared.AXPMenuOrientation>;
65
73
  isPrinting: _angular_core.Signal<boolean>;
66
74
  isDarkMode: _angular_core.Signal<boolean>;
@@ -70,10 +78,14 @@ declare class AXPPageLayoutComponent {
70
78
  isOverlayLoading: _angular_core.Signal<boolean>;
71
79
  isNavigationLoading: _angular_core.Signal<boolean>;
72
80
  isMenuHorizontal: _angular_core.Signal<boolean>;
81
+ effectiveMenuVerticalMode: _angular_core.Signal<_acorex_platform_themes_shared.AXPMenuVerticalMode>;
82
+ sideMenuDrawerWidth: _angular_core.Signal<number>;
73
83
  changeThemeMode: (theme: _acorex_platform_themes_shared.AXPThemeMode) => void;
74
84
  openSideMenu: () => void;
75
85
  closeSideMenu: () => void;
76
86
  setSideMenuWidth: (width: number) => void;
87
+ setSideMenuCompactWidth: (width: number) => void;
88
+ setSideMenuDrawerWidth: (width: number) => void;
77
89
  toggleSideMenu: () => void;
78
90
  setNavigationLoading: (value: boolean, delay?: number) => void;
79
91
  setOverlayLoading: (value: boolean, delay?: number) => void;
@@ -91,7 +103,10 @@ declare class AXPPageLayoutComponent {
91
103
  overlayLoadingTaskCount: number;
92
104
  navigationLoadingTaskCount: number;
93
105
  sideMenuState: _acorex_platform_themes_shared.AXPSideMenuState;
106
+ overlaySideMenuOpen: boolean;
94
107
  sideMenuWidth: number;
108
+ sideMenuCompactWidth: number;
109
+ menuVerticalMode: _acorex_platform_themes_shared.AXPMenuVerticalMode;
95
110
  menuOrientation: _acorex_platform_themes_shared.AXPMenuOrientation;
96
111
  isPrinting: boolean;
97
112
  }>;
@@ -106,11 +121,13 @@ declare class AXPPageLayoutComponent {
106
121
  protected handleBackdropClick(e: AXClickEvent): boolean;
107
122
  protected execute(command: AXPExecuteCommand): Promise<void>;
108
123
  protected handleOnBackdropClick(event: MouseEvent): void;
124
+ protected getEntityData(): Record<string, any> | null;
125
+ protected handleStatusTransition(transition: any): Promise<void>;
109
126
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPPageLayoutComponent, never>;
110
127
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPPageLayoutComponent, "axp-page-layout", never, {}, {}, never, ["axp-layout-start-side", "axp-page-toolbar", "axp-page-content", "axp-page-footer"], true, [{ directive: typeof i1.AXDrawerContainerDirective; inputs: {}; outputs: {}; }]>;
111
128
  }
112
129
 
113
- declare abstract class AXPPageLayoutBaseComponent {
130
+ declare abstract class AXPPageLayoutBaseComponent implements AXPPageLayoutBase {
114
131
  #private;
115
132
  protected readonly layoutService: {
116
133
  currentMode: _angular_core.Signal<_acorex_platform_themes_shared.AXPThemeMode>;
@@ -125,7 +142,10 @@ declare abstract class AXPPageLayoutBaseComponent {
125
142
  overlayLoadingTaskCount: _angular_core.Signal<number>;
126
143
  navigationLoadingTaskCount: _angular_core.Signal<number>;
127
144
  sideMenuState: _angular_core.Signal<_acorex_platform_themes_shared.AXPSideMenuState>;
145
+ overlaySideMenuOpen: _angular_core.Signal<boolean>;
128
146
  sideMenuWidth: _angular_core.Signal<number>;
147
+ sideMenuCompactWidth: _angular_core.Signal<number>;
148
+ menuVerticalMode: _angular_core.Signal<_acorex_platform_themes_shared.AXPMenuVerticalMode>;
129
149
  menuOrientation: _angular_core.Signal<_acorex_platform_themes_shared.AXPMenuOrientation>;
130
150
  isPrinting: _angular_core.Signal<boolean>;
131
151
  isDarkMode: _angular_core.Signal<boolean>;
@@ -135,10 +155,14 @@ declare abstract class AXPPageLayoutBaseComponent {
135
155
  isOverlayLoading: _angular_core.Signal<boolean>;
136
156
  isNavigationLoading: _angular_core.Signal<boolean>;
137
157
  isMenuHorizontal: _angular_core.Signal<boolean>;
158
+ effectiveMenuVerticalMode: _angular_core.Signal<_acorex_platform_themes_shared.AXPMenuVerticalMode>;
159
+ sideMenuDrawerWidth: _angular_core.Signal<number>;
138
160
  changeThemeMode: (theme: _acorex_platform_themes_shared.AXPThemeMode) => void;
139
161
  openSideMenu: () => void;
140
162
  closeSideMenu: () => void;
141
163
  setSideMenuWidth: (width: number) => void;
164
+ setSideMenuCompactWidth: (width: number) => void;
165
+ setSideMenuDrawerWidth: (width: number) => void;
142
166
  toggleSideMenu: () => void;
143
167
  setNavigationLoading: (value: boolean, delay?: number) => void;
144
168
  setOverlayLoading: (value: boolean, delay?: number) => void;
@@ -156,7 +180,10 @@ declare abstract class AXPPageLayoutBaseComponent {
156
180
  overlayLoadingTaskCount: number;
157
181
  navigationLoadingTaskCount: number;
158
182
  sideMenuState: _acorex_platform_themes_shared.AXPSideMenuState;
183
+ overlaySideMenuOpen: boolean;
159
184
  sideMenuWidth: number;
185
+ sideMenuCompactWidth: number;
186
+ menuVerticalMode: _acorex_platform_themes_shared.AXPMenuVerticalMode;
160
187
  menuOrientation: _acorex_platform_themes_shared.AXPMenuOrientation;
161
188
  isPrinting: boolean;
162
189
  }>;
@@ -170,29 +197,35 @@ declare abstract class AXPPageLayoutBaseComponent {
170
197
  protected updateTrigger: _angular_core.Signal<number>;
171
198
  protected recompute(): void;
172
199
  ngOnInit(): Promise<void>;
173
- protected title: _angular_core.WritableSignal<string>;
174
- protected getPageTitle(): string | Promise<string>;
175
- private hasTitle;
176
- private description;
177
- private hasDescription;
178
- protected getPageDescription(): string | null | Promise<string | null>;
200
+ title: _angular_core.WritableSignal<_acorex_core_translation.AXMultiLanguageString>;
201
+ titleIcon: _angular_core.WritableSignal<string | null>;
202
+ protected getPageTitle(): AXPMultiLanguageString | Promise<AXPMultiLanguageString>;
203
+ protected getPageIcon(): string | null | Promise<string | null>;
204
+ hasTitle: _angular_core.Signal<boolean>;
205
+ hasTitleIcon: _angular_core.Signal<boolean>;
206
+ description: _angular_core.WritableSignal<_acorex_core_translation.AXMultiLanguageString | null>;
207
+ hasDescription: _angular_core.Signal<boolean>;
208
+ protected getPageDescription(): AXPMultiLanguageString | null | Promise<AXPMultiLanguageString | null>;
179
209
  private defaultBreadCrumbs;
180
- private breadcrumbs;
181
- private hasBreadcrumbs;
210
+ breadcrumbs: _angular_core.WritableSignal<AXPBreadcrumbItem[]>;
211
+ hasBreadcrumbs: _angular_core.Signal<boolean>;
182
212
  protected getPageBreadcrumbs(): AXPBreadcrumbItem[] | Promise<AXPBreadcrumbItem[]>;
183
- private badge;
184
- private hasBadge;
213
+ badge: _angular_core.WritableSignal<AXPBadge | null>;
214
+ hasBadge: _angular_core.Signal<boolean>;
185
215
  protected getPageBadge(): AXPBadge | null | Promise<AXPBadge | null>;
216
+ status: _angular_core.WritableSignal<AXPPageStatus | null>;
217
+ hasStatus: _angular_core.Signal<boolean>;
218
+ protected getPageStatus(): AXPPageStatus | null | Promise<AXPPageStatus | null>;
186
219
  protected layout: _angular_core.Signal<AXPPageLayoutComponent | undefined>;
187
220
  protected toggleEndSide(): void;
188
221
  protected toggleStartSide(): void;
189
222
  primaryMenuItems: _angular_core.WritableSignal<AXPActionMenuItem[]>;
190
223
  hasPrimaryActions: _angular_core.Signal<boolean>;
191
- protected getPrimaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]>;
224
+ getPrimaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]>;
192
225
  secondaryMenuItems: _angular_core.WritableSignal<AXPActionMenuItem[]>;
193
226
  hasSecondaryActions: _angular_core.Signal<boolean>;
194
227
  hasActions: _angular_core.Signal<boolean>;
195
- protected getSecondaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]>;
228
+ getSecondaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]>;
196
229
  titleActions: _angular_core.WritableSignal<AXPActionMenuItem[]>;
197
230
  hasTitleActions: _angular_core.Signal<boolean>;
198
231
  protected getTitleActions(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]>;
@@ -200,6 +233,11 @@ declare abstract class AXPPageLayoutBaseComponent {
200
233
  hasBackButton: _angular_core.Signal<boolean>;
201
234
  protected getBackButton(): (AXPBackButton | null) | Promise<AXPBackButton | null>;
202
235
  execute(command: AXPExecuteCommand): void | Promise<void>;
236
+ /**
237
+ * Optional partial context to merge into the create/update wizard when leaving a page step.
238
+ * Override when the page keeps edits in local state instead of the shared form context.
239
+ */
240
+ getWizardStepContext(): Record<string, unknown> | null;
203
241
  startSideToggle(): void | Promise<void>;
204
242
  onBackButtonClick(): void | Promise<void>;
205
243
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPPageLayoutBaseComponent, never>;
@@ -235,7 +273,10 @@ declare class AXPPopupLayoutComponent {
235
273
  overlayLoadingTaskCount: _angular_core.Signal<number>;
236
274
  navigationLoadingTaskCount: _angular_core.Signal<number>;
237
275
  sideMenuState: _angular_core.Signal<_acorex_platform_themes_shared.AXPSideMenuState>;
276
+ overlaySideMenuOpen: _angular_core.Signal<boolean>;
238
277
  sideMenuWidth: _angular_core.Signal<number>;
278
+ sideMenuCompactWidth: _angular_core.Signal<number>;
279
+ menuVerticalMode: _angular_core.Signal<_acorex_platform_themes_shared.AXPMenuVerticalMode>;
239
280
  menuOrientation: _angular_core.Signal<_acorex_platform_themes_shared.AXPMenuOrientation>;
240
281
  isPrinting: _angular_core.Signal<boolean>;
241
282
  isDarkMode: _angular_core.Signal<boolean>;
@@ -245,10 +286,14 @@ declare class AXPPopupLayoutComponent {
245
286
  isOverlayLoading: _angular_core.Signal<boolean>;
246
287
  isNavigationLoading: _angular_core.Signal<boolean>;
247
288
  isMenuHorizontal: _angular_core.Signal<boolean>;
289
+ effectiveMenuVerticalMode: _angular_core.Signal<_acorex_platform_themes_shared.AXPMenuVerticalMode>;
290
+ sideMenuDrawerWidth: _angular_core.Signal<number>;
248
291
  changeThemeMode: (theme: _acorex_platform_themes_shared.AXPThemeMode) => void;
249
292
  openSideMenu: () => void;
250
293
  closeSideMenu: () => void;
251
294
  setSideMenuWidth: (width: number) => void;
295
+ setSideMenuCompactWidth: (width: number) => void;
296
+ setSideMenuDrawerWidth: (width: number) => void;
252
297
  toggleSideMenu: () => void;
253
298
  setNavigationLoading: (value: boolean, delay?: number) => void;
254
299
  setOverlayLoading: (value: boolean, delay?: number) => void;
@@ -266,7 +311,10 @@ declare class AXPPopupLayoutComponent {
266
311
  overlayLoadingTaskCount: number;
267
312
  navigationLoadingTaskCount: number;
268
313
  sideMenuState: _acorex_platform_themes_shared.AXPSideMenuState;
314
+ overlaySideMenuOpen: boolean;
269
315
  sideMenuWidth: number;
316
+ sideMenuCompactWidth: number;
317
+ menuVerticalMode: _acorex_platform_themes_shared.AXPMenuVerticalMode;
270
318
  menuOrientation: _acorex_platform_themes_shared.AXPMenuOrientation;
271
319
  isPrinting: boolean;
272
320
  }>;
@@ -294,7 +342,10 @@ declare abstract class AXPPopupLayoutBaseComponent extends AXBasePageComponent {
294
342
  overlayLoadingTaskCount: _angular_core.Signal<number>;
295
343
  navigationLoadingTaskCount: _angular_core.Signal<number>;
296
344
  sideMenuState: _angular_core.Signal<_acorex_platform_themes_shared.AXPSideMenuState>;
345
+ overlaySideMenuOpen: _angular_core.Signal<boolean>;
297
346
  sideMenuWidth: _angular_core.Signal<number>;
347
+ sideMenuCompactWidth: _angular_core.Signal<number>;
348
+ menuVerticalMode: _angular_core.Signal<_acorex_platform_themes_shared.AXPMenuVerticalMode>;
298
349
  menuOrientation: _angular_core.Signal<_acorex_platform_themes_shared.AXPMenuOrientation>;
299
350
  isPrinting: _angular_core.Signal<boolean>;
300
351
  isDarkMode: _angular_core.Signal<boolean>;
@@ -304,10 +355,14 @@ declare abstract class AXPPopupLayoutBaseComponent extends AXBasePageComponent {
304
355
  isOverlayLoading: _angular_core.Signal<boolean>;
305
356
  isNavigationLoading: _angular_core.Signal<boolean>;
306
357
  isMenuHorizontal: _angular_core.Signal<boolean>;
358
+ effectiveMenuVerticalMode: _angular_core.Signal<_acorex_platform_themes_shared.AXPMenuVerticalMode>;
359
+ sideMenuDrawerWidth: _angular_core.Signal<number>;
307
360
  changeThemeMode: (theme: _acorex_platform_themes_shared.AXPThemeMode) => void;
308
361
  openSideMenu: () => void;
309
362
  closeSideMenu: () => void;
310
363
  setSideMenuWidth: (width: number) => void;
364
+ setSideMenuCompactWidth: (width: number) => void;
365
+ setSideMenuDrawerWidth: (width: number) => void;
311
366
  toggleSideMenu: () => void;
312
367
  setNavigationLoading: (value: boolean, delay?: number) => void;
313
368
  setOverlayLoading: (value: boolean, delay?: number) => void;
@@ -325,7 +380,10 @@ declare abstract class AXPPopupLayoutBaseComponent extends AXBasePageComponent {
325
380
  overlayLoadingTaskCount: number;
326
381
  navigationLoadingTaskCount: number;
327
382
  sideMenuState: _acorex_platform_themes_shared.AXPSideMenuState;
383
+ overlaySideMenuOpen: boolean;
328
384
  sideMenuWidth: number;
385
+ sideMenuCompactWidth: number;
386
+ menuVerticalMode: _acorex_platform_themes_shared.AXPMenuVerticalMode;
329
387
  menuOrientation: _acorex_platform_themes_shared.AXPMenuOrientation;
330
388
  isPrinting: boolean;
331
389
  }>;
@@ -360,7 +418,13 @@ declare abstract class AXPPopupLayoutBaseComponent extends AXBasePageComponent {
360
418
  interface AXPLayoutDetailsViewAction extends AXPActionMenuItem {
361
419
  zone: 'header' | 'footer';
362
420
  priority: 'primary' | 'secondary';
421
+ scope?: AXPEntityCommandScope;
363
422
  }
423
+ type AXPPageContentItem = AXPWidgetNode | {
424
+ type: 'component';
425
+ componentKey: string;
426
+ pageConfig?: Record<string, unknown>;
427
+ };
364
428
  interface AXPLayoutDetailsViewTabItem {
365
429
  id: string;
366
430
  title: string;
@@ -372,25 +436,37 @@ interface AXPLayoutDetailsViewTabItem {
372
436
  }
373
437
  interface AXPLayoutDetailsViewPage {
374
438
  id: string;
375
- title: string;
376
- label: string;
377
- description?: string;
439
+ title: AXPMultiLanguageString;
440
+ label: AXPMultiLanguageString;
441
+ description?: AXPMultiLanguageString;
378
442
  icon?: string;
379
- content?: AXPWidgetNode[];
443
+ /**
444
+ * Content can be either widget nodes or component references
445
+ */
446
+ content?: AXPPageContentItem[];
380
447
  tabs?: AXPLayoutDetailsViewTabItem[];
448
+ /**
449
+ * Static actions array (legacy, use getActions for reactive actions)
450
+ */
381
451
  actions?: AXPLayoutDetailsViewAction[];
452
+ /**
453
+ * Function to get actions dynamically (supports reactive updates from component instances)
454
+ */
455
+ getActions?: () => Promise<AXPLayoutDetailsViewAction[]>;
382
456
  isPrimary?: boolean;
383
457
  isReadonly?: boolean;
384
458
  settings?: {
385
459
  commands?: {
386
460
  accept?: {
387
461
  title: string;
462
+ icon?: string;
388
463
  color: string;
389
464
  visible?: string | boolean;
390
465
  command: AXPExecuteCommand;
391
466
  };
392
467
  reject?: {
393
468
  title: string;
469
+ icon?: string;
394
470
  color: string;
395
471
  visible?: string | boolean;
396
472
  command: AXPExecuteCommand;
@@ -402,16 +478,18 @@ interface AXPLayoutDetailsViewPage {
402
478
  }
403
479
  interface AXPLayoutDetailsViewAdapter {
404
480
  name: string;
405
- title?: string;
406
- label?: string;
407
- description?: string;
481
+ title?: AXPMultiLanguageString;
482
+ label?: AXPMultiLanguageString;
483
+ description?: AXPMultiLanguageString;
408
484
  icon?: string;
409
485
  actions?: AXPLayoutDetailsViewAction[];
410
486
  breadcrumbs?: AXPBreadcrumbItem[];
411
487
  pages: AXPLayoutDetailsViewPage[];
412
488
  execute?: (command: AXPExecuteCommand, context: {}) => Promise<AXPExecuteCommandResult>;
413
- load?: (params?: Record<string, any>) => Promise<AXPExecuteCommandResult>;
489
+ load?: (params?: Record<string, unknown>) => Promise<AXPExecuteCommandResult>;
414
490
  exitUrl?: string;
491
+ getPageBadge?: (context: Record<string, unknown>, isDirty: boolean) => Promise<AXPBadge | null>;
492
+ getPageStatus?: (context: Record<string, unknown>, currentPage: AXPLayoutDetailsViewPage | null) => Promise<AXPPageStatus | null>;
415
493
  }
416
494
 
417
495
  declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
@@ -420,7 +498,7 @@ declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
420
498
  previousContext: _angular_core.Signal<Record<string, any>>;
421
499
  context: _angular_core.Signal<Record<string, any>>;
422
500
  scope: _angular_core.Signal<AXPExpressionEvaluatorScope | null>;
423
- status: _angular_core.Signal<AXPPageStatus>;
501
+ status: _angular_core.Signal<AXPPageStatus$1>;
424
502
  currentPage: _angular_core.Signal<AXPLayoutDetailsViewPage | null>;
425
503
  currentTab: _angular_core.Signal<AXPLayoutDetailsViewTabItem | null>;
426
504
  pageSelectedRows: _angular_core.Signal<any[]>;
@@ -428,14 +506,18 @@ declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
428
506
  tabId: string;
429
507
  tab: AXPLayoutDetailsViewTabItem;
430
508
  }[]>>;
509
+ evaluatedPageContent: _angular_core.Signal<AXPWidgetNode[]>;
510
+ evaluatedTabContentsById: _angular_core.Signal<Record<string, AXPWidgetNode[]>>;
511
+ formIsDirty: _angular_core.Signal<boolean>;
512
+ formBaselineCommitted: _angular_core.Signal<boolean>;
431
513
  icon: _angular_core.Signal<string | null>;
432
- content: _angular_core.Signal<_acorex_platform_layout_widget_core.AXPWidgetNode[]>;
514
+ content: _angular_core.Signal<_acorex_platform_layout_views.AXPPageContentItem[]>;
433
515
  showPages: _angular_core.Signal<boolean>;
434
516
  isLarge: _angular_core.Signal<boolean>;
435
517
  isBusy: _angular_core.Signal<boolean>;
436
518
  isSaving: _angular_core.Signal<boolean>;
437
519
  isDirty: _angular_core.Signal<boolean>;
438
- changesCount: _angular_core.Signal<number>;
520
+ changesCount: _angular_core.Signal<1 | 0>;
439
521
  isLoaded: _angular_core.Signal<boolean>;
440
522
  currentPageSelectedRows: _angular_core.Signal<any[]>;
441
523
  currentPageRenderedTabs: _angular_core.Signal<{
@@ -445,32 +527,35 @@ declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
445
527
  loadAdapter: (adapter: AXPLayoutDetailsViewAdapter) => Promise<void>;
446
528
  loadPage: (pageId?: string, forceRefresh?: boolean) => Promise<void>;
447
529
  load: (adapter: AXPLayoutDetailsViewAdapter) => Promise<void>;
448
- updateContext: (context: any) => void;
530
+ updateContext: (context: any, formIsDirty?: boolean) => void;
531
+ markFormBaselineCommitted: () => void;
532
+ resetFormBaselineCommitted: () => void;
449
533
  updatePageSelectedRows: (rows: any[]) => void;
450
- currentPageTitle: () => string | null;
451
- currentPageDescription: () => string | null;
452
534
  currentPagePrimaryActions: () => Promise<any>;
453
535
  currentPageSecondaryActions: () => Promise<any>;
454
- currentPageContent: () => _acorex_platform_layout_widget_core.AXPWidgetNode[] | undefined;
536
+ currentPageContent: () => AXPWidgetNode[];
455
537
  currentPageTabs: () => AXPLayoutDetailsViewTabItem[] | undefined;
456
538
  setCurrentPage: (page: AXPLayoutDetailsViewPage | null) => void;
457
539
  setCurrentTab: (tab: AXPLayoutDetailsViewTabItem) => void;
458
- getCurrentTabContent: () => _acorex_platform_layout_widget_core.AXPWidgetNode[];
459
- getRenderedTabContent: (tabId: string) => _acorex_platform_layout_widget_core.AXPWidgetNode[];
540
+ getCurrentTabContent: () => AXPWidgetNode[];
541
+ getRenderedTabContent: (tabId: string) => AXPWidgetNode[];
460
542
  clearPageTabCache: (pageId: string) => void;
461
- title: () => string | null;
462
- backButtonTitle: () => string | null;
463
- description: () => string | null;
543
+ backButtonTitle: () => _acorex_core_translation.AXMultiLanguageString;
544
+ getPageTitle: () => Promise<AXPMultiLanguageString>;
545
+ getPageDescription: () => Promise<AXPMultiLanguageString | null>;
546
+ getBackButton: () => Promise<AXPBackButton | null>;
547
+ getPageBadge: () => Promise<AXPBadge | null>;
548
+ getPageStatus: () => Promise<AXPPageStatus | null>;
464
549
  primaryActions: () => Promise<any>;
465
550
  secondaryActions: () => Promise<any>;
466
551
  breadcrumbs: () => Promise<{
467
- title: string;
552
+ title: _acorex_core_translation.AXMultiLanguageString;
468
553
  name?: string;
469
554
  icon?: string;
470
555
  command?: AXPExecuteCommand;
471
556
  }[]>;
472
557
  discard: () => Promise<void>;
473
- save: (command: AXPExecuteCommand, form: AXFormComponent) => Promise<void>;
558
+ save: (command: AXPExecuteCommand, form: AXFormComponent) => Promise<boolean>;
474
559
  goToListPage: () => void;
475
560
  } & _ngrx_signals.StateSource<{
476
561
  adapter: AXPLayoutDetailsViewAdapter | null;
@@ -478,7 +563,7 @@ declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
478
563
  previousContext: Record<string, any>;
479
564
  context: Record<string, any>;
480
565
  scope: AXPExpressionEvaluatorScope | null;
481
- status: AXPPageStatus;
566
+ status: AXPPageStatus$1;
482
567
  currentPage: AXPLayoutDetailsViewPage | null;
483
568
  currentTab: AXPLayoutDetailsViewTabItem | null;
484
569
  pageSelectedRows: any[];
@@ -486,6 +571,10 @@ declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
486
571
  tabId: string;
487
572
  tab: AXPLayoutDetailsViewTabItem;
488
573
  }>>;
574
+ evaluatedPageContent: AXPWidgetNode[];
575
+ evaluatedTabContentsById: Record<string, AXPWidgetNode[]>;
576
+ formIsDirty: boolean;
577
+ formBaselineCommitted: boolean;
489
578
  }>>;
490
579
 
491
580
  declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent implements OnInit, OnDestroy {
@@ -505,14 +594,18 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
505
594
  tabId: string;
506
595
  tab: _acorex_platform_layout_views.AXPLayoutDetailsViewTabItem;
507
596
  }[]>>;
597
+ evaluatedPageContent: _angular_core.Signal<_acorex_platform_layout_widget_core.AXPWidgetNode[]>;
598
+ evaluatedTabContentsById: _angular_core.Signal<Record<string, _acorex_platform_layout_widget_core.AXPWidgetNode[]>>;
599
+ formIsDirty: _angular_core.Signal<boolean>;
600
+ formBaselineCommitted: _angular_core.Signal<boolean>;
508
601
  icon: _angular_core.Signal<string | null>;
509
- content: _angular_core.Signal<_acorex_platform_layout_widget_core.AXPWidgetNode[]>;
602
+ content: _angular_core.Signal<_acorex_platform_layout_views.AXPPageContentItem[]>;
510
603
  showPages: _angular_core.Signal<boolean>;
511
604
  isLarge: _angular_core.Signal<boolean>;
512
605
  isBusy: _angular_core.Signal<boolean>;
513
606
  isSaving: _angular_core.Signal<boolean>;
514
607
  isDirty: _angular_core.Signal<boolean>;
515
- changesCount: _angular_core.Signal<number>;
608
+ changesCount: _angular_core.Signal<1 | 0>;
516
609
  isLoaded: _angular_core.Signal<boolean>;
517
610
  currentPageSelectedRows: _angular_core.Signal<any[]>;
518
611
  currentPageRenderedTabs: _angular_core.Signal<{
@@ -522,32 +615,35 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
522
615
  loadAdapter: (adapter: AXPLayoutDetailsViewAdapter) => Promise<void>;
523
616
  loadPage: (pageId?: string, forceRefresh?: boolean) => Promise<void>;
524
617
  load: (adapter: AXPLayoutDetailsViewAdapter) => Promise<void>;
525
- updateContext: (context: any) => void;
618
+ updateContext: (context: any, formIsDirty?: boolean) => void;
619
+ markFormBaselineCommitted: () => void;
620
+ resetFormBaselineCommitted: () => void;
526
621
  updatePageSelectedRows: (rows: any[]) => void;
527
- currentPageTitle: () => string | null;
528
- currentPageDescription: () => string | null;
529
622
  currentPagePrimaryActions: () => Promise<any>;
530
623
  currentPageSecondaryActions: () => Promise<any>;
531
- currentPageContent: () => _acorex_platform_layout_widget_core.AXPWidgetNode[] | undefined;
624
+ currentPageContent: () => _acorex_platform_layout_widget_core.AXPWidgetNode[];
532
625
  currentPageTabs: () => _acorex_platform_layout_views.AXPLayoutDetailsViewTabItem[] | undefined;
533
626
  setCurrentPage: (page: AXPLayoutDetailsViewPage | null) => void;
534
627
  setCurrentTab: (tab: _acorex_platform_layout_views.AXPLayoutDetailsViewTabItem) => void;
535
628
  getCurrentTabContent: () => _acorex_platform_layout_widget_core.AXPWidgetNode[];
536
629
  getRenderedTabContent: (tabId: string) => _acorex_platform_layout_widget_core.AXPWidgetNode[];
537
630
  clearPageTabCache: (pageId: string) => void;
538
- title: () => string | null;
539
- backButtonTitle: () => string | null;
540
- description: () => string | null;
631
+ backButtonTitle: () => _acorex_core_translation.AXMultiLanguageString;
632
+ getPageTitle: () => Promise<AXPMultiLanguageString>;
633
+ getPageDescription: () => Promise<AXPMultiLanguageString | null>;
634
+ getBackButton: () => Promise<AXPBackButton | null>;
635
+ getPageBadge: () => Promise<AXPBadge | null>;
636
+ getPageStatus: () => Promise<AXPPageStatus | null>;
541
637
  primaryActions: () => Promise<any>;
542
638
  secondaryActions: () => Promise<any>;
543
639
  breadcrumbs: () => Promise<{
544
- title: string;
640
+ title: _acorex_core_translation.AXMultiLanguageString;
545
641
  name?: string;
546
642
  icon?: string;
547
643
  command?: AXPExecuteCommand;
548
644
  }[]>;
549
645
  discard: () => Promise<void>;
550
- save: (command: AXPExecuteCommand, form: AXFormComponent) => Promise<void>;
646
+ save: (command: AXPExecuteCommand, form: AXFormComponent) => Promise<boolean>;
551
647
  goToListPage: () => void;
552
648
  } & _ngrx_signals.StateSource<{
553
649
  adapter: AXPLayoutDetailsViewAdapter | null;
@@ -563,6 +659,10 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
563
659
  tabId: string;
564
660
  tab: _acorex_platform_layout_views.AXPLayoutDetailsViewTabItem;
565
661
  }>>;
662
+ evaluatedPageContent: _acorex_platform_layout_widget_core.AXPWidgetNode[];
663
+ evaluatedTabContentsById: Record<string, _acorex_platform_layout_widget_core.AXPWidgetNode[]>;
664
+ formIsDirty: boolean;
665
+ formBaselineCommitted: boolean;
566
666
  }>;
567
667
  protected router: Router;
568
668
  protected route: ActivatedRoute;
@@ -570,13 +670,41 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
570
670
  protected deviceService: AXPDeviceService;
571
671
  private onSelectionChangeSubscription?;
572
672
  private readonly destroyed$;
673
+ private formBaselineCaptured;
674
+ private formBaselinePageKey;
675
+ private formBaselineTimer?;
676
+ private suppressDirtySync;
677
+ private footerActionsGeneration;
678
+ private static readonly FORM_BASELINE_IDLE_MS;
679
+ /** Save/discard use live {@link AXPLayoutDetailsViewViewModel.isDirty}; other actions use evaluated `visible`. */
680
+ private static isTruthyActionFlag;
573
681
  protected form: _angular_core.Signal<AXFormComponent | undefined>;
574
682
  protected widgetContainer: _angular_core.Signal<AXPWidgetContainerComponent | undefined>;
575
683
  protected footerPrimaryActions: _angular_core.WritableSignal<AXPActionMenuItem[]>;
576
684
  protected footerSecondaryActions: _angular_core.WritableSignal<AXPActionMenuItem[]>;
577
685
  protected footerActions: _angular_core.Signal<AXPActionMenuItem[]>;
686
+ protected rejectFooterCommand: _angular_core.Signal<{
687
+ title: string;
688
+ icon?: string;
689
+ color: string;
690
+ visible?: string | boolean;
691
+ command: AXPExecuteCommand;
692
+ } | null>;
693
+ protected acceptFooterCommand: _angular_core.Signal<{
694
+ title: string;
695
+ icon?: string;
696
+ color: string;
697
+ visible?: string | boolean;
698
+ command: AXPExecuteCommand;
699
+ } | null>;
700
+ protected hasSaveDiscardFooterCommands: _angular_core.Signal<boolean>;
701
+ /** Entity save/discard — driven live by {@link AXPLayoutDetailsViewViewModel.isDirty}, not evaluated action metadata. */
702
+ protected showSaveDiscardFooter: _angular_core.Signal<boolean>;
578
703
  protected hasVisibleFooterPrimaryActions: _angular_core.Signal<boolean>;
579
704
  protected hasVisibleFooterSecondaryActions: _angular_core.Signal<boolean>;
705
+ protected isSaveDiscardFooterAction(action: AXPActionMenuItem): boolean;
706
+ protected isFooterActionVisible(action: AXPActionMenuItem): boolean;
707
+ protected isFooterActionDisabled(action: AXPActionMenuItem): boolean;
580
708
  protected hasFooter: _angular_core.Signal<boolean>;
581
709
  /**
582
710
  * Append timestamp query param to trigger router to re-run guards/resolvers
@@ -585,18 +713,34 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
585
713
  ngOnInit(): Promise<void>;
586
714
  ngAfterViewInit(): Promise<void>;
587
715
  ngOnDestroy(): void;
588
- protected handleOnContextChanged(e: AXPWidgetCoreContextChangeEvent): void;
716
+ private refreshFooterActions;
717
+ protected handleOnContextChanged(e: AXPContextChangeEvent): void;
718
+ /**
719
+ * Clears widget-store dirty state and schedules a fresh post-hydration baseline (discard / save).
720
+ */
721
+ private resetFormDirtyBaseline;
722
+ /**
723
+ * Commits a clean baseline immediately when widgets are mounted; otherwise defers to idle commit.
724
+ */
725
+ private finalizeFormCleanState;
726
+ private scheduleFormBaselineCommit;
589
727
  protected handleSelectPage(page: AXPLayoutDetailsViewPage): void;
590
728
  protected getAllPrimaryActions(): Promise<AXPLayoutDetailsViewAction[]>;
591
- protected getPrimaryMenuItems(): Promise<AXPActionMenuItem[]>;
729
+ getPrimaryMenuItems(): Promise<AXPActionMenuItem[]>;
592
730
  protected getFooterPrimaryActions(): Promise<AXPActionMenuItem[]>;
593
731
  protected getAllSecondaryActions(): Promise<AXPLayoutDetailsViewAction[]>;
594
- protected getSecondaryMenuItems(): Promise<AXPActionMenuItem[]>;
732
+ getSecondaryMenuItems(): Promise<AXPActionMenuItem[]>;
595
733
  protected getFooterSecondaryActions(): Promise<AXPActionMenuItem[]>;
596
734
  protected getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]>;
597
- protected getPageTitle(): Promise<string>;
598
- getPageDescription(): Promise<string | null>;
735
+ protected getPageTitle(): Promise<AXPMultiLanguageString>;
736
+ getPageDescription(): Promise<AXPMultiLanguageString | null>;
599
737
  getBackButton(): Promise<AXPBackButton | null>;
738
+ getPageBadge(): Promise<AXPBadge | null>;
739
+ getPageStatus(): Promise<AXPPageStatus | null>;
740
+ /**
741
+ * Get entity data for status chip component
742
+ */
743
+ getEntityData(): Record<string, any> | null;
600
744
  onBackButtonClick(): Promise<void>;
601
745
  execute(command: AXPExecuteCommand): Promise<void>;
602
746
  protected handleKeyboardEvent(event: KeyboardEvent): Promise<void>;
@@ -604,5 +748,46 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
604
748
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPLayoutDetailsViewComponent, "axp-layout-details-view", never, { "adapter": { "alias": "adapter"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
605
749
  }
606
750
 
607
- export { AXPLayoutDetailsViewComponent, AXPLayoutDetailsViewViewModel, AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent, AXPPopupLayoutBase, AXPPopupLayoutBaseComponent, AXPPopupLayoutComponent };
608
- export type { AXPLayoutDetailsViewAction, AXPLayoutDetailsViewAdapter, AXPLayoutDetailsViewPage, AXPLayoutDetailsViewTabItem };
751
+ /**
752
+ * Registry of rendered page component instances by component key.
753
+ * Used so page execute can delegate to the actual component instance in the view.
754
+ */
755
+ declare class AXPPageComponentInstanceRegistryService {
756
+ private readonly instances;
757
+ register(key: string, instance: AXPPageLayoutBaseComponent): void;
758
+ unregister(key: string): void;
759
+ get(key: string): AXPPageLayoutBaseComponent | null;
760
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPPageComponentInstanceRegistryService, never>;
761
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPPageComponentInstanceRegistryService>;
762
+ }
763
+
764
+ /**
765
+ * Directive for rendering page components dynamically
766
+ * Similar to component-slot pattern but specifically for page components
767
+ */
768
+ declare class AXPPageComponentRendererDirective implements OnInit, OnDestroy {
769
+ #private;
770
+ componentKey: _angular_core.InputSignal<string>;
771
+ rootContext: _angular_core.InputSignal<Record<string, any>>;
772
+ pageConfig: _angular_core.InputSignal<Record<string, unknown> | undefined>;
773
+ options: _angular_core.InputSignal<Record<string, any>>;
774
+ /** Emitted when the component instance is registered and ready */
775
+ componentReady: _angular_core.OutputEmitterRef<string>;
776
+ /** Returns the dynamically mounted page component instance, if loaded. */
777
+ getMountedPageInstance(): unknown;
778
+ private viewContainerRef;
779
+ private pageComponentRegistry;
780
+ private instanceRegistry;
781
+ private contextStore;
782
+ private componentRef;
783
+ ngOnInit(): Promise<void>;
784
+ ngOnDestroy(): void;
785
+ /** Persists page edits into the shared form context before the step component is destroyed. */
786
+ private syncWizardStepContextBeforeTeardown;
787
+ private loadComponent;
788
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPPageComponentRendererDirective, never>;
789
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AXPPageComponentRendererDirective, "[axp-page-component-renderer]", never, { "componentKey": { "alias": "componentKey"; "required": true; "isSignal": true; }; "rootContext": { "alias": "rootContext"; "required": false; "isSignal": true; }; "pageConfig": { "alias": "pageConfig"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; }, { "componentReady": "componentReady"; }, never, never, true, never>;
790
+ }
791
+
792
+ export { AXPLayoutDetailsViewComponent, AXPLayoutDetailsViewViewModel, AXPPageComponentInstanceRegistryService, AXPPageComponentRendererDirective, AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent, AXPPopupLayoutBase, AXPPopupLayoutBaseComponent, AXPPopupLayoutComponent };
793
+ export type { AXPLayoutDetailsViewAction, AXPLayoutDetailsViewAdapter, AXPLayoutDetailsViewPage, AXPLayoutDetailsViewTabItem, AXPPageContentItem };