@acorex-platform/framework-client 0.0.10

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