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

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