@acorex/platform 21.0.0-next.3 → 21.0.0-next.34

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