@acorex/platform 21.0.0-next.85 → 21.0.0-next.89
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.
- package/fesm2022/acorex-platform-auth.mjs +9 -3
- package/fesm2022/acorex-platform-auth.mjs.map +1 -1
- package/fesm2022/{acorex-platform-common-common-settings.provider-Ytey9uhY.mjs → acorex-platform-common-common-settings.provider-DilV4dql.mjs} +16 -3
- package/fesm2022/acorex-platform-common-common-settings.provider-DilV4dql.mjs.map +1 -0
- package/fesm2022/acorex-platform-common.mjs +3426 -2488
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-contracts.mjs +1160 -9
- package/fesm2022/acorex-platform-contracts.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +826 -152
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-domain-contracts.mjs +58 -0
- package/fesm2022/acorex-platform-domain-contracts.mjs.map +1 -0
- package/fesm2022/acorex-platform-domain.mjs +2 -50
- package/fesm2022/acorex-platform-domain.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +98 -189
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs → acorex-platform-layout-components-binding-expression-editor-popup.component-RttFwaw9.mjs} +17 -4
- package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-RttFwaw9.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-components.mjs +181 -46
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +7 -6
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity-attachments-page.component-CwG6n_Yb.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity-contracts.mjs +1208 -0
- package/fesm2022/acorex-platform-layout-entity-contracts.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-entity-file-list-popup.component--IeMZLIr.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +1080 -889
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +1150 -247
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-widget-core.mjs +388 -207
- package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-CFyfix31.mjs +513 -0
- package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-CFyfix31.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-DjpZU6gz.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-CZc2zFlg.mjs} +4 -4
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-CZc2zFlg.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-gX-3Kx9I.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-XWRUVoL4.mjs} +2 -2
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-gX-3Kx9I.mjs.map → acorex-platform-layout-widgets-tabular-data-view-popup.component-XWRUVoL4.mjs.map} +1 -1
- package/fesm2022/acorex-platform-layout-widgets.mjs +1541 -394
- package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
- package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-Br9p5aXT.mjs → acorex-platform-themes-default-entity-master-single-view.component-DrUwqKKA.mjs} +2 -3
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-DrUwqKKA.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default.mjs +956 -115
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/{acorex-platform-themes-shared-settings.provider-BjuzSe0T.mjs → acorex-platform-themes-shared-settings.provider-UyKdkeyk.mjs} +50 -3
- package/fesm2022/acorex-platform-themes-shared-settings.provider-UyKdkeyk.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-shared.mjs +104 -24
- package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
- package/fesm2022/acorex-platform-workflow.mjs +6 -8
- package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
- package/package.json +9 -5
- package/types/acorex-platform-auth.d.ts +3 -1
- package/types/acorex-platform-common.d.ts +655 -1268
- package/types/acorex-platform-contracts.d.ts +1791 -260
- package/types/acorex-platform-core.d.ts +2302 -2800
- package/types/acorex-platform-domain-contracts.d.ts +416 -0
- package/types/acorex-platform-domain.d.ts +4 -415
- package/types/acorex-platform-layout-builder.d.ts +11 -20
- package/types/acorex-platform-layout-components.d.ts +29 -5
- package/types/acorex-platform-layout-designer.d.ts +2 -1
- package/types/acorex-platform-layout-entity-contracts.d.ts +889 -0
- package/types/acorex-platform-layout-entity.d.ts +143 -275
- package/types/acorex-platform-layout-views.d.ts +147 -31
- package/types/acorex-platform-layout-widget-core.d.ts +74 -14
- package/types/acorex-platform-layout-widgets.d.ts +136 -38
- package/types/acorex-platform-runtime.d.ts +1 -1
- package/types/acorex-platform-themes-default.d.ts +227 -73
- package/types/acorex-platform-themes-shared.d.ts +4 -0
- package/types/acorex-platform-workflow.d.ts +5 -18
- package/fesm2022/acorex-platform-common-common-settings.provider-Ytey9uhY.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-J0zcGKBX.mjs +0 -116
- package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-J0zcGKBX.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-DjpZU6gz.mjs.map +0 -1
- package/fesm2022/acorex-platform-native.mjs +0 -155
- package/fesm2022/acorex-platform-native.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-Br9p5aXT.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-settings.provider-BjuzSe0T.mjs.map +0 -1
- package/native/README.md +0 -4
- package/types/acorex-platform-native.d.ts +0 -28
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
import * as _ngrx_signals from '@ngrx/signals';
|
|
2
2
|
import * as _angular_core from '@angular/core';
|
|
3
|
-
import { Signal, OnInit, OnDestroy } from '@angular/core';
|
|
3
|
+
import { Signal, InjectionToken, OnInit, OnDestroy } from '@angular/core';
|
|
4
4
|
import * as _acorex_platform_themes_shared from '@acorex/platform/themes/shared';
|
|
5
5
|
import { AXClickEvent } from '@acorex/cdk/common';
|
|
6
|
+
import { AXPTabNavigationService, AXPHomePageService, AXPSettingsService, AXPTabPreviewService, AXPUnsavedChangesConfirmService, AXPBrowserTitleService, AXPEntityCommandScope } from '@acorex/platform/common';
|
|
6
7
|
import * as i1 from '@acorex/cdk/drawer';
|
|
7
8
|
import { AXDrawerItemDirective } from '@acorex/cdk/drawer';
|
|
9
|
+
import { AXPBreadcrumbItem, AXPMultiLanguageString, AXPBadge, AXPPageStatus, AXPBackButton, AXPExecuteCommand, AXPExecuteCommandResult } from '@acorex/platform/contracts';
|
|
8
10
|
import * as _acorex_platform_core from '@acorex/platform/core';
|
|
9
|
-
import { AXPActionMenuItem,
|
|
11
|
+
import { AXPActionMenuItem, AXPDeviceService, AXPKeyboardShortcut, AXPExpressionEvaluatorScope, AXPBroadcastEventService, AXPContextChangeEvent, AXPKeyboardShortcutChord } from '@acorex/platform/core';
|
|
10
12
|
import { AXPCommandService, AXPPolicyEngineService } from '@acorex/platform/runtime';
|
|
11
13
|
import { AXPWorkflowService } from '@acorex/platform/workflow';
|
|
12
|
-
import * as _acorex_core_translation from '@acorex/core/translation';
|
|
13
|
-
import { AXTranslationService } from '@acorex/core/translation';
|
|
14
14
|
import { AXToastService } from '@acorex/components/toast';
|
|
15
15
|
import { AXFormatService } from '@acorex/core/format';
|
|
16
|
+
import { AXTranslationService } from '@acorex/core/translation';
|
|
16
17
|
import { AXPSessionService } from '@acorex/platform/auth';
|
|
17
|
-
import
|
|
18
|
+
import * as _angular_router from '@angular/router';
|
|
19
|
+
import { Router, ActivatedRoute } from '@angular/router';
|
|
18
20
|
import { AXBasePageComponent } from '@acorex/components/page';
|
|
19
21
|
import * as _acorex_platform_layout_widget_core from '@acorex/platform/layout/widget-core';
|
|
20
22
|
import { AXPWidgetNode, AXPPageStatus as AXPPageStatus$1, AXPWidgetContainerComponent } from '@acorex/platform/layout/widget-core';
|
|
21
23
|
import * as _acorex_platform_layout_views from '@acorex/platform/layout/views';
|
|
22
24
|
import { AXFormComponent } from '@acorex/components/form';
|
|
23
25
|
import { AXTabStripChangedEvent } from '@acorex/components/tabs';
|
|
24
|
-
import * as _angular_router from '@angular/router';
|
|
25
|
-
import { Router, ActivatedRoute } from '@angular/router';
|
|
26
26
|
|
|
27
27
|
declare abstract class AXPPageLayoutBase {
|
|
28
28
|
abstract primaryMenuItems: Signal<AXPActionMenuItem[]>;
|
|
@@ -82,6 +82,7 @@ declare class AXPPageLayoutComponent {
|
|
|
82
82
|
isSystemMode: _angular_core.Signal<boolean>;
|
|
83
83
|
isSideMenuOpen: _angular_core.Signal<boolean>;
|
|
84
84
|
isOverlayLoading: _angular_core.Signal<boolean>;
|
|
85
|
+
overlayTaskCount: _angular_core.Signal<number>;
|
|
85
86
|
isNavigationLoading: _angular_core.Signal<boolean>;
|
|
86
87
|
isMenuHorizontal: _angular_core.Signal<boolean>;
|
|
87
88
|
effectiveMenuVerticalMode: _angular_core.Signal<_acorex_platform_themes_shared.AXPMenuVerticalMode>;
|
|
@@ -95,6 +96,7 @@ declare class AXPPageLayoutComponent {
|
|
|
95
96
|
toggleSideMenu: () => void;
|
|
96
97
|
setNavigationLoading: (value: boolean, delay?: number) => void;
|
|
97
98
|
setOverlayLoading: (value: boolean, delay?: number) => void;
|
|
99
|
+
clearOverlayLoading: () => void;
|
|
98
100
|
loadSettings: () => Promise<void>;
|
|
99
101
|
} & _ngrx_signals.StateSource<{
|
|
100
102
|
currentMode: _acorex_platform_themes_shared.AXPThemeMode;
|
|
@@ -117,6 +119,7 @@ declare class AXPPageLayoutComponent {
|
|
|
117
119
|
isPrinting: boolean;
|
|
118
120
|
}>;
|
|
119
121
|
protected deviceService: AXPDeviceService;
|
|
122
|
+
protected tabNavigation: AXPTabNavigationService;
|
|
120
123
|
protected startSideDrawer: _angular_core.Signal<AXDrawerItemDirective | undefined>;
|
|
121
124
|
protected workflow: AXPWorkflowService;
|
|
122
125
|
protected commandService: AXPCommandService;
|
|
@@ -165,6 +168,7 @@ declare abstract class AXPPageLayoutBaseComponent implements AXPPageLayoutBase {
|
|
|
165
168
|
isSystemMode: _angular_core.Signal<boolean>;
|
|
166
169
|
isSideMenuOpen: _angular_core.Signal<boolean>;
|
|
167
170
|
isOverlayLoading: _angular_core.Signal<boolean>;
|
|
171
|
+
overlayTaskCount: _angular_core.Signal<number>;
|
|
168
172
|
isNavigationLoading: _angular_core.Signal<boolean>;
|
|
169
173
|
isMenuHorizontal: _angular_core.Signal<boolean>;
|
|
170
174
|
effectiveMenuVerticalMode: _angular_core.Signal<_acorex_platform_themes_shared.AXPMenuVerticalMode>;
|
|
@@ -178,6 +182,7 @@ declare abstract class AXPPageLayoutBaseComponent implements AXPPageLayoutBase {
|
|
|
178
182
|
toggleSideMenu: () => void;
|
|
179
183
|
setNavigationLoading: (value: boolean, delay?: number) => void;
|
|
180
184
|
setOverlayLoading: (value: boolean, delay?: number) => void;
|
|
185
|
+
clearOverlayLoading: () => void;
|
|
181
186
|
loadSettings: () => Promise<void>;
|
|
182
187
|
} & _ngrx_signals.StateSource<{
|
|
183
188
|
currentMode: _acorex_platform_themes_shared.AXPThemeMode;
|
|
@@ -206,26 +211,65 @@ declare abstract class AXPPageLayoutBaseComponent implements AXPPageLayoutBase {
|
|
|
206
211
|
protected readonly homePageService: AXPHomePageService;
|
|
207
212
|
protected readonly policyService: AXPPolicyEngineService;
|
|
208
213
|
protected readonly settingsService: AXPSettingsService;
|
|
214
|
+
protected readonly tabNavigation: AXPTabNavigationService;
|
|
215
|
+
protected readonly tabPreviewService: AXPTabPreviewService;
|
|
216
|
+
protected readonly unsavedChangesConfirm: AXPUnsavedChangesConfirmService;
|
|
217
|
+
protected readonly browserTitleService: AXPBrowserTitleService;
|
|
218
|
+
protected readonly router: Router;
|
|
219
|
+
private readonly pageLayoutDestroyRef;
|
|
209
220
|
private _updateTrigger;
|
|
221
|
+
/** Tab key captured at page init — stable while the route instance is cached. */
|
|
222
|
+
private readonly pageTabKey;
|
|
210
223
|
protected updateTrigger: _angular_core.Signal<number>;
|
|
211
224
|
protected recompute(): void;
|
|
212
225
|
ngOnInit(): Promise<void>;
|
|
213
|
-
|
|
226
|
+
/** Maps the home-page route to the pinned home tab key instead of a path-based key. */
|
|
227
|
+
private resolvePageTabKey;
|
|
228
|
+
/** Stable tab key for this cached page instance (tabular mode). */
|
|
229
|
+
protected getPageTabKey(): string | null;
|
|
230
|
+
protected publishTabStructuredPreview(tabKey: string, input: {
|
|
231
|
+
titleValue: AXPMultiLanguageString;
|
|
232
|
+
descriptionValue: AXPMultiLanguageString | null;
|
|
233
|
+
icon: string | null;
|
|
234
|
+
breadcrumbItems: AXPBreadcrumbItem[];
|
|
235
|
+
isDirty: boolean;
|
|
236
|
+
}): Promise<void>;
|
|
237
|
+
protected resolveMultiLanguageText(value: AXPMultiLanguageString | null | undefined, fallback: string): Promise<string>;
|
|
238
|
+
/** Resolves i18n keys (`@scope:key`); returns plain text unchanged. */
|
|
239
|
+
protected translateTextIfKey(text: string): Promise<string>;
|
|
240
|
+
title: _angular_core.WritableSignal<AXPMultiLanguageString>;
|
|
214
241
|
titleIcon: _angular_core.WritableSignal<string | null>;
|
|
215
242
|
protected getPageTitle(): AXPMultiLanguageString | Promise<AXPMultiLanguageString>;
|
|
216
243
|
protected getPageIcon(): string | null | Promise<string | null>;
|
|
217
244
|
hasTitle: _angular_core.Signal<boolean>;
|
|
218
245
|
hasTitleIcon: _angular_core.Signal<boolean>;
|
|
219
|
-
|
|
246
|
+
/** Publishes the page title to the browser tab when this instance is the active route. */
|
|
247
|
+
protected publishBrowserTitleIfActive(): Promise<void>;
|
|
248
|
+
/** True when this cached page instance matches the current router location. */
|
|
249
|
+
protected isActivePageForBrowserTitle(): boolean;
|
|
250
|
+
description: _angular_core.WritableSignal<AXPMultiLanguageString | null>;
|
|
220
251
|
hasDescription: _angular_core.Signal<boolean>;
|
|
221
252
|
protected getPageDescription(): AXPMultiLanguageString | null | Promise<AXPMultiLanguageString | null>;
|
|
222
253
|
private defaultBreadCrumbs;
|
|
223
254
|
breadcrumbs: _angular_core.WritableSignal<AXPBreadcrumbItem[]>;
|
|
224
255
|
hasBreadcrumbs: _angular_core.Signal<boolean>;
|
|
225
256
|
protected getPageBreadcrumbs(): AXPBreadcrumbItem[] | Promise<AXPBreadcrumbItem[]>;
|
|
257
|
+
/** Collects resolved breadcrumb labels (Home excluded upstream) for tab chrome. */
|
|
258
|
+
protected resolveBreadcrumbTabTitleSegments(pageBreadcrumbs: AXPBreadcrumbItem[]): Promise<string[]>;
|
|
259
|
+
/** Joins breadcrumb segments as the stored tab title string. */
|
|
260
|
+
protected resolveBreadcrumbTabTitle(pageBreadcrumbs: AXPBreadcrumbItem[]): Promise<string | null>;
|
|
261
|
+
/** Resolves a breadcrumb label the same way as page chrome (`t(item.title)`). */
|
|
262
|
+
protected resolveBreadcrumbItemTitle(item: AXPBreadcrumbItem | undefined): Promise<string | null>;
|
|
263
|
+
/** Fallback tab label from the page title when breadcrumbs are not ready yet. */
|
|
264
|
+
protected resolvePageTitleForTab(): Promise<string | null>;
|
|
226
265
|
badge: _angular_core.WritableSignal<AXPBadge | null>;
|
|
227
266
|
hasBadge: _angular_core.Signal<boolean>;
|
|
228
267
|
hasUnsavedChanges(): boolean;
|
|
268
|
+
/**
|
|
269
|
+
* Confirms closing this page as a background tab (no router navigation).
|
|
270
|
+
* Override when dirty detection differs from {@link hasUnsavedChanges}.
|
|
271
|
+
*/
|
|
272
|
+
onBeforeTabClose(): boolean | Promise<boolean>;
|
|
229
273
|
protected getPageBadge(): Promise<AXPBadge | null>;
|
|
230
274
|
resolvePageBadge(): Promise<AXPBadge | null>;
|
|
231
275
|
status: _angular_core.WritableSignal<AXPPageStatus | null>;
|
|
@@ -308,6 +352,7 @@ declare class AXPPopupLayoutComponent {
|
|
|
308
352
|
isSystemMode: _angular_core.Signal<boolean>;
|
|
309
353
|
isSideMenuOpen: _angular_core.Signal<boolean>;
|
|
310
354
|
isOverlayLoading: _angular_core.Signal<boolean>;
|
|
355
|
+
overlayTaskCount: _angular_core.Signal<number>;
|
|
311
356
|
isNavigationLoading: _angular_core.Signal<boolean>;
|
|
312
357
|
isMenuHorizontal: _angular_core.Signal<boolean>;
|
|
313
358
|
effectiveMenuVerticalMode: _angular_core.Signal<_acorex_platform_themes_shared.AXPMenuVerticalMode>;
|
|
@@ -321,6 +366,7 @@ declare class AXPPopupLayoutComponent {
|
|
|
321
366
|
toggleSideMenu: () => void;
|
|
322
367
|
setNavigationLoading: (value: boolean, delay?: number) => void;
|
|
323
368
|
setOverlayLoading: (value: boolean, delay?: number) => void;
|
|
369
|
+
clearOverlayLoading: () => void;
|
|
324
370
|
loadSettings: () => Promise<void>;
|
|
325
371
|
} & _ngrx_signals.StateSource<{
|
|
326
372
|
currentMode: _acorex_platform_themes_shared.AXPThemeMode;
|
|
@@ -377,6 +423,7 @@ declare abstract class AXPPopupLayoutBaseComponent extends AXBasePageComponent {
|
|
|
377
423
|
isSystemMode: _angular_core.Signal<boolean>;
|
|
378
424
|
isSideMenuOpen: _angular_core.Signal<boolean>;
|
|
379
425
|
isOverlayLoading: _angular_core.Signal<boolean>;
|
|
426
|
+
overlayTaskCount: _angular_core.Signal<number>;
|
|
380
427
|
isNavigationLoading: _angular_core.Signal<boolean>;
|
|
381
428
|
isMenuHorizontal: _angular_core.Signal<boolean>;
|
|
382
429
|
effectiveMenuVerticalMode: _angular_core.Signal<_acorex_platform_themes_shared.AXPMenuVerticalMode>;
|
|
@@ -390,6 +437,7 @@ declare abstract class AXPPopupLayoutBaseComponent extends AXBasePageComponent {
|
|
|
390
437
|
toggleSideMenu: () => void;
|
|
391
438
|
setNavigationLoading: (value: boolean, delay?: number) => void;
|
|
392
439
|
setOverlayLoading: (value: boolean, delay?: number) => void;
|
|
440
|
+
clearOverlayLoading: () => void;
|
|
393
441
|
loadSettings: () => Promise<void>;
|
|
394
442
|
} & _ngrx_signals.StateSource<{
|
|
395
443
|
currentMode: _acorex_platform_themes_shared.AXPThemeMode;
|
|
@@ -518,9 +566,20 @@ interface AXPLayoutDetailsViewAdapter {
|
|
|
518
566
|
getPageStatus?: (context: Record<string, unknown>, currentPage: AXPLayoutDetailsViewPage | null) => Promise<AXPPageStatus | null>;
|
|
519
567
|
}
|
|
520
568
|
|
|
569
|
+
interface AXPLayoutDetailsViewRouteParams {
|
|
570
|
+
moduleName: string;
|
|
571
|
+
entityName: string;
|
|
572
|
+
id: string;
|
|
573
|
+
}
|
|
574
|
+
interface AXPLayoutDetailsViewAdapterLoader {
|
|
575
|
+
load(params: AXPLayoutDetailsViewRouteParams): Promise<AXPLayoutDetailsViewAdapter>;
|
|
576
|
+
}
|
|
577
|
+
declare const AXP_LAYOUT_DETAILS_VIEW_ADAPTER_LOADER: InjectionToken<AXPLayoutDetailsViewAdapterLoader>;
|
|
578
|
+
|
|
521
579
|
declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
|
|
522
580
|
adapter: _angular_core.Signal<AXPLayoutDetailsViewAdapter | null>;
|
|
523
581
|
rootContext: _angular_core.Signal<Record<string, any>>;
|
|
582
|
+
savedContext: _angular_core.Signal<Record<string, any>>;
|
|
524
583
|
previousContext: _angular_core.Signal<Record<string, any>>;
|
|
525
584
|
context: _angular_core.Signal<Record<string, any>>;
|
|
526
585
|
scope: _angular_core.Signal<AXPExpressionEvaluatorScope | null>;
|
|
@@ -537,6 +596,8 @@ declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
|
|
|
537
596
|
isLarge: _angular_core.Signal<boolean>;
|
|
538
597
|
isBusy: _angular_core.Signal<boolean>;
|
|
539
598
|
isSaving: _angular_core.Signal<boolean>;
|
|
599
|
+
isOverlayBusy: _angular_core.Signal<boolean>;
|
|
600
|
+
isPageReady: _angular_core.Signal<boolean>;
|
|
540
601
|
isDirty: _angular_core.Signal<boolean>;
|
|
541
602
|
changesCount: _angular_core.Signal<1 | 0>;
|
|
542
603
|
isLoaded: _angular_core.Signal<boolean>;
|
|
@@ -544,7 +605,8 @@ declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
|
|
|
544
605
|
activeTabContent: _angular_core.Signal<AXPWidgetNode[]>;
|
|
545
606
|
loadAdapter: (adapter: AXPLayoutDetailsViewAdapter) => Promise<void>;
|
|
546
607
|
loadPage: (pageId?: string, forceRefresh?: boolean) => Promise<void>;
|
|
547
|
-
load: (adapter: AXPLayoutDetailsViewAdapter) => Promise<void>;
|
|
608
|
+
load: (adapter: AXPLayoutDetailsViewAdapter, forceRefresh?: boolean, pageIdFromUrl?: string) => Promise<void>;
|
|
609
|
+
loadFromRoute: (forceRefresh?: boolean) => Promise<void>;
|
|
548
610
|
updateContext: (context: any) => void;
|
|
549
611
|
setFormDirty: (dirty: boolean) => void;
|
|
550
612
|
updatePageSelectedRows: (rows: any[]) => void;
|
|
@@ -554,7 +616,7 @@ declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
|
|
|
554
616
|
currentPageTabs: () => AXPLayoutDetailsViewTabItem[] | undefined;
|
|
555
617
|
setCurrentPage: (page: AXPLayoutDetailsViewPage | null) => void;
|
|
556
618
|
setCurrentTab: (tab: AXPLayoutDetailsViewTabItem) => void;
|
|
557
|
-
backButtonTitle: () =>
|
|
619
|
+
backButtonTitle: () => AXPMultiLanguageString;
|
|
558
620
|
getPageTitle: () => Promise<AXPMultiLanguageString>;
|
|
559
621
|
getPageDescription: () => Promise<AXPMultiLanguageString | null>;
|
|
560
622
|
getBackButton: () => Promise<AXPBackButton | null>;
|
|
@@ -563,7 +625,7 @@ declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
|
|
|
563
625
|
primaryActions: () => Promise<any>;
|
|
564
626
|
secondaryActions: () => Promise<any>;
|
|
565
627
|
breadcrumbs: () => Promise<{
|
|
566
|
-
title:
|
|
628
|
+
title: AXPMultiLanguageString;
|
|
567
629
|
name?: string;
|
|
568
630
|
icon?: string;
|
|
569
631
|
command?: AXPExecuteCommand;
|
|
@@ -571,10 +633,11 @@ declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
|
|
|
571
633
|
applySavedState: (context: Record<string, unknown>) => void;
|
|
572
634
|
discard: () => Promise<void>;
|
|
573
635
|
save: (command: AXPExecuteCommand, form: AXFormComponent, liveContext?: Record<string, unknown>) => Promise<boolean>;
|
|
574
|
-
goToListPage: () => void
|
|
636
|
+
goToListPage: () => Promise<void>;
|
|
575
637
|
} & _ngrx_signals.StateSource<{
|
|
576
638
|
adapter: AXPLayoutDetailsViewAdapter | null;
|
|
577
639
|
rootContext: Record<string, any>;
|
|
640
|
+
savedContext: Record<string, any>;
|
|
578
641
|
previousContext: Record<string, any>;
|
|
579
642
|
context: Record<string, any>;
|
|
580
643
|
scope: AXPExpressionEvaluatorScope | null;
|
|
@@ -589,10 +652,10 @@ declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
|
|
|
589
652
|
|
|
590
653
|
declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent implements OnInit, OnDestroy {
|
|
591
654
|
#private;
|
|
592
|
-
adapter: _angular_core.InputSignal<AXPLayoutDetailsViewAdapter>;
|
|
593
655
|
protected vm: {
|
|
594
|
-
adapter: _angular_core.Signal<AXPLayoutDetailsViewAdapter | null>;
|
|
656
|
+
adapter: _angular_core.Signal<_acorex_platform_layout_views.AXPLayoutDetailsViewAdapter | null>;
|
|
595
657
|
rootContext: _angular_core.Signal<Record<string, any>>;
|
|
658
|
+
savedContext: _angular_core.Signal<Record<string, any>>;
|
|
596
659
|
previousContext: _angular_core.Signal<Record<string, any>>;
|
|
597
660
|
context: _angular_core.Signal<Record<string, any>>;
|
|
598
661
|
scope: _angular_core.Signal<_acorex_platform_core.AXPExpressionEvaluatorScope | null>;
|
|
@@ -609,14 +672,17 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
|
|
|
609
672
|
isLarge: _angular_core.Signal<boolean>;
|
|
610
673
|
isBusy: _angular_core.Signal<boolean>;
|
|
611
674
|
isSaving: _angular_core.Signal<boolean>;
|
|
675
|
+
isOverlayBusy: _angular_core.Signal<boolean>;
|
|
676
|
+
isPageReady: _angular_core.Signal<boolean>;
|
|
612
677
|
isDirty: _angular_core.Signal<boolean>;
|
|
613
678
|
changesCount: _angular_core.Signal<1 | 0>;
|
|
614
679
|
isLoaded: _angular_core.Signal<boolean>;
|
|
615
680
|
currentPageSelectedRows: _angular_core.Signal<any[]>;
|
|
616
681
|
activeTabContent: _angular_core.Signal<_acorex_platform_layout_widget_core.AXPWidgetNode[]>;
|
|
617
|
-
loadAdapter: (adapter: AXPLayoutDetailsViewAdapter) => Promise<void>;
|
|
682
|
+
loadAdapter: (adapter: _acorex_platform_layout_views.AXPLayoutDetailsViewAdapter) => Promise<void>;
|
|
618
683
|
loadPage: (pageId?: string, forceRefresh?: boolean) => Promise<void>;
|
|
619
|
-
load: (adapter: AXPLayoutDetailsViewAdapter) => Promise<void>;
|
|
684
|
+
load: (adapter: _acorex_platform_layout_views.AXPLayoutDetailsViewAdapter, forceRefresh?: boolean, pageIdFromUrl?: string) => Promise<void>;
|
|
685
|
+
loadFromRoute: (forceRefresh?: boolean) => Promise<void>;
|
|
620
686
|
updateContext: (context: any) => void;
|
|
621
687
|
setFormDirty: (dirty: boolean) => void;
|
|
622
688
|
updatePageSelectedRows: (rows: any[]) => void;
|
|
@@ -626,7 +692,7 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
|
|
|
626
692
|
currentPageTabs: () => _acorex_platform_layout_views.AXPLayoutDetailsViewTabItem[] | undefined;
|
|
627
693
|
setCurrentPage: (page: AXPLayoutDetailsViewPage | null) => void;
|
|
628
694
|
setCurrentTab: (tab: _acorex_platform_layout_views.AXPLayoutDetailsViewTabItem) => void;
|
|
629
|
-
backButtonTitle: () =>
|
|
695
|
+
backButtonTitle: () => AXPMultiLanguageString;
|
|
630
696
|
getPageTitle: () => Promise<AXPMultiLanguageString>;
|
|
631
697
|
getPageDescription: () => Promise<AXPMultiLanguageString | null>;
|
|
632
698
|
getBackButton: () => Promise<AXPBackButton | null>;
|
|
@@ -635,7 +701,7 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
|
|
|
635
701
|
primaryActions: () => Promise<any>;
|
|
636
702
|
secondaryActions: () => Promise<any>;
|
|
637
703
|
breadcrumbs: () => Promise<{
|
|
638
|
-
title:
|
|
704
|
+
title: AXPMultiLanguageString;
|
|
639
705
|
name?: string;
|
|
640
706
|
icon?: string;
|
|
641
707
|
command?: AXPExecuteCommand;
|
|
@@ -643,10 +709,11 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
|
|
|
643
709
|
applySavedState: (context: Record<string, unknown>) => void;
|
|
644
710
|
discard: () => Promise<void>;
|
|
645
711
|
save: (command: AXPExecuteCommand, form: AXFormComponent, liveContext?: Record<string, unknown>) => Promise<boolean>;
|
|
646
|
-
goToListPage: () => void
|
|
712
|
+
goToListPage: () => Promise<void>;
|
|
647
713
|
} & _ngrx_signals.StateSource<{
|
|
648
|
-
adapter: AXPLayoutDetailsViewAdapter | null;
|
|
714
|
+
adapter: _acorex_platform_layout_views.AXPLayoutDetailsViewAdapter | null;
|
|
649
715
|
rootContext: Record<string, any>;
|
|
716
|
+
savedContext: Record<string, any>;
|
|
650
717
|
previousContext: Record<string, any>;
|
|
651
718
|
context: Record<string, any>;
|
|
652
719
|
scope: _acorex_platform_core.AXPExpressionEvaluatorScope | null;
|
|
@@ -658,22 +725,32 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
|
|
|
658
725
|
evaluatedTabContentsById: Record<string, _acorex_platform_layout_widget_core.AXPWidgetNode[]>;
|
|
659
726
|
formDirty: boolean;
|
|
660
727
|
}>;
|
|
661
|
-
protected router: Router;
|
|
662
728
|
protected route: ActivatedRoute;
|
|
663
729
|
protected eventService: AXPBroadcastEventService;
|
|
664
730
|
protected deviceService: AXPDeviceService;
|
|
665
|
-
private readonly unsavedChangesConfirm;
|
|
666
731
|
private readonly unsavedChangesPopstate;
|
|
667
732
|
private readonly pageComponentInstanceRegistry;
|
|
668
733
|
private readonly shortcutRegistry;
|
|
734
|
+
private readonly workflowService;
|
|
669
735
|
private readonly destroyRef;
|
|
670
736
|
private readonly elementRef;
|
|
737
|
+
private readonly debug;
|
|
671
738
|
private onSelectionChangeSubscription?;
|
|
672
|
-
/** Prevents sidebar tab init events from pushing history before
|
|
673
|
-
private detailsLayoutReady;
|
|
739
|
+
/** Prevents sidebar tab init events from pushing history before the first page activation completes. */
|
|
740
|
+
private readonly detailsLayoutReady;
|
|
674
741
|
private readonly destroyed$;
|
|
675
742
|
private footerActionsGeneration;
|
|
676
743
|
private keyboardShortcutRegistrationGeneration;
|
|
744
|
+
private overlayFallbackTimer?;
|
|
745
|
+
/** Page id the overlay release logic is bound to; reset on sidebar/page switch. */
|
|
746
|
+
private overlayTargetPageId;
|
|
747
|
+
/** After a page switch, wait for widget registry to clear before accepting remounted widgets. */
|
|
748
|
+
private overlaySawZeroWidgetsAfterPageChange;
|
|
749
|
+
/** Cancels in-flight overlay release when the page changes. */
|
|
750
|
+
private overlayReleaseGeneration;
|
|
751
|
+
private overlayReleasePromise?;
|
|
752
|
+
/** Safety cap when widget ready detection does not settle. */
|
|
753
|
+
private static readonly overlayMaxWaitMs;
|
|
677
754
|
/** Header actions with resolved shortcut chords, keyed by command name. */
|
|
678
755
|
private readonly actionShortcutEntries;
|
|
679
756
|
/** Save/discard use live {@link AXPLayoutDetailsViewViewModel.isDirty}; other actions use evaluated `visible`. */
|
|
@@ -713,17 +790,31 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
|
|
|
713
790
|
protected isFooterActionDisabled(action: AXPActionMenuItem): boolean;
|
|
714
791
|
protected hasFooter: _angular_core.Signal<boolean>;
|
|
715
792
|
/**
|
|
716
|
-
*
|
|
793
|
+
* Re-fetches the entity adapter and reloads the active page.
|
|
717
794
|
*/
|
|
718
795
|
protected refreshLayout(): Promise<void>;
|
|
719
796
|
ngOnInit(): Promise<void>;
|
|
797
|
+
/** Navigates to {@link AXPLayoutDetailsViewAdapter.exitUrl} when the open record was deleted. */
|
|
798
|
+
private handleEntityDeleted;
|
|
720
799
|
ngAfterViewInit(): Promise<void>;
|
|
721
800
|
ngOnDestroy(): void;
|
|
722
801
|
private refreshFooterActions;
|
|
723
802
|
protected handleOnContextChanged(e: AXPContextChangeEvent): void;
|
|
724
803
|
private getLiveFormContext;
|
|
804
|
+
/** Whether the active page renders widget nodes (not only hosted components). */
|
|
805
|
+
private pageHasWidgetNodes;
|
|
806
|
+
/** Clears all overlay loading tasks once the page (or hosted view) is ready. */
|
|
807
|
+
private clearPageOverlay;
|
|
808
|
+
private scheduleOverlayFallback;
|
|
809
|
+
private clearOverlayFallback;
|
|
810
|
+
/**
|
|
811
|
+
* Hides overlay after the widget container reports continuous idle (same gate as saved baseline).
|
|
812
|
+
*/
|
|
813
|
+
private requestOverlayRelease;
|
|
725
814
|
private finalizeSave;
|
|
726
815
|
private finalizeDiscard;
|
|
816
|
+
/** Reverts widget form state and view-model context to the last saved baseline. */
|
|
817
|
+
private discardUnsavedChanges;
|
|
727
818
|
/**
|
|
728
819
|
* `ax-tabs` selects on click before we can confirm. Revert synchronously, then confirm + switch.
|
|
729
820
|
*/
|
|
@@ -740,6 +831,7 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
|
|
|
740
831
|
protected getPageTitle(): Promise<AXPMultiLanguageString>;
|
|
741
832
|
getPageDescription(): Promise<AXPMultiLanguageString | null>;
|
|
742
833
|
getBackButton(): Promise<AXPBackButton | null>;
|
|
834
|
+
hasUnsavedChanges(): boolean;
|
|
743
835
|
getPageBadge(): Promise<AXPBadge | null>;
|
|
744
836
|
getPageStatus(): Promise<AXPPageStatus | null>;
|
|
745
837
|
/**
|
|
@@ -751,13 +843,21 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
|
|
|
751
843
|
* Router guard hook — same unsaved-changes confirm as dialog builder {@link confirmCloseWhenDirty}.
|
|
752
844
|
*/
|
|
753
845
|
canDeactivate(): Promise<boolean>;
|
|
846
|
+
/** Background tab close — confirm without discarding (the cached instance is destroyed). */
|
|
847
|
+
onBeforeTabClose(): Promise<boolean>;
|
|
754
848
|
/** Active entity component page instance, when the current details sub-page is component-based. */
|
|
755
849
|
private getActivePageComponentInstance;
|
|
756
850
|
/** Component key for the current details sub-page, when content is component-based. */
|
|
757
851
|
private getActivePageComponentKey;
|
|
758
852
|
private static isComponentPageContent;
|
|
853
|
+
protected pageContentTrackKey(item: AXPPageContentItem, index: number): string;
|
|
759
854
|
/** Whether the active component-based entity page has unsaved edits. */
|
|
760
855
|
private isActivePageComponentDirty;
|
|
856
|
+
/**
|
|
857
|
+
* Widget-form dirty state for leave guards (popstate, canDeactivate).
|
|
858
|
+
* Unlike {@link liveFormIsDirty}, does not suppress dirty while overlay is busy.
|
|
859
|
+
*/
|
|
860
|
+
private hasWidgetFormUnsavedChanges;
|
|
761
861
|
/** Whether the current details page has user-origin unsaved edits (form or component page). */
|
|
762
862
|
private shouldPromptLeave;
|
|
763
863
|
/** Single gate for leaving the page or switching details sub-pages when dirty. */
|
|
@@ -771,19 +871,25 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
|
|
|
771
871
|
/** Waits for builder/effect microtasks to finish after a component page command. */
|
|
772
872
|
private waitForComponentDirtySettle;
|
|
773
873
|
private refreshKeyboardShortcutRegistrations;
|
|
874
|
+
/** i18n scope label for the active details sub-page shortcut group in the help dialog. */
|
|
875
|
+
private getKeyboardShortcutScope;
|
|
876
|
+
/** Primary overview page backed by the entity widget form (not a component-hosted sub-page). */
|
|
877
|
+
private isWidgetFormPrimaryPage;
|
|
878
|
+
private registerDetailsViewShortcutScope;
|
|
774
879
|
private collectActionShortcutEntries;
|
|
775
|
-
private
|
|
776
|
-
/** Whether save/discard core shortcuts are listed in the help dialog (page
|
|
880
|
+
private isShortcutActionAvailable;
|
|
881
|
+
/** Whether save/discard core shortcuts are listed in the help dialog (widget overview page only). */
|
|
777
882
|
private isCoreSaveShortcutAvailable;
|
|
778
883
|
private isCoreDiscardShortcutAvailable;
|
|
779
884
|
private canExecuteSaveShortcut;
|
|
780
885
|
private canExecuteDiscardShortcut;
|
|
781
886
|
private executeDiscardViaShortcut;
|
|
887
|
+
private executeActionShortcut;
|
|
782
888
|
private isActionShortcutActive;
|
|
783
889
|
private registerCoreKeyboardShortcuts;
|
|
784
890
|
private registerActionKeyboardShortcuts;
|
|
785
891
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLayoutDetailsViewComponent, never>;
|
|
786
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPLayoutDetailsViewComponent, "axp-layout-details-view", never, {
|
|
892
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPLayoutDetailsViewComponent, "axp-layout-details-view", never, {}, {}, never, never, true, never>;
|
|
787
893
|
}
|
|
788
894
|
|
|
789
895
|
type AXPDetailsViewActionShortcut = AXPKeyboardShortcutChord;
|
|
@@ -800,6 +906,16 @@ declare function resolveDetailsViewActionShortcuts(commandBaseName: string, expl
|
|
|
800
906
|
* Resolves save/discard footer command shortcuts from page settings.
|
|
801
907
|
*/
|
|
802
908
|
declare function resolveDetailsViewFooterCommandShortcuts(commandName: string, explicit?: readonly AXPKeyboardShortcut[]): AXPDetailsViewActionShortcut[] | undefined;
|
|
909
|
+
/**
|
|
910
|
+
* Platform defaults for component-page footer save/discard commands (e.g. `MetaDataBuilder:Save`).
|
|
911
|
+
*/
|
|
912
|
+
declare function resolvePageFooterActionDefaultShortcuts(commandName: string): AXPDetailsViewActionShortcut[] | undefined;
|
|
913
|
+
declare function isSaveFooterCommand(commandName: string): boolean;
|
|
914
|
+
declare function isDiscardFooterCommand(commandName: string): boolean;
|
|
915
|
+
/**
|
|
916
|
+
* Resolves keyboard shortcuts for a footer action on entity detail sub-pages.
|
|
917
|
+
*/
|
|
918
|
+
declare function resolvePageFooterActionShortcuts(commandName: string, explicit?: readonly AXPKeyboardShortcut[]): AXPDetailsViewActionShortcut[] | undefined;
|
|
803
919
|
|
|
804
920
|
/**
|
|
805
921
|
* Prompts for unsaved changes before leaving the entity details route (breadcrumbs, menu, back to list).
|
|
@@ -847,5 +963,5 @@ declare class AXPPageComponentRendererDirective implements OnInit, OnDestroy {
|
|
|
847
963
|
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>;
|
|
848
964
|
}
|
|
849
965
|
|
|
850
|
-
export { AXPLayoutDetailsViewComponent, AXPLayoutDetailsViewViewModel, AXPPageComponentInstanceRegistryService, AXPPageComponentRendererDirective, AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent, AXPPopupLayoutBase, AXPPopupLayoutBaseComponent, AXPPopupLayoutComponent, axpDetailsViewCanDeactivateGuard, buildNotSavedPageBadge, getDetailsViewActionCommandBaseName, isDiscardCommand, resolveDetailsViewActionShortcuts, resolveDetailsViewFooterCommandShortcuts };
|
|
851
|
-
export type { AXPDetailsViewActionShortcut, AXPLayoutDetailsViewAction, AXPLayoutDetailsViewAdapter, AXPLayoutDetailsViewPage, AXPLayoutDetailsViewTabItem, AXPPageContentItem };
|
|
966
|
+
export { AXPLayoutDetailsViewComponent, AXPLayoutDetailsViewViewModel, AXPPageComponentInstanceRegistryService, AXPPageComponentRendererDirective, AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent, AXPPopupLayoutBase, AXPPopupLayoutBaseComponent, AXPPopupLayoutComponent, AXP_LAYOUT_DETAILS_VIEW_ADAPTER_LOADER, axpDetailsViewCanDeactivateGuard, buildNotSavedPageBadge, getDetailsViewActionCommandBaseName, isDiscardCommand, isDiscardFooterCommand, isSaveFooterCommand, resolveDetailsViewActionShortcuts, resolveDetailsViewFooterCommandShortcuts, resolvePageFooterActionDefaultShortcuts, resolvePageFooterActionShortcuts };
|
|
967
|
+
export type { AXPDetailsViewActionShortcut, AXPLayoutDetailsViewAction, AXPLayoutDetailsViewAdapter, AXPLayoutDetailsViewAdapterLoader, AXPLayoutDetailsViewPage, AXPLayoutDetailsViewRouteParams, AXPLayoutDetailsViewTabItem, AXPPageContentItem };
|