@acorex/platform 21.0.0-next.5 → 21.0.0-next.51

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