@acorex/platform 21.0.0-next.3 → 21.0.0-next.34
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 +295 -45
- package/fesm2022/acorex-platform-auth.mjs.map +1 -1
- package/fesm2022/{acorex-platform-common-common-settings.provider-zhqNP3xb.mjs → acorex-platform-common-common-settings.provider-G9XcXXOG.mjs} +60 -4
- package/fesm2022/acorex-platform-common-common-settings.provider-G9XcXXOG.mjs.map +1 -0
- package/fesm2022/acorex-platform-common.mjs +960 -319
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +1352 -832
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-domain.mjs +554 -826
- package/fesm2022/acorex-platform-domain.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +530 -154
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs +121 -0
- package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-components.mjs +5969 -2347
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +169 -154
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +15380 -9274
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +393 -110
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-widget-core.mjs +511 -450
- package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
- 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
- package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs → acorex-platform-layout-widgets-file-list-popup.component-9uCkMxcc.mjs} +39 -16
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-9uCkMxcc.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs → acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs} +6 -7
- package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs → acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs} +12 -12
- package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BGQqY5Mw.mjs +111 -0
- package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BGQqY5Mw.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-DmzNTYiS.mjs} +6 -6
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-DmzNTYiS.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-BNG_588B.mjs} +5 -5
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-BNG_588B.mjs.map +1 -0
- 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
- package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-widgets.mjs +7865 -4026
- package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-native.mjs +8 -7
- package/fesm2022/acorex-platform-native.mjs.map +1 -1
- package/fesm2022/acorex-platform-runtime.mjs +220 -169
- package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cvvr4HnL.mjs +160 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cvvr4HnL.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-TYoLN1Jq.mjs +120 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-TYoLN1Jq.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs → acorex-platform-themes-default-entity-master-single-view.component-C2z5Lq9y.mjs} +18 -25
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-C2z5Lq9y.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-error-401.component-cfREo88K.mjs → acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs} +4 -4
- package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs → acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs} +4 -4
- package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs +19 -0
- package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default.mjs +1717 -66
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/{acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs → acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs} +6 -6
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs → acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs} +6 -6
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs.map +1 -1
- package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs → acorex-platform-themes-shared-theme-color-chooser-column.component-CHfrTtol.mjs} +11 -11
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-CHfrTtol.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs → acorex-platform-themes-shared-theme-color-chooser-view.component-BSmvnUVq.mjs} +9 -9
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-BSmvnUVq.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-shared.mjs +563 -561
- package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
- package/fesm2022/acorex-platform-workflow.mjs +1735 -1750
- package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
- package/fesm2022/acorex-platform.mjs.map +1 -1
- package/package.json +31 -31
- package/{auth/index.d.ts → types/acorex-platform-auth.d.ts} +247 -10
- package/{common/index.d.ts → types/acorex-platform-common.d.ts} +492 -31
- package/{core/index.d.ts → types/acorex-platform-core.d.ts} +606 -392
- package/{domain/index.d.ts → types/acorex-platform-domain.d.ts} +719 -413
- package/{layout/builder/index.d.ts → types/acorex-platform-layout-builder.d.ts} +128 -56
- package/types/acorex-platform-layout-components.d.ts +2927 -0
- package/{layout/designer/index.d.ts → types/acorex-platform-layout-designer.d.ts} +9 -3
- package/{layout/entity/index.d.ts → types/acorex-platform-layout-entity.d.ts} +1133 -237
- package/{layout/views/index.d.ts → types/acorex-platform-layout-views.d.ts} +90 -31
- package/{layout/widget-core/index.d.ts → types/acorex-platform-layout-widget-core.d.ts} +206 -102
- package/{layout/widgets/index.d.ts → types/acorex-platform-layout-widgets.d.ts} +942 -137
- package/{native/index.d.ts → types/acorex-platform-native.d.ts} +0 -7
- package/{runtime/index.d.ts → types/acorex-platform-runtime.d.ts} +237 -74
- package/{themes/default/index.d.ts → types/acorex-platform-themes-default.d.ts} +113 -5
- package/{themes/shared/index.d.ts → types/acorex-platform-themes-shared.d.ts} +1 -1
- package/types/acorex-platform-workflow.d.ts +1806 -0
- package/fesm2022/acorex-platform-common-common-settings.provider-zhqNP3xb.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-C3VoBb_b.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Df1BFkSa.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs +0 -157
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DyDa_hyd.mjs +0 -1542
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DyDa_hyd.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs +0 -101
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-error-401.component-cfREo88K.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs +0 -19
- package/fesm2022/acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs.map +0 -1
- package/layout/components/index.d.ts +0 -1669
- package/workflow/index.d.ts +0 -2443
- /package/{index.d.ts → types/acorex-platform.d.ts} +0 -0
|
@@ -0,0 +1,2927 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { Signal, InjectionToken, InputSignal, TemplateRef, ElementRef, OnDestroy, OnInit, Type, QueryList, OnChanges, EventEmitter, WritableSignal } from '@angular/core';
|
|
3
|
+
import { AXPActivityLog, AXPSystemActionType, AXPCategoryEntity, AXPColumnQuery, AXPContextData, AXPFilterClause, AXPFilterDefinition, AXPFilterQuery, AXPContextChangeEvent, AXPSortDefinition, AXPSortQuery, AXPMetaData, AXPViewQuery, AXPMultiLanguageString, AXPActionMenuItem, AXPExecuteCommand, AXPExecuteCommandResult, containsHtmlMarkup } from '@acorex/platform/core';
|
|
4
|
+
import { AXPMenuItem } from '@acorex/platform/common';
|
|
5
|
+
import { AXValueChangedEvent, AXClickEvent, AXDataSource, AXDataSourceFilterOption, AXDataSourceOperator, AXFilterLogic, AXHtmlEvent, AXEvent, AXRange } from '@acorex/cdk/common';
|
|
6
|
+
import { AXTreeViewLegacyComponent, AXTreeItemClickBaseEventLegacy } from '@acorex/components/tree-view-legacy';
|
|
7
|
+
import { AXPopoverComponent } from '@acorex/components/popover';
|
|
8
|
+
import { CdkDragDrop } from '@angular/cdk/drag-drop';
|
|
9
|
+
import * as _acorex_platform_layout_widget_core from '@acorex/platform/layout/widget-core';
|
|
10
|
+
import { AXPWidgetNode, AXPWidgetRendererDirective, AXPWidgetProperty, AXPWidgetConfig } from '@acorex/platform/layout/widget-core';
|
|
11
|
+
import { AXDataTableComponent, AXDataTableRowDbClick, AXDataTableRowClick } from '@acorex/components/data-table';
|
|
12
|
+
import { AXBasePageComponent } from '@acorex/components/page';
|
|
13
|
+
import { AXDropListDroppedEvent } from '@acorex/cdk/drag-drop';
|
|
14
|
+
import { AXTagBoxComponent } from '@acorex/components/tag-box';
|
|
15
|
+
import { AXCalendarService } from '@acorex/core/date-time';
|
|
16
|
+
import { AXTranslationService } from '@acorex/core/translation';
|
|
17
|
+
import { AXFormComponent } from '@acorex/components/form';
|
|
18
|
+
import { AXTreeViewNode, AXTreeViewDragBehavior, AXTreeViewDragArea, AXTreeViewComponent, AXTreeViewBeforeDropEvent, AXTreeViewDropEvent } from '@acorex/components/tree-view';
|
|
19
|
+
import { AXTabStripChangedEvent, AXTabsComponent } from '@acorex/components/tabs';
|
|
20
|
+
import { AXValidationSummary } from '@acorex/core/validation';
|
|
21
|
+
import { AXPopupSizeType, AXPopupService } from '@acorex/components/popup';
|
|
22
|
+
import { Observable, Subject } from 'rxjs';
|
|
23
|
+
import { AXSelectBoxComponent } from '@acorex/components/select-box';
|
|
24
|
+
import { AXContextMenuOpeningEvent, AXContextMenuItemsClickEvent } from '@acorex/components/menu';
|
|
25
|
+
import { AXSchedulerComponent, AXSchedulerView, AXSchedulerResource, AXSchedulerAppointment, AXSchedulerDateRange } from '@acorex/components/scheduler';
|
|
26
|
+
import * as _acorex_platform_layout_components from '@acorex/platform/layout/components';
|
|
27
|
+
|
|
28
|
+
declare class AXPActivityLogComponent {
|
|
29
|
+
private readonly translateService;
|
|
30
|
+
private readonly workflowService;
|
|
31
|
+
/**
|
|
32
|
+
* Array of activity logs to display
|
|
33
|
+
*/
|
|
34
|
+
activities: _angular_core.InputSignal<AXPActivityLog[]>;
|
|
35
|
+
/**
|
|
36
|
+
* Whether the component is in loading state
|
|
37
|
+
*/
|
|
38
|
+
loading: _angular_core.InputSignal<boolean>;
|
|
39
|
+
protected readonly i18nScope = "activity-log";
|
|
40
|
+
protected readonly Object: ObjectConstructor;
|
|
41
|
+
/**
|
|
42
|
+
* Set of expanded activity IDs
|
|
43
|
+
*/
|
|
44
|
+
private expandedItems;
|
|
45
|
+
/**
|
|
46
|
+
* Flag to track if component has been initialized
|
|
47
|
+
*/
|
|
48
|
+
private isInitialized;
|
|
49
|
+
/**
|
|
50
|
+
* Set of items that have been manually toggled (for animation control)
|
|
51
|
+
*/
|
|
52
|
+
private manuallyToggledItems;
|
|
53
|
+
constructor();
|
|
54
|
+
/**
|
|
55
|
+
* Gets the appropriate CSS class for the change type
|
|
56
|
+
*/
|
|
57
|
+
protected getChangeClasses(changeType: AXPSystemActionType): {
|
|
58
|
+
surface: string;
|
|
59
|
+
text: string;
|
|
60
|
+
icon: string;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Checks if an activity item is expanded
|
|
64
|
+
*/
|
|
65
|
+
protected isExpanded(activityId: string): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Toggles the expanded state of an activity item
|
|
68
|
+
*/
|
|
69
|
+
protected toggleExpanded(activityId: string): void;
|
|
70
|
+
/**
|
|
71
|
+
* Checks if an item should have expand/collapse animation
|
|
72
|
+
*/
|
|
73
|
+
protected shouldAnimate(activityId: string): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Checks if an activity has expandable content (changes)
|
|
76
|
+
*/
|
|
77
|
+
protected hasExpandableContent(activity: AXPActivityLog): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Handles the compare action for an activity
|
|
80
|
+
*/
|
|
81
|
+
protected handleCompare(activity: AXPActivityLog, event: Event): Promise<void>;
|
|
82
|
+
/**
|
|
83
|
+
* Checks if an activity can be compared (has a previous version)
|
|
84
|
+
*/
|
|
85
|
+
protected canCompare(activity: AXPActivityLog): boolean;
|
|
86
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPActivityLogComponent, never>;
|
|
87
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPActivityLogComponent, "axp-activity-log", never, { "activities": { "alias": "activities"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
declare class AXPTaskBadgeService {
|
|
91
|
+
private badgeMap;
|
|
92
|
+
private providers;
|
|
93
|
+
private computedCache;
|
|
94
|
+
constructor();
|
|
95
|
+
getCount(key: string): Signal<number>;
|
|
96
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTaskBadgeService, never>;
|
|
97
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPTaskBadgeService>;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
declare const AXP_TASK_BADGE_PROVIDERS: InjectionToken<AXPTaskBadgeProvider[]>;
|
|
101
|
+
declare abstract class AXPTaskBadgeProvider {
|
|
102
|
+
abstract key: string;
|
|
103
|
+
abstract count: Signal<number>;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
declare class AXPTaskBadgeDirective {
|
|
107
|
+
#private;
|
|
108
|
+
private badgeService;
|
|
109
|
+
private host;
|
|
110
|
+
private hostElement;
|
|
111
|
+
badgeKey: InputSignal<string | undefined>;
|
|
112
|
+
count: InputSignal<number>;
|
|
113
|
+
private readonly displayCount;
|
|
114
|
+
private setValueOfInputSignal;
|
|
115
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTaskBadgeDirective, never>;
|
|
116
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AXPTaskBadgeDirective, "[axp-task-badge]", never, { "badgeKey": { "alias": "badgeKey"; "required": false; "isSignal": true; }; "count": { "alias": "axp-task-badge"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
declare class AXPMenuBadgeHelper {
|
|
120
|
+
private static cache;
|
|
121
|
+
static getTotalCount(item: AXPMenuItem, badgeService: AXPTaskBadgeService): Signal<number>;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
declare class AXPThemeLayoutPagePrimaryActionsComponent {
|
|
125
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPThemeLayoutPagePrimaryActionsComponent, never>;
|
|
126
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPThemeLayoutPagePrimaryActionsComponent, "axp-layout-actions-primary", never, {}, {}, never, ["ax-button,ax-dropdown-button"], true, never>;
|
|
127
|
+
}
|
|
128
|
+
declare class AXPThemeLayoutPageSecondaryActionsComponent {
|
|
129
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPThemeLayoutPageSecondaryActionsComponent, never>;
|
|
130
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPThemeLayoutPageSecondaryActionsComponent, "axp-layout-actions-secondary", never, {}, {}, never, ["ax-button-item,ax-divider,ng-container"], true, never>;
|
|
131
|
+
}
|
|
132
|
+
declare class AXPThemeLayoutActionsComponent {
|
|
133
|
+
readonly primaryTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
|
|
134
|
+
private readonly primaryContent;
|
|
135
|
+
hasPrimary: _angular_core.Signal<boolean>;
|
|
136
|
+
readonly secondaryTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
|
|
137
|
+
private readonly secondaryContent;
|
|
138
|
+
hasSecondary: _angular_core.Signal<boolean>;
|
|
139
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPThemeLayoutActionsComponent, never>;
|
|
140
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPThemeLayoutActionsComponent, "axp-layout-actions", never, {}, {}, ["primaryContent", "secondaryContent"], ["axp-layout-actions-primary", "axp-layout-actions-secondary", "*"], true, never>;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
declare class AXPThemeLayoutBlockComponent {
|
|
144
|
+
protected readonly elementRef: ElementRef<any>;
|
|
145
|
+
readonly hostElement: any;
|
|
146
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPThemeLayoutBlockComponent, never>;
|
|
147
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPThemeLayoutBlockComponent, " 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, ", never, {}, {}, never, ["*"], true, never>;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
declare class AXPThemeLayoutFooterComponent {
|
|
151
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPThemeLayoutFooterComponent, never>;
|
|
152
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPThemeLayoutFooterComponent, "axp-layout-footer, axp-layout-page-footer", never, {}, {}, never, ["axp-layout-prefix", "*", "axp-layout-suffix"], true, never>;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
declare class AXPThemeLayoutPageHeaderComponent {
|
|
156
|
+
readonly title: _angular_core.Signal<TemplateRef<any> | undefined>;
|
|
157
|
+
readonly description: _angular_core.Signal<TemplateRef<any> | undefined>;
|
|
158
|
+
readonly actions: _angular_core.Signal<TemplateRef<any> | undefined>;
|
|
159
|
+
readonly navbar: _angular_core.Signal<TemplateRef<any> | undefined>;
|
|
160
|
+
readonly breadcrumbs: _angular_core.Signal<TemplateRef<any> | undefined>;
|
|
161
|
+
readonly navButton: _angular_core.Signal<TemplateRef<any> | undefined>;
|
|
162
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPThemeLayoutPageHeaderComponent, never>;
|
|
163
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPThemeLayoutPageHeaderComponent, "axp-layout-page-header", never, {}, {}, never, ["axp-layout-breadcrumbs", "axp-layout-toolbar", "axp-layout-actions", "axp-layout-description", "axp-layout-title", "axp-layout-nav-button"], true, never>;
|
|
164
|
+
}
|
|
165
|
+
declare class AXPThemeLayoutHeaderComponent {
|
|
166
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPThemeLayoutHeaderComponent, never>;
|
|
167
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPThemeLayoutHeaderComponent, "axp-layout-header", never, {}, {}, never, ["axp-layout-prefix", "*", "axp-layout-suffix"], true, never>;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
declare class AXPThemeLayoutListComponent {
|
|
171
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPThemeLayoutListComponent, never>;
|
|
172
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPThemeLayoutListComponent, "axp-layout-list", never, {}, {}, never, ["axp-layout-list-item,axp-layout-list-group,ng-container"], true, never>;
|
|
173
|
+
}
|
|
174
|
+
declare class AXPThemeLayoutListItemsGroupComponent {
|
|
175
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPThemeLayoutListItemsGroupComponent, never>;
|
|
176
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPThemeLayoutListItemsGroupComponent, "axp-layout-list-group", never, {}, {}, never, ["axp-layout-list-item, axp-layout-title, axp-layout-header ,ng-container"], true, never>;
|
|
177
|
+
}
|
|
178
|
+
declare class AXPThemeLayoutListItemComponent {
|
|
179
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPThemeLayoutListItemComponent, never>;
|
|
180
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPThemeLayoutListItemComponent, "axp-layout-list-item", never, {}, {}, never, ["axp-layout-content,axp-layout-prefix,axp-layout-suffix,ng-container"], true, never>;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
declare class AXPThemeLayoutSectionComponent {
|
|
184
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPThemeLayoutSectionComponent, never>;
|
|
185
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPThemeLayoutSectionComponent, "axp-layout-section", never, {}, {}, never, ["axp-layout-header", "axp-layout-content"], true, never>;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
declare class AXPThemeLayoutStartSideComponent {
|
|
189
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPThemeLayoutStartSideComponent, never>;
|
|
190
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPThemeLayoutStartSideComponent, "axp-layout-page-start-side, axp-layout-start-side", never, {}, {}, never, ["axp-layout-header", "axp-layout-content", "axp-layout-footer", "*"], true, never>;
|
|
191
|
+
}
|
|
192
|
+
declare class AXPThemeLayoutEndSideComponent {
|
|
193
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPThemeLayoutEndSideComponent, never>;
|
|
194
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPThemeLayoutEndSideComponent, "axp-layout-page-end-side, axp-layout-end-side", never, {}, {}, never, ["axp-layout-header", "axp-layout-content", "axp-layout-footer"], true, never>;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
declare class AXPThemeLayoutToolbarComponent {
|
|
198
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPThemeLayoutToolbarComponent, never>;
|
|
199
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPThemeLayoutToolbarComponent, "axp-layout-toolbar", never, {}, {}, never, ["axp-layout-prefix", "axp-layout-suffix", "*"], true, never>;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
declare class AXPThemeLayoutContainerComponent {
|
|
203
|
+
protected readonly elementRef: ElementRef<HTMLDivElement>;
|
|
204
|
+
readonly hostElement: HTMLDivElement;
|
|
205
|
+
private _isEmptySignal;
|
|
206
|
+
readonly isEmpty: Signal<boolean>;
|
|
207
|
+
private mutationObserver?;
|
|
208
|
+
ngOnInit(): void;
|
|
209
|
+
ngOnDestroy(): void;
|
|
210
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPThemeLayoutContainerComponent, never>;
|
|
211
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPThemeLayoutContainerComponent, "axp-layout-container", never, {}, {}, never, ["*"], true, never>;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
interface AXPCategoryTreeNode extends AXPCategoryEntity {
|
|
215
|
+
children?: AXPCategoryTreeNode[];
|
|
216
|
+
expand?: boolean;
|
|
217
|
+
hasChild?: boolean;
|
|
218
|
+
[key: string]: any;
|
|
219
|
+
}
|
|
220
|
+
interface AXPCategoryTreeConfig {
|
|
221
|
+
textField?: string;
|
|
222
|
+
valueField?: string;
|
|
223
|
+
expandedField?: string;
|
|
224
|
+
showCheckbox?: boolean;
|
|
225
|
+
searchable?: boolean;
|
|
226
|
+
searchPlaceholder?: string;
|
|
227
|
+
emptyStateTitle?: string;
|
|
228
|
+
emptyStateDescription?: string;
|
|
229
|
+
emptyStateIcon?: string;
|
|
230
|
+
}
|
|
231
|
+
interface AXPCategoryTreeEvents {
|
|
232
|
+
onNodeClick?: (node: AXPCategoryEntity) => void;
|
|
233
|
+
onNodeSelect?: (node: AXPCategoryEntity) => void;
|
|
234
|
+
onNodeCreate?: (parentNode?: AXPCategoryEntity) => void;
|
|
235
|
+
onNodeUpdate?: (node: AXPCategoryEntity) => void;
|
|
236
|
+
onNodeDelete?: (node: AXPCategoryEntity) => void;
|
|
237
|
+
onSearchChange?: (searchValue: string) => void;
|
|
238
|
+
onCollapseChange?: (node: AXPCategoryEntity) => void;
|
|
239
|
+
}
|
|
240
|
+
interface AXPCategoryTreeActions {
|
|
241
|
+
canCreate?: boolean;
|
|
242
|
+
canUpdate?: boolean;
|
|
243
|
+
canDelete?: boolean;
|
|
244
|
+
canCreateChild?: boolean;
|
|
245
|
+
createLabel?: string;
|
|
246
|
+
updateLabel?: string;
|
|
247
|
+
deleteLabel?: string;
|
|
248
|
+
createChildLabel?: string;
|
|
249
|
+
}
|
|
250
|
+
interface AXPCategoryTreeDataSource {
|
|
251
|
+
loadRootNodes: () => Promise<AXPCategoryEntity[]>;
|
|
252
|
+
loadChildNodes?: (parentId: string) => Promise<AXPCategoryEntity[]>;
|
|
253
|
+
searchNodes?: (searchValue: string) => Promise<AXPCategoryEntity[]>;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
declare class AXPCategoryTreeComponent {
|
|
257
|
+
/** i18n key for the synthetic root row; resolved in the template with the translate pipe. */
|
|
258
|
+
protected readonly categoryTreeRootTitleI18nKey = "@general:terms.interface.selection.all-items";
|
|
259
|
+
dataSource: _angular_core.InputSignal<AXPCategoryTreeDataSource>;
|
|
260
|
+
config: _angular_core.InputSignal<AXPCategoryTreeConfig>;
|
|
261
|
+
actions: _angular_core.InputSignal<AXPCategoryTreeActions>;
|
|
262
|
+
events: _angular_core.InputSignal<AXPCategoryTreeEvents>;
|
|
263
|
+
nodeClick: _angular_core.OutputEmitterRef<AXPCategoryEntity<string>>;
|
|
264
|
+
nodeSelect: _angular_core.OutputEmitterRef<AXPCategoryEntity<string>>;
|
|
265
|
+
nodeCreate: _angular_core.OutputEmitterRef<AXPCategoryEntity<string> | undefined>;
|
|
266
|
+
nodeUpdate: _angular_core.OutputEmitterRef<AXPCategoryEntity<string>>;
|
|
267
|
+
nodeDelete: _angular_core.OutputEmitterRef<AXPCategoryEntity<string>>;
|
|
268
|
+
searchChange: _angular_core.OutputEmitterRef<string>;
|
|
269
|
+
collapseChange: _angular_core.OutputEmitterRef<AXPCategoryEntity<string>>;
|
|
270
|
+
tree: _angular_core.Signal<AXTreeViewLegacyComponent | undefined>;
|
|
271
|
+
isLoading: _angular_core.WritableSignal<boolean>;
|
|
272
|
+
searchValue: _angular_core.WritableSignal<string>;
|
|
273
|
+
private loadingTimeoutId;
|
|
274
|
+
private readonly LOADING_DELAY;
|
|
275
|
+
protected treeItems: _angular_core.WritableSignal<AXPCategoryTreeNode[]>;
|
|
276
|
+
protected emptyStateTitle: _angular_core.Signal<string>;
|
|
277
|
+
protected emptyStateDescription: _angular_core.Signal<string>;
|
|
278
|
+
ngOnInit(): Promise<void>;
|
|
279
|
+
loadRootNodes(): Promise<void>;
|
|
280
|
+
loadChildNodes(parentId: string): Promise<void>;
|
|
281
|
+
searchNodes(searchValue: string): Promise<void>;
|
|
282
|
+
handleNodeClick(event: AXTreeItemClickBaseEventLegacy): Promise<void>;
|
|
283
|
+
handleCollapseChanged(event: AXTreeItemClickBaseEventLegacy): Promise<void>;
|
|
284
|
+
handleSearchChange(event: AXValueChangedEvent): Promise<void>;
|
|
285
|
+
handleCreateRootClick(event: AXClickEvent): Promise<void>;
|
|
286
|
+
handleCreateChildClick(node: AXPCategoryTreeNode, event: AXClickEvent): Promise<void>;
|
|
287
|
+
handleUpdateNodeClick(node: AXPCategoryTreeNode, event: AXClickEvent): Promise<void>;
|
|
288
|
+
handleDeleteNodeClick(node: AXPCategoryTreeNode, event: AXClickEvent): Promise<void>;
|
|
289
|
+
private convertEntitiesToTreeNodes;
|
|
290
|
+
private updateNodeChildren;
|
|
291
|
+
refreshTree(parentId?: string): Promise<void>;
|
|
292
|
+
/**
|
|
293
|
+
* Set loading state with delay to avoid flickering for fast responses
|
|
294
|
+
*/
|
|
295
|
+
private setLoadingWithDelay;
|
|
296
|
+
/**
|
|
297
|
+
* Clear loading state and cancel any pending timeout
|
|
298
|
+
*/
|
|
299
|
+
private clearLoadingState;
|
|
300
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPCategoryTreeComponent, never>;
|
|
301
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPCategoryTreeComponent, "axp-category-tree", never, { "dataSource": { "alias": "dataSource"; "required": true; "isSignal": true; }; "config": { "alias": "config"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "events": { "alias": "events"; "required": false; "isSignal": true; }; }, { "nodeClick": "nodeClick"; "nodeSelect": "nodeSelect"; "nodeCreate": "nodeCreate"; "nodeUpdate": "nodeUpdate"; "nodeDelete": "nodeDelete"; "searchChange": "searchChange"; "collapseChange": "collapseChange"; }, never, never, true, never>;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* Color Palette Picker Component
|
|
306
|
+
* Displays a grid of color swatches for selection
|
|
307
|
+
*/
|
|
308
|
+
declare class AXPColorPalettePickerComponent {
|
|
309
|
+
/**
|
|
310
|
+
* Array of color codes to display
|
|
311
|
+
*/
|
|
312
|
+
colors: _angular_core.InputSignal<string[]>;
|
|
313
|
+
/**
|
|
314
|
+
* Currently selected color
|
|
315
|
+
*/
|
|
316
|
+
selectedColor: _angular_core.InputSignal<string | null | undefined>;
|
|
317
|
+
/**
|
|
318
|
+
* Disable the entire palette
|
|
319
|
+
*/
|
|
320
|
+
disabled: _angular_core.InputSignal<boolean>;
|
|
321
|
+
/**
|
|
322
|
+
* Make the palette readonly
|
|
323
|
+
*/
|
|
324
|
+
readonly: _angular_core.InputSignal<boolean>;
|
|
325
|
+
/**
|
|
326
|
+
* Show empty/null option to clear selection
|
|
327
|
+
*/
|
|
328
|
+
allowClear: _angular_core.InputSignal<boolean>;
|
|
329
|
+
/**
|
|
330
|
+
* Emits when a color is selected or cleared (null/undefined)
|
|
331
|
+
*/
|
|
332
|
+
colorSelected: _angular_core.OutputEmitterRef<string | null | undefined>;
|
|
333
|
+
/**
|
|
334
|
+
* Handle color selection
|
|
335
|
+
*/
|
|
336
|
+
protected handleColorSelect(color: string | null | undefined): void;
|
|
337
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPColorPalettePickerComponent, never>;
|
|
338
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPColorPalettePickerComponent, "axp-color-palette-picker", never, { "colors": { "alias": "colors"; "required": false; "isSignal": true; }; "selectedColor": { "alias": "selectedColor"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "allowClear": { "alias": "allowClear"; "required": false; "isSignal": true; }; }, { "colorSelected": "colorSelected"; }, never, never, true, never>;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
interface AXPColumnItemListItem {
|
|
342
|
+
id: string;
|
|
343
|
+
content: string;
|
|
344
|
+
}
|
|
345
|
+
declare class AXPColumnItemListComponent implements OnDestroy {
|
|
346
|
+
items: _angular_core.InputSignal<AXPColumnItemListItem[]>;
|
|
347
|
+
itemTemplate: _angular_core.InputSignal<TemplateRef<{
|
|
348
|
+
$implicit: AXPColumnItemListItem;
|
|
349
|
+
}> | null>;
|
|
350
|
+
itemClick: _angular_core.OutputEmitterRef<AXPColumnItemListItem>;
|
|
351
|
+
protected itemsContainer: _angular_core.Signal<ElementRef<HTMLDivElement> | undefined>;
|
|
352
|
+
protected moreButton: _angular_core.Signal<ElementRef<any> | undefined>;
|
|
353
|
+
protected morePopover: _angular_core.Signal<AXPopoverComponent | undefined>;
|
|
354
|
+
protected isMorePopoverOpen: _angular_core.WritableSignal<boolean>;
|
|
355
|
+
protected hasOverflow: _angular_core.WritableSignal<boolean>;
|
|
356
|
+
private resizeObserver?;
|
|
357
|
+
constructor();
|
|
358
|
+
ngOnDestroy(): void;
|
|
359
|
+
protected showMoreItems(): void;
|
|
360
|
+
protected onMorePopoverOpenChange(event: any): void;
|
|
361
|
+
private openMorePopover;
|
|
362
|
+
protected submitClick(event: AXPColumnItemListItem): void;
|
|
363
|
+
private checkOverflow;
|
|
364
|
+
private setupResizeObserver;
|
|
365
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPColumnItemListComponent, never>;
|
|
366
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPColumnItemListComponent, "axp-column-item-list", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "itemTemplate": { "alias": "itemTemplate"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; }, never, never, true, never>;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
declare class AXPQueryColumnsComponent {
|
|
370
|
+
columns: _angular_core.ModelSignal<AXPColumnQuery[]>;
|
|
371
|
+
handleVisibilityChange(e: AXValueChangedEvent<boolean>, name: string): void;
|
|
372
|
+
protected drop(event: CdkDragDrop<unknown[]>): void;
|
|
373
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPQueryColumnsComponent, never>;
|
|
374
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPQueryColumnsComponent, "axp-query-columns", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; }, { "columns": "columnsChange"; }, never, never, true, never>;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
interface AXPCompareViewField {
|
|
378
|
+
path: string;
|
|
379
|
+
title: string;
|
|
380
|
+
description?: string;
|
|
381
|
+
widget: AXPWidgetNode;
|
|
382
|
+
}
|
|
383
|
+
interface AXPCompareViewObject {
|
|
384
|
+
id: string;
|
|
385
|
+
title: string;
|
|
386
|
+
description?: string;
|
|
387
|
+
context: AXPContextData;
|
|
388
|
+
}
|
|
389
|
+
interface AXPCompareViewInputs {
|
|
390
|
+
fields: AXPCompareViewField[];
|
|
391
|
+
objects: AXPCompareViewObject[];
|
|
392
|
+
}
|
|
393
|
+
type AXPCompareViewMode = 'compare' | 'changes';
|
|
394
|
+
declare class AXPCompareViewComponent implements OnInit, OnDestroy {
|
|
395
|
+
inputs: _angular_core.InputSignal<AXPCompareViewInputs | undefined>;
|
|
396
|
+
showOnlyChanges: _angular_core.WritableSignal<boolean>;
|
|
397
|
+
mode: _angular_core.InputSignal<AXPCompareViewMode>;
|
|
398
|
+
private removedObjects;
|
|
399
|
+
protected isChangesMode: _angular_core.Signal<boolean>;
|
|
400
|
+
/**
|
|
401
|
+
* Filtered fields based on showOnlyChanges toggle
|
|
402
|
+
*/
|
|
403
|
+
filteredFields: _angular_core.Signal<AXPCompareViewField[]>;
|
|
404
|
+
remainingObjects: _angular_core.Signal<AXPCompareViewObject[]>;
|
|
405
|
+
/**
|
|
406
|
+
* Check if a field value will change in the next object (to show arrow in current cell)
|
|
407
|
+
*/
|
|
408
|
+
protected hasValueChangingToNext(fieldPath: string, currentObjectIndex: number): boolean;
|
|
409
|
+
/**
|
|
410
|
+
* Check if a field value has changed compared to the previous object
|
|
411
|
+
*/
|
|
412
|
+
hasValueChangedFromPrevious(fieldPath: string, currentObjectIndex: number): boolean;
|
|
413
|
+
/**
|
|
414
|
+
* Check if a field has unequal values across objects
|
|
415
|
+
*/
|
|
416
|
+
hasUnequalValues(fieldPath: string): boolean;
|
|
417
|
+
/**
|
|
418
|
+
* Check if a field has equal values across objects
|
|
419
|
+
*/
|
|
420
|
+
hasEqualValues(fieldPath: string): boolean;
|
|
421
|
+
/**
|
|
422
|
+
* Compare two values for equality (deep comparison for objects/arrays)
|
|
423
|
+
*/
|
|
424
|
+
private areValuesEqual;
|
|
425
|
+
/**
|
|
426
|
+
* Toggle the show only changes filter
|
|
427
|
+
*/
|
|
428
|
+
toggleShowOnlyChanges(): void;
|
|
429
|
+
/**
|
|
430
|
+
* Remove an object from the comparison
|
|
431
|
+
*/
|
|
432
|
+
removeObject(objectId: string): void;
|
|
433
|
+
ngOnInit(): void;
|
|
434
|
+
ngOnDestroy(): void;
|
|
435
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPCompareViewComponent, never>;
|
|
436
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPCompareViewComponent, "axp-compare-view", never, { "inputs": { "alias": "inputs"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
type AXPDataSelectorAllowCreate = 'none' | 'full' | 'quick';
|
|
440
|
+
interface AXPDataSelectorColumn {
|
|
441
|
+
name: string;
|
|
442
|
+
title: string;
|
|
443
|
+
visible: boolean;
|
|
444
|
+
dataPath?: string;
|
|
445
|
+
width?: string;
|
|
446
|
+
widget: {
|
|
447
|
+
type: string;
|
|
448
|
+
options: any;
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
interface AXPDataSelectorConfig {
|
|
452
|
+
title: string;
|
|
453
|
+
dataSource: AXDataSource<any>;
|
|
454
|
+
columns: AXPDataSelectorColumn[];
|
|
455
|
+
selectionMode: 'single' | 'multiple';
|
|
456
|
+
searchFields?: {
|
|
457
|
+
name: string;
|
|
458
|
+
title: string;
|
|
459
|
+
}[];
|
|
460
|
+
initialSearchTerm?: string;
|
|
461
|
+
parentField?: string;
|
|
462
|
+
allowCreate?: AXPDataSelectorAllowCreate;
|
|
463
|
+
onCreate?: (mode: 'full' | 'quick') => Promise<any | null>;
|
|
464
|
+
filters?: AXDataSourceFilterOption;
|
|
465
|
+
selectedItemIds?: string[] | number[];
|
|
466
|
+
categoryFilter?: {
|
|
467
|
+
enabled: boolean;
|
|
468
|
+
title: string;
|
|
469
|
+
dataSource: AXPCategoryTreeDataSource;
|
|
470
|
+
filterField: string;
|
|
471
|
+
filterOperator?: 'equal' | 'contains' | 'in';
|
|
472
|
+
width?: string;
|
|
473
|
+
};
|
|
474
|
+
}
|
|
475
|
+
declare class AXPDataSelectorComponent extends AXBasePageComponent {
|
|
476
|
+
protected config: _angular_core.WritableSignal<AXPDataSelectorConfig>;
|
|
477
|
+
protected searchTerm: string;
|
|
478
|
+
protected searchPlaceholderText: _angular_core.WritableSignal<string>;
|
|
479
|
+
protected filter: AXDataSourceFilterOption;
|
|
480
|
+
protected grid: _angular_core.Signal<AXDataTableComponent | undefined>;
|
|
481
|
+
protected selectedItems: _angular_core.WritableSignal<any[]>;
|
|
482
|
+
private initialSelectionApplied;
|
|
483
|
+
private userHasInteracted;
|
|
484
|
+
private isApplyingInitialSelection;
|
|
485
|
+
private initialSelectedItems;
|
|
486
|
+
protected activeCategoryFilter: _angular_core.WritableSignal<{
|
|
487
|
+
node: AXPCategoryEntity;
|
|
488
|
+
filterValue: any;
|
|
489
|
+
} | null>;
|
|
490
|
+
private placeholderUpdateToken;
|
|
491
|
+
private initialSearchApplied;
|
|
492
|
+
private readonly translationService;
|
|
493
|
+
constructor();
|
|
494
|
+
protected allowSelect: _angular_core.Signal<boolean>;
|
|
495
|
+
protected selectedCount: _angular_core.Signal<number>;
|
|
496
|
+
protected hasSearch: _angular_core.Signal<boolean | undefined>;
|
|
497
|
+
protected categoryTreeConfig: _angular_core.Signal<{
|
|
498
|
+
textField: string;
|
|
499
|
+
valueField: string;
|
|
500
|
+
showCheckbox: boolean;
|
|
501
|
+
searchable: boolean;
|
|
502
|
+
searchPlaceholder: string;
|
|
503
|
+
emptyStateTitle: string;
|
|
504
|
+
emptyStateDescription: string;
|
|
505
|
+
emptyStateIcon: string;
|
|
506
|
+
}>;
|
|
507
|
+
protected categoryTreeActions: _angular_core.Signal<{
|
|
508
|
+
canCreate: boolean;
|
|
509
|
+
canUpdate: boolean;
|
|
510
|
+
canDelete: boolean;
|
|
511
|
+
canCreateChild: boolean;
|
|
512
|
+
}>;
|
|
513
|
+
protected ngOnInit(): void;
|
|
514
|
+
protected ngAfterViewInit(): Promise<void>;
|
|
515
|
+
protected handleRowDbClick(e: AXDataTableRowDbClick): void;
|
|
516
|
+
protected handleRowClick(e: AXDataTableRowClick): void;
|
|
517
|
+
protected handleSelectedRowsChange(rows: unknown[]): Promise<void>;
|
|
518
|
+
protected handleChangeSearchValue(e: AXValueChangedEvent): void;
|
|
519
|
+
protected handleCreateNewClick(mode: 'full' | 'quick'): Promise<void>;
|
|
520
|
+
protected handleCloseClick(): void;
|
|
521
|
+
protected handleSelectClick(): void;
|
|
522
|
+
protected handleExpandRow(row: any): Promise<void>;
|
|
523
|
+
protected handleCategoryFilterClick(node: AXPCategoryEntity): void;
|
|
524
|
+
protected clearCategoryFilter(): void;
|
|
525
|
+
private applySearchFilter;
|
|
526
|
+
private applyFilterAndSort;
|
|
527
|
+
private applyCategoryFilter;
|
|
528
|
+
private updateSearchPlaceholder;
|
|
529
|
+
/**
|
|
530
|
+
* Apply initial selection based on selectedItemIds from config
|
|
531
|
+
* Loads items by IDs using the data source's byKey method, then selects them in the grid
|
|
532
|
+
*/
|
|
533
|
+
private applyInitialSelection;
|
|
534
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDataSelectorComponent, never>;
|
|
535
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDataSelectorComponent, "axp-data-selector", never, {}, {}, never, never, true, never>;
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
declare class AXPDataSelectorService {
|
|
539
|
+
private readonly popupService;
|
|
540
|
+
private readonly expressionService;
|
|
541
|
+
private readonly columnWidthService;
|
|
542
|
+
/**
|
|
543
|
+
* Open data selector popup
|
|
544
|
+
*/
|
|
545
|
+
open(config: AXPDataSelectorConfig): Promise<{
|
|
546
|
+
items: any[];
|
|
547
|
+
} | null>;
|
|
548
|
+
/**
|
|
549
|
+
* Open data selector with category filter
|
|
550
|
+
*/
|
|
551
|
+
openWithCategoryFilter(config: Omit<AXPDataSelectorConfig, 'categoryFilter'>, categoryFilterConfig: {
|
|
552
|
+
title: string;
|
|
553
|
+
dataSource: AXPCategoryTreeDataSource;
|
|
554
|
+
filterField: string;
|
|
555
|
+
filterOperator?: 'equal' | 'contains' | 'in';
|
|
556
|
+
width?: string;
|
|
557
|
+
}): Promise<{
|
|
558
|
+
items: any[];
|
|
559
|
+
} | null>;
|
|
560
|
+
/**
|
|
561
|
+
* Apply column width resolution to all columns using the column width service
|
|
562
|
+
*/
|
|
563
|
+
private applyColumnWidths;
|
|
564
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDataSelectorService, never>;
|
|
565
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPDataSelectorService>;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
/**
|
|
569
|
+
* Definition for a page component that can be registered and loaded dynamically
|
|
570
|
+
*/
|
|
571
|
+
interface AXPPageComponentDefinition {
|
|
572
|
+
/**
|
|
573
|
+
* Unique key to identify the component
|
|
574
|
+
*/
|
|
575
|
+
key: string;
|
|
576
|
+
/**
|
|
577
|
+
* Loader function that returns the component type (supports lazy loading)
|
|
578
|
+
*/
|
|
579
|
+
loader: () => Type<any> | Promise<Type<any>>;
|
|
580
|
+
}
|
|
581
|
+
/**
|
|
582
|
+
* Provider interface for registering page components
|
|
583
|
+
* Similar to AXPDataSourceDefinitionProvider pattern
|
|
584
|
+
*/
|
|
585
|
+
interface AXPPageComponentProvider {
|
|
586
|
+
/**
|
|
587
|
+
* Returns all component definitions provided by this provider
|
|
588
|
+
*/
|
|
589
|
+
components(): Promise<AXPPageComponentDefinition[]>;
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
/**
|
|
593
|
+
* Service for managing page components from multiple providers
|
|
594
|
+
* Similar to AXPDataSourceDefinitionProviderService pattern
|
|
595
|
+
*
|
|
596
|
+
* @example
|
|
597
|
+
* ```typescript
|
|
598
|
+
* // In a module providers array:
|
|
599
|
+
* {
|
|
600
|
+
* provide: AXP_PAGE_COMPONENT_PROVIDER,
|
|
601
|
+
* useClass: MyPageComponentProvider,
|
|
602
|
+
* multi: true,
|
|
603
|
+
* }
|
|
604
|
+
*
|
|
605
|
+
* // Example provider implementation:
|
|
606
|
+
* export class MyPageComponentProvider implements AXPPageComponentProvider {
|
|
607
|
+
* async components(): Promise<AXPPageComponentDefinition[]> {
|
|
608
|
+
* return [
|
|
609
|
+
* {
|
|
610
|
+
* key: 'my-custom-page',
|
|
611
|
+
* loader: () => import('./my-page.component').then(m => m.MyPageComponent),
|
|
612
|
+
* },
|
|
613
|
+
* ];
|
|
614
|
+
* }
|
|
615
|
+
* }
|
|
616
|
+
*
|
|
617
|
+
* // Later, get the component loader:
|
|
618
|
+
* const loader = await pageComponentService.find('my-custom-page');
|
|
619
|
+
* if (loader) {
|
|
620
|
+
* const ComponentType = await loader();
|
|
621
|
+
* // Use ComponentType
|
|
622
|
+
* }
|
|
623
|
+
* ```
|
|
624
|
+
*/
|
|
625
|
+
declare class AXPPageComponentRegistryService {
|
|
626
|
+
private providers;
|
|
627
|
+
/**
|
|
628
|
+
* Get all component definitions from all providers
|
|
629
|
+
*/
|
|
630
|
+
components(): Promise<AXPPageComponentDefinition[]>;
|
|
631
|
+
/**
|
|
632
|
+
* Find a component loader by key
|
|
633
|
+
*/
|
|
634
|
+
find(key: string): Promise<(() => Type<any> | Promise<Type<any>>) | undefined>;
|
|
635
|
+
/**
|
|
636
|
+
* Check if a component exists by key
|
|
637
|
+
*/
|
|
638
|
+
exists(key: string): Promise<boolean>;
|
|
639
|
+
/**
|
|
640
|
+
* Get all registered component keys
|
|
641
|
+
*/
|
|
642
|
+
getAll(): Promise<string[]>;
|
|
643
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPPageComponentRegistryService, never>;
|
|
644
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPPageComponentRegistryService>;
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
/**
|
|
648
|
+
* Injection token for page component providers
|
|
649
|
+
* Use with multi: true to register multiple providers
|
|
650
|
+
*
|
|
651
|
+
* @example
|
|
652
|
+
* ```typescript
|
|
653
|
+
* providers: [
|
|
654
|
+
* {
|
|
655
|
+
* provide: AXP_PAGE_COMPONENT_PROVIDER,
|
|
656
|
+
* useClass: MyPageComponentProvider,
|
|
657
|
+
* multi: true,
|
|
658
|
+
* }
|
|
659
|
+
* ]
|
|
660
|
+
* ```
|
|
661
|
+
*/
|
|
662
|
+
declare const AXP_PAGE_COMPONENT_PROVIDER: InjectionToken<AXPPageComponentProvider[]>;
|
|
663
|
+
|
|
664
|
+
interface AXPDragDropListItem {
|
|
665
|
+
id: string;
|
|
666
|
+
content: string;
|
|
667
|
+
data?: any;
|
|
668
|
+
disabled?: boolean;
|
|
669
|
+
cssClass?: string;
|
|
670
|
+
}
|
|
671
|
+
interface AXPDragDropListConfig {
|
|
672
|
+
allowReorder?: boolean;
|
|
673
|
+
allowTransfer?: boolean;
|
|
674
|
+
}
|
|
675
|
+
interface AXPDragDropListDropEvent {
|
|
676
|
+
previousIndex: number;
|
|
677
|
+
currentIndex: number;
|
|
678
|
+
item: AXPDragDropListItem;
|
|
679
|
+
container: any;
|
|
680
|
+
previousContainer?: any;
|
|
681
|
+
isTransfer: boolean;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
declare class AXPDragDropListComponent {
|
|
685
|
+
items: _angular_core.ModelSignal<AXPDragDropListItem[]>;
|
|
686
|
+
listId: _angular_core.InputSignal<string>;
|
|
687
|
+
dropListGroup: _angular_core.InputSignal<string>;
|
|
688
|
+
orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
|
|
689
|
+
emptyMessage: _angular_core.InputSignal<string>;
|
|
690
|
+
disable: _angular_core.InputSignal<boolean>;
|
|
691
|
+
itemClick: _angular_core.OutputEmitterRef<AXPDragDropListItem>;
|
|
692
|
+
dropListDropped: _angular_core.OutputEmitterRef<AXDropListDroppedEvent>;
|
|
693
|
+
onDrop(event: AXDropListDroppedEvent): void;
|
|
694
|
+
onItemClick(item: AXPDragDropListItem): void;
|
|
695
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDragDropListComponent, never>;
|
|
696
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDragDropListComponent, "axp-drag-drop-list", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "listId": { "alias": "listId"; "required": false; "isSignal": true; }; "dropListGroup": { "alias": "dropListGroup"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "disable": { "alias": "disable"; "required": false; "isSignal": true; }; }, { "items": "itemsChange"; "itemClick": "itemClick"; "dropListDropped": "dropListDropped"; }, never, never, true, never>;
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
/**
|
|
700
|
+
* Shared types for expression builders (expression-builder, sort-builder, group-builder, etc.)
|
|
701
|
+
*/
|
|
702
|
+
/** Unique identifier for expression nodes */
|
|
703
|
+
type AXPExpressionNodeId = string;
|
|
704
|
+
/** Logical operator type (AND, OR, etc.) */
|
|
705
|
+
type AXPExpressionLogicType = 'and' | 'or' | 'not';
|
|
706
|
+
/** Operation type (add, multiply, equal, etc.) */
|
|
707
|
+
type AXPExpressionOperationType = string;
|
|
708
|
+
/** Value source type (literal, field, parameter, etc.) */
|
|
709
|
+
type AXPExpressionValueSourceType = 'literal' | 'field' | 'parameter';
|
|
710
|
+
/** Field definition for value selectors */
|
|
711
|
+
interface AXPExpressionFieldDefinition {
|
|
712
|
+
id: string;
|
|
713
|
+
title: string;
|
|
714
|
+
dataType?: string;
|
|
715
|
+
path?: string;
|
|
716
|
+
/** Optional: for nested/related fields */
|
|
717
|
+
children?: AXPExpressionFieldDefinition[];
|
|
718
|
+
}
|
|
719
|
+
/** Value operand in an expression */
|
|
720
|
+
interface AXPExpressionValueOperand {
|
|
721
|
+
sourceType: AXPExpressionValueSourceType;
|
|
722
|
+
/** For field: field id; for literal: the value; for parameter: param key */
|
|
723
|
+
value?: unknown;
|
|
724
|
+
fieldId?: string;
|
|
725
|
+
}
|
|
726
|
+
/** Single operation node (leftOperand operator rightOperand) */
|
|
727
|
+
interface AXPExpressionOperationNode {
|
|
728
|
+
id: AXPExpressionNodeId;
|
|
729
|
+
type: 'operation';
|
|
730
|
+
operator: AXPExpressionOperationType;
|
|
731
|
+
leftOperand: AXPExpressionValueOperand;
|
|
732
|
+
rightOperand: AXPExpressionValueOperand;
|
|
733
|
+
order?: number;
|
|
734
|
+
}
|
|
735
|
+
/** Group of operations with logical connective */
|
|
736
|
+
interface AXPExpressionGroupNode {
|
|
737
|
+
id: AXPExpressionNodeId;
|
|
738
|
+
type: 'group';
|
|
739
|
+
logic: AXPExpressionLogicType;
|
|
740
|
+
children: AXPExpressionNode[];
|
|
741
|
+
order?: number;
|
|
742
|
+
}
|
|
743
|
+
/** Union of expression node types */
|
|
744
|
+
type AXPExpressionNode = AXPExpressionOperationNode | AXPExpressionGroupNode;
|
|
745
|
+
/** Root expression tree */
|
|
746
|
+
interface AXPExpressionTree {
|
|
747
|
+
id: AXPExpressionNodeId;
|
|
748
|
+
logic: AXPExpressionLogicType;
|
|
749
|
+
children: AXPExpressionNode[];
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
/**
|
|
753
|
+
* Field definitions for expression builders.
|
|
754
|
+
* Used by expression-builder, sort-builder, group-builder for value/field selection.
|
|
755
|
+
*/
|
|
756
|
+
|
|
757
|
+
/** Registry of available field definitions per context */
|
|
758
|
+
declare const AXPExpressionFieldDefinitions: Record<string, AXPExpressionFieldDefinition[]>;
|
|
759
|
+
/** Add field definitions for a given context */
|
|
760
|
+
declare function registerFieldDefinitions(context: string, fields: AXPExpressionFieldDefinition[]): void;
|
|
761
|
+
/** Get field definitions for a context */
|
|
762
|
+
declare function getFieldDefinitions(context: string): AXPExpressionFieldDefinition[];
|
|
763
|
+
|
|
764
|
+
/**
|
|
765
|
+
* Logic operator definitions (AND, OR, NOT) for expression groups.
|
|
766
|
+
*/
|
|
767
|
+
|
|
768
|
+
interface AXPExpressionLogicDefinition {
|
|
769
|
+
value: AXPExpressionLogicType;
|
|
770
|
+
text: string;
|
|
771
|
+
/** Optional icon/key for UI */
|
|
772
|
+
icon?: string;
|
|
773
|
+
}
|
|
774
|
+
declare const AXP_EXPRESSION_LOGIC_DEFINITIONS: AXPExpressionLogicDefinition[];
|
|
775
|
+
declare function getLogicDefinition(logic: AXPExpressionLogicType): AXPExpressionLogicDefinition | undefined;
|
|
776
|
+
|
|
777
|
+
/**
|
|
778
|
+
* Operation definitions (arithmetic, comparison, logical) for expression builder.
|
|
779
|
+
*/
|
|
780
|
+
|
|
781
|
+
interface AXPExpressionOperationDefinition {
|
|
782
|
+
value: AXPExpressionOperationType;
|
|
783
|
+
text: string;
|
|
784
|
+
/** Optional icon/symbol for UI */
|
|
785
|
+
symbol?: string;
|
|
786
|
+
/** Category for grouping in UI */
|
|
787
|
+
category?: 'arithmetic' | 'comparison' | 'logical' | 'string';
|
|
788
|
+
}
|
|
789
|
+
declare const AXP_EXPRESSION_OPERATION_DEFINITIONS: AXPExpressionOperationDefinition[];
|
|
790
|
+
declare function getOperationDefinition(operation: AXPExpressionOperationType): AXPExpressionOperationDefinition | undefined;
|
|
791
|
+
|
|
792
|
+
/**
|
|
793
|
+
* Selected field data emitted when condition changes
|
|
794
|
+
*/
|
|
795
|
+
type ConditionBuilderSelectedField = {
|
|
796
|
+
id: string;
|
|
797
|
+
field: string;
|
|
798
|
+
operator: AXDataSourceOperator['type'];
|
|
799
|
+
value: unknown;
|
|
800
|
+
isParametric?: boolean;
|
|
801
|
+
};
|
|
802
|
+
declare class AXPConditionBuilderConditionComponent implements OnInit {
|
|
803
|
+
item: _angular_core.InputSignal<AXPFilterClause>;
|
|
804
|
+
filterDefinitions: _angular_core.InputSignal<AXPFilterDefinition[]>;
|
|
805
|
+
onResolveWidget: _angular_core.InputSignal<((fieldId: string) => string) | undefined>;
|
|
806
|
+
showFillByUser: _angular_core.InputSignal<boolean>;
|
|
807
|
+
itemChange: _angular_core.OutputEmitterRef<ConditionBuilderSelectedField>;
|
|
808
|
+
removeItem: _angular_core.OutputEmitterRef<string>;
|
|
809
|
+
protected selectedField: _angular_core.WritableSignal<ConditionBuilderSelectedField | null>;
|
|
810
|
+
protected filterNode: _angular_core.WritableSignal<AXPWidgetNode>;
|
|
811
|
+
protected context: _angular_core.WritableSignal<Record<string, unknown>>;
|
|
812
|
+
protected readonly availableFields: _angular_core.Signal<{
|
|
813
|
+
value: string | undefined;
|
|
814
|
+
text: string;
|
|
815
|
+
definition: AXPFilterDefinition;
|
|
816
|
+
}[]>;
|
|
817
|
+
protected readonly currentFilterDefinition: _angular_core.Signal<AXPFilterDefinition | undefined>;
|
|
818
|
+
protected readonly selectedFieldValue: _angular_core.Signal<string>;
|
|
819
|
+
ngOnInit(): void;
|
|
820
|
+
constructor();
|
|
821
|
+
private updateFilterWidgetNode;
|
|
822
|
+
private updateContext;
|
|
823
|
+
onFieldChange(event: AXValueChangedEvent): void;
|
|
824
|
+
onContextChange(event: {
|
|
825
|
+
data?: {
|
|
826
|
+
filter?: {
|
|
827
|
+
value?: unknown;
|
|
828
|
+
operation?: {
|
|
829
|
+
type?: string;
|
|
830
|
+
};
|
|
831
|
+
};
|
|
832
|
+
};
|
|
833
|
+
}): void;
|
|
834
|
+
onFillByUserChange(checked: boolean): void;
|
|
835
|
+
onRemoveClick(): void;
|
|
836
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPConditionBuilderConditionComponent, never>;
|
|
837
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPConditionBuilderConditionComponent, "axp-condition-builder-condition", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; "filterDefinitions": { "alias": "filterDefinitions"; "required": false; "isSignal": true; }; "onResolveWidget": { "alias": "onResolveWidget"; "required": false; "isSignal": true; }; "showFillByUser": { "alias": "showFillByUser"; "required": false; "isSignal": true; }; }, { "itemChange": "itemChange"; "removeItem": "removeItem"; }, never, never, true, never>;
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
/**
|
|
841
|
+
* Generic condition builder component.
|
|
842
|
+
* Builds AXPFilterClause (logic/filters, field/operator/value) for use in outcome rules,
|
|
843
|
+
* outcome actions, query builders, etc.
|
|
844
|
+
*
|
|
845
|
+
* Same structure as axp-where-builder: groups, AND/OR logic, add condition/group, drag-drop, move/remove.
|
|
846
|
+
*/
|
|
847
|
+
declare class AXPConditionBuilderComponent {
|
|
848
|
+
private readonly widgetRegistry;
|
|
849
|
+
private readonly elementRef;
|
|
850
|
+
private readonly destroyRef;
|
|
851
|
+
private readonly platformId;
|
|
852
|
+
private readonly isBrowser;
|
|
853
|
+
value: _angular_core.InputSignal<AXPFilterClause>;
|
|
854
|
+
filterDefinitions: _angular_core.InputSignal<AXPFilterDefinition[]>;
|
|
855
|
+
/** When true, show "Fill by user" checkbox on each condition (e.g. for query parameters) */
|
|
856
|
+
showFillByUser: _angular_core.InputSignal<boolean>;
|
|
857
|
+
valueChange: _angular_core.OutputEmitterRef<AXPFilterClause>;
|
|
858
|
+
protected queryData: _angular_core.WritableSignal<AXPFilterClause>;
|
|
859
|
+
protected readonly logicalOperatorsItems: {
|
|
860
|
+
value: AXFilterLogic;
|
|
861
|
+
text: string;
|
|
862
|
+
}[];
|
|
863
|
+
protected getLogicDisplayText(logic: AXFilterLogic | undefined): string;
|
|
864
|
+
private connectorLayoutRafId;
|
|
865
|
+
private connectorResizeObserver;
|
|
866
|
+
private initConnectorAutoLayout;
|
|
867
|
+
private scheduleConnectorLayoutUpdate;
|
|
868
|
+
private updateConnectorCssVars;
|
|
869
|
+
constructor();
|
|
870
|
+
private generateId;
|
|
871
|
+
private updateValue;
|
|
872
|
+
private normalizeOrder;
|
|
873
|
+
protected getSortedFilters(filters: AXPFilterClause[]): AXPFilterClause[];
|
|
874
|
+
private findGroupById;
|
|
875
|
+
protected getFilterDefinition(fieldId: string): AXPFilterDefinition | undefined;
|
|
876
|
+
resolveDefaultFilterWidget(fieldId: string): string;
|
|
877
|
+
addConditionToGroup(groupId: string): void;
|
|
878
|
+
addGroupToGroup(parentGroupId: string): void;
|
|
879
|
+
removeItem(id: string): void;
|
|
880
|
+
updateCondition(condition: ConditionBuilderSelectedField): void;
|
|
881
|
+
updateGroupLogicalOperator(groupId: string, operator: AXFilterLogic): void;
|
|
882
|
+
reorderGroupItemsEvent(groupId: string, event: AXDropListDroppedEvent): void;
|
|
883
|
+
reorderGroupItems(groupId: string, previousIndex: number, currentIndex: number): void;
|
|
884
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPConditionBuilderComponent, never>;
|
|
885
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPConditionBuilderComponent, "axp-condition-builder", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "filterDefinitions": { "alias": "filterDefinitions"; "required": false; "isSignal": true; }; "showFillByUser": { "alias": "showFillByUser"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
declare class AXPQueryFiltersComponent {
|
|
889
|
+
#private;
|
|
890
|
+
protected translate: AXTranslationService;
|
|
891
|
+
protected calendarService: AXCalendarService;
|
|
892
|
+
private filterOperatorMiddleware;
|
|
893
|
+
private settingsService;
|
|
894
|
+
private readonly expressionEvaluator;
|
|
895
|
+
filtersDefinitions: _angular_core.InputSignal<AXPFilterDefinition[]>;
|
|
896
|
+
initialFilters: _angular_core.InputSignal<AXPFilterQuery[]>;
|
|
897
|
+
onFiltersChanged: _angular_core.OutputEmitterRef<AXPFilterQuery[]>;
|
|
898
|
+
protected dateFormat: _angular_core.WritableSignal<string>;
|
|
899
|
+
protected tagBox: _angular_core.Signal<AXTagBoxComponent | undefined>;
|
|
900
|
+
protected widgetRenderer: _angular_core.Signal<AXPWidgetRendererDirective | undefined>;
|
|
901
|
+
tagBoxInput: any;
|
|
902
|
+
listItems: QueryList<any>;
|
|
903
|
+
protected selectedField: _angular_core.WritableSignal<string | null>;
|
|
904
|
+
protected selectedFilters: _angular_core.WritableSignal<AXPFilterDefinition[]>;
|
|
905
|
+
context: _angular_core.WritableSignal<any>;
|
|
906
|
+
protected activeFilter: _angular_core.WritableSignal<AXPFilterDefinition | null>;
|
|
907
|
+
protected asyncTags: _angular_core.WritableSignal<any[]>;
|
|
908
|
+
protected popover: _angular_core.Signal<AXPopoverComponent | undefined>;
|
|
909
|
+
inputValue: _angular_core.WritableSignal<string>;
|
|
910
|
+
protected readonly disabledByField: _angular_core.WritableSignal<Record<string, boolean>>;
|
|
911
|
+
/** Emits when a filter context entry changes (aligned with `widget-renderer` `events.context`). */
|
|
912
|
+
private readonly filterContextPath$;
|
|
913
|
+
private filterContextPathSnapshotReady;
|
|
914
|
+
private previousFilterContextSnapshot;
|
|
915
|
+
inlineFilters: () => AXPFilterDefinition[];
|
|
916
|
+
protected getDisplayValue: (filter: AXPFilterDefinition, val: any) => Promise<any>;
|
|
917
|
+
protected convertIfISOStringDate: (val: string) => string;
|
|
918
|
+
convertQueriesToDefinitions(queries: AXPFilterQuery[]): AXPFilterDefinition[];
|
|
919
|
+
convertQueriesToContext(queries: AXPFilterQuery[]): any;
|
|
920
|
+
filterFields: () => AXPFilterDefinition[];
|
|
921
|
+
ngOnInit(): void;
|
|
922
|
+
handleSelectField(field: AXPFilterDefinition): void;
|
|
923
|
+
handleFieldKeyDown(e: KeyboardEvent, field: AXPFilterDefinition): void;
|
|
924
|
+
onContextChanged(e: AXPContextChangeEvent): void;
|
|
925
|
+
handleApplyFilter(): void;
|
|
926
|
+
handleButtonKeyDown(e: Event): void;
|
|
927
|
+
handleKeyDown(e: AXHtmlEvent<KeyboardEvent>): void;
|
|
928
|
+
onEnterKeyPressed(e: Event): void;
|
|
929
|
+
handleTagClick(item: any): void;
|
|
930
|
+
handleRemoveTag(e: Event, index: number): void;
|
|
931
|
+
handleSelectFilters(e: AXValueChangedEvent): void;
|
|
932
|
+
handleAddAllInlineFilters(): void;
|
|
933
|
+
protected getActiveOperator(filter: AXPFilterDefinition | null): string | undefined;
|
|
934
|
+
handleSelectInlineFilter(filter: AXPFilterDefinition): void;
|
|
935
|
+
handleInlineFilterKeyDown(e: KeyboardEvent, filter: AXPFilterDefinition): void;
|
|
936
|
+
handlePopoverClosed(e: AXEvent): void;
|
|
937
|
+
protected onPopoverOpened(e: AXEvent): void;
|
|
938
|
+
protected deactivateAllListItems(): void;
|
|
939
|
+
protected isFilterDisabled(definition: AXPFilterDefinition): boolean;
|
|
940
|
+
private createExpressionScope;
|
|
941
|
+
private isObservableLike;
|
|
942
|
+
private buildFilterTriggerScope;
|
|
943
|
+
private getFilterEventScope;
|
|
944
|
+
private getFilterWidgetScopeForDefinition;
|
|
945
|
+
private removeFilterFieldByName;
|
|
946
|
+
protected handleKeyboardEvent(event: KeyboardEvent): Promise<void>;
|
|
947
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPQueryFiltersComponent, never>;
|
|
948
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPQueryFiltersComponent, "axp-query-filters", never, { "filtersDefinitions": { "alias": "filtersDefinitions"; "required": false; "isSignal": true; }; "initialFilters": { "alias": "initialFilters"; "required": false; "isSignal": true; }; }, { "onFiltersChanged": "onFiltersChanged"; }, never, never, true, never>;
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
interface AXPPreloadFiltersApplyEvent {
|
|
952
|
+
filterValues: Record<string, any>;
|
|
953
|
+
}
|
|
954
|
+
declare class AXPPreloadFiltersComponent {
|
|
955
|
+
/**
|
|
956
|
+
* Filter definitions to display
|
|
957
|
+
*/
|
|
958
|
+
filterDefinitions: _angular_core.InputSignal<AXPFilterDefinition[]>;
|
|
959
|
+
/**
|
|
960
|
+
* Whether to show the "Show All" button
|
|
961
|
+
*/
|
|
962
|
+
showAllButton: _angular_core.InputSignal<boolean>;
|
|
963
|
+
/**
|
|
964
|
+
* Emitted when user applies filters
|
|
965
|
+
*/
|
|
966
|
+
apply: _angular_core.OutputEmitterRef<AXPPreloadFiltersApplyEvent>;
|
|
967
|
+
/**
|
|
968
|
+
* Emitted when user clicks "Show All"
|
|
969
|
+
*/
|
|
970
|
+
showAll: _angular_core.OutputEmitterRef<void>;
|
|
971
|
+
/**
|
|
972
|
+
* Context for widgets container
|
|
973
|
+
*/
|
|
974
|
+
context: _angular_core.WritableSignal<any>;
|
|
975
|
+
/**
|
|
976
|
+
* On context changed
|
|
977
|
+
*/
|
|
978
|
+
onContextChanged(event: AXPContextChangeEvent): void;
|
|
979
|
+
/**
|
|
980
|
+
* Handle apply filters
|
|
981
|
+
*/
|
|
982
|
+
handleApply(form: AXFormComponent): Promise<void>;
|
|
983
|
+
/**
|
|
984
|
+
* Handle form keydown events
|
|
985
|
+
*/
|
|
986
|
+
onFormKeyDown(event: KeyboardEvent, form: AXFormComponent): void;
|
|
987
|
+
/**
|
|
988
|
+
* Handle show all (skip filters and go to list).
|
|
989
|
+
* Prevents implicit form submit when the control renders as a submit button inside ax-form.
|
|
990
|
+
*/
|
|
991
|
+
handleShowAll(event?: AXClickEvent): void;
|
|
992
|
+
/**
|
|
993
|
+
* Check if field is required
|
|
994
|
+
*/
|
|
995
|
+
isFieldRequired(filterDef: AXPFilterDefinition): boolean;
|
|
996
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPPreloadFiltersComponent, never>;
|
|
997
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPPreloadFiltersComponent, "axp-preload-filters", never, { "filterDefinitions": { "alias": "filterDefinitions"; "required": true; "isSignal": true; }; "showAllButton": { "alias": "showAllButton"; "required": false; "isSignal": true; }; }, { "apply": "apply"; "showAll": "showAll"; }, never, never, true, never>;
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
declare class AXPImageEditorPopupComponent extends AXBasePageComponent {
|
|
1001
|
+
private readonly fileStorage;
|
|
1002
|
+
image: _angular_core.InputSignal<Blob>;
|
|
1003
|
+
showHistory: _angular_core.InputSignal<boolean>;
|
|
1004
|
+
look: _angular_core.InputSignal<"solid" | "outline" | "blank">;
|
|
1005
|
+
aspectRatio: _angular_core.InputSignal<string | undefined>;
|
|
1006
|
+
private container;
|
|
1007
|
+
private blobUrl;
|
|
1008
|
+
protected url: _angular_core.WritableSignal<string | null>;
|
|
1009
|
+
protected context: _angular_core.WritableSignal<{
|
|
1010
|
+
image: Blob | null;
|
|
1011
|
+
}>;
|
|
1012
|
+
ngOnInit(): Promise<void>;
|
|
1013
|
+
handleValueChanged(e: any): void;
|
|
1014
|
+
handleSave(): void;
|
|
1015
|
+
handleCancel(): void;
|
|
1016
|
+
ngOnDestroy(): void;
|
|
1017
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPImageEditorPopupComponent, never>;
|
|
1018
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPImageEditorPopupComponent, "axp-image-editor-popup", never, { "image": { "alias": "image"; "required": true; "isSignal": true; }; "showHistory": { "alias": "showHistory"; "required": false; "isSignal": true; }; "look": { "alias": "look"; "required": false; "isSignal": true; }; "aspectRatio": { "alias": "aspectRatio"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1019
|
+
}
|
|
1020
|
+
|
|
1021
|
+
interface AXPImageEditorOpenOptions {
|
|
1022
|
+
title?: string;
|
|
1023
|
+
image: Blob;
|
|
1024
|
+
showHistory?: boolean;
|
|
1025
|
+
look?: 'solid' | 'outline' | 'blank';
|
|
1026
|
+
aspectRatio?: string;
|
|
1027
|
+
}
|
|
1028
|
+
declare class AXPImageEditorService {
|
|
1029
|
+
private readonly popupService;
|
|
1030
|
+
private readonly translate;
|
|
1031
|
+
open(options?: AXPImageEditorOpenOptions): Promise<Blob | null>;
|
|
1032
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPImageEditorService, never>;
|
|
1033
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPImageEditorService>;
|
|
1034
|
+
}
|
|
1035
|
+
|
|
1036
|
+
declare class AXPLogoComponent implements OnInit, OnChanges {
|
|
1037
|
+
source: any;
|
|
1038
|
+
protected logoType: string;
|
|
1039
|
+
private platform;
|
|
1040
|
+
ngOnInit(): void;
|
|
1041
|
+
ngOnChanges(): void;
|
|
1042
|
+
protected setLogoType(): void;
|
|
1043
|
+
protected setLogoTheme(): void;
|
|
1044
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLogoComponent, never>;
|
|
1045
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPLogoComponent, "axp-logo", never, { "source": { "alias": "source"; "required": false; }; }, {}, never, never, true, never>;
|
|
1046
|
+
}
|
|
1047
|
+
|
|
1048
|
+
/**
|
|
1049
|
+
* Menu item type definitions.
|
|
1050
|
+
* - 'menu': Standard navigable menu item
|
|
1051
|
+
* - 'group': Menu group/category header
|
|
1052
|
+
* - 'break': Visual separator/divider
|
|
1053
|
+
*/
|
|
1054
|
+
type AXPMenuCustomizerItemType = 'menu' | 'group' | 'break';
|
|
1055
|
+
/**
|
|
1056
|
+
* Menu item interface for customizer.
|
|
1057
|
+
* Represents a single menu item with its properties.
|
|
1058
|
+
*/
|
|
1059
|
+
interface AXPMenuCustomizerItem {
|
|
1060
|
+
/** Unique identifier/key for the menu item */
|
|
1061
|
+
name?: string;
|
|
1062
|
+
/** Display text (can be an i18n key) */
|
|
1063
|
+
text?: string;
|
|
1064
|
+
/** Icon class (e.g., 'fa-light fa-home') */
|
|
1065
|
+
icon?: string;
|
|
1066
|
+
/** Navigation path/route */
|
|
1067
|
+
path?: string;
|
|
1068
|
+
/** Type of menu item */
|
|
1069
|
+
type?: AXPMenuCustomizerItemType;
|
|
1070
|
+
/** Priority for ordering (lower = higher priority) */
|
|
1071
|
+
priority?: number;
|
|
1072
|
+
/** Description/tooltip text */
|
|
1073
|
+
description?: string;
|
|
1074
|
+
/** Child menu items */
|
|
1075
|
+
children?: AXPMenuCustomizerItem[];
|
|
1076
|
+
}
|
|
1077
|
+
/**
|
|
1078
|
+
* Metadata for menu tree nodes.
|
|
1079
|
+
* Contains flags and original values for tracking customizations.
|
|
1080
|
+
*/
|
|
1081
|
+
interface AXPMenuCustomizerNodeMetadata {
|
|
1082
|
+
/** Whether this is a built-in (system) menu item */
|
|
1083
|
+
isBuiltIn: boolean;
|
|
1084
|
+
/** Whether this is a custom (user-created) menu item */
|
|
1085
|
+
isCustom: boolean;
|
|
1086
|
+
/** Whether this menu item is currently hidden */
|
|
1087
|
+
isHidden: boolean;
|
|
1088
|
+
/** Original priority before any customizations */
|
|
1089
|
+
originalPriority?: number;
|
|
1090
|
+
/** Original parent name before any move operations */
|
|
1091
|
+
originalParentName?: string;
|
|
1092
|
+
}
|
|
1093
|
+
/**
|
|
1094
|
+
* Data structure for tree node combining menu item with metadata.
|
|
1095
|
+
* This is stored in the tree node's 'data' field.
|
|
1096
|
+
*/
|
|
1097
|
+
interface AXPMenuCustomizerNodeData {
|
|
1098
|
+
/** The menu item properties */
|
|
1099
|
+
menuItem: AXPMenuCustomizerItem;
|
|
1100
|
+
/** Metadata about the menu item's state */
|
|
1101
|
+
metadata: AXPMenuCustomizerNodeMetadata;
|
|
1102
|
+
}
|
|
1103
|
+
/**
|
|
1104
|
+
* Available actions that can be performed on menu items.
|
|
1105
|
+
*/
|
|
1106
|
+
type AXPMenuCustomizerAction = 'show' | 'hide' | 'edit' | 'delete' | 'add-child' | 'move';
|
|
1107
|
+
/**
|
|
1108
|
+
* Component state for loading/error handling.
|
|
1109
|
+
*/
|
|
1110
|
+
type AXPMenuCustomizerState = {
|
|
1111
|
+
status: 'idle';
|
|
1112
|
+
} | {
|
|
1113
|
+
status: 'loading';
|
|
1114
|
+
} | {
|
|
1115
|
+
status: 'success';
|
|
1116
|
+
} | {
|
|
1117
|
+
status: 'error';
|
|
1118
|
+
message: string;
|
|
1119
|
+
};
|
|
1120
|
+
/**
|
|
1121
|
+
* Abstract service interface for menu customization operations.
|
|
1122
|
+
* Implement this interface and provide it via AXP_MENU_CUSTOMIZER_SERVICE token.
|
|
1123
|
+
*/
|
|
1124
|
+
declare abstract class AXPMenuCustomizerService {
|
|
1125
|
+
/**
|
|
1126
|
+
* Get menu tree nodes for the given scope key
|
|
1127
|
+
*/
|
|
1128
|
+
abstract getMenuTree(scopeKey: string): Promise<AXTreeViewNode[]>;
|
|
1129
|
+
/**
|
|
1130
|
+
* Sync tree changes (reorder, move) to storage
|
|
1131
|
+
*/
|
|
1132
|
+
abstract syncTreeChanges(scopeKey: string, treeNodes: AXTreeViewNode[]): Promise<void>;
|
|
1133
|
+
/**
|
|
1134
|
+
* Show a hidden menu item
|
|
1135
|
+
*/
|
|
1136
|
+
abstract showMenuItem(scopeKey: string, menuName: string): Promise<void>;
|
|
1137
|
+
/**
|
|
1138
|
+
* Hide a menu item
|
|
1139
|
+
*/
|
|
1140
|
+
abstract hideMenuItem(scopeKey: string, menuName: string): Promise<void>;
|
|
1141
|
+
/**
|
|
1142
|
+
* Add a custom menu item
|
|
1143
|
+
*/
|
|
1144
|
+
abstract addCustomMenuItem(scopeKey: string, menuItem: AXPMenuCustomizerItem, parentName: string | null): Promise<void>;
|
|
1145
|
+
/**
|
|
1146
|
+
* Update a custom menu item
|
|
1147
|
+
*/
|
|
1148
|
+
abstract updateCustomMenuItem(scopeKey: string, menuName: string, menuItem: AXPMenuCustomizerItem): Promise<void>;
|
|
1149
|
+
/**
|
|
1150
|
+
* Update menu item properties (for built-in items)
|
|
1151
|
+
*/
|
|
1152
|
+
abstract updateMenuProperties(scopeKey: string, menuName: string, properties: Partial<AXPMenuCustomizerItem>): Promise<void>;
|
|
1153
|
+
/**
|
|
1154
|
+
* Delete a custom menu item
|
|
1155
|
+
*/
|
|
1156
|
+
abstract deleteCustomMenuItem(scopeKey: string, menuName: string): Promise<void>;
|
|
1157
|
+
/**
|
|
1158
|
+
* Reset all customizations for the scope
|
|
1159
|
+
*/
|
|
1160
|
+
abstract resetCustomizations(scopeKey: string): Promise<void>;
|
|
1161
|
+
}
|
|
1162
|
+
/**
|
|
1163
|
+
* Injection token for menu customizer service
|
|
1164
|
+
*/
|
|
1165
|
+
declare const AXP_MENU_CUSTOMIZER_SERVICE: InjectionToken<AXPMenuCustomizerService>;
|
|
1166
|
+
|
|
1167
|
+
/**
|
|
1168
|
+
* Reusable menu customizer component that allows users to reorder, show/hide,
|
|
1169
|
+
* and manage menu items using a tree-like interface.
|
|
1170
|
+
* Can be used standalone or within popups/dialogs.
|
|
1171
|
+
*
|
|
1172
|
+
* @description
|
|
1173
|
+
* This component provides a visual interface for customizing menu structures.
|
|
1174
|
+
* It supports:
|
|
1175
|
+
* - Drag and drop reordering of menu items
|
|
1176
|
+
* - Showing/hiding menu items
|
|
1177
|
+
* - Adding custom menu items
|
|
1178
|
+
* - Editing menu item properties
|
|
1179
|
+
* - Resetting customizations to defaults
|
|
1180
|
+
*
|
|
1181
|
+
* @example
|
|
1182
|
+
* ```html
|
|
1183
|
+
* <axp-menu-customizer
|
|
1184
|
+
* [scopeKey]="'edition:my-edition'"
|
|
1185
|
+
* [showToolbar]="true"
|
|
1186
|
+
* [allowAddItems]="true"
|
|
1187
|
+
* (saved)="onSaved()"
|
|
1188
|
+
* />
|
|
1189
|
+
* ```
|
|
1190
|
+
*
|
|
1191
|
+
* @requires AXP_MENU_CUSTOMIZER_SERVICE - Must provide an implementation of AXPMenuCustomizerService
|
|
1192
|
+
*/
|
|
1193
|
+
declare class AXPMenuCustomizerComponent implements OnInit {
|
|
1194
|
+
private readonly menuCustomizerService;
|
|
1195
|
+
private readonly layoutBuilder;
|
|
1196
|
+
private readonly dialogService;
|
|
1197
|
+
private readonly toastService;
|
|
1198
|
+
private readonly translationService;
|
|
1199
|
+
private readonly destroyRef;
|
|
1200
|
+
/** The scope key for loading/saving menu customizations (e.g., 'edition:{id}', 'tenant:{id}') */
|
|
1201
|
+
scopeKey: _angular_core.InputSignal<string>;
|
|
1202
|
+
/** Whether to show the toolbar with collapse/expand/reset actions */
|
|
1203
|
+
showToolbar: _angular_core.InputSignal<boolean>;
|
|
1204
|
+
/** Whether to allow adding custom menu items */
|
|
1205
|
+
allowAddItems: _angular_core.InputSignal<boolean>;
|
|
1206
|
+
/** Drag behavior for the tree view: 'none' | 'order-only' | 'move' | 'both' */
|
|
1207
|
+
dragBehavior: _angular_core.InputSignal<AXTreeViewDragBehavior>;
|
|
1208
|
+
/** Drag area for the tree view: 'handler' | 'item' */
|
|
1209
|
+
dragArea: _angular_core.InputSignal<AXTreeViewDragArea>;
|
|
1210
|
+
/** Emitted when changes are saved */
|
|
1211
|
+
saved: _angular_core.OutputEmitterRef<void>;
|
|
1212
|
+
/** Emitted when the customizer is closed/cancelled */
|
|
1213
|
+
cancelled: _angular_core.OutputEmitterRef<void>;
|
|
1214
|
+
/** Reference to the tree view component */
|
|
1215
|
+
protected readonly tree: _angular_core.Signal<AXTreeViewComponent | undefined>;
|
|
1216
|
+
/** Tree nodes data source */
|
|
1217
|
+
protected readonly treeNodes: _angular_core.WritableSignal<AXTreeViewNode[]>;
|
|
1218
|
+
/** Current loading/error state */
|
|
1219
|
+
protected readonly state: _angular_core.WritableSignal<AXPMenuCustomizerState>;
|
|
1220
|
+
/** Flag to prevent concurrent sync operations */
|
|
1221
|
+
private isSyncing;
|
|
1222
|
+
/** Whether the component is currently loading */
|
|
1223
|
+
protected readonly isLoading: _angular_core.Signal<boolean>;
|
|
1224
|
+
/** Whether there is an error state */
|
|
1225
|
+
protected readonly hasError: _angular_core.Signal<boolean>;
|
|
1226
|
+
/** The current error message, if any */
|
|
1227
|
+
protected readonly errorMessage: _angular_core.Signal<string>;
|
|
1228
|
+
/** Whether the tree has nodes to display */
|
|
1229
|
+
protected readonly hasNodes: _angular_core.Signal<boolean>;
|
|
1230
|
+
/** Whether to show the content (tree view) */
|
|
1231
|
+
protected readonly showContent: _angular_core.Signal<boolean>;
|
|
1232
|
+
/** Whether to show the empty state */
|
|
1233
|
+
protected readonly showEmptyState: _angular_core.Signal<boolean>;
|
|
1234
|
+
ngOnInit(): Promise<void>;
|
|
1235
|
+
/**
|
|
1236
|
+
* Handle before drop validation.
|
|
1237
|
+
* Prevents dropping into items with paths (leaf nodes that can't have children).
|
|
1238
|
+
*
|
|
1239
|
+
* @param event - The before drop event from tree view
|
|
1240
|
+
*/
|
|
1241
|
+
protected handleBeforeDrop(event: AXTreeViewBeforeDropEvent): void;
|
|
1242
|
+
/**
|
|
1243
|
+
* Handle order change event (reordering within the same parent).
|
|
1244
|
+
*
|
|
1245
|
+
* @param event - The drop event from tree view
|
|
1246
|
+
*/
|
|
1247
|
+
protected handleOrderChange(event: AXTreeViewDropEvent): Promise<void>;
|
|
1248
|
+
/**
|
|
1249
|
+
* Handle move change event (moving to a different parent).
|
|
1250
|
+
*
|
|
1251
|
+
* @param event - The drop event from tree view
|
|
1252
|
+
*/
|
|
1253
|
+
protected handleMoveChange(event: AXTreeViewDropEvent): Promise<void>;
|
|
1254
|
+
/**
|
|
1255
|
+
* Load menu tree for current scope.
|
|
1256
|
+
* Updates the component state to loading, then success or error.
|
|
1257
|
+
* Creates new array reference to ensure UI updates.
|
|
1258
|
+
*/
|
|
1259
|
+
loadMenuItems(): Promise<void>;
|
|
1260
|
+
/**
|
|
1261
|
+
* Sync tree changes to backend.
|
|
1262
|
+
* Prevents concurrent sync operations using the isSyncing flag.
|
|
1263
|
+
* Reloads data with new reference after successful sync.
|
|
1264
|
+
*/
|
|
1265
|
+
private syncTreeChanges;
|
|
1266
|
+
/**
|
|
1267
|
+
* Collapse all tree nodes.
|
|
1268
|
+
*/
|
|
1269
|
+
collapseAll(): void;
|
|
1270
|
+
/**
|
|
1271
|
+
* Expand all tree nodes.
|
|
1272
|
+
*/
|
|
1273
|
+
expandAll(): Promise<void>;
|
|
1274
|
+
/**
|
|
1275
|
+
* Reset all customizations to defaults.
|
|
1276
|
+
* Shows a confirmation dialog before resetting.
|
|
1277
|
+
*/
|
|
1278
|
+
resetCustomizations(): Promise<void>;
|
|
1279
|
+
/**
|
|
1280
|
+
* Add new root menu item.
|
|
1281
|
+
* Opens the menu item dialog without a parent.
|
|
1282
|
+
*/
|
|
1283
|
+
addRootMenuItem(): Promise<void>;
|
|
1284
|
+
/**
|
|
1285
|
+
* Reload the menu items from the service.
|
|
1286
|
+
* Useful for external refresh triggers.
|
|
1287
|
+
*/
|
|
1288
|
+
refresh(): Promise<void>;
|
|
1289
|
+
/**
|
|
1290
|
+
* Handle menu item action dispatched from the template.
|
|
1291
|
+
*
|
|
1292
|
+
* @param action - The action to perform
|
|
1293
|
+
* @param nodeData - The node data to perform the action on
|
|
1294
|
+
*/
|
|
1295
|
+
protected onAction(action: AXPMenuCustomizerAction, nodeData: AXPMenuCustomizerNodeData): Promise<void>;
|
|
1296
|
+
/**
|
|
1297
|
+
* Add new child menu item to a parent.
|
|
1298
|
+
*
|
|
1299
|
+
* @param parentNodeData - The parent node data
|
|
1300
|
+
*/
|
|
1301
|
+
private addChildMenuItem;
|
|
1302
|
+
/**
|
|
1303
|
+
* Show a hidden menu item.
|
|
1304
|
+
*
|
|
1305
|
+
* @param nodeData - The node data containing the menu item to show
|
|
1306
|
+
*/
|
|
1307
|
+
private showMenuItem;
|
|
1308
|
+
/**
|
|
1309
|
+
* Hide a menu item.
|
|
1310
|
+
*
|
|
1311
|
+
* @param nodeData - The node data containing the menu item to hide
|
|
1312
|
+
*/
|
|
1313
|
+
private hideMenuItem;
|
|
1314
|
+
/**
|
|
1315
|
+
* Edit a menu item.
|
|
1316
|
+
*
|
|
1317
|
+
* @param nodeData - The node data containing the menu item to edit
|
|
1318
|
+
*/
|
|
1319
|
+
private editMenuItem;
|
|
1320
|
+
/**
|
|
1321
|
+
* Delete a custom menu item.
|
|
1322
|
+
* Shows a confirmation dialog before deleting.
|
|
1323
|
+
*
|
|
1324
|
+
* @param nodeData - The node data containing the menu item to delete
|
|
1325
|
+
*/
|
|
1326
|
+
private deleteMenuItem;
|
|
1327
|
+
/**
|
|
1328
|
+
* Show menu item dialog (add/edit).
|
|
1329
|
+
*
|
|
1330
|
+
* @param nodeData - The node data for editing, or null for adding
|
|
1331
|
+
* @param parentName - The parent menu name for adding child items
|
|
1332
|
+
*/
|
|
1333
|
+
private showMenuItemDialog;
|
|
1334
|
+
/**
|
|
1335
|
+
* Build the dialog context for add/edit dialog.
|
|
1336
|
+
*
|
|
1337
|
+
* @param item - The menu item to build context for, or undefined for new items
|
|
1338
|
+
*/
|
|
1339
|
+
private buildDialogContext;
|
|
1340
|
+
/**
|
|
1341
|
+
* Build the dialog form fields.
|
|
1342
|
+
* Note: Priority is not included as item order is controlled by drag-drop.
|
|
1343
|
+
*
|
|
1344
|
+
* @param flex - The flex layout builder
|
|
1345
|
+
* @param isEdit - Whether this is an edit operation
|
|
1346
|
+
* @param isBuiltIn - Whether the item is built-in
|
|
1347
|
+
*/
|
|
1348
|
+
private buildDialogFields;
|
|
1349
|
+
/**
|
|
1350
|
+
* Save menu item (create or update).
|
|
1351
|
+
*
|
|
1352
|
+
* @param formData - The form data from the dialog
|
|
1353
|
+
* @param nodeData - The original node data (for edit) or null (for add)
|
|
1354
|
+
* @param parentName - The parent menu name (for add child)
|
|
1355
|
+
* @param isEdit - Whether this is an edit operation
|
|
1356
|
+
*/
|
|
1357
|
+
private saveMenuItem;
|
|
1358
|
+
/**
|
|
1359
|
+
* Execute a menu action with common error handling and reload.
|
|
1360
|
+
*
|
|
1361
|
+
* @param action - The action to execute
|
|
1362
|
+
* @param successMessageKey - The i18n key for success message
|
|
1363
|
+
* @param errorMessageKey - The i18n key for error message
|
|
1364
|
+
*/
|
|
1365
|
+
private executeMenuAction;
|
|
1366
|
+
/**
|
|
1367
|
+
* Show a confirmation dialog.
|
|
1368
|
+
*
|
|
1369
|
+
* @param titleKey - The i18n key for the dialog title
|
|
1370
|
+
* @param messageKey - The i18n key for the dialog message
|
|
1371
|
+
* @returns True if confirmed, false otherwise
|
|
1372
|
+
*/
|
|
1373
|
+
private confirmAction;
|
|
1374
|
+
/**
|
|
1375
|
+
* Show a success toast message.
|
|
1376
|
+
*
|
|
1377
|
+
* @param messageKey - The i18n key for the message
|
|
1378
|
+
*/
|
|
1379
|
+
private showSuccessMessage;
|
|
1380
|
+
/**
|
|
1381
|
+
* Show an error toast message.
|
|
1382
|
+
*
|
|
1383
|
+
* @param messageKey - The i18n key for the message
|
|
1384
|
+
*/
|
|
1385
|
+
private showErrorMessage;
|
|
1386
|
+
/**
|
|
1387
|
+
* Show a warning toast message.
|
|
1388
|
+
*
|
|
1389
|
+
* @param messageKey - The i18n key for the message
|
|
1390
|
+
*/
|
|
1391
|
+
private showWarningMessage;
|
|
1392
|
+
private readonly eff;
|
|
1393
|
+
private readonly eff2;
|
|
1394
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMenuCustomizerComponent, never>;
|
|
1395
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPMenuCustomizerComponent, "axp-menu-customizer", never, { "scopeKey": { "alias": "scopeKey"; "required": true; "isSignal": true; }; "showToolbar": { "alias": "showToolbar"; "required": false; "isSignal": true; }; "allowAddItems": { "alias": "allowAddItems"; "required": false; "isSignal": true; }; "dragBehavior": { "alias": "dragBehavior"; "required": false; "isSignal": true; }; "dragArea": { "alias": "dragArea"; "required": false; "isSignal": true; }; }, { "saved": "saved"; "cancelled": "cancelled"; }, never, never, true, never>;
|
|
1396
|
+
}
|
|
1397
|
+
|
|
1398
|
+
interface AXPPropertyViewerGroup {
|
|
1399
|
+
name: string;
|
|
1400
|
+
title: string;
|
|
1401
|
+
isCollapsed: boolean;
|
|
1402
|
+
props: AXPWidgetProperty[];
|
|
1403
|
+
}
|
|
1404
|
+
interface AXPPropertyViewerTab {
|
|
1405
|
+
name: string;
|
|
1406
|
+
title: string;
|
|
1407
|
+
groups: AXPPropertyViewerGroup[];
|
|
1408
|
+
}
|
|
1409
|
+
interface AXPPropertyViewerChangedEvent {
|
|
1410
|
+
values: any;
|
|
1411
|
+
mode: 'init' | 'update';
|
|
1412
|
+
}
|
|
1413
|
+
/** Payload when the property viewer popup closes after Apply. */
|
|
1414
|
+
type AXPPropertyViewerResult = AXPPropertyViewerChangedEvent;
|
|
1415
|
+
/**
|
|
1416
|
+
* Dialog-style ref passed to property viewer `onAction` (same shape as the layout dialog `AXPDialogRef`).
|
|
1417
|
+
*/
|
|
1418
|
+
interface AXPPropertyViewerActionRef {
|
|
1419
|
+
close(): void;
|
|
1420
|
+
context(): any;
|
|
1421
|
+
action(): string | undefined;
|
|
1422
|
+
setLoading(loading: boolean): void;
|
|
1423
|
+
}
|
|
1424
|
+
|
|
1425
|
+
declare class AXPPropertyViewerComponent {
|
|
1426
|
+
private readonly defaultMultiLanguageConfig;
|
|
1427
|
+
/**
|
|
1428
|
+
* List of tabs that should be rendered inside the property viewer.
|
|
1429
|
+
*/
|
|
1430
|
+
tabsInput: _angular_core.InputSignal<AXPPropertyViewerTab[]>;
|
|
1431
|
+
/**
|
|
1432
|
+
* Determines rendering mode.
|
|
1433
|
+
*/
|
|
1434
|
+
mode: _angular_core.InputSignal<"simple" | "advanced">;
|
|
1435
|
+
/**
|
|
1436
|
+
* When a property uses binding expressions, controls how the expression is edited:
|
|
1437
|
+
* `inline` — code editor in the panel (default); `popup` — button that opens the dialog editor.
|
|
1438
|
+
*/
|
|
1439
|
+
bindingExpressionEditorMode: _angular_core.InputSignal<"inline" | "popup">;
|
|
1440
|
+
/**
|
|
1441
|
+
* Emits when property context changes.
|
|
1442
|
+
*/
|
|
1443
|
+
onChanged: EventEmitter<AXPPropertyViewerChangedEvent>;
|
|
1444
|
+
protected currentTabIndex: WritableSignal<number>;
|
|
1445
|
+
protected tabs: _angular_core.Signal<AXPPropertyViewerTab[]>;
|
|
1446
|
+
protected groups: _angular_core.Signal<AXPPropertyViewerGroup[]>;
|
|
1447
|
+
protected context: WritableSignal<any>;
|
|
1448
|
+
/**
|
|
1449
|
+
* Per-expression-path override for "use expression" vs "use value" when binding.enabled.
|
|
1450
|
+
* Updated when user toggles the ax-switch; otherwise derived from isExpression(valueAtPath).
|
|
1451
|
+
*/
|
|
1452
|
+
protected expressionModeState: WritableSignal<Record<string, boolean>>;
|
|
1453
|
+
/**
|
|
1454
|
+
* Evaluated visibility for properties whose {@link AXPWidgetProperty.visible} is a `{{ }}` expression.
|
|
1455
|
+
* Keys match {@link AXPPropertyViewerComponent.propertyVisibilityKey}.
|
|
1456
|
+
*/
|
|
1457
|
+
private propertyVisibility;
|
|
1458
|
+
protected groupCollapsedStates: Map<string, boolean>;
|
|
1459
|
+
private readonly expressionEvaluator;
|
|
1460
|
+
private readonly popupService;
|
|
1461
|
+
private readonly form;
|
|
1462
|
+
constructor();
|
|
1463
|
+
/**
|
|
1464
|
+
* Replaces the current context with the provided value and emits an init event.
|
|
1465
|
+
*/
|
|
1466
|
+
initializeContext(value: any): void;
|
|
1467
|
+
/**
|
|
1468
|
+
* Merges the provided value into the current context and emits an update event.
|
|
1469
|
+
*/
|
|
1470
|
+
update(value: any): void;
|
|
1471
|
+
/**
|
|
1472
|
+
* Runs registered validation rules on fields inside this viewer (requires {@link AXFormModule} host).
|
|
1473
|
+
*/
|
|
1474
|
+
validate(): Promise<AXValidationSummary>;
|
|
1475
|
+
/**
|
|
1476
|
+
* Stable key for visibility map entries (avoids collisions when the same `name` appears twice).
|
|
1477
|
+
*/
|
|
1478
|
+
protected propertyVisibilityKey(prop: AXPWidgetProperty): string;
|
|
1479
|
+
/**
|
|
1480
|
+
* Whether a property row should render. Booleans are static; `{{ }}` strings are evaluated against
|
|
1481
|
+
* {@link context} with `context.eval(path)` like {@link AXPWidgetRendererDirective.updateVisibility}.
|
|
1482
|
+
*/
|
|
1483
|
+
protected isPropertyVisible(prop: AXPWidgetProperty): boolean;
|
|
1484
|
+
private recomputePropertyVisibility;
|
|
1485
|
+
/**
|
|
1486
|
+
* Handles context changes produced by rendered widgets.
|
|
1487
|
+
*/
|
|
1488
|
+
protected handleContextChange(event: AXPContextChangeEvent): void;
|
|
1489
|
+
/**
|
|
1490
|
+
* Handles tab selection changes.
|
|
1491
|
+
*/
|
|
1492
|
+
protected handleTabChange(event: AXTabStripChangedEvent): void;
|
|
1493
|
+
/**
|
|
1494
|
+
* Stores collapsed state for a group.
|
|
1495
|
+
*/
|
|
1496
|
+
protected handleCollapsedChange(groupName: string, isCollapsed: boolean): void;
|
|
1497
|
+
/**
|
|
1498
|
+
* Returns the config path used for the binding value (and expression) for a property with binding.enabled.
|
|
1499
|
+
*/
|
|
1500
|
+
protected getExpressionPath(prop: AXPWidgetProperty): string;
|
|
1501
|
+
/**
|
|
1502
|
+
* True when the property is in "expression" mode: show only the expression editor button, not the widget.
|
|
1503
|
+
* Uses expressionModeState when set; otherwise derives from template `{{ }}` expressions and, when
|
|
1504
|
+
* {@link AXPWidgetProperty.binding} is enabled, bare scripts persisted without wrappers.
|
|
1505
|
+
*/
|
|
1506
|
+
protected isExpressionMode(prop: AXPWidgetProperty): boolean;
|
|
1507
|
+
/**
|
|
1508
|
+
* Returns the default value when switching from expression to value mode.
|
|
1509
|
+
* Source of truth is prop.schema.defaultValue (widget.types): plain value, or function (context) => value.
|
|
1510
|
+
* A minimal dataType fallback is used only when the schema provides no default.
|
|
1511
|
+
*/
|
|
1512
|
+
private getDefaultValueForProperty;
|
|
1513
|
+
/**
|
|
1514
|
+
* Updates the expression/value toggle state for a binding-enabled property.
|
|
1515
|
+
* When switching to value: resets the value at path to a type-appropriate default so the
|
|
1516
|
+
* widget renderer does not receive the expression string (e.g. checkbox gets false, not a string).
|
|
1517
|
+
* When switching to expression: sets the value at path to an empty string so the editor starts
|
|
1518
|
+
* blank instead of keeping the previous literal (e.g. true/false).
|
|
1519
|
+
*/
|
|
1520
|
+
protected setExpressionMode(prop: AXPWidgetProperty, useExpression: boolean): void;
|
|
1521
|
+
/**
|
|
1522
|
+
* Current binding expression string at the property path (for inline editor ngModel).
|
|
1523
|
+
*/
|
|
1524
|
+
protected getBindingExpressionValue(prop: AXPWidgetProperty): string;
|
|
1525
|
+
/**
|
|
1526
|
+
* Persists inline code editor changes into context.
|
|
1527
|
+
*/
|
|
1528
|
+
protected setBindingExpressionValue(prop: AXPWidgetProperty, value: string): void;
|
|
1529
|
+
/**
|
|
1530
|
+
* Opens the binding/expression code editor for a property with binding.enabled.
|
|
1531
|
+
* Ensures the value passed to the popup is always a string to avoid code-editor crashes.
|
|
1532
|
+
*/
|
|
1533
|
+
protected openBindingEditor(prop: AXPWidgetProperty): Promise<void>;
|
|
1534
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPPropertyViewerComponent, never>;
|
|
1535
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPPropertyViewerComponent, "axp-property-viewer", never, { "tabsInput": { "alias": "tabsInput"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "bindingExpressionEditorMode": { "alias": "bindingExpressionEditorMode"; "required": false; "isSignal": true; }; }, { "onChanged": "onChanged"; }, never, never, true, never>;
|
|
1536
|
+
}
|
|
1537
|
+
|
|
1538
|
+
/**
|
|
1539
|
+
* Whether a binding-enabled property should show expression UI (toggle to code + open editor)
|
|
1540
|
+
* instead of the literal widget.
|
|
1541
|
+
*
|
|
1542
|
+
* - Values already wrapped in `{{ ... }}` are expressions (see `AXPExpressionEvaluatorService.isExpression`).
|
|
1543
|
+
* - Persisted domain data often stores **bare** scripts; for `dataType: 'boolean'` (typical toggle + binding),
|
|
1544
|
+
* any non-empty string that is not a boolean literal is treated as an expression.
|
|
1545
|
+
* - For `number`, strings that are not plain numeric literals are treated as expressions.
|
|
1546
|
+
* - For other types, `isLikelyBareBindingScript` reduces false positives for plain text.
|
|
1547
|
+
*/
|
|
1548
|
+
declare function isPropertyBindingExpressionFormValue(property: AXPWidgetProperty, value: unknown, isTemplateExpression: (s: string) => boolean): boolean;
|
|
1549
|
+
|
|
1550
|
+
declare class AXPPropertyViewerPopupComponent extends AXBasePageComponent {
|
|
1551
|
+
private readonly toastService;
|
|
1552
|
+
private readonly translationService;
|
|
1553
|
+
tabs: _angular_core.InputSignal<AXPPropertyViewerTab[]>;
|
|
1554
|
+
mode: _angular_core.InputSignal<"simple" | "advanced">;
|
|
1555
|
+
context: _angular_core.InputSignal<any>;
|
|
1556
|
+
/**
|
|
1557
|
+
* Optional hook from `data.onApply`. Throw or reject to keep the popup open.
|
|
1558
|
+
* Return a value (not `undefined`) to use as the `close()` payload; otherwise `{ values, mode }` is used.
|
|
1559
|
+
*/
|
|
1560
|
+
onApply?: (result: AXPPropertyViewerResult) => void | Promise<unknown>;
|
|
1561
|
+
protected readonly propertyViewer: _angular_core.Signal<AXPPropertyViewerComponent | undefined>;
|
|
1562
|
+
protected readonly currentValues: _angular_core.WritableSignal<Record<string, unknown>>;
|
|
1563
|
+
protected readonly isApplying: _angular_core.WritableSignal<boolean>;
|
|
1564
|
+
protected currentMode: 'init' | 'update';
|
|
1565
|
+
constructor();
|
|
1566
|
+
protected handlePropertyChanged(event: AXPPropertyViewerChangedEvent): void;
|
|
1567
|
+
protected handleCloseClick(): void;
|
|
1568
|
+
protected handleApplyClick(): Promise<void>;
|
|
1569
|
+
private showValidationErrorToast;
|
|
1570
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPPropertyViewerPopupComponent, never>;
|
|
1571
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPPropertyViewerPopupComponent, "axp-property-viewer-popup", never, { "tabs": { "alias": "tabs"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "context": { "alias": "context"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1572
|
+
}
|
|
1573
|
+
|
|
1574
|
+
interface IAXPPropertyViewerRoot {
|
|
1575
|
+
dialog<T = unknown>(delegate: (container: IAXPPropertyViewerDialogBuilder<T>) => void): IAXPPropertyViewerDialogBuilder<T>;
|
|
1576
|
+
}
|
|
1577
|
+
interface IAXPPropertyViewerDialogBuilder<T = unknown> {
|
|
1578
|
+
setTitle(title: string): IAXPPropertyViewerDialogBuilder<T>;
|
|
1579
|
+
setSize(size: AXPopupSizeType): IAXPPropertyViewerDialogBuilder<T>;
|
|
1580
|
+
setCloseButton(closeButton: boolean): IAXPPropertyViewerDialogBuilder<T>;
|
|
1581
|
+
setContext(context: any): IAXPPropertyViewerDialogBuilder<T>;
|
|
1582
|
+
setTabs(tabs: AXPPropertyViewerTab[]): IAXPPropertyViewerDialogBuilder<T>;
|
|
1583
|
+
setMode(mode: 'simple' | 'advanced'): IAXPPropertyViewerDialogBuilder<T>;
|
|
1584
|
+
/**
|
|
1585
|
+
* Runs on Save. Throw or reject to keep the popup open (same idea as layout dialog `onAction`).
|
|
1586
|
+
* Return a value to resolve `show()`; omit return (or return void) to resolve with `{ values, mode }`.
|
|
1587
|
+
*/
|
|
1588
|
+
onAction(handler: (dialogRef: AXPPropertyViewerActionRef) => T | Promise<T> | void | Promise<void>): IAXPPropertyViewerDialogBuilder<T>;
|
|
1589
|
+
show(): Promise<T | AXPPropertyViewerResult | null>;
|
|
1590
|
+
}
|
|
1591
|
+
interface AXPPropertyViewerConfig {
|
|
1592
|
+
title: string;
|
|
1593
|
+
tabs: AXPPropertyViewerTab[];
|
|
1594
|
+
context?: any;
|
|
1595
|
+
mode?: 'simple' | 'advanced';
|
|
1596
|
+
size?: AXPopupSizeType;
|
|
1597
|
+
/**
|
|
1598
|
+
* When set, runs before close on Save. Throw or reject to keep the popup open.
|
|
1599
|
+
*/
|
|
1600
|
+
onApply?: (result: AXPPropertyViewerResult) => void | Promise<void>;
|
|
1601
|
+
}
|
|
1602
|
+
declare class AXPPropertyViewerService {
|
|
1603
|
+
private readonly popupService;
|
|
1604
|
+
private readonly defaultMultiLanguageConfig;
|
|
1605
|
+
/**
|
|
1606
|
+
* Same entry shape as `layoutBuilder.create()` — use `.dialog((d) => { ... }).show()`.
|
|
1607
|
+
*/
|
|
1608
|
+
create(): IAXPPropertyViewerRoot;
|
|
1609
|
+
/**
|
|
1610
|
+
* Opens the property viewer popup in one call (delegates to {@link #create} `.dialog().show()`).
|
|
1611
|
+
*/
|
|
1612
|
+
open(config: AXPPropertyViewerConfig): Promise<AXPPropertyViewerResult | null>;
|
|
1613
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPPropertyViewerService, never>;
|
|
1614
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPPropertyViewerService>;
|
|
1615
|
+
}
|
|
1616
|
+
|
|
1617
|
+
/**
|
|
1618
|
+
* Copies {@link AXPWidgetProperty.validations} onto `schema.interface.options` so the property
|
|
1619
|
+
* viewer binds a stable widget node.
|
|
1620
|
+
*/
|
|
1621
|
+
declare function withValidationsOnEditorNode(prop: AXPWidgetProperty): AXPWidgetProperty;
|
|
1622
|
+
declare function preparePropertyForViewer(prop: AXPWidgetProperty, applyDefaultMultiLanguage: boolean): AXPWidgetProperty;
|
|
1623
|
+
/**
|
|
1624
|
+
* Deep-clone-safe: mutates cloned tab trees only when caller passes a fresh clone.
|
|
1625
|
+
* Applies the same widget-property pipeline as {@link AXPPropertyViewerComponent}.
|
|
1626
|
+
*/
|
|
1627
|
+
declare function preparePropertyViewerTabs(tabs: AXPPropertyViewerTab[], applyDefaultMultiLanguage: boolean): AXPPropertyViewerTab[];
|
|
1628
|
+
/**
|
|
1629
|
+
* Builds a single "General" tab for {@link AXPPropertyViewerService} from {@link AXPWidgetProperty} rows
|
|
1630
|
+
* (schema shape is shared with widget metadata; the edited payload is arbitrary context, not an {@link AXPWidgetNode}).
|
|
1631
|
+
*/
|
|
1632
|
+
declare function buildPropertyViewerTabsFromProperties(properties: AXPWidgetProperty[]): AXPPropertyViewerTab[];
|
|
1633
|
+
/**
|
|
1634
|
+
* Initial {@link AXPPropertyViewerService#setContext} value: property default paths merged with the current saved values.
|
|
1635
|
+
*/
|
|
1636
|
+
declare function buildPropertyViewerInitialContextFromProperties(properties: AXPWidgetProperty[], existing: Record<string, unknown>): Record<string, unknown>;
|
|
1637
|
+
|
|
1638
|
+
/**
|
|
1639
|
+
* Presentational layout for indexed rows: optional drag-and-drop, remove controls,
|
|
1640
|
+
* empty state, and add action. Row body is provided via {@link rowTemplate}.
|
|
1641
|
+
*/
|
|
1642
|
+
declare class AXPRepeaterRowsLayoutComponent {
|
|
1643
|
+
count: _angular_core.InputSignal<number>;
|
|
1644
|
+
disabled: _angular_core.InputSignal<boolean>;
|
|
1645
|
+
hasControls: _angular_core.InputSignal<boolean>;
|
|
1646
|
+
allowReorder: _angular_core.InputSignal<boolean>;
|
|
1647
|
+
rowTemplate: _angular_core.InputSignal<TemplateRef<{
|
|
1648
|
+
index: number;
|
|
1649
|
+
}>>;
|
|
1650
|
+
/** i18n keys (e.g. `@general:...`) for labels; override per usage. */
|
|
1651
|
+
addItemLabelKey: _angular_core.InputSignal<string>;
|
|
1652
|
+
emptyTitleKey: _angular_core.InputSignal<string>;
|
|
1653
|
+
emptyDescriptionKey: _angular_core.InputSignal<string>;
|
|
1654
|
+
addFirstItemLabelKey: _angular_core.InputSignal<string>;
|
|
1655
|
+
addClick: _angular_core.OutputEmitterRef<void>;
|
|
1656
|
+
removeClick: _angular_core.OutputEmitterRef<number>;
|
|
1657
|
+
drop: _angular_core.OutputEmitterRef<AXDropListDroppedEvent>;
|
|
1658
|
+
protected readonly rowIndices: _angular_core.Signal<number[]>;
|
|
1659
|
+
protected readonly rowRowClass: _angular_core.Signal<string>;
|
|
1660
|
+
protected onDrop(e: AXDropListDroppedEvent): void;
|
|
1661
|
+
protected onAddClick(): void;
|
|
1662
|
+
protected onRemoveClick(index: number): void;
|
|
1663
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPRepeaterRowsLayoutComponent, never>;
|
|
1664
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPRepeaterRowsLayoutComponent, "axp-repeater-rows-layout", never, { "count": { "alias": "count"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "hasControls": { "alias": "hasControls"; "required": false; "isSignal": true; }; "allowReorder": { "alias": "allowReorder"; "required": false; "isSignal": true; }; "rowTemplate": { "alias": "rowTemplate"; "required": true; "isSignal": true; }; "addItemLabelKey": { "alias": "addItemLabelKey"; "required": false; "isSignal": true; }; "emptyTitleKey": { "alias": "emptyTitleKey"; "required": false; "isSignal": true; }; "emptyDescriptionKey": { "alias": "emptyDescriptionKey"; "required": false; "isSignal": true; }; "addFirstItemLabelKey": { "alias": "addFirstItemLabelKey"; "required": false; "isSignal": true; }; }, { "addClick": "addClick"; "removeClick": "removeClick"; "drop": "drop"; }, never, never, true, never>;
|
|
1665
|
+
}
|
|
1666
|
+
|
|
1667
|
+
declare class AXPQuerySortsComponent {
|
|
1668
|
+
sortDefinitions: _angular_core.ModelSignal<AXPSortDefinition[]>;
|
|
1669
|
+
sortQueries: _angular_core.WritableSignal<AXPSortQuery[]>;
|
|
1670
|
+
initialSortQueries: _angular_core.InputSignal<AXPSortQuery[]>;
|
|
1671
|
+
sortQueriesChange: _angular_core.OutputEmitterRef<AXPSortQuery[]>;
|
|
1672
|
+
constructor();
|
|
1673
|
+
protected drop(event: CdkDragDrop<unknown[]>): void;
|
|
1674
|
+
getSortDirection(item: AXPSortDefinition): "desc" | "asc" | undefined;
|
|
1675
|
+
protected changeItemSort(item: AXPSortDefinition): void;
|
|
1676
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPQuerySortsComponent, never>;
|
|
1677
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPQuerySortsComponent, "axp-query-sorts", never, { "sortDefinitions": { "alias": "sortDefinitions"; "required": false; "isSignal": true; }; "initialSortQueries": { "alias": "initialSortQueries"; "required": false; "isSignal": true; }; }, { "sortDefinitions": "sortDefinitionsChange"; "sortQueriesChange": "sortQueriesChange"; }, never, never, true, never>;
|
|
1678
|
+
}
|
|
1679
|
+
|
|
1680
|
+
/**
|
|
1681
|
+
* Represents a spreadsheet item (row or column header) with id, text, and optional description
|
|
1682
|
+
*/
|
|
1683
|
+
interface AXPSpreadsheetItem {
|
|
1684
|
+
id: string;
|
|
1685
|
+
title: string;
|
|
1686
|
+
description?: string;
|
|
1687
|
+
/**
|
|
1688
|
+
* Optional CSS class for cell styling (e.g., 'ax-bg-success-lightest ax-text-success' for green)
|
|
1689
|
+
* Used when this item is used as a cell value to color-code the cell
|
|
1690
|
+
* Allows proper control of both background and text colors
|
|
1691
|
+
*/
|
|
1692
|
+
cssClass?: string;
|
|
1693
|
+
}
|
|
1694
|
+
/**
|
|
1695
|
+
* Represents the value structure for spreadsheet cells
|
|
1696
|
+
* Stores only the ID reference to the item in cellOptions
|
|
1697
|
+
*/
|
|
1698
|
+
type AXPSpreadsheetCellValue = string | null;
|
|
1699
|
+
/**
|
|
1700
|
+
* Matrix data structure: { [rowId]: { [columnId]: cellValueId } }
|
|
1701
|
+
* cellValueId is the ID of an item from cellOptions
|
|
1702
|
+
*/
|
|
1703
|
+
type AXPSpreadsheetData = Record<string, Record<string, AXPSpreadsheetCellValue>>;
|
|
1704
|
+
/**
|
|
1705
|
+
* Represents a column definition in the spreadsheet
|
|
1706
|
+
*/
|
|
1707
|
+
interface AXPSpreadsheetColumn {
|
|
1708
|
+
/**
|
|
1709
|
+
* Column identifier (unique name)
|
|
1710
|
+
*/
|
|
1711
|
+
name: string;
|
|
1712
|
+
/**
|
|
1713
|
+
* Display title for column header
|
|
1714
|
+
*/
|
|
1715
|
+
title: string;
|
|
1716
|
+
/**
|
|
1717
|
+
* Optional description for column header
|
|
1718
|
+
*/
|
|
1719
|
+
description?: string;
|
|
1720
|
+
/**
|
|
1721
|
+
* Path to access row property (e.g., 'user.name', 'age')
|
|
1722
|
+
* Used to get/set values in row objects
|
|
1723
|
+
*/
|
|
1724
|
+
path: string;
|
|
1725
|
+
/**
|
|
1726
|
+
* Widget configuration for this column
|
|
1727
|
+
* All cells in this column will use this widget
|
|
1728
|
+
*/
|
|
1729
|
+
widget: AXPWidgetNode;
|
|
1730
|
+
/**
|
|
1731
|
+
* Optional column width
|
|
1732
|
+
*/
|
|
1733
|
+
width?: string;
|
|
1734
|
+
/**
|
|
1735
|
+
* Column-level readonly override
|
|
1736
|
+
*/
|
|
1737
|
+
readonly?: boolean;
|
|
1738
|
+
}
|
|
1739
|
+
/**
|
|
1740
|
+
* Spreadsheet row mode
|
|
1741
|
+
* - 'fixed': Rows are provided as input, cannot add/remove (like matrix)
|
|
1742
|
+
* - 'dynamic': Users can add/remove rows dynamically (like Excel)
|
|
1743
|
+
*/
|
|
1744
|
+
type AXPSpreadsheetRowMode = 'fixed' | 'dynamic';
|
|
1745
|
+
/**
|
|
1746
|
+
* Event emitted when a single cell value changes
|
|
1747
|
+
*/
|
|
1748
|
+
interface AXPSpreadsheetCellChangeEvent {
|
|
1749
|
+
/**
|
|
1750
|
+
* Row identifier (name for fixed mode, generated ID for dynamic mode)
|
|
1751
|
+
*/
|
|
1752
|
+
rowId: string;
|
|
1753
|
+
/**
|
|
1754
|
+
* Column name
|
|
1755
|
+
*/
|
|
1756
|
+
columnName: string;
|
|
1757
|
+
/**
|
|
1758
|
+
* New cell value (whatever the widget returns)
|
|
1759
|
+
*/
|
|
1760
|
+
value: any;
|
|
1761
|
+
/**
|
|
1762
|
+
* Full row object after update
|
|
1763
|
+
*/
|
|
1764
|
+
row: Record<string, any>;
|
|
1765
|
+
}
|
|
1766
|
+
/**
|
|
1767
|
+
* Event emitted when a row is added or removed (dynamic mode only)
|
|
1768
|
+
*/
|
|
1769
|
+
interface AXPSpreadsheetRowChangeEvent {
|
|
1770
|
+
/**
|
|
1771
|
+
* Type of change: 'add' or 'remove'
|
|
1772
|
+
*/
|
|
1773
|
+
type: 'add' | 'remove';
|
|
1774
|
+
/**
|
|
1775
|
+
* Row identifier
|
|
1776
|
+
*/
|
|
1777
|
+
rowId: string;
|
|
1778
|
+
/**
|
|
1779
|
+
* Full row object (for 'add' events)
|
|
1780
|
+
*/
|
|
1781
|
+
row?: Record<string, any>;
|
|
1782
|
+
/**
|
|
1783
|
+
* All rows after the change
|
|
1784
|
+
*/
|
|
1785
|
+
rows: Record<string, any>[];
|
|
1786
|
+
}
|
|
1787
|
+
/**
|
|
1788
|
+
* Configuration for the spreadsheet component
|
|
1789
|
+
*/
|
|
1790
|
+
interface AXPSpreadsheetConfig {
|
|
1791
|
+
/**
|
|
1792
|
+
* Widget configuration for cell editing (SelectBox)
|
|
1793
|
+
*/
|
|
1794
|
+
cellWidget?: AXPWidgetNode;
|
|
1795
|
+
/**
|
|
1796
|
+
* Whether the spreadsheet is in readonly mode
|
|
1797
|
+
*/
|
|
1798
|
+
readonly?: boolean;
|
|
1799
|
+
/**
|
|
1800
|
+
* Placeholder text for empty cells
|
|
1801
|
+
*/
|
|
1802
|
+
emptyCellPlaceholder?: string;
|
|
1803
|
+
}
|
|
1804
|
+
|
|
1805
|
+
declare class AXPSpreadsheetComponent {
|
|
1806
|
+
protected readonly translationService: AXTranslationService;
|
|
1807
|
+
/**
|
|
1808
|
+
* Translated column titles
|
|
1809
|
+
*/
|
|
1810
|
+
protected translatedColumnTitles: _angular_core.WritableSignal<Map<string, string>>;
|
|
1811
|
+
/**
|
|
1812
|
+
* Title for the spreadsheet (displayed in corner cell)
|
|
1813
|
+
*/
|
|
1814
|
+
title: _angular_core.InputSignal<string>;
|
|
1815
|
+
/**
|
|
1816
|
+
* Column definitions
|
|
1817
|
+
*/
|
|
1818
|
+
columns: _angular_core.InputSignal<AXPSpreadsheetColumn[]>;
|
|
1819
|
+
/**
|
|
1820
|
+
* Row mode: 'fixed' or 'dynamic'
|
|
1821
|
+
*/
|
|
1822
|
+
rowMode: _angular_core.InputSignal<AXPSpreadsheetRowMode>;
|
|
1823
|
+
/**
|
|
1824
|
+
* Rows data (for fixed mode - input only)
|
|
1825
|
+
* Each row must have a 'name' property for identification
|
|
1826
|
+
*/
|
|
1827
|
+
rowsInput: _angular_core.InputSignal<Record<string, any>[]>;
|
|
1828
|
+
/**
|
|
1829
|
+
* Rows data (for dynamic mode - two-way binding)
|
|
1830
|
+
*/
|
|
1831
|
+
rowsModel: _angular_core.ModelSignal<Record<string, any>[]>;
|
|
1832
|
+
/**
|
|
1833
|
+
* Whether the spreadsheet is in readonly mode
|
|
1834
|
+
*/
|
|
1835
|
+
readonly: _angular_core.InputSignal<boolean>;
|
|
1836
|
+
/**
|
|
1837
|
+
* Placeholder text for empty cells (default: "–")
|
|
1838
|
+
*/
|
|
1839
|
+
emptyCellPlaceholder: _angular_core.InputSignal<string>;
|
|
1840
|
+
/**
|
|
1841
|
+
* Path to property in row object to display as row header title
|
|
1842
|
+
* Example: 'name', 'title', 'user.name'
|
|
1843
|
+
*/
|
|
1844
|
+
rowTitlePath: _angular_core.InputSignal<string | null>;
|
|
1845
|
+
/**
|
|
1846
|
+
* Path to property in row object to display as row header description
|
|
1847
|
+
* Example: 'description', 'details', 'user.description'
|
|
1848
|
+
*/
|
|
1849
|
+
rowDescriptionPath: _angular_core.InputSignal<string | null>;
|
|
1850
|
+
/**
|
|
1851
|
+
* Whether to allow adding rows (dynamic mode only, default: true)
|
|
1852
|
+
*/
|
|
1853
|
+
allowAddRows: _angular_core.InputSignal<boolean>;
|
|
1854
|
+
/**
|
|
1855
|
+
* Whether to allow removing rows (default: true for dynamic mode, false for fixed mode)
|
|
1856
|
+
* Can be enabled for fixed mode if needed
|
|
1857
|
+
*/
|
|
1858
|
+
allowRemoveRows: _angular_core.InputSignal<boolean>;
|
|
1859
|
+
/**
|
|
1860
|
+
* Emitted when a single cell value changes
|
|
1861
|
+
*/
|
|
1862
|
+
cellChange: _angular_core.OutputEmitterRef<AXPSpreadsheetCellChangeEvent>;
|
|
1863
|
+
/**
|
|
1864
|
+
* Emitted when rows are added or removed (dynamic mode only)
|
|
1865
|
+
*/
|
|
1866
|
+
rowChange: _angular_core.OutputEmitterRef<AXPSpreadsheetRowChangeEvent>;
|
|
1867
|
+
/**
|
|
1868
|
+
* Emitted when the entire spreadsheet data changes
|
|
1869
|
+
*/
|
|
1870
|
+
spreadsheetChange: _angular_core.OutputEmitterRef<Record<string, any>[]>;
|
|
1871
|
+
/**
|
|
1872
|
+
* Currently editing cell: { rowId, columnName } | null
|
|
1873
|
+
*/
|
|
1874
|
+
protected editingCell: _angular_core.WritableSignal<{
|
|
1875
|
+
rowId: string;
|
|
1876
|
+
columnName: string;
|
|
1877
|
+
} | null>;
|
|
1878
|
+
/**
|
|
1879
|
+
* Original value when entering edit mode (for cancel functionality)
|
|
1880
|
+
*/
|
|
1881
|
+
private originalCellValue;
|
|
1882
|
+
/**
|
|
1883
|
+
* Internal rows state (for fixed mode)
|
|
1884
|
+
*/
|
|
1885
|
+
private internalRows;
|
|
1886
|
+
/**
|
|
1887
|
+
* Row ID mapping: rowId -> row index (for tracking)
|
|
1888
|
+
*/
|
|
1889
|
+
private rowIdMap;
|
|
1890
|
+
/**
|
|
1891
|
+
* Cache for widget nodes to prevent re-rendering
|
|
1892
|
+
* Key: `${rowIndex}_${columnName}`, Value: AXPWidgetNode
|
|
1893
|
+
*/
|
|
1894
|
+
private widgetNodeCache;
|
|
1895
|
+
/**
|
|
1896
|
+
* Cache for cell values to detect actual changes
|
|
1897
|
+
* Key: `${rowIndex}_${columnName}`, Value: any
|
|
1898
|
+
*/
|
|
1899
|
+
private cellValueCache;
|
|
1900
|
+
/**
|
|
1901
|
+
* Get current rows based on mode
|
|
1902
|
+
*/
|
|
1903
|
+
protected currentRows: _angular_core.Signal<Record<string, any>[]>;
|
|
1904
|
+
/**
|
|
1905
|
+
* Context for widgets-container (all rows as an object with rows array)
|
|
1906
|
+
* This allows widgets to access their cell via path like: rows[index].column.path
|
|
1907
|
+
*/
|
|
1908
|
+
protected spreadsheetContext: _angular_core.Signal<{
|
|
1909
|
+
rows: Record<string, any>[];
|
|
1910
|
+
}>;
|
|
1911
|
+
/**
|
|
1912
|
+
* Get rows with IDs (ensure all rows have identifiers)
|
|
1913
|
+
*/
|
|
1914
|
+
protected rowsWithIds: _angular_core.Signal<{
|
|
1915
|
+
rowId: string;
|
|
1916
|
+
row: Record<string, any>;
|
|
1917
|
+
}[]>;
|
|
1918
|
+
/**
|
|
1919
|
+
* Check if spreadsheet is completely empty (both columns and rows)
|
|
1920
|
+
*/
|
|
1921
|
+
protected isEmpty: _angular_core.Signal<boolean>;
|
|
1922
|
+
/**
|
|
1923
|
+
* Check if columns are empty (regardless of rows)
|
|
1924
|
+
* When columns are empty, we should show a message about missing columns, not rows
|
|
1925
|
+
*/
|
|
1926
|
+
protected isColumnsEmpty: _angular_core.Signal<boolean>;
|
|
1927
|
+
/**
|
|
1928
|
+
* Check if only rows are empty (columns exist but no rows)
|
|
1929
|
+
*/
|
|
1930
|
+
protected isRowsEmpty: _angular_core.Signal<boolean>;
|
|
1931
|
+
constructor();
|
|
1932
|
+
/**
|
|
1933
|
+
* Get the value for a specific cell by row index
|
|
1934
|
+
*/
|
|
1935
|
+
protected getCellValue(rowIndex: number, columnName: string): any;
|
|
1936
|
+
/**
|
|
1937
|
+
* Get row title from row object using rowTitlePath
|
|
1938
|
+
*/
|
|
1939
|
+
protected getRowTitle(row: Record<string, any>, path: string): string;
|
|
1940
|
+
/**
|
|
1941
|
+
* Get row description from row object using rowDescriptionPath
|
|
1942
|
+
*/
|
|
1943
|
+
protected getRowDescription(row: Record<string, any>, path: string): string;
|
|
1944
|
+
/**
|
|
1945
|
+
* Get row by ID
|
|
1946
|
+
*/
|
|
1947
|
+
protected getRowById(rowId: string): Record<string, any> | null;
|
|
1948
|
+
/**
|
|
1949
|
+
* Check if a cell is currently being edited
|
|
1950
|
+
*/
|
|
1951
|
+
protected isCellEditing(rowId: string, columnName: string): boolean;
|
|
1952
|
+
/**
|
|
1953
|
+
* Check if a column is readonly
|
|
1954
|
+
*/
|
|
1955
|
+
protected isColumnReadonly(column: AXPSpreadsheetColumn): boolean;
|
|
1956
|
+
/**
|
|
1957
|
+
* Get widget node for a cell with dynamic path based on row index
|
|
1958
|
+
* Path format: rows[rowIndex].column.path
|
|
1959
|
+
* Uses caching to prevent unnecessary re-renders
|
|
1960
|
+
*/
|
|
1961
|
+
protected getCellWidgetNode(column: AXPSpreadsheetColumn, rowIndex: number): AXPWidgetNode;
|
|
1962
|
+
/**
|
|
1963
|
+
* Handle cell click to start editing
|
|
1964
|
+
*/
|
|
1965
|
+
protected handleCellClick(rowId: string, columnName: string, event?: MouseEvent): void;
|
|
1966
|
+
/**
|
|
1967
|
+
* Handle cell value change from widget
|
|
1968
|
+
* The widget sets the value at path like rows[index].column.path
|
|
1969
|
+
*/
|
|
1970
|
+
protected handleCellValueChange(rowIndex: number, columnName: string, event: AXPContextChangeEvent): void;
|
|
1971
|
+
/**
|
|
1972
|
+
* Handle spreadsheet context change from widgets-container
|
|
1973
|
+
* This is called when any widget in the spreadsheet changes
|
|
1974
|
+
*/
|
|
1975
|
+
protected handleSpreadsheetContextChange(event: AXPContextChangeEvent): void;
|
|
1976
|
+
/**
|
|
1977
|
+
* Handle blur event to stop editing (when user clicks away from cell)
|
|
1978
|
+
*/
|
|
1979
|
+
protected handleCellBlur(rowId: string, columnName: string): void;
|
|
1980
|
+
/**
|
|
1981
|
+
* Handle Escape key to cancel editing
|
|
1982
|
+
*/
|
|
1983
|
+
protected handleKeyDown(event: KeyboardEvent): void;
|
|
1984
|
+
/**
|
|
1985
|
+
* Commit cell edit (save changes and close editing mode)
|
|
1986
|
+
*/
|
|
1987
|
+
protected commitCellEdit(): void;
|
|
1988
|
+
/**
|
|
1989
|
+
* Cancel cell edit (discard changes and close editing mode - same as escape)
|
|
1990
|
+
*/
|
|
1991
|
+
protected cancelCellEdit(): void;
|
|
1992
|
+
/**
|
|
1993
|
+
* Handle click outside to stop editing
|
|
1994
|
+
*/
|
|
1995
|
+
protected handleClickOutside(event: MouseEvent): void;
|
|
1996
|
+
/**
|
|
1997
|
+
* Handle add row (dynamic mode only)
|
|
1998
|
+
*/
|
|
1999
|
+
protected handleAddRow(): void;
|
|
2000
|
+
/**
|
|
2001
|
+
* Handle remove row (works for both fixed and dynamic modes)
|
|
2002
|
+
*/
|
|
2003
|
+
protected handleRemoveRow(rowId: string, _event: AXClickEvent): void;
|
|
2004
|
+
/**
|
|
2005
|
+
* Generate unique row ID for dynamic mode
|
|
2006
|
+
*/
|
|
2007
|
+
private generateRowId;
|
|
2008
|
+
/**
|
|
2009
|
+
* Update rows array (sync internal state)
|
|
2010
|
+
*/
|
|
2011
|
+
private updateRows;
|
|
2012
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPSpreadsheetComponent, never>;
|
|
2013
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPSpreadsheetComponent, "axp-spreadsheet", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "rowMode": { "alias": "rowMode"; "required": false; "isSignal": true; }; "rowsInput": { "alias": "rowsInput"; "required": false; "isSignal": true; }; "rowsModel": { "alias": "rowsModel"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "emptyCellPlaceholder": { "alias": "emptyCellPlaceholder"; "required": false; "isSignal": true; }; "rowTitlePath": { "alias": "rowTitlePath"; "required": false; "isSignal": true; }; "rowDescriptionPath": { "alias": "rowDescriptionPath"; "required": false; "isSignal": true; }; "allowAddRows": { "alias": "allowAddRows"; "required": false; "isSignal": true; }; "allowRemoveRows": { "alias": "allowRemoveRows"; "required": false; "isSignal": true; }; }, { "rowsModel": "rowsModelChange"; "cellChange": "cellChange"; "rowChange": "rowChange"; "spreadsheetChange": "spreadsheetChange"; }, never, never, true, never>;
|
|
2014
|
+
}
|
|
2015
|
+
|
|
2016
|
+
type StateMode = 'empty' | 'error' | 'loading' | 'warning' | 'info' | 'success';
|
|
2017
|
+
declare class AXPStateMessageComponent {
|
|
2018
|
+
mode: _angular_core.InputSignal<StateMode>;
|
|
2019
|
+
icon: _angular_core.InputSignal<string>;
|
|
2020
|
+
title: _angular_core.InputSignal<string>;
|
|
2021
|
+
description: _angular_core.InputSignal<string>;
|
|
2022
|
+
variant: _angular_core.InputSignal<"default" | "compact" | "minimal">;
|
|
2023
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPStateMessageComponent, never>;
|
|
2024
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPStateMessageComponent, "axp-state-message", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, {}, never, ["[slot=actions]"], true, never>;
|
|
2025
|
+
}
|
|
2026
|
+
|
|
2027
|
+
declare class AXPStopwatchComponent implements OnDestroy {
|
|
2028
|
+
mode: _angular_core.InputSignal<"count-up" | "count-down">;
|
|
2029
|
+
timeLimit: _angular_core.InputSignal<number | undefined>;
|
|
2030
|
+
format: _angular_core.InputSignal<"hh:mm:ss" | "mm:ss" | "ss">;
|
|
2031
|
+
autoStart: _angular_core.InputSignal<boolean>;
|
|
2032
|
+
showControls: _angular_core.InputSignal<boolean>;
|
|
2033
|
+
value: _angular_core.InputSignal<number>;
|
|
2034
|
+
valueChange: _angular_core.OutputEmitterRef<number>;
|
|
2035
|
+
timeUp: _angular_core.OutputEmitterRef<void>;
|
|
2036
|
+
private readonly currentTime;
|
|
2037
|
+
protected readonly isRunning: _angular_core.WritableSignal<boolean>;
|
|
2038
|
+
private intervalId;
|
|
2039
|
+
protected readonly isTimeUp: _angular_core.Signal<boolean>;
|
|
2040
|
+
protected readonly displayTime: _angular_core.Signal<string>;
|
|
2041
|
+
constructor();
|
|
2042
|
+
ngOnDestroy(): void;
|
|
2043
|
+
start(): void;
|
|
2044
|
+
pause(): void;
|
|
2045
|
+
reset(): void;
|
|
2046
|
+
private stop;
|
|
2047
|
+
private onTimeUp;
|
|
2048
|
+
private formatTime;
|
|
2049
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPStopwatchComponent, never>;
|
|
2050
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPStopwatchComponent, "axp-stopwatch", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "timeLimit": { "alias": "timeLimit"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "autoStart": { "alias": "autoStart"; "required": false; "isSignal": true; }; "showControls": { "alias": "showControls"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "timeUp": "timeUp"; }, never, never, true, never>;
|
|
2051
|
+
}
|
|
2052
|
+
|
|
2053
|
+
/**
|
|
2054
|
+
* Builds the AXPWidgetNode tree for the table-columns-editor when using AXPLayoutRendererComponent.
|
|
2055
|
+
* Root: repeater-layout (path: 'columns') with add/remove controls.
|
|
2056
|
+
* Each row: form-field for name (text-editor), form-field for title (text-editor), form-field for widget (widget-field-configurator).
|
|
2057
|
+
*/
|
|
2058
|
+
declare function buildTableColumnsEditorLayout(): AXPWidgetNode;
|
|
2059
|
+
|
|
2060
|
+
/**
|
|
2061
|
+
* Definition for a single table column (name, title, widget).
|
|
2062
|
+
* Used by table-columns-editor and table-data-editor.
|
|
2063
|
+
*/
|
|
2064
|
+
interface AXPTableColumnDefinition {
|
|
2065
|
+
name: string;
|
|
2066
|
+
title: string;
|
|
2067
|
+
widget: AXPWidgetNode;
|
|
2068
|
+
}
|
|
2069
|
+
|
|
2070
|
+
declare class AXPTableColumnsEditorPopupComponent extends AXBasePageComponent {
|
|
2071
|
+
protected readonly I18N: {
|
|
2072
|
+
readonly title: "@general:widgets.table-columns-editor.popup-title";
|
|
2073
|
+
readonly cancel: "@general:actions.cancel.title";
|
|
2074
|
+
readonly save: "@general:actions.save.title";
|
|
2075
|
+
};
|
|
2076
|
+
columns: _angular_core.InputSignal<AXPTableColumnDefinition[]>;
|
|
2077
|
+
localColumns: _angular_core.ModelSignal<AXPTableColumnDefinition[]>;
|
|
2078
|
+
constructor();
|
|
2079
|
+
protected handleCancel(): void;
|
|
2080
|
+
protected handleSave(): void;
|
|
2081
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTableColumnsEditorPopupComponent, never>;
|
|
2082
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPTableColumnsEditorPopupComponent, "axp-table-columns-editor-popup", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "localColumns": { "alias": "localColumns"; "required": false; "isSignal": true; }; }, { "localColumns": "localColumnsChange"; }, never, never, true, never>;
|
|
2083
|
+
}
|
|
2084
|
+
|
|
2085
|
+
declare class AXPTableColumnsEditorComponent {
|
|
2086
|
+
/** Layout tree: repeater (path: columns) with form-fields for name, title, widget. */
|
|
2087
|
+
protected readonly columnsEditorLayout: _angular_core.WritableSignal<_acorex_platform_layout_widget_core.AXPWidgetNode>;
|
|
2088
|
+
/** Two-way: list of column definitions (synced with editorContext.columns). */
|
|
2089
|
+
columns: _angular_core.ModelSignal<AXPTableColumnDefinition[]>;
|
|
2090
|
+
/** Context for the layout renderer; must hold { columns: AXPTableColumnDefinition[] }. */
|
|
2091
|
+
protected readonly editorContext: _angular_core.ModelSignal<{
|
|
2092
|
+
columns: AXPTableColumnDefinition[];
|
|
2093
|
+
}>;
|
|
2094
|
+
constructor();
|
|
2095
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTableColumnsEditorComponent, never>;
|
|
2096
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPTableColumnsEditorComponent, "axp-table-columns-editor", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "editorContext": { "alias": "editorContext"; "required": false; "isSignal": true; }; }, { "columns": "columnsChange"; "editorContext": "editorContextChange"; }, never, never, true, never>;
|
|
2097
|
+
}
|
|
2098
|
+
|
|
2099
|
+
interface AXPTableColumnsEditorOpenOptions {
|
|
2100
|
+
title?: string;
|
|
2101
|
+
columns?: AXPTableColumnDefinition[];
|
|
2102
|
+
}
|
|
2103
|
+
declare class AXPTableColumnsEditorService {
|
|
2104
|
+
private readonly popupService;
|
|
2105
|
+
private readonly translationService;
|
|
2106
|
+
open(options?: AXPTableColumnsEditorOpenOptions): Promise<AXPTableColumnDefinition[] | null>;
|
|
2107
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTableColumnsEditorService, never>;
|
|
2108
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPTableColumnsEditorService>;
|
|
2109
|
+
}
|
|
2110
|
+
|
|
2111
|
+
declare class AXPTableDataEditorPopupComponent extends AXBasePageComponent {
|
|
2112
|
+
protected readonly I18N: {
|
|
2113
|
+
readonly title: "@general:widgets.table-data-editor.popup-title";
|
|
2114
|
+
readonly cancel: "@general:actions.cancel.title";
|
|
2115
|
+
readonly save: "@general:actions.save.title";
|
|
2116
|
+
};
|
|
2117
|
+
columns: _angular_core.InputSignal<AXPTableColumnDefinition[]>;
|
|
2118
|
+
rows: _angular_core.InputSignal<Record<string, unknown>[]>;
|
|
2119
|
+
localRows: _angular_core.ModelSignal<Record<string, unknown>[]>;
|
|
2120
|
+
constructor();
|
|
2121
|
+
protected handleCancel(): void;
|
|
2122
|
+
protected handleSave(): void;
|
|
2123
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTableDataEditorPopupComponent, never>;
|
|
2124
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPTableDataEditorPopupComponent, "axp-table-data-editor-popup", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "localRows": { "alias": "localRows"; "required": false; "isSignal": true; }; }, { "localRows": "localRowsChange"; }, never, never, true, never>;
|
|
2125
|
+
}
|
|
2126
|
+
|
|
2127
|
+
declare class AXPTableDataEditorComponent {
|
|
2128
|
+
columns: _angular_core.InputSignal<AXPTableColumnDefinition[]>;
|
|
2129
|
+
rowsModel: _angular_core.ModelSignal<Record<string, unknown>[]>;
|
|
2130
|
+
protected readonly spreadsheetColumns: _angular_core.Signal<AXPSpreadsheetColumn[]>;
|
|
2131
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTableDataEditorComponent, never>;
|
|
2132
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPTableDataEditorComponent, "axp-table-data-editor", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "rowsModel": { "alias": "rowsModel"; "required": false; "isSignal": true; }; }, { "rowsModel": "rowsModelChange"; }, never, never, true, never>;
|
|
2133
|
+
}
|
|
2134
|
+
|
|
2135
|
+
interface AXPTableDataEditorOpenOptions {
|
|
2136
|
+
title?: string;
|
|
2137
|
+
columns: AXPTableColumnDefinition[];
|
|
2138
|
+
rows?: Record<string, unknown>[];
|
|
2139
|
+
}
|
|
2140
|
+
declare class AXPTableDataEditorService {
|
|
2141
|
+
private readonly popupService;
|
|
2142
|
+
private readonly translationService;
|
|
2143
|
+
open(options: AXPTableDataEditorOpenOptions): Promise<Record<string, unknown>[] | null>;
|
|
2144
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTableDataEditorService, never>;
|
|
2145
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPTableDataEditorService>;
|
|
2146
|
+
}
|
|
2147
|
+
|
|
2148
|
+
interface AXPTemplateViewerConfig {
|
|
2149
|
+
template: AXPWidgetNode | string;
|
|
2150
|
+
title?: string;
|
|
2151
|
+
size?: AXPopupSizeType;
|
|
2152
|
+
context?: any;
|
|
2153
|
+
metadata?: AXPMetaData;
|
|
2154
|
+
readOnly?: boolean;
|
|
2155
|
+
showActions?: boolean;
|
|
2156
|
+
}
|
|
2157
|
+
interface AXPTemplateViewerResult {
|
|
2158
|
+
context: any;
|
|
2159
|
+
cancelled: boolean;
|
|
2160
|
+
metadata?: AXPMetaData;
|
|
2161
|
+
}
|
|
2162
|
+
|
|
2163
|
+
declare class AXPTemplateViewerComponent extends AXBasePageComponent {
|
|
2164
|
+
set config(value: AXPTemplateViewerConfig | undefined);
|
|
2165
|
+
get config(): AXPTemplateViewerConfig | undefined;
|
|
2166
|
+
protected context: any;
|
|
2167
|
+
protected readonly document: _angular_core.WritableSignal<AXPWidgetNode>;
|
|
2168
|
+
protected readonly currentPageIndex: _angular_core.WritableSignal<number>;
|
|
2169
|
+
protected readonly _config: _angular_core.WritableSignal<AXPTemplateViewerConfig | undefined>;
|
|
2170
|
+
protected readonly currentPage: _angular_core.Signal<AXPWidgetNode>;
|
|
2171
|
+
protected ngOnInit(): Promise<void>;
|
|
2172
|
+
private loadTemplate;
|
|
2173
|
+
protected handleContextChanged(e: AXPContextChangeEvent): void;
|
|
2174
|
+
protected handleSubmit(form: AXFormComponent): Promise<void>;
|
|
2175
|
+
protected handleCancel(): void;
|
|
2176
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTemplateViewerComponent, never>;
|
|
2177
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPTemplateViewerComponent, "axp-template-viewer", never, { "config": { "alias": "config"; "required": false; }; }, {}, never, never, true, never>;
|
|
2178
|
+
}
|
|
2179
|
+
|
|
2180
|
+
declare class AXPTemplateViewerService {
|
|
2181
|
+
private readonly popupService;
|
|
2182
|
+
/**
|
|
2183
|
+
* Show a template viewer dialog with the given configuration
|
|
2184
|
+
* @param config Template viewer configuration including template, title, and UI options
|
|
2185
|
+
* @returns Promise resolving to viewer result with form values and cancellation status
|
|
2186
|
+
*/
|
|
2187
|
+
showTemplate(config: AXPTemplateViewerConfig): Promise<AXPTemplateViewerResult>;
|
|
2188
|
+
/**
|
|
2189
|
+
* Show a template viewer in read-only mode
|
|
2190
|
+
* @param config Template viewer configuration
|
|
2191
|
+
* @returns Promise resolving to viewer result
|
|
2192
|
+
*/
|
|
2193
|
+
showTemplateReadOnly(config: Omit<AXPTemplateViewerConfig, 'readOnly' | 'showActions'>): Promise<AXPTemplateViewerResult>;
|
|
2194
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTemplateViewerService, never>;
|
|
2195
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPTemplateViewerService>;
|
|
2196
|
+
}
|
|
2197
|
+
|
|
2198
|
+
/**
|
|
2199
|
+
* Generic avatar renderer with image and initials fallback.
|
|
2200
|
+
*/
|
|
2201
|
+
declare class AXPAvatarComponent {
|
|
2202
|
+
/** Avatar size in pixels. */
|
|
2203
|
+
readonly size: _angular_core.InputSignal<number>;
|
|
2204
|
+
/** Optional image source for the avatar. */
|
|
2205
|
+
readonly src: _angular_core.InputSignal<string | undefined>;
|
|
2206
|
+
/** Display name used for title and initials fallback. */
|
|
2207
|
+
readonly fullName: _angular_core.InputSignal<string | undefined>;
|
|
2208
|
+
/** Optional override for fallback text shown when image is not available. */
|
|
2209
|
+
readonly fallbackText: _angular_core.InputSignal<string | undefined>;
|
|
2210
|
+
/** Forces placeholder mode and '?' fallback. */
|
|
2211
|
+
readonly placeholder: _angular_core.InputSignal<boolean>;
|
|
2212
|
+
protected readonly isAvatarLoaded: _angular_core.WritableSignal<boolean>;
|
|
2213
|
+
protected readonly normalizedName: _angular_core.Signal<string>;
|
|
2214
|
+
protected readonly resolvedSrc: _angular_core.Signal<string>;
|
|
2215
|
+
protected readonly hasAvatar: _angular_core.Signal<boolean>;
|
|
2216
|
+
protected readonly isLoading: _angular_core.Signal<boolean>;
|
|
2217
|
+
protected readonly avatarText: _angular_core.Signal<string>;
|
|
2218
|
+
protected readonly avatarColor: _angular_core.Signal<string>;
|
|
2219
|
+
protected readonly title: _angular_core.Signal<string>;
|
|
2220
|
+
protected onImageError(event: AXHtmlEvent<ErrorEvent>): void;
|
|
2221
|
+
protected onImageLoad(event: AXHtmlEvent<Event>): void;
|
|
2222
|
+
private computeInitials;
|
|
2223
|
+
private hashString;
|
|
2224
|
+
private pickColor;
|
|
2225
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPAvatarComponent, never>;
|
|
2226
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPAvatarComponent, "axp-avatar", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "src": { "alias": "src"; "required": false; "isSignal": true; }; "fullName": { "alias": "fullName"; "required": false; "isSignal": true; }; "fallbackText": { "alias": "fallbackText"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2227
|
+
}
|
|
2228
|
+
|
|
2229
|
+
type AXPUserAvatarSize = 'small' | 'medium' | 'large';
|
|
2230
|
+
type AXPUserAvatarStatus = 'online' | 'offline';
|
|
2231
|
+
type AXPUserAvatarData = {
|
|
2232
|
+
id: string;
|
|
2233
|
+
status: AXPUserAvatarStatus;
|
|
2234
|
+
username: string;
|
|
2235
|
+
firstName: string;
|
|
2236
|
+
lastName?: string;
|
|
2237
|
+
avatarUrl?: string;
|
|
2238
|
+
};
|
|
2239
|
+
interface AXPUserAvatarProvider {
|
|
2240
|
+
provide(userId: string): Promise<AXPUserAvatarData>;
|
|
2241
|
+
}
|
|
2242
|
+
|
|
2243
|
+
declare class AXPUserAvatarService {
|
|
2244
|
+
private provider;
|
|
2245
|
+
private readonly cacheExpiryTime;
|
|
2246
|
+
private readonly refreshInterval;
|
|
2247
|
+
private cache;
|
|
2248
|
+
/**
|
|
2249
|
+
* Gets user information with caching and auto-refresh
|
|
2250
|
+
* @param userId The username to fetch information for
|
|
2251
|
+
* @returns Observable that emits user avatar data
|
|
2252
|
+
*/
|
|
2253
|
+
getUserInfo$(userId: string): Observable<AXPUserAvatarData>;
|
|
2254
|
+
/**
|
|
2255
|
+
* Gets user information (Promise-based for backward compatibility)
|
|
2256
|
+
* @param userId The username to fetch information for
|
|
2257
|
+
* @returns Promise that resolves to user avatar data
|
|
2258
|
+
*/
|
|
2259
|
+
getUserInfo(userId: string): Promise<AXPUserAvatarData>;
|
|
2260
|
+
/**
|
|
2261
|
+
* Clears the entire cache or a specific user's cache
|
|
2262
|
+
* @param userId Optional username to clear specific cache
|
|
2263
|
+
*/
|
|
2264
|
+
clearCache(userId?: string): void;
|
|
2265
|
+
/**
|
|
2266
|
+
* Force refresh data for a specific username
|
|
2267
|
+
* @param userId The username to refresh
|
|
2268
|
+
* @returns Promise that resolves to the refreshed data
|
|
2269
|
+
*/
|
|
2270
|
+
refreshUserInfo(userId: string): Promise<AXPUserAvatarData>;
|
|
2271
|
+
/**
|
|
2272
|
+
* Checks if a cache entry is expired
|
|
2273
|
+
*/
|
|
2274
|
+
private isExpired;
|
|
2275
|
+
/**
|
|
2276
|
+
* Fetches data from provider and updates the cache
|
|
2277
|
+
*/
|
|
2278
|
+
private fetchAndUpdateCache;
|
|
2279
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPUserAvatarService, never>;
|
|
2280
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPUserAvatarService>;
|
|
2281
|
+
}
|
|
2282
|
+
|
|
2283
|
+
declare const AXP_USER_AVATAR_PROVIDER: InjectionToken<AXPUserAvatarProvider>;
|
|
2284
|
+
|
|
2285
|
+
declare class AXPUserAvatarComponent implements OnInit, OnDestroy {
|
|
2286
|
+
private readonly userAvatarService;
|
|
2287
|
+
private readonly destroy$;
|
|
2288
|
+
protected userInfo: _angular_core.WritableSignal<AXPUserAvatarData | null>;
|
|
2289
|
+
size: _angular_core.InputSignal<number>;
|
|
2290
|
+
userId: _angular_core.InputSignal<string>;
|
|
2291
|
+
src: _angular_core.WritableSignal<string>;
|
|
2292
|
+
userName: _angular_core.Signal<string>;
|
|
2293
|
+
firstName: _angular_core.Signal<string>;
|
|
2294
|
+
lastName: _angular_core.Signal<string>;
|
|
2295
|
+
title: _angular_core.Signal<string>;
|
|
2296
|
+
isOnline: _angular_core.Signal<boolean>;
|
|
2297
|
+
ngOnInit(): void;
|
|
2298
|
+
ngOnDestroy(): void;
|
|
2299
|
+
private loadUserData;
|
|
2300
|
+
/**
|
|
2301
|
+
* Generate avatar image source
|
|
2302
|
+
* This is a placeholder - implement based on your actual requirements
|
|
2303
|
+
*/
|
|
2304
|
+
private generateAvatarSrc;
|
|
2305
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPUserAvatarComponent, never>;
|
|
2306
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPUserAvatarComponent, "axp-user-avatar", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "userId": { "alias": "userId"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2307
|
+
}
|
|
2308
|
+
|
|
2309
|
+
declare class AXPQueryViewsComponent {
|
|
2310
|
+
#private;
|
|
2311
|
+
protected popupService: AXPopupService;
|
|
2312
|
+
protected translate: AXTranslationService;
|
|
2313
|
+
protected tabs: _angular_core.Signal<AXTabsComponent | undefined>;
|
|
2314
|
+
views: _angular_core.ModelSignal<AXPViewQuery[]>;
|
|
2315
|
+
selectedView: _angular_core.ModelSignal<AXPViewQuery>;
|
|
2316
|
+
protected isMounted: _angular_core.WritableSignal<boolean>;
|
|
2317
|
+
ngAfterViewInit(): void;
|
|
2318
|
+
setView(view: AXPViewQuery): void;
|
|
2319
|
+
handleActiveChange(e: any): void;
|
|
2320
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPQueryViewsComponent, never>;
|
|
2321
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPQueryViewsComponent, "axp-query-views", never, { "views": { "alias": "views"; "required": false; "isSignal": true; }; "selectedView": { "alias": "selectedView"; "required": true; "isSignal": true; }; }, { "views": "viewsChange"; "selectedView": "selectedViewChange"; }, never, never, true, never>;
|
|
2322
|
+
}
|
|
2323
|
+
|
|
2324
|
+
/**
|
|
2325
|
+
* One selectable entry for {@link AXPItemConfiguratorComponent}.
|
|
2326
|
+
* Parents map external data into this shape. {@link propertyDefinitions} drive {@link AXPPropertyViewerService} tabs.
|
|
2327
|
+
*/
|
|
2328
|
+
interface ItemConfiguratorListItem {
|
|
2329
|
+
id: string;
|
|
2330
|
+
/** Shown in the list and in the configure dialog title; plain string, i18n key, or locale map. */
|
|
2331
|
+
title: AXPMultiLanguageString;
|
|
2332
|
+
icon?: string;
|
|
2333
|
+
description?: AXPMultiLanguageString;
|
|
2334
|
+
propertyDefinitions?: AXPWidgetProperty[];
|
|
2335
|
+
}
|
|
2336
|
+
interface ItemConfiguratorSelectRow {
|
|
2337
|
+
value: string;
|
|
2338
|
+
text: string;
|
|
2339
|
+
icon?: string;
|
|
2340
|
+
description?: string;
|
|
2341
|
+
}
|
|
2342
|
+
/**
|
|
2343
|
+
* Select an item from a list and edit its settings via {@link AXPPropertyViewerService}.
|
|
2344
|
+
* Bound state: {@link selectedItemId} and {@link values} (context returned from the viewer). Not tied to {@link AXPWidgetNode}.
|
|
2345
|
+
*/
|
|
2346
|
+
declare class AXPItemConfiguratorComponent {
|
|
2347
|
+
private readonly mlResolver;
|
|
2348
|
+
/** Selected list entry id ({@link ItemConfiguratorListItem.id}). */
|
|
2349
|
+
selectedItemId: _angular_core.ModelSignal<string>;
|
|
2350
|
+
/** Values edited in the property viewer (merged from dialog result). */
|
|
2351
|
+
values: _angular_core.ModelSignal<Record<string, unknown>>;
|
|
2352
|
+
label: _angular_core.InputSignal<string>;
|
|
2353
|
+
readonly: _angular_core.InputSignal<boolean>;
|
|
2354
|
+
items: _angular_core.InputSignal<ItemConfiguratorListItem[]>;
|
|
2355
|
+
headerActions: _angular_core.InputSignal<AXPActionMenuItem[]>;
|
|
2356
|
+
private readonly propertyViewerService;
|
|
2357
|
+
private readonly translationService;
|
|
2358
|
+
private readonly workflow;
|
|
2359
|
+
private readonly commandExecutor;
|
|
2360
|
+
protected isEditMode: _angular_core.WritableSignal<boolean>;
|
|
2361
|
+
protected availableItems: _angular_core.Signal<ItemConfiguratorSelectRow[]>;
|
|
2362
|
+
protected selectedListItem: _angular_core.Signal<ItemConfiguratorListItem | null>;
|
|
2363
|
+
protected resolvedPropertyDefinitions: _angular_core.Signal<AXPWidgetProperty[]>;
|
|
2364
|
+
protected currentItemConfig: _angular_core.Signal<{
|
|
2365
|
+
title: string;
|
|
2366
|
+
description: AXPMultiLanguageString | undefined;
|
|
2367
|
+
icon: string | undefined;
|
|
2368
|
+
hasProperties: boolean;
|
|
2369
|
+
} | null>;
|
|
2370
|
+
protected canConfigure: _angular_core.Signal<boolean>;
|
|
2371
|
+
protected isConfigured: _angular_core.Signal<boolean>;
|
|
2372
|
+
protected visibleHeaderActions: _angular_core.Signal<AXPActionMenuItem[]>;
|
|
2373
|
+
protected itemSelectBox: _angular_core.Signal<AXSelectBoxComponent | undefined>;
|
|
2374
|
+
protected enterEditMode(): void;
|
|
2375
|
+
protected exitEditMode(): void;
|
|
2376
|
+
constructor();
|
|
2377
|
+
protected onSelectionChange(event: {
|
|
2378
|
+
value?: string | null;
|
|
2379
|
+
}): Promise<void>;
|
|
2380
|
+
protected openConfigureDialog(): Promise<void>;
|
|
2381
|
+
protected onHeaderActionClick(action: AXPActionMenuItem): void;
|
|
2382
|
+
protected isHeaderActionDisabled(action: AXPActionMenuItem): boolean;
|
|
2383
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPItemConfiguratorComponent, never>;
|
|
2384
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPItemConfiguratorComponent, "axp-item-configurator", never, { "selectedItemId": { "alias": "selectedItemId"; "required": false; "isSignal": true; }; "values": { "alias": "values"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "headerActions": { "alias": "headerActions"; "required": false; "isSignal": true; }; }, { "selectedItemId": "selectedItemIdChange"; "values": "valuesChange"; }, never, never, true, never>;
|
|
2385
|
+
}
|
|
2386
|
+
|
|
2387
|
+
/**
|
|
2388
|
+
* Widget field configurator for entity forms: composes {@link AXPItemConfiguratorComponent} with
|
|
2389
|
+
* {@link AXPWidgetRegistryService} list items and widget preview.
|
|
2390
|
+
*/
|
|
2391
|
+
declare class AXPWidgetFieldConfiguratorComponent {
|
|
2392
|
+
widget: _angular_core.ModelSignal<AXPWidgetNode>;
|
|
2393
|
+
label: _angular_core.InputSignal<string>;
|
|
2394
|
+
fieldName: _angular_core.InputSignal<string>;
|
|
2395
|
+
fieldTitle: _angular_core.InputSignal<AXPMultiLanguageString>;
|
|
2396
|
+
readonly: _angular_core.InputSignal<boolean>;
|
|
2397
|
+
private readonly widgetRegistry;
|
|
2398
|
+
private readonly translation;
|
|
2399
|
+
protected selectedItemIdModel: _angular_core.ModelSignal<string>;
|
|
2400
|
+
protected valuesModel: _angular_core.ModelSignal<Record<string, unknown>>;
|
|
2401
|
+
/**
|
|
2402
|
+
* List entries from {@link AXPWidgetRegistryService} (form editors), with
|
|
2403
|
+
* {@link ItemConfiguratorListItem.propertyDefinitions} from each registered config.
|
|
2404
|
+
*/
|
|
2405
|
+
protected configuratorItems: _angular_core.Signal<ItemConfiguratorListItem[]>;
|
|
2406
|
+
protected previewHeaderActions: _angular_core.Signal<AXPActionMenuItem[]>;
|
|
2407
|
+
constructor();
|
|
2408
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetFieldConfiguratorComponent, never>;
|
|
2409
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPWidgetFieldConfiguratorComponent, "axp-widget-field-configurator", never, { "widget": { "alias": "widget"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "fieldName": { "alias": "fieldName"; "required": false; "isSignal": true; }; "fieldTitle": { "alias": "fieldTitle"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "selectedItemIdModel": { "alias": "selectedItemIdModel"; "required": false; "isSignal": true; }; "valuesModel": { "alias": "valuesModel"; "required": false; "isSignal": true; }; }, { "widget": "widgetChange"; "selectedItemIdModel": "selectedItemIdModelChange"; "valuesModel": "valuesModelChange"; }, never, never, true, never>;
|
|
2410
|
+
}
|
|
2411
|
+
|
|
2412
|
+
/**
|
|
2413
|
+
* Generic interface for widget item data
|
|
2414
|
+
*/
|
|
2415
|
+
interface AXPWidgetItemData {
|
|
2416
|
+
/** Display title of the widget */
|
|
2417
|
+
title: AXPMultiLanguageString;
|
|
2418
|
+
/** Description text for the widget */
|
|
2419
|
+
description?: AXPMultiLanguageString;
|
|
2420
|
+
/** Icon class (e.g., FontAwesome classes) */
|
|
2421
|
+
icon?: string;
|
|
2422
|
+
/** Whether the widget is pinned/favorited */
|
|
2423
|
+
isPinned: boolean;
|
|
2424
|
+
/** Generic data payload - can be any type based on use case */
|
|
2425
|
+
data?: unknown;
|
|
2426
|
+
}
|
|
2427
|
+
/**
|
|
2428
|
+
* Event data for widget item interactions
|
|
2429
|
+
*/
|
|
2430
|
+
interface AXPWidgetItemClickEvent<T = unknown> {
|
|
2431
|
+
/** The mouse event */
|
|
2432
|
+
event: MouseEvent;
|
|
2433
|
+
/** The widget item data */
|
|
2434
|
+
widget: AXPWidgetItemData & {
|
|
2435
|
+
data?: T;
|
|
2436
|
+
};
|
|
2437
|
+
}
|
|
2438
|
+
|
|
2439
|
+
/**
|
|
2440
|
+
* Generic widget item component for displaying selectable widgets with icons, titles, and descriptions.
|
|
2441
|
+
* Can be used across different modules for consistent widget display and interaction.
|
|
2442
|
+
*/
|
|
2443
|
+
declare class AXPWidgetItemComponent {
|
|
2444
|
+
protected readonly i18n: {
|
|
2445
|
+
readonly pin: "@general:widgets.widget-item.pin";
|
|
2446
|
+
readonly unpin: "@general:widgets.widget-item.unpin";
|
|
2447
|
+
};
|
|
2448
|
+
/** The widget data to display */
|
|
2449
|
+
widget: _angular_core.InputSignal<AXPWidgetItemData>;
|
|
2450
|
+
/** Whether this widget is currently selected */
|
|
2451
|
+
isSelected: _angular_core.InputSignal<boolean>;
|
|
2452
|
+
/** Whether to show the pin button */
|
|
2453
|
+
showPinButton: _angular_core.InputSignal<boolean>;
|
|
2454
|
+
/** Custom CSS classes to apply to the widget item */
|
|
2455
|
+
customClasses: _angular_core.InputSignal<string>;
|
|
2456
|
+
/** Emitted when the widget item is clicked */
|
|
2457
|
+
onWidgetClick: _angular_core.OutputEmitterRef<AXPWidgetItemClickEvent<unknown>>;
|
|
2458
|
+
/** Emitted when the pin button is clicked */
|
|
2459
|
+
onPinClick: _angular_core.OutputEmitterRef<AXPWidgetItemClickEvent<unknown>>;
|
|
2460
|
+
/**
|
|
2461
|
+
* Handle widget item click event
|
|
2462
|
+
*/
|
|
2463
|
+
handleClick(event: MouseEvent): void;
|
|
2464
|
+
/**
|
|
2465
|
+
* Handle pin button click event
|
|
2466
|
+
*/
|
|
2467
|
+
handlePinClick(event: MouseEvent): void;
|
|
2468
|
+
/**
|
|
2469
|
+
* Get the effective icon to display
|
|
2470
|
+
*/
|
|
2471
|
+
getIconClass(): string;
|
|
2472
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetItemComponent, never>;
|
|
2473
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPWidgetItemComponent, "axp-widget-item", never, { "widget": { "alias": "widget"; "required": true; "isSignal": true; }; "isSelected": { "alias": "isSelected"; "required": false; "isSignal": true; }; "showPinButton": { "alias": "showPinButton"; "required": false; "isSignal": true; }; "customClasses": { "alias": "customClasses"; "required": false; "isSignal": true; }; }, { "onWidgetClick": "onWidgetClick"; "onPinClick": "onPinClick"; }, never, never, true, never>;
|
|
2474
|
+
}
|
|
2475
|
+
|
|
2476
|
+
interface AXPWidgetPropertiesChangedEvent {
|
|
2477
|
+
values: any;
|
|
2478
|
+
mode: 'init' | 'update';
|
|
2479
|
+
}
|
|
2480
|
+
declare class AXPWidgetPropertyViewerComponent {
|
|
2481
|
+
widget: _angular_core.InputSignal<AXPWidgetNode>;
|
|
2482
|
+
mode: _angular_core.InputSignal<"simple" | "advanced">;
|
|
2483
|
+
onChanged: EventEmitter<AXPWidgetPropertiesChangedEvent>;
|
|
2484
|
+
protected readonly propertyViewerRef: _angular_core.Signal<AXPPropertyViewerComponent | undefined>;
|
|
2485
|
+
protected readonly config: _angular_core.WritableSignal<AXPWidgetConfig<any> | null>;
|
|
2486
|
+
protected readonly tabs: _angular_core.WritableSignal<AXPPropertyViewerTab[]>;
|
|
2487
|
+
protected initialContext: Record<string, unknown>;
|
|
2488
|
+
protected groupCollapsedStates: Map<string, boolean>;
|
|
2489
|
+
/** When true, the next onChanged from the inner viewer was caused by our update(); do not forward to avoid loop. */
|
|
2490
|
+
private suppressNextEmit;
|
|
2491
|
+
private readonly widgetRegistryService;
|
|
2492
|
+
constructor();
|
|
2493
|
+
/**
|
|
2494
|
+
* Merges the given values into the property viewer context. Called by the designer when applying changes (e.g. undo/redo).
|
|
2495
|
+
* The inner viewer will emit onChanged; we ignore that emission to avoid designer -> update -> emit -> designer loop.
|
|
2496
|
+
*/
|
|
2497
|
+
update(values: any): void;
|
|
2498
|
+
private fillTabs;
|
|
2499
|
+
protected handlePropertyViewerChanged(ev: AXPPropertyViewerChangedEvent): void;
|
|
2500
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetPropertyViewerComponent, never>;
|
|
2501
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPWidgetPropertyViewerComponent, "axp-widget-property-viewer", never, { "widget": { "alias": "widget"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, { "onChanged": "onChanged"; }, never, never, true, never>;
|
|
2502
|
+
}
|
|
2503
|
+
|
|
2504
|
+
declare class AXPWidgetPropertyViewerPopupComponent extends AXBasePageComponent {
|
|
2505
|
+
widget: _angular_core.InputSignal<AXPWidgetNode>;
|
|
2506
|
+
mode: _angular_core.InputSignal<"simple" | "advanced">;
|
|
2507
|
+
protected currentValues: _angular_core.WritableSignal<any>;
|
|
2508
|
+
protected handlePropertyChanged(event: {
|
|
2509
|
+
values: any;
|
|
2510
|
+
mode: 'init' | 'update';
|
|
2511
|
+
}): void;
|
|
2512
|
+
protected handleCloseClick(): void;
|
|
2513
|
+
protected handleApplyClick(): void;
|
|
2514
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetPropertyViewerPopupComponent, never>;
|
|
2515
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPWidgetPropertyViewerPopupComponent, "axp-widget-property-viewer-popup", never, { "widget": { "alias": "widget"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2516
|
+
}
|
|
2517
|
+
|
|
2518
|
+
interface AXPWidgetPropertyInjection {
|
|
2519
|
+
property: AXPWidgetProperty;
|
|
2520
|
+
tab?: {
|
|
2521
|
+
name?: string;
|
|
2522
|
+
title?: string;
|
|
2523
|
+
};
|
|
2524
|
+
group?: {
|
|
2525
|
+
name?: string;
|
|
2526
|
+
title?: string;
|
|
2527
|
+
};
|
|
2528
|
+
}
|
|
2529
|
+
interface AXPWidgetPropertyViewerConfig {
|
|
2530
|
+
title: string;
|
|
2531
|
+
widget: AXPWidgetNode;
|
|
2532
|
+
mode?: 'simple' | 'advanced';
|
|
2533
|
+
onApply?: (result: AXPWidgetPropertyViewerResult) => void | Promise<void>;
|
|
2534
|
+
/**
|
|
2535
|
+
* Property names to exclude from the viewer.
|
|
2536
|
+
*/
|
|
2537
|
+
exclude?: string[];
|
|
2538
|
+
/**
|
|
2539
|
+
* Custom property injection configuration.
|
|
2540
|
+
*/
|
|
2541
|
+
custom?: {
|
|
2542
|
+
/**
|
|
2543
|
+
* Custom property injection entries.
|
|
2544
|
+
*/
|
|
2545
|
+
properties: AXPWidgetPropertyInjection[];
|
|
2546
|
+
/**
|
|
2547
|
+
* Default tab fallback if property injection doesn't specify one.
|
|
2548
|
+
* When omitted, falls back to the first tab or "general".
|
|
2549
|
+
*/
|
|
2550
|
+
defaultTab?: {
|
|
2551
|
+
name?: string;
|
|
2552
|
+
title?: string;
|
|
2553
|
+
};
|
|
2554
|
+
/**
|
|
2555
|
+
* Default group fallback when injection doesn't specify a group.
|
|
2556
|
+
* When omitted, falls back to the tab's first group or property defined group.
|
|
2557
|
+
*/
|
|
2558
|
+
defaultGroup?: {
|
|
2559
|
+
name?: string;
|
|
2560
|
+
title?: string;
|
|
2561
|
+
};
|
|
2562
|
+
};
|
|
2563
|
+
}
|
|
2564
|
+
/** Emitted when the dialog applies; `values` is the updated viewer context (merge into {@link AXPWidgetNode} as needed). */
|
|
2565
|
+
interface AXPWidgetPropertyViewerResult {
|
|
2566
|
+
values: any;
|
|
2567
|
+
mode: 'init' | 'update';
|
|
2568
|
+
}
|
|
2569
|
+
interface IAXPWidgetPropertyViewerRoot {
|
|
2570
|
+
dialog(delegate: (container: IAXPWidgetPropertyViewerDialogBuilder) => void): IAXPWidgetPropertyViewerDialogBuilder;
|
|
2571
|
+
}
|
|
2572
|
+
interface IAXPWidgetPropertyViewerDialogBuilder {
|
|
2573
|
+
setTitle(title: string): IAXPWidgetPropertyViewerDialogBuilder;
|
|
2574
|
+
/**
|
|
2575
|
+
* Initial widget state shown in the viewer (type, options, name/path, …). Call before {@link show}.
|
|
2576
|
+
*/
|
|
2577
|
+
setWidget(widget: AXPWidgetNode): IAXPWidgetPropertyViewerDialogBuilder;
|
|
2578
|
+
setMode(mode: 'simple' | 'advanced'): IAXPWidgetPropertyViewerDialogBuilder;
|
|
2579
|
+
setExclude(exclude: string[]): IAXPWidgetPropertyViewerDialogBuilder;
|
|
2580
|
+
setCustom(custom: AXPWidgetPropertyViewerConfig['custom']): IAXPWidgetPropertyViewerDialogBuilder;
|
|
2581
|
+
/**
|
|
2582
|
+
* When set to a non-empty array, builds tabs from these properties and skips registry lookup for {@link setWidget}'s type.
|
|
2583
|
+
* Omit or clear to resolve widget config from {@link AXPWidgetRegistryService} as usual.
|
|
2584
|
+
*/
|
|
2585
|
+
setPropertyDefinitions(properties: AXPWidgetProperty[] | null): IAXPWidgetPropertyViewerDialogBuilder;
|
|
2586
|
+
onAction(handler: (dialogRef: AXPPropertyViewerActionRef) => void | Promise<void> | unknown | Promise<unknown>): IAXPWidgetPropertyViewerDialogBuilder;
|
|
2587
|
+
/**
|
|
2588
|
+
* Applies edits and returns updated context; merge {@link AXPWidgetPropertyViewerResult.values} into your widget node
|
|
2589
|
+
* (typically `options` and any top-level fields the viewer exposes).
|
|
2590
|
+
*/
|
|
2591
|
+
show(): Promise<AXPWidgetPropertyViewerResult | null>;
|
|
2592
|
+
}
|
|
2593
|
+
declare class AXPWidgetPropertyViewerService {
|
|
2594
|
+
private readonly widgetRegistryService;
|
|
2595
|
+
private readonly propertyViewerService;
|
|
2596
|
+
/**
|
|
2597
|
+
* Same shape as `AXPPropertyViewerService.create()` — use `.dialog((d) => { ... }).show()`.
|
|
2598
|
+
*/
|
|
2599
|
+
create(): IAXPWidgetPropertyViewerRoot;
|
|
2600
|
+
/**
|
|
2601
|
+
* One-shot open (delegates to {@link #create} `.dialog().show()`).
|
|
2602
|
+
*/
|
|
2603
|
+
open(config: AXPWidgetPropertyViewerConfig): Promise<AXPWidgetPropertyViewerResult | null>;
|
|
2604
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetPropertyViewerService, never>;
|
|
2605
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPWidgetPropertyViewerService>;
|
|
2606
|
+
}
|
|
2607
|
+
|
|
2608
|
+
/** Scheduler appointment with optional provider tag for context menu routing. */
|
|
2609
|
+
type AppointmentWithProvider = AXSchedulerAppointment & {
|
|
2610
|
+
provider?: string;
|
|
2611
|
+
};
|
|
2612
|
+
declare class AXPResourceAppointmentComponent implements OnInit {
|
|
2613
|
+
/** Show resource headers in the timeline views. */
|
|
2614
|
+
showResourceHeaders: _angular_core.InputSignal<boolean>;
|
|
2615
|
+
/** Show appointments that have no resourceId. */
|
|
2616
|
+
showUnassignedAppointments: _angular_core.InputSignal<boolean>;
|
|
2617
|
+
/** Optional provider name to filter the board (e.g. from route param). */
|
|
2618
|
+
providerName: _angular_core.InputSignal<string | undefined>;
|
|
2619
|
+
private readonly resourceAppointmentService;
|
|
2620
|
+
private readonly formatService;
|
|
2621
|
+
private readonly contextMenu;
|
|
2622
|
+
protected readonly schedulerRef: _angular_core.Signal<AXSchedulerComponent | undefined>;
|
|
2623
|
+
protected readonly isReady: _angular_core.WritableSignal<boolean>;
|
|
2624
|
+
protected readonly currentDate: _angular_core.WritableSignal<Date>;
|
|
2625
|
+
protected readonly currentView: _angular_core.WritableSignal<AXSchedulerView>;
|
|
2626
|
+
private readonly currentAppointment;
|
|
2627
|
+
/** Raw resources returned by providers. */
|
|
2628
|
+
private readonly rawResources;
|
|
2629
|
+
/** Scheduler resources derived from provider data. */
|
|
2630
|
+
protected readonly schedulerResources: _angular_core.Signal<AXSchedulerResource[]>;
|
|
2631
|
+
/** Flat list of scheduler appointments derived from provider data. */
|
|
2632
|
+
protected readonly schedulerAppointments: _angular_core.Signal<AppointmentWithProvider[]>;
|
|
2633
|
+
/** Formatted date range text for the toolbar. */
|
|
2634
|
+
protected readonly timeText: _angular_core.Signal<string>;
|
|
2635
|
+
constructor();
|
|
2636
|
+
ngOnInit(): Promise<void>;
|
|
2637
|
+
private resolveProvidersAndReady;
|
|
2638
|
+
/** Fetches resource + appointment data from providers and updates signals. */
|
|
2639
|
+
private loadData;
|
|
2640
|
+
/** Re-load data when the scheduler view range changes and sync toolbar date. */
|
|
2641
|
+
protected handleRangeChanged(range: AXSchedulerDateRange): void;
|
|
2642
|
+
/** Navigate to previous/next period based on current view. */
|
|
2643
|
+
protected changeDate(forward: boolean): void;
|
|
2644
|
+
/** Fallback formatted date range when scheduler ref is not yet available. */
|
|
2645
|
+
private formatCurrentDateRange;
|
|
2646
|
+
protected handleAppointmentClick(event: {
|
|
2647
|
+
appointment: AXSchedulerAppointment;
|
|
2648
|
+
nativeEvent: MouseEvent;
|
|
2649
|
+
}): void;
|
|
2650
|
+
protected handleContextMenuOpening(event: AXContextMenuOpeningEvent): Promise<void>;
|
|
2651
|
+
protected handleContextMenuItemClick(event: AXContextMenuItemsClickEvent): void;
|
|
2652
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPResourceAppointmentComponent, never>;
|
|
2653
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPResourceAppointmentComponent, "axp-resource-appointment", never, { "showResourceHeaders": { "alias": "showResourceHeaders"; "required": false; "isSignal": true; }; "showUnassignedAppointments": { "alias": "showUnassignedAppointments"; "required": false; "isSignal": true; }; "providerName": { "alias": "providerName"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2654
|
+
}
|
|
2655
|
+
|
|
2656
|
+
/**
|
|
2657
|
+
* Minimal appointment data for resource appointment board.
|
|
2658
|
+
* Providers return this; the component converts to scheduler/task shape as needed.
|
|
2659
|
+
*/
|
|
2660
|
+
interface AXPResourceAppointmentItem {
|
|
2661
|
+
readonly id: string | number;
|
|
2662
|
+
title: string;
|
|
2663
|
+
startDate: Date;
|
|
2664
|
+
endDate: Date;
|
|
2665
|
+
resourceId?: string | number;
|
|
2666
|
+
description?: string;
|
|
2667
|
+
allDay?: boolean;
|
|
2668
|
+
}
|
|
2669
|
+
/**
|
|
2670
|
+
* Represents a status option for the resource appointment board (e.g. column or filter).
|
|
2671
|
+
* Aligned with task board status shape for provider compatibility.
|
|
2672
|
+
*/
|
|
2673
|
+
interface AXPResourceAppointmentStatus {
|
|
2674
|
+
key: string;
|
|
2675
|
+
index: number;
|
|
2676
|
+
title: string;
|
|
2677
|
+
color?: string;
|
|
2678
|
+
}
|
|
2679
|
+
/**
|
|
2680
|
+
* Action menu item for resource appointment board with optional priority.
|
|
2681
|
+
* Primary actions are shown as icon-only buttons, secondary in a dropdown.
|
|
2682
|
+
*/
|
|
2683
|
+
type AXPResourceAppointmentActionMenuItem = AXPActionMenuItem & {
|
|
2684
|
+
priority?: 'primary' | 'secondary';
|
|
2685
|
+
};
|
|
2686
|
+
interface AXPResourceAppointmentResource {
|
|
2687
|
+
readonly id: string | number;
|
|
2688
|
+
title: string;
|
|
2689
|
+
description?: string;
|
|
2690
|
+
icon?: string;
|
|
2691
|
+
appointments: AXPResourceAppointmentItem[];
|
|
2692
|
+
}
|
|
2693
|
+
interface AXPResourceAppointmentBoardFilter {
|
|
2694
|
+
range?: AXRange<Date>;
|
|
2695
|
+
statuses?: (string | number)[];
|
|
2696
|
+
resourceIds?: (string | number)[];
|
|
2697
|
+
/** When set, only these providers are queried. */
|
|
2698
|
+
providerNames?: string[];
|
|
2699
|
+
}
|
|
2700
|
+
declare abstract class AXPResourceAppointmentBoardProvider<T = Record<string, unknown>> {
|
|
2701
|
+
abstract get name(): string;
|
|
2702
|
+
abstract get title(): string;
|
|
2703
|
+
abstract get icon(): string;
|
|
2704
|
+
abstract getList(filter?: AXPResourceAppointmentBoardFilter): Promise<AXPResourceAppointmentResource[]>;
|
|
2705
|
+
abstract getStatuses(): Promise<AXPResourceAppointmentStatus[]>;
|
|
2706
|
+
abstract getActions(context?: AXPResourceAppointmentItem): Promise<AXPResourceAppointmentActionMenuItem[]>;
|
|
2707
|
+
abstract executeCommand(command: AXPExecuteCommand): Promise<AXPExecuteCommandResult>;
|
|
2708
|
+
}
|
|
2709
|
+
declare const AXP_RESOURCE_APPOINTMENT_PROVIDER: InjectionToken<AXPResourceAppointmentBoardProvider<Record<string, unknown>>[] | Promise<AXPResourceAppointmentBoardProvider<Record<string, unknown>>>[]>;
|
|
2710
|
+
|
|
2711
|
+
declare class AXPResourceAppointmentService {
|
|
2712
|
+
private readonly calendarService;
|
|
2713
|
+
private readonly providers;
|
|
2714
|
+
private resolvedProviders;
|
|
2715
|
+
refresh$: Subject<void>;
|
|
2716
|
+
/**
|
|
2717
|
+
* Resolves providers from injected AXP_RESOURCE_APPOINTMENT_PROVIDER.
|
|
2718
|
+
* The service must be provided in an injector that has access to the token (e.g. component providers).
|
|
2719
|
+
*/
|
|
2720
|
+
resolveProviders(): Promise<AXPResourceAppointmentBoardProvider[]>;
|
|
2721
|
+
getProviderTypes(): Promise<AXPResourceAppointmentBoardProvider[]>;
|
|
2722
|
+
getProvider(name: string | undefined): AXPResourceAppointmentBoardProvider | null;
|
|
2723
|
+
getList(filter?: AXPResourceAppointmentBoardFilter): Promise<AXPResourceAppointmentResource[]>;
|
|
2724
|
+
getStatuses(providerName: string): Promise<AXPResourceAppointmentStatus[]>;
|
|
2725
|
+
getActions(context: AXPResourceAppointmentItem | undefined, providerName: string): Promise<AXPResourceAppointmentActionMenuItem[]>;
|
|
2726
|
+
executeCommand(command: AXPExecuteCommand, providerName: string): Promise<AXPExecuteCommandResult>;
|
|
2727
|
+
rangeCalculator(type: string): AXRange<Date> | undefined;
|
|
2728
|
+
private findProvider;
|
|
2729
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPResourceAppointmentService, never>;
|
|
2730
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPResourceAppointmentService>;
|
|
2731
|
+
}
|
|
2732
|
+
|
|
2733
|
+
/**
|
|
2734
|
+
* Host-owned item row. Required keys are stable; additional keys are persisted by the host mapper.
|
|
2735
|
+
*/
|
|
2736
|
+
interface AXPBuilderItem {
|
|
2737
|
+
id: string;
|
|
2738
|
+
order: number;
|
|
2739
|
+
[key: string]: unknown;
|
|
2740
|
+
}
|
|
2741
|
+
/**
|
|
2742
|
+
* Host-owned section. Items live under `items` (not nested host-specific names).
|
|
2743
|
+
*/
|
|
2744
|
+
interface AXPBuilderSection {
|
|
2745
|
+
id: string;
|
|
2746
|
+
order: number;
|
|
2747
|
+
items: AXPBuilderItem[];
|
|
2748
|
+
[key: string]: unknown;
|
|
2749
|
+
}
|
|
2750
|
+
interface AXPBuilderValue {
|
|
2751
|
+
sections: AXPBuilderSection[];
|
|
2752
|
+
}
|
|
2753
|
+
type AXPBuilderBadgeVariant = 'neutral' | 'accent' | 'warning' | 'danger' | 'success';
|
|
2754
|
+
interface AXPBuilderBadge {
|
|
2755
|
+
/** Translation key (e.g. `@general:...`) or plain text. */
|
|
2756
|
+
text: string;
|
|
2757
|
+
variant?: AXPBuilderBadgeVariant;
|
|
2758
|
+
}
|
|
2759
|
+
type AXPBuilderItemIconTone = 'default' | 'easy' | 'medium' | 'hard';
|
|
2760
|
+
/**
|
|
2761
|
+
* View model for one item row (icons, labels, badges). Built by {@link AXPBuilderDefinition.mapItemToView}.
|
|
2762
|
+
*/
|
|
2763
|
+
interface AXPBuilderItemViewModel {
|
|
2764
|
+
icon: string;
|
|
2765
|
+
iconTone?: AXPBuilderItemIconTone;
|
|
2766
|
+
title: string;
|
|
2767
|
+
name?: string;
|
|
2768
|
+
description?: string;
|
|
2769
|
+
badges: AXPBuilderBadge[];
|
|
2770
|
+
}
|
|
2771
|
+
interface AXPBuilderTexts {
|
|
2772
|
+
addSection: string;
|
|
2773
|
+
addItem: string;
|
|
2774
|
+
emptySectionsTitle: string;
|
|
2775
|
+
emptySectionsDescription: string;
|
|
2776
|
+
emptyItemsTitle: string;
|
|
2777
|
+
emptyItemsDescription: string;
|
|
2778
|
+
/** Shown when {@link AXPBuilderDefinition.isDefaultSection} is true */
|
|
2779
|
+
defaultSectionBadge?: string;
|
|
2780
|
+
}
|
|
2781
|
+
/**
|
|
2782
|
+
* Declarative configuration for {@link AXPSectionItemsBuilderComponent}.
|
|
2783
|
+
* Prompts return domain slices; the builder assigns `id` / `order` / `items` where needed.
|
|
2784
|
+
*/
|
|
2785
|
+
interface AXPBuilderDefinition {
|
|
2786
|
+
texts: AXPBuilderTexts;
|
|
2787
|
+
mapItemToView: (item: AXPBuilderItem, section: AXPBuilderSection) => AXPBuilderItemViewModel;
|
|
2788
|
+
/** When true, renders section technical `name` next to the title (parentheses). */
|
|
2789
|
+
showSectionTechnicalName?: boolean;
|
|
2790
|
+
isDefaultSection?(section: AXPBuilderSection): boolean;
|
|
2791
|
+
/** Minimum number of sections (default 1). */
|
|
2792
|
+
minSectionCount?: number;
|
|
2793
|
+
promptAddSection?(value: AXPBuilderValue): Promise<Record<string, unknown> | null>;
|
|
2794
|
+
promptEditSection?(section: AXPBuilderSection, value: AXPBuilderValue): Promise<Record<string, unknown> | null>;
|
|
2795
|
+
promptAddItems?(sectionId: string, value: AXPBuilderValue): Promise<AXPBuilderItem[] | null>;
|
|
2796
|
+
promptEditItem?(item: AXPBuilderItem, sectionId: string, value: AXPBuilderValue): Promise<AXPBuilderItem | null>;
|
|
2797
|
+
confirmRemoveSection?(section: AXPBuilderSection): Promise<boolean>;
|
|
2798
|
+
confirmRemoveItem?(item: AXPBuilderItem, sectionId: string): Promise<boolean>;
|
|
2799
|
+
}
|
|
2800
|
+
|
|
2801
|
+
declare class AXPSectionItemsBuilderComponent {
|
|
2802
|
+
/** Used in template to branch between escaped text and sanitized HTML. */
|
|
2803
|
+
protected readonly containsHtmlMarkup: typeof containsHtmlMarkup;
|
|
2804
|
+
readonly value: _angular_core.InputSignal<AXPBuilderValue>;
|
|
2805
|
+
readonly definition: _angular_core.InputSignal<AXPBuilderDefinition>;
|
|
2806
|
+
readonly readonlyMode: _angular_core.InputSignal<boolean>;
|
|
2807
|
+
readonly valueChange: _angular_core.OutputEmitterRef<AXPBuilderValue>;
|
|
2808
|
+
private readonly vm;
|
|
2809
|
+
protected readonly sectionsModel: _angular_core.Signal<AXPBuilderValue>;
|
|
2810
|
+
protected readonly sectionRows: _angular_core.Signal<{
|
|
2811
|
+
section: AXPBuilderSection;
|
|
2812
|
+
itemRows: {
|
|
2813
|
+
item: AXPBuilderItem;
|
|
2814
|
+
view: _acorex_platform_layout_components.AXPBuilderItemViewModel;
|
|
2815
|
+
}[];
|
|
2816
|
+
}[]>;
|
|
2817
|
+
protected readonly itemDropListIds: _angular_core.Signal<string[]>;
|
|
2818
|
+
protected readonly canRemoveSection: _angular_core.Signal<boolean>;
|
|
2819
|
+
constructor();
|
|
2820
|
+
/**
|
|
2821
|
+
* Opens add-section flow (same as primary "Add section" control). For page commands / ViewChild.
|
|
2822
|
+
*/
|
|
2823
|
+
addSection(): Promise<void>;
|
|
2824
|
+
protected onAddSectionClick(): Promise<void>;
|
|
2825
|
+
protected onEditSection(section: AXPBuilderSection): Promise<void>;
|
|
2826
|
+
protected onRemoveSection(section: AXPBuilderSection): Promise<void>;
|
|
2827
|
+
protected onAddItems(section: AXPBuilderSection): Promise<void>;
|
|
2828
|
+
protected onEditItem(item: AXPBuilderItem, sectionId: string): Promise<void>;
|
|
2829
|
+
protected onRemoveItem(item: AXPBuilderItem, sectionId: string): Promise<void>;
|
|
2830
|
+
protected onSectionDrop(event: CdkDragDrop<AXPBuilderSection[]>): void;
|
|
2831
|
+
protected onItemDrop(event: CdkDragDrop<AXPBuilderItem[]>, targetSectionId: string): void;
|
|
2832
|
+
protected sectionItemsListId(sectionId: string): string;
|
|
2833
|
+
protected parseSectionIdFromDropListId(listId: string): string | null;
|
|
2834
|
+
protected isDefaultSection(section: AXPBuilderSection): boolean;
|
|
2835
|
+
protected isTranslationKey(text: string): boolean;
|
|
2836
|
+
/** Tooltip for rich HTML rows: plain text, no tags. */
|
|
2837
|
+
protected tooltipPlainTextForHtml(html: string): string;
|
|
2838
|
+
/**
|
|
2839
|
+
* Prefer raw section fields for display so {@link AXPMultiLanguageString} maps are not
|
|
2840
|
+
* lost when {@link AXPBuilderDefinition#mapItemToView} stringifies them on items.
|
|
2841
|
+
*/
|
|
2842
|
+
protected sectionTitleValue(section: AXPBuilderSection): AXPMultiLanguageString | string;
|
|
2843
|
+
protected sectionNameValue(section: AXPBuilderSection): AXPMultiLanguageString | string | undefined;
|
|
2844
|
+
protected sectionDescriptionValue(section: AXPBuilderSection): AXPMultiLanguageString | string | undefined;
|
|
2845
|
+
/**
|
|
2846
|
+
* Resolves item title/name/description for display: use raw item values when present
|
|
2847
|
+
* (including ML maps); fall back to {@link AXPBuilderItemViewModel} only when needed.
|
|
2848
|
+
*/
|
|
2849
|
+
protected itemMultilingualField(item: AXPBuilderItem, field: 'title' | 'name' | 'description', viewFallback?: string | null): AXPMultiLanguageString | string;
|
|
2850
|
+
private commit;
|
|
2851
|
+
private normalizeValue;
|
|
2852
|
+
private reindexSections;
|
|
2853
|
+
private reindexItems;
|
|
2854
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPSectionItemsBuilderComponent, never>;
|
|
2855
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPSectionItemsBuilderComponent, "axp-section-items-builder", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "definition": { "alias": "definition"; "required": true; "isSignal": true; }; "readonlyMode": { "alias": "readonly"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
|
|
2856
|
+
}
|
|
2857
|
+
|
|
2858
|
+
/**
|
|
2859
|
+
* Host configuration for {@link AXPStandardSectionItemsBuilderComponent}.
|
|
2860
|
+
* Section add/edit UI (identity, content, visibility) and delete prompts are standardized;
|
|
2861
|
+
* item flows stay host-specific.
|
|
2862
|
+
*/
|
|
2863
|
+
interface AXPStandardSectionItemsBuilderConfig {
|
|
2864
|
+
mapItemToView: AXPBuilderDefinition['mapItemToView'];
|
|
2865
|
+
/** When set, used instead of the built-in section add dialog. */
|
|
2866
|
+
promptAddSection?: AXPBuilderDefinition['promptAddSection'];
|
|
2867
|
+
/** When set, used instead of the built-in section edit dialog. */
|
|
2868
|
+
promptEditSection?: AXPBuilderDefinition['promptEditSection'];
|
|
2869
|
+
promptAddItems?: AXPBuilderDefinition['promptAddItems'];
|
|
2870
|
+
promptEditItem?: AXPBuilderDefinition['promptEditItem'];
|
|
2871
|
+
/** Merged over built-in empty-state / action labels */
|
|
2872
|
+
texts?: Partial<AXPBuilderTexts>;
|
|
2873
|
+
showSectionTechnicalName?: boolean;
|
|
2874
|
+
isDefaultSection?: AXPBuilderDefinition['isDefaultSection'];
|
|
2875
|
+
minSectionCount?: number;
|
|
2876
|
+
/**
|
|
2877
|
+
* Property viewer tabs for section add/edit.
|
|
2878
|
+
* Default: {@link STANDARD_SECTION_ITEMS_SECTION_TABS}.
|
|
2879
|
+
*/
|
|
2880
|
+
sectionEditTabs?: AXPPropertyViewerTab[];
|
|
2881
|
+
/** Override default delete-section confirmation. */
|
|
2882
|
+
confirmRemoveSection?: AXPBuilderDefinition['confirmRemoveSection'];
|
|
2883
|
+
/** Override default delete-item confirmation. */
|
|
2884
|
+
confirmRemoveItem?: AXPBuilderDefinition['confirmRemoveItem'];
|
|
2885
|
+
}
|
|
2886
|
+
/** Context shape bound to the default section property viewer (paths match keys). */
|
|
2887
|
+
interface AXPStandardSectionFormContext {
|
|
2888
|
+
/** Unique technical name (section `name` in the builder model). */
|
|
2889
|
+
name?: string;
|
|
2890
|
+
tags?: unknown;
|
|
2891
|
+
title?: string | AXPMultiLanguageString;
|
|
2892
|
+
description?: string | AXPMultiLanguageString;
|
|
2893
|
+
isVisible?: boolean;
|
|
2894
|
+
}
|
|
2895
|
+
|
|
2896
|
+
/**
|
|
2897
|
+
* Default section editor: Identity (name, tags), Content (title, description), Visibility.
|
|
2898
|
+
*/
|
|
2899
|
+
declare const STANDARD_SECTION_ITEMS_SECTION_TABS: AXPPropertyViewerTab[];
|
|
2900
|
+
|
|
2901
|
+
declare class AXPStandardSectionItemsBuilderComponent {
|
|
2902
|
+
readonly value: _angular_core.InputSignal<AXPBuilderValue>;
|
|
2903
|
+
readonly config: _angular_core.InputSignal<AXPStandardSectionItemsBuilderConfig>;
|
|
2904
|
+
readonly readonlyMode: _angular_core.InputSignal<boolean>;
|
|
2905
|
+
readonly valueChange: _angular_core.OutputEmitterRef<AXPBuilderValue>;
|
|
2906
|
+
private readonly inner;
|
|
2907
|
+
private readonly dialogService;
|
|
2908
|
+
private readonly translationService;
|
|
2909
|
+
private readonly propertyViewerService;
|
|
2910
|
+
protected readonly mergedDefinition: _angular_core.Signal<AXPBuilderDefinition>;
|
|
2911
|
+
/** Same entry as page commands / toolbar: open standardized add-section dialog. */
|
|
2912
|
+
addSection(): Promise<void>;
|
|
2913
|
+
private isDuplicateSectionName;
|
|
2914
|
+
/**
|
|
2915
|
+
* `AXPBuilderSection` uses `[key: string]: unknown`; cast to form-bound type without resolving ML.
|
|
2916
|
+
*/
|
|
2917
|
+
private sectionFieldForForm;
|
|
2918
|
+
private buildSectionContext;
|
|
2919
|
+
private openSectionDialog;
|
|
2920
|
+
private defaultConfirmRemoveSection;
|
|
2921
|
+
private defaultConfirmRemoveItem;
|
|
2922
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPStandardSectionItemsBuilderComponent, never>;
|
|
2923
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPStandardSectionItemsBuilderComponent, "axp-standard-section-items-builder", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "config": { "alias": "config"; "required": true; "isSignal": true; }; "readonlyMode": { "alias": "readonly"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
|
|
2924
|
+
}
|
|
2925
|
+
|
|
2926
|
+
export { AXPActivityLogComponent, AXPAvatarComponent, AXPCategoryTreeComponent, AXPColorPalettePickerComponent, AXPColumnItemListComponent, AXPCompareViewComponent, AXPConditionBuilderComponent, AXPConditionBuilderConditionComponent, AXPDataSelectorComponent, AXPDataSelectorService, AXPDragDropListComponent, AXPExpressionFieldDefinitions, AXPImageEditorPopupComponent, AXPImageEditorService, AXPItemConfiguratorComponent, AXPLogoComponent, AXPMenuBadgeHelper, AXPMenuCustomizerComponent, AXPMenuCustomizerService, AXPPageComponentRegistryService, AXPPreloadFiltersComponent, AXPPropertyViewerComponent, AXPPropertyViewerPopupComponent, AXPPropertyViewerService, AXPQueryColumnsComponent, AXPQueryFiltersComponent, AXPQuerySortsComponent, AXPQueryViewsComponent, AXPRepeaterRowsLayoutComponent, AXPResourceAppointmentBoardProvider, AXPResourceAppointmentComponent, AXPResourceAppointmentService, AXPSectionItemsBuilderComponent, AXPSpreadsheetComponent, AXPStandardSectionItemsBuilderComponent, AXPStateMessageComponent, AXPStopwatchComponent, AXPTableColumnsEditorComponent, AXPTableColumnsEditorPopupComponent, AXPTableColumnsEditorService, AXPTableDataEditorComponent, AXPTableDataEditorPopupComponent, AXPTableDataEditorService, AXPTaskBadgeDirective, AXPTaskBadgeProvider, AXPTaskBadgeService, AXPTemplateViewerComponent, AXPTemplateViewerService, AXPThemeLayoutActionsComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutContainerComponent, AXPThemeLayoutEndSideComponent, AXPThemeLayoutFooterComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutListComponent, AXPThemeLayoutListItemComponent, AXPThemeLayoutListItemsGroupComponent, AXPThemeLayoutPageHeaderComponent, AXPThemeLayoutPagePrimaryActionsComponent, AXPThemeLayoutPageSecondaryActionsComponent, AXPThemeLayoutSectionComponent, AXPThemeLayoutStartSideComponent, AXPThemeLayoutToolbarComponent, AXPUserAvatarComponent, AXPUserAvatarService, AXPWidgetFieldConfiguratorComponent, AXPWidgetItemComponent, AXPWidgetPropertyViewerComponent, AXPWidgetPropertyViewerPopupComponent, AXPWidgetPropertyViewerService, AXP_EXPRESSION_LOGIC_DEFINITIONS, AXP_EXPRESSION_OPERATION_DEFINITIONS, AXP_MENU_CUSTOMIZER_SERVICE, AXP_PAGE_COMPONENT_PROVIDER, AXP_RESOURCE_APPOINTMENT_PROVIDER, AXP_TASK_BADGE_PROVIDERS, AXP_USER_AVATAR_PROVIDER, STANDARD_SECTION_ITEMS_SECTION_TABS, buildPropertyViewerInitialContextFromProperties, buildPropertyViewerTabsFromProperties, buildTableColumnsEditorLayout, getFieldDefinitions, getLogicDefinition, getOperationDefinition, isPropertyBindingExpressionFormValue, preparePropertyForViewer, preparePropertyViewerTabs, registerFieldDefinitions, withValidationsOnEditorNode };
|
|
2927
|
+
export type { AXPBuilderBadge, AXPBuilderBadgeVariant, AXPBuilderDefinition, AXPBuilderItem, AXPBuilderItemIconTone, AXPBuilderItemViewModel, AXPBuilderSection, AXPBuilderTexts, AXPBuilderValue, AXPCategoryTreeActions, AXPCategoryTreeConfig, AXPCategoryTreeDataSource, AXPCategoryTreeEvents, AXPCategoryTreeNode, AXPColumnItemListItem, AXPCompareViewField, AXPCompareViewInputs, AXPCompareViewMode, AXPCompareViewObject, AXPDataSelectorAllowCreate, AXPDataSelectorColumn, AXPDataSelectorConfig, AXPDragDropListConfig, AXPDragDropListDropEvent, AXPDragDropListItem, AXPExpressionFieldDefinition, AXPExpressionGroupNode, AXPExpressionLogicDefinition, AXPExpressionLogicType, AXPExpressionNode, AXPExpressionNodeId, AXPExpressionOperationDefinition, AXPExpressionOperationNode, AXPExpressionOperationType, AXPExpressionTree, AXPExpressionValueOperand, AXPExpressionValueSourceType, AXPImageEditorOpenOptions, AXPMenuCustomizerAction, AXPMenuCustomizerItem, AXPMenuCustomizerItemType, AXPMenuCustomizerNodeData, AXPMenuCustomizerNodeMetadata, AXPMenuCustomizerState, AXPPageComponentDefinition, AXPPageComponentProvider, AXPPreloadFiltersApplyEvent, AXPPropertyViewerActionRef, AXPPropertyViewerChangedEvent, AXPPropertyViewerConfig, AXPPropertyViewerGroup, AXPPropertyViewerResult, AXPPropertyViewerTab, AXPResourceAppointmentActionMenuItem, AXPResourceAppointmentBoardFilter, AXPResourceAppointmentItem, AXPResourceAppointmentResource, AXPResourceAppointmentStatus, AXPSpreadsheetCellChangeEvent, AXPSpreadsheetCellValue, AXPSpreadsheetColumn, AXPSpreadsheetConfig, AXPSpreadsheetData, AXPSpreadsheetItem, AXPSpreadsheetRowChangeEvent, AXPSpreadsheetRowMode, AXPStandardSectionFormContext, AXPStandardSectionItemsBuilderConfig, AXPTableColumnDefinition, AXPTableColumnsEditorOpenOptions, AXPTableDataEditorOpenOptions, AXPTemplateViewerConfig, AXPTemplateViewerResult, AXPUserAvatarData, AXPUserAvatarProvider, AXPUserAvatarSize, AXPUserAvatarStatus, AXPWidgetItemClickEvent, AXPWidgetItemData, AXPWidgetPropertiesChangedEvent, AXPWidgetPropertyInjection, AXPWidgetPropertyViewerConfig, AXPWidgetPropertyViewerResult, ConditionBuilderSelectedField, IAXPPropertyViewerDialogBuilder, IAXPPropertyViewerRoot, IAXPWidgetPropertyViewerDialogBuilder, IAXPWidgetPropertyViewerRoot, ItemConfiguratorListItem, StateMode };
|