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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/fesm2022/acorex-platform-auth.mjs +281 -23
  2. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  3. package/fesm2022/acorex-platform-common-common-settings.provider-Bi1RYif5.mjs +163 -0
  4. package/fesm2022/acorex-platform-common-common-settings.provider-Bi1RYif5.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-common.mjs +1370 -276
  6. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-core.mjs +1185 -514
  8. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-domain.mjs +557 -826
  10. package/fesm2022/acorex-platform-domain.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-layout-builder.mjs +832 -189
  12. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  13. package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs +121 -0
  14. package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-layout-components.mjs +6309 -1956
  16. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  17. package/fesm2022/acorex-platform-layout-designer.mjs +456 -204
  18. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-layout-entity-attachments-page.component-D8iQnT-R.mjs +371 -0
  20. package/fesm2022/acorex-platform-layout-entity-attachments-page.component-D8iQnT-R.mjs.map +1 -0
  21. package/fesm2022/acorex-platform-layout-entity-file-list-popup.component-_yrP5SQe.mjs +100 -0
  22. package/fesm2022/acorex-platform-layout-entity-file-list-popup.component-_yrP5SQe.mjs.map +1 -0
  23. package/fesm2022/acorex-platform-layout-entity.mjs +22488 -10232
  24. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  25. package/fesm2022/acorex-platform-layout-views.mjs +564 -170
  26. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  27. package/fesm2022/acorex-platform-layout-widget-core.mjs +2084 -481
  28. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  29. package/fesm2022/{acorex-platform-layout-widgets-button-widget-designer.component-C3VoBb_b.mjs → acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs} +10 -10
  30. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs.map +1 -0
  31. package/fesm2022/{acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs → acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs} +6 -7
  32. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs.map +1 -0
  33. package/fesm2022/{acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs → acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs} +12 -12
  34. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs.map +1 -0
  35. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-J0zcGKBX.mjs +116 -0
  36. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-J0zcGKBX.mjs.map +1 -0
  37. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-BcpRkpJp.mjs} +6 -6
  38. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-BcpRkpJp.mjs.map +1 -0
  39. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-DQtK4lxl.mjs} +5 -5
  40. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-DQtK4lxl.mjs.map +1 -0
  41. package/fesm2022/{acorex-platform-layout-widgets-text-block-widget-designer.component-Df1BFkSa.mjs → acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs} +6 -6
  42. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs.map +1 -0
  43. package/fesm2022/acorex-platform-layout-widgets.mjs +10326 -7981
  44. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  45. package/fesm2022/acorex-platform-native.mjs +8 -7
  46. package/fesm2022/acorex-platform-native.mjs.map +1 -1
  47. package/fesm2022/acorex-platform-runtime.mjs +391 -166
  48. package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
  49. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-CWLfNqV0.mjs +160 -0
  50. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-CWLfNqV0.mjs.map +1 -0
  51. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-C7cT82K2.mjs +120 -0
  52. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-C7cT82K2.mjs.map +1 -0
  53. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs → acorex-platform-themes-default-entity-master-single-view.component-Br9p5aXT.mjs} +21 -28
  54. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-Br9p5aXT.mjs.map +1 -0
  55. package/fesm2022/{acorex-platform-themes-default-error-401.component-cfREo88K.mjs → acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs} +4 -4
  56. package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs.map +1 -0
  57. package/fesm2022/{acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs → acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs} +4 -4
  58. package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs.map +1 -0
  59. package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs +19 -0
  60. package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs.map +1 -0
  61. package/fesm2022/acorex-platform-themes-default.mjs +2283 -83
  62. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  63. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs → acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs} +6 -6
  64. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs.map +1 -0
  65. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs → acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs} +6 -6
  66. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs.map +1 -0
  67. package/fesm2022/{acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs → acorex-platform-themes-shared-settings.provider-BjuzSe0T.mjs} +52 -33
  68. package/fesm2022/acorex-platform-themes-shared-settings.provider-BjuzSe0T.mjs.map +1 -0
  69. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs +94 -0
  70. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs.map +1 -0
  71. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs +86 -0
  72. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs.map +1 -0
  73. package/fesm2022/acorex-platform-themes-shared.mjs +767 -609
  74. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  75. package/fesm2022/acorex-platform-workflow.mjs +978 -238
  76. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  77. package/fesm2022/acorex-platform.mjs.map +1 -1
  78. package/package.json +40 -38
  79. package/{auth/index.d.ts → types/acorex-platform-auth.d.ts} +241 -4
  80. package/{common/index.d.ts → types/acorex-platform-common.d.ts} +822 -89
  81. package/{core/index.d.ts → types/acorex-platform-core.d.ts} +658 -133
  82. package/{domain/index.d.ts → types/acorex-platform-domain.d.ts} +744 -412
  83. package/{layout/builder/index.d.ts → types/acorex-platform-layout-builder.d.ts} +194 -49
  84. package/types/acorex-platform-layout-components.d.ts +3253 -0
  85. package/{layout/designer/index.d.ts → types/acorex-platform-layout-designer.d.ts} +96 -18
  86. package/types/acorex-platform-layout-entity.d.ts +4439 -0
  87. package/{layout/views/index.d.ts → types/acorex-platform-layout-views.d.ts} +179 -56
  88. package/{layout/widget-core/index.d.ts → types/acorex-platform-layout-widget-core.d.ts} +398 -127
  89. package/{layout/widgets/index.d.ts → types/acorex-platform-layout-widgets.d.ts} +1120 -501
  90. package/{native/index.d.ts → types/acorex-platform-native.d.ts} +0 -7
  91. package/types/acorex-platform-runtime.d.ts +571 -0
  92. package/{themes/default/index.d.ts → types/acorex-platform-themes-default.d.ts} +233 -6
  93. package/{themes/shared/index.d.ts → types/acorex-platform-themes-shared.d.ts} +24 -2
  94. package/{workflow/index.d.ts → types/acorex-platform-workflow.d.ts} +620 -617
  95. package/fesm2022/acorex-platform-common-common-settings.provider-zhqNP3xb.mjs +0 -71
  96. package/fesm2022/acorex-platform-common-common-settings.provider-zhqNP3xb.mjs.map +0 -1
  97. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-C3VoBb_b.mjs.map +0 -1
  98. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs +0 -135
  99. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs.map +0 -1
  100. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs.map +0 -1
  101. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs.map +0 -1
  102. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs.map +0 -1
  103. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs.map +0 -1
  104. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Df1BFkSa.mjs.map +0 -1
  105. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs +0 -157
  106. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs.map +0 -1
  107. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DfJEx_bs.mjs +0 -1542
  108. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DfJEx_bs.mjs.map +0 -1
  109. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs +0 -101
  110. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs.map +0 -1
  111. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs.map +0 -1
  112. package/fesm2022/acorex-platform-themes-default-error-401.component-cfREo88K.mjs.map +0 -1
  113. package/fesm2022/acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs.map +0 -1
  114. package/fesm2022/acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs +0 -19
  115. package/fesm2022/acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs.map +0 -1
  116. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs.map +0 -1
  117. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs.map +0 -1
  118. package/fesm2022/acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs.map +0 -1
  119. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs +0 -65
  120. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs.map +0 -1
  121. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs +0 -64
  122. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs.map +0 -1
  123. package/layout/components/index.d.ts +0 -1669
  124. package/layout/entity/index.d.ts +0 -2287
  125. package/runtime/index.d.ts +0 -307
  126. /package/{index.d.ts → types/acorex-platform.d.ts} +0 -0
@@ -0,0 +1,4439 @@
1
+ import * as _acorex_platform_core from '@acorex/platform/core';
2
+ import { AXPExecuteCommandResult, AXPMetaData, AXPDataSourceDefinitionProvider, AXPDataSourceDefinition, AXPGridLayoutOptions, AXPMultiLanguageString, AXPBreadcrumbItem, AXPFilterQuery, AXPFilterDefinition, AXPExecuteCommand, AXPQueryRequest, AXPPagedListResult, AXPUserReference, AXPCategoryEntity as AXPCategoryEntity$1, AXPEntityOp, AXPMiddlewareErrorResponse, AXHighlightService, AXPExpression, AXPColumnQuery, AXPSortDefinition, AXPDeviceService, AXPBroadcastEventService, AXPActionMenuItem, AXPFileListItem, AXPContextChangeEvent } from '@acorex/platform/core';
3
+ import { AXPCommand, AXPQueryExecutor, AXPCommandService, AXPQuery } from '@acorex/platform/runtime';
4
+ import * as _angular_core from '@angular/core';
5
+ import { ElementRef, InjectionToken, Injector, Type, EnvironmentProviders, OnInit, ChangeDetectorRef, OnDestroy } from '@angular/core';
6
+ import { AXPopoverComponent } from '@acorex/components/popover';
7
+ import * as i4 from '@acorex/platform/layout/widget-core';
8
+ import { AXPWidgetNode, AXPWidgetColumnNode, AXPWidgetCoreService, AXPColumnWidgetComponent, AXPValueWidgetComponent, AXPWidgetConfig, AXPWidgetRendererDirective, AXPWidgetCoreElementAPI } from '@acorex/platform/layout/widget-core';
9
+ import { AXPPreloadFiltersApplyEvent, AXPColumnItemListItem, AXPDataSelectorRowActionsHandler, AXPCategoryTreeDataSource, AXPDataSelectorAllowCreate } from '@acorex/platform/layout/components';
10
+ import { AXPPageLayoutBaseComponent } from '@acorex/platform/layout/views';
11
+ import * as _acorex_platform_common from '@acorex/platform/common';
12
+ import { AXPRelatedEntity, AXPEntityPage, AXPEntityCommandScope, AXPEntity, AXPEntityAction, AXPEntityProperty, AXPEntityTableColumn, AXPCardField, AXPEntityPropertyLayoutConfig, AXPEntitySectionView, AXPEntityPropertyCreateView, AXPQueryView, AXPEntityMasterListLayoutType, AXPEntityMasterListDisplayMode, AXPEntityMasterListLayoutOption, AXPEntityPropertyView, AXPCategoryEntity, AXPEntityPropertyGroup, AXPEntityMasterCreateLayoutView, AXPEntityMasterUpdateLayoutView, AXPEntityMasterSingleLayoutView, AXPEntityMasterListView, AXPEntityDetailListView, AXPQueryFilter, AXCFileUploaderCapabilities, AXCFileUploaderAction } from '@acorex/platform/common';
13
+ export { AXPEntityDefinitionCrudService, AXP_ENTITY_DEFINITION_CRUD_SERVICE } from '@acorex/platform/domain';
14
+ import { AXStyleColorType, AXDataSource, AXDataSourceFilterOption, AXDataSourceSortOption, AXValueChangedEvent, AXClickEvent, AXFocusEvent, AXHtmlEvent } from '@acorex/cdk/common';
15
+ import * as i1 from '@angular/router';
16
+ import { ResolveFn } from '@angular/router';
17
+ import * as rxjs from 'rxjs';
18
+ import { Subject } from 'rxjs';
19
+ import * as i3 from '@acorex/platform/workflow';
20
+ import { AXPWorkflowService, AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext } from '@acorex/platform/workflow';
21
+ import * as i5 from '@acorex/platform/layout/builder';
22
+ import { IActionBuilder, AXPDialogRef, IFormFieldBuilder } from '@acorex/platform/layout/builder';
23
+ import { AXPSessionService } from '@acorex/platform/auth';
24
+ import { AXTreeViewNode, AXTreeViewComponent, AXTreeViewNodeSelectEvent } from '@acorex/components/tree-view';
25
+ import { AXPopupSizeType, AXPopupService } from '@acorex/components/popup';
26
+ import { AXBasePageComponent } from '@acorex/components/page';
27
+ import { AXFormatService } from '@acorex/core/format';
28
+ import { AXTagBoxComponent } from '@acorex/components/tag-box';
29
+ import * as _acorex_core_translation from '@acorex/core/translation';
30
+ import { AXTranslationService } from '@acorex/core/translation';
31
+ import { AXPProviderSelectWidgetEditBase, AXPDataListWidgetComponentOptions } from '@acorex/platform/layout/widgets';
32
+ import * as _acorex_platform_layout_entity from '@acorex/platform/layout/entity';
33
+ import { AXFileService } from '@acorex/core/file';
34
+
35
+ declare class AXPCreateEntityCommand implements AXPCommand<any, any> {
36
+ private entityForm;
37
+ private entityService;
38
+ private toastService;
39
+ private translationService;
40
+ private settingsService;
41
+ private openEntityDetailsCommand;
42
+ protected context: {};
43
+ execute(input: any): Promise<AXPExecuteCommandResult<any>>;
44
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPCreateEntityCommand, never>;
45
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPCreateEntityCommand>;
46
+ }
47
+
48
+ /**
49
+ * Merged into AI/tool payloads for `Entity:Create` so post-create navigation does not run from agent flows.
50
+ * Applied in the AI module when normalizing tool arguments (not in the generic command executor).
51
+ */
52
+ declare const axpCreateEntityAiToolInputDefaults: {
53
+ readonly __context__: {
54
+ readonly options: {
55
+ readonly process: {
56
+ readonly redirect: false;
57
+ };
58
+ };
59
+ };
60
+ };
61
+ declare const axpCreateEntityCommandDefinition: {
62
+ key: string;
63
+ title: string;
64
+ description: string;
65
+ executionMode: "frontend";
66
+ inputs: ({
67
+ name: string;
68
+ title: string;
69
+ description: string;
70
+ interface: {
71
+ name: string;
72
+ };
73
+ validations?: undefined;
74
+ } | {
75
+ name: string;
76
+ title: string;
77
+ description: string;
78
+ interface: {
79
+ name: string;
80
+ };
81
+ validations: {
82
+ rule: string;
83
+ }[];
84
+ })[];
85
+ outcomes: {
86
+ mode: "dynamic";
87
+ summary: string;
88
+ derivesFrom: string;
89
+ };
90
+ capabilities: "ai"[];
91
+ ai: {
92
+ shortDescription: string;
93
+ usage: {
94
+ whenToUse: string[];
95
+ avoidWhen: string[];
96
+ followUpTools: string[];
97
+ };
98
+ tags: string[];
99
+ toolInputDefaults: {
100
+ __context__: {
101
+ readonly options: {
102
+ readonly process: {
103
+ readonly redirect: false;
104
+ };
105
+ };
106
+ };
107
+ };
108
+ };
109
+ categories: _acorex_platform_core.AXPDefinitionCategory[];
110
+ };
111
+
112
+ declare class AXPUpdateEntityCommand implements AXPCommand<any, any> {
113
+ private readonly entityForm;
114
+ private readonly settingsService;
115
+ private readonly entityService;
116
+ private readonly toastService;
117
+ private readonly translationService;
118
+ private readonly eventService;
119
+ execute(input: any): Promise<AXPExecuteCommandResult<any>>;
120
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPUpdateEntityCommand, never>;
121
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPUpdateEntityCommand>;
122
+ }
123
+
124
+ declare class AXPViewEntityDetailsCommand implements AXPCommand<any, any> {
125
+ private readonly entityForm;
126
+ private readonly entityService;
127
+ private readonly translationService;
128
+ execute(input: any): Promise<AXPExecuteCommandResult<any>>;
129
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPViewEntityDetailsCommand, never>;
130
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPViewEntityDetailsCommand>;
131
+ }
132
+
133
+ interface AXPOpenEntityDetailsCommandInput {
134
+ entity: string;
135
+ data: {
136
+ id: string;
137
+ };
138
+ }
139
+ /**
140
+ * Generic command to open entity details view
141
+ * Can be used by any entity to navigate to its detail page
142
+ */
143
+ declare class AXPOpenEntityDetailsCommand implements AXPCommand<AXPOpenEntityDetailsCommandInput, AXPExecuteCommandResult> {
144
+ private readonly router;
145
+ private readonly sessionService;
146
+ /**
147
+ * Execute the command to navigate to entity details
148
+ * @param input - Command input containing entity and data information
149
+ */
150
+ execute(input: AXPOpenEntityDetailsCommandInput): Promise<AXPExecuteCommandResult>;
151
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPOpenEntityDetailsCommand, never>;
152
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPOpenEntityDetailsCommand>;
153
+ }
154
+
155
+ declare class AXPEntityDetailPopoverComponent {
156
+ private readonly commandService;
157
+ private readonly queryService;
158
+ private readonly formatService;
159
+ private readonly translation;
160
+ entity: _angular_core.InputSignal<string>;
161
+ entityId: _angular_core.InputSignal<string | number>;
162
+ textField: _angular_core.InputSignal<string>;
163
+ valueField: _angular_core.InputSignal<string>;
164
+ displayTitle: _angular_core.InputSignal<string>;
165
+ item: _angular_core.InputSignal<AXPMetaData | undefined>;
166
+ breadcrumb: _angular_core.InputSignal<string | null>;
167
+ protected detailPopover: _angular_core.Signal<AXPopoverComponent | undefined>;
168
+ protected entityDetails: _angular_core.WritableSignal<any>;
169
+ protected isLoadingDetails: _angular_core.WritableSignal<boolean>;
170
+ protected isDetailPopoverOpen: _angular_core.WritableSignal<boolean>;
171
+ /** Placeholder rows for the loading skeleton (matches typical property count). */
172
+ protected readonly loadingSkeletonRows: readonly [1, 2, 3, 4, 5];
173
+ protected readonly headerTitle: _angular_core.Signal<string>;
174
+ /**
175
+ * Stable list of property widgets for the template. Must be a signal (computed), not a method:
176
+ * calling a method from the template rebuilds nodes every CD cycle and can make the widget renderer loop.
177
+ */
178
+ protected readonly entityPropertiesWithWidgets: _angular_core.Signal<{
179
+ name: string;
180
+ title: string;
181
+ node: AXPWidgetNode;
182
+ }[]>;
183
+ /**
184
+ * Show the entity detail popover
185
+ */
186
+ show(target: ElementRef | HTMLElement): Promise<void>;
187
+ /**
188
+ * Hide the entity detail popover
189
+ */
190
+ hide(): void;
191
+ protected onDetailPopoverOpenChange(event: any): void;
192
+ protected navigateToDetails(): Promise<void>;
193
+ private resolveLookupDisplayLabel;
194
+ /**
195
+ * Returns true if a value is meaningful for display (non-empty/non-null).
196
+ */
197
+ private hasMeaningfulValue;
198
+ /**
199
+ * Calculates an importance score for a property based on its widget type,
200
+ * whether it currently has a meaningful value, and metadata like title.
201
+ */
202
+ private getPropertyImportanceScore;
203
+ /**
204
+ * Calculates a name-based importance score to prioritize common key fields
205
+ * like title, description, status, and important dates.
206
+ * Name priority MUST come before widget-type priority.
207
+ */
208
+ private getNameImportanceScore;
209
+ private buildEntityPropertiesWithWidgets;
210
+ /**
211
+ * Resolves the data path for a property. For lookups with expose, returns the expanded path
212
+ * when data has it (e.g. personTitle). Otherwise returns property name (e.g. personTitleId).
213
+ */
214
+ private resolveDataPath;
215
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityDetailPopoverComponent, never>;
216
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityDetailPopoverComponent, "axp-entity-detail-popover", never, { "entity": { "alias": "entity"; "required": true; "isSignal": true; }; "entityId": { "alias": "entityId"; "required": true; "isSignal": true; }; "textField": { "alias": "textField"; "required": false; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "displayTitle": { "alias": "displayTitle"; "required": false; "isSignal": true; }; "item": { "alias": "item"; "required": false; "isSignal": true; }; "breadcrumb": { "alias": "breadcrumb"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
217
+ }
218
+
219
+ interface AXPEntityDetailPopoverOptions {
220
+ entity: string;
221
+ id: string | number;
222
+ item: AXPMetaData;
223
+ textField?: string;
224
+ valueField?: string;
225
+ displayTitle?: string;
226
+ breadcrumb?: string;
227
+ }
228
+ declare class AXPEntityDetailPopoverService {
229
+ private readonly applicationRef;
230
+ private readonly environmentInjector;
231
+ private activePopoverRef;
232
+ /**
233
+ * Show entity detail popover
234
+ * @param target - The target element to position the popover
235
+ * @param options - Configuration options for the popover
236
+ */
237
+ show(target: ElementRef | HTMLElement, options: AXPEntityDetailPopoverOptions): Promise<void>;
238
+ /**
239
+ * Hide the active popover
240
+ */
241
+ hide(): void;
242
+ /**
243
+ * Check if a popover is currently active
244
+ */
245
+ get isActive(): boolean;
246
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityDetailPopoverService, never>;
247
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityDetailPopoverService>;
248
+ }
249
+
250
+ declare class AXPEntityPreloadFiltersContainerComponent extends AXPPageLayoutBaseComponent {
251
+ private readonly route;
252
+ private readonly router;
253
+ private readonly entityService;
254
+ private readonly filterOperatorMiddleware;
255
+ protected readonly noMatchText: _angular_core.WritableSignal<string | null>;
256
+ private vm;
257
+ preloadFiltersDef: _angular_core.Signal<_acorex_platform_core.AXPFilterDefinition[]>;
258
+ hasNoRequiredFilters: _angular_core.Signal<boolean>;
259
+ protected getPageTitle(): string;
260
+ protected getPageDescription(): string | null;
261
+ onApply(event: AXPPreloadFiltersApplyEvent): Promise<void>;
262
+ onShowAll(): Promise<void>;
263
+ private buildPreloadFilterQueries;
264
+ private buildListQueryFilter;
265
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityPreloadFiltersContainerComponent, never>;
266
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityPreloadFiltersContainerComponent, "axp-entity-preload-filters-container", never, {}, {}, never, never, true, never>;
267
+ }
268
+
269
+ /**
270
+ * Data source definition provider that returns all entity names
271
+ * from entity loaders' list() (const.ts in each module).
272
+ */
273
+ declare class AXPEntitiesListDataSourceDefinition implements AXPDataSourceDefinitionProvider {
274
+ private readonly entityResolver;
275
+ items(): Promise<AXPDataSourceDefinition[]>;
276
+ }
277
+
278
+ /**
279
+ * Built-in entity detail tabs from plugins. Sidebar order (after related page-list / page-detail
280
+ * tabs): meta-data-builder → attachments → documents → comments → history.
281
+ */
282
+ type EntityDetailPluginPageSlot = 'meta-data-builder' | 'attachments' | 'documents' | 'comments' | 'history';
283
+ /** Identifies an `entity.pages` entry when skipping its order during recomputation. */
284
+ interface SkipEntityComponentPageRef {
285
+ componentKey: string;
286
+ /** When set, only the page with this `field` is skipped (e.g. attachments / meta-data per field). */
287
+ field?: string;
288
+ }
289
+ interface ResolveEntityPluginDetailPageOrderOptions {
290
+ /** Component key of the page being added or updated (used to count sibling tabs in the same slot). */
291
+ componentKey: string;
292
+ /**
293
+ * Ignore this page when counting siblings / recomputing (the page currently being updated).
294
+ */
295
+ skipPage?: SkipEntityComponentPageRef;
296
+ /**
297
+ * Field name for multi-page slots (`attachments`, `meta-data-builder`). Omit for single-tab slots.
298
+ */
299
+ field?: string;
300
+ /** Gap between auto-assigned related tab orders. Default: 10. */
301
+ relatedOrderStep?: number;
302
+ /** Minimum start of the plugin zone (after related tabs). Default: 100_000. */
303
+ pluginZoneFloor?: number;
304
+ }
305
+ /**
306
+ * Resolves `layout.order` for a built-in plugin detail tab (`entity.pages`).
307
+ *
308
+ * 1. Assigns finite `layout.order` values to related `page-list` / `page-detail` rows that omit
309
+ * `order` (the composer otherwise treats them as +Infinity).
310
+ * 2. Places plugin tabs in a fixed relative order: meta-data-builder → attachments → documents →
311
+ * comments → history, after all related tabs.
312
+ */
313
+ declare function resolveEntityPluginDetailPageOrder(input: {
314
+ relatedEntities?: AXPRelatedEntity[];
315
+ pages?: Array<AXPEntityPage & {
316
+ field?: string;
317
+ }>;
318
+ }, slot: EntityDetailPluginPageSlot, options: ResolveEntityPluginDetailPageOrderOptions): number;
319
+
320
+ interface AXPDataSeeder {
321
+ seed(): Promise<void>;
322
+ }
323
+ declare const AXP_DATA_SEEDER_TOKEN: InjectionToken<AXPDataSeeder[]>;
324
+ declare class AXPDataSeederService {
325
+ private loaders;
326
+ seed(): Promise<void>;
327
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDataSeederService, never>;
328
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPDataSeederService>;
329
+ }
330
+
331
+ declare class AXPEntityCommandTriggerViewModel {
332
+ priority: 'primary' | 'secondary' | 'none';
333
+ order: number;
334
+ color: AXStyleColorType;
335
+ icon: string;
336
+ title: string;
337
+ name: string;
338
+ key?: string;
339
+ separated: boolean;
340
+ scope: AXPEntityCommandScope;
341
+ disabled: boolean | string;
342
+ hidden: boolean | string;
343
+ options: any;
344
+ metadata?: AXPMetaData;
345
+ default?: boolean;
346
+ items?: AXPEntityCommandTriggerViewModel[];
347
+ isChild?: boolean;
348
+ constructor(entity: AXPEntity, action: AXPEntityAction, isChild?: boolean);
349
+ }
350
+ declare class AXPEntityListViewColumnViewModel {
351
+ readonly property: AXPEntityProperty;
352
+ readonly column: AXPEntityTableColumn;
353
+ constructor(property: AXPEntityProperty, column: AXPEntityTableColumn);
354
+ name: string;
355
+ title: string;
356
+ visible: string | boolean;
357
+ sortEnabled: boolean | undefined;
358
+ width: '';
359
+ node: _angular_core.Signal<AXPWidgetColumnNode>;
360
+ }
361
+ declare class AXPEntityListViewCardFieldViewModel {
362
+ readonly property: AXPEntityProperty;
363
+ readonly field: AXPCardField;
364
+ constructor(property: AXPEntityProperty, field: AXPCardField);
365
+ name: string;
366
+ title: string;
367
+ visible: string | boolean;
368
+ layout: _acorex_platform_common.AXPEntityPropertyLayoutConfig | undefined;
369
+ display: string;
370
+ isBadgeDisplay: boolean;
371
+ badgeColor: string | undefined;
372
+ isStatusWidget: boolean;
373
+ node: _angular_core.Signal<AXPWidgetColumnNode>;
374
+ /** Readonly column node for status fields shown as header badges. */
375
+ headerBadgeNode: _angular_core.Signal<AXPWidgetColumnNode>;
376
+ }
377
+
378
+ declare class AXPEntityDetailListViewModel {
379
+ private injector;
380
+ private detailEntityConfig;
381
+ private parent;
382
+ private detailEntity;
383
+ private formatService;
384
+ private workflow;
385
+ private filterOperatorMiddleware;
386
+ private expressionEvaluator;
387
+ private queryExecutor;
388
+ private readonly settingsService;
389
+ private readonly destroyed;
390
+ private readonly showRowIndexColumnEnabled;
391
+ /** Whether the row index column is shown (user setting). */
392
+ readonly showIndexColumn: _angular_core.Signal<boolean>;
393
+ dataSource: AXDataSource<any>;
394
+ parentKey: _angular_core.Signal<string | undefined>;
395
+ constructor(injector: Injector, detailEntityConfig: AXPRelatedEntity, parent: {
396
+ entity: AXPEntity;
397
+ data: any;
398
+ });
399
+ private syncShowRowIndexColumnSetting;
400
+ destroy(): void;
401
+ initialize(): Promise<void>;
402
+ selectedItems: _angular_core.WritableSignal<any[]>;
403
+ hasSelectedItems: _angular_core.Signal<boolean>;
404
+ clearSelection(): void;
405
+ title: _angular_core.Signal<string>;
406
+ hidden: _angular_core.Signal<Promise<boolean>>;
407
+ inlineFiltersPlaceholders: _angular_core.Signal<string[]>;
408
+ hasInlineFilters: _angular_core.Signal<boolean>;
409
+ private allActions;
410
+ selectedScopeActionsCount: _angular_core.Signal<number>;
411
+ primaryActions: _angular_core.Signal<AXPEntityCommandTriggerViewModel[]>;
412
+ secondaryActions: _angular_core.Signal<AXPEntityCommandTriggerViewModel[]>;
413
+ primaryRowActions: _angular_core.Signal<AXPEntityCommandTriggerViewModel[]>;
414
+ secondaryRowActions: _angular_core.Signal<AXPEntityCommandTriggerViewModel[]>;
415
+ private inlineFilters;
416
+ applyInlineFilter(value: string): void;
417
+ applyFilterAndSort(): Promise<void>;
418
+ columns: _angular_core.Signal<AXPEntityListViewColumnViewModel[]>;
419
+ executeCommand(commandName: string, data?: any): Promise<void>;
420
+ evaluateExpressions: (actionData: {
421
+ [key: string]: string;
422
+ } | string) => Promise<any>;
423
+ /**
424
+ * Evaluate hidden/disabled expressions for primary actions and return the visible list.
425
+ */
426
+ getPrimaryActions(): Promise<AXPEntityCommandTriggerViewModel[]>;
427
+ /**
428
+ * Evaluate hidden/disabled expressions for secondary actions and return the visible list.
429
+ */
430
+ getSecondaryActions(): Promise<AXPEntityCommandTriggerViewModel[]>;
431
+ }
432
+
433
+ declare const AXPEntityEventsKeys: {
434
+ REFRESH_LAYOUT: string;
435
+ REFRESH_DATA: string;
436
+ };
437
+
438
+ /**
439
+ * Entity Event Dispatcher - A wrapper for entity-specific events
440
+ * Handles pattern-based dispatching for entity operations with wildcard support
441
+ */
442
+ declare class AXPEntityEventDispatcherService {
443
+ private readonly eventService;
444
+ dispatchEntityEvent(operation: 'inserted' | 'updated' | 'deleted', entityName: string, data: any): Promise<void>;
445
+ private getAllMatchingEventKeys;
446
+ private findMatchingWildcardKeys;
447
+ private matchesEntityPattern;
448
+ private generateEventKeys;
449
+ dispatchInserted(entityName: string, data: any): Promise<void>;
450
+ dispatchUpdated(entityName: string, data: any): Promise<void>;
451
+ dispatchDeleted(entityName: string, data: any): Promise<void>;
452
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityEventDispatcherService, never>;
453
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityEventDispatcherService>;
454
+ }
455
+
456
+ /**
457
+ * Sort key for entries in `interfaces.master.{create|update|single}.properties`.
458
+ * Uses `layout.order` when set and finite; otherwise the property index in that list.
459
+ */
460
+ declare function getMasterInterfacePropertySortKey(interfaceRow: {
461
+ layout?: AXPEntityPropertyLayoutConfig | undefined;
462
+ } | undefined, indexInMasterInterfaceList: number): number;
463
+
464
+ interface AXPEntityListExpandRowRef {
465
+ data: Record<string, unknown>;
466
+ }
467
+ /**
468
+ * Resolves a stable row id from entity list row data.
469
+ */
470
+ declare function getEntityListRowId(data: Record<string, unknown>, key?: string): string;
471
+ /**
472
+ * Finds row data in a hierarchical grid tree (root rows and nested children).
473
+ */
474
+ declare function findEntityListRowDataInTree(items: unknown[], id: string, key: string): Record<string, unknown> | null;
475
+ /**
476
+ * Restores expanded rows after data load (parents before children).
477
+ */
478
+ declare function restoreEntityListExpandedRows(options: {
479
+ expandedRowIds: string[];
480
+ rowKey: string;
481
+ getDisplayedRows: () => unknown[];
482
+ expandRow: (row: AXPEntityListExpandRowRef) => Promise<void>;
483
+ }): Promise<void>;
484
+
485
+ interface AXPEntityListPagingState {
486
+ take: number;
487
+ skip: number;
488
+ }
489
+ /**
490
+ * Applies take/skip to the data source without triggering {@link AXDataSource.load}.
491
+ */
492
+ declare function applyDataSourcePagingWithoutLoad(dataSource: AXDataSource, paging: AXPEntityListPagingState): void;
493
+ declare function getDataSourcePageIndex(dataSource: AXDataSource): number;
494
+ declare function normalizeListPaging(paging: Partial<AXPEntityListPagingState> | undefined, defaultTake: number): AXPEntityListPagingState;
495
+
496
+ /** How entity list UI state (columns, filters, paging, etc.) is persisted for the user. */
497
+ type AXPEntityListPersistenceMode = 'none' | 'persistent' | 'route';
498
+ declare const AXPEntityListPersistenceModeDefault: AXPEntityListPersistenceMode;
499
+ declare function normalizeEntityListPersistenceMode(value: unknown): AXPEntityListPersistenceMode;
500
+ declare function canPersistEntityListState(mode: AXPEntityListPersistenceMode): boolean;
501
+ /** `none` never reads list state from user settings. */
502
+ declare function shouldLoadEntityListStateFromStorage(mode: AXPEntityListPersistenceMode): boolean;
503
+ /** `route` clears stored list state when the route entity (module + name) changes. */
504
+ declare function shouldResetEntityListStateOnRouteEntry(mode: AXPEntityListPersistenceMode): boolean;
505
+ declare const ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY = "axp-entity-list-route-context";
506
+
507
+ declare class AXPEntityCreateViewSectionViewModel {
508
+ private entity;
509
+ private section;
510
+ constructor(entity: AXPEntity, section: AXPEntitySectionView);
511
+ group: _acorex_platform_common.AXPEntityPropertyGroup;
512
+ name: _angular_core.WritableSignal<string>;
513
+ title: _angular_core.Signal<string>;
514
+ description: _angular_core.Signal<string | null | undefined>;
515
+ layout: _angular_core.Signal<AXPGridLayoutOptions>;
516
+ elements: _angular_core.Signal<AXPEntityCreateViewElementViewModel[]>;
517
+ }
518
+ declare class AXPEntityCreateViewElementViewModel {
519
+ private entity;
520
+ private section;
521
+ private property;
522
+ private createProp;
523
+ constructor(entity: AXPEntity, section: AXPEntityCreateViewSectionViewModel, property: AXPEntityProperty, createProp: AXPEntityPropertyCreateView);
524
+ name: _angular_core.WritableSignal<string>;
525
+ title: _angular_core.WritableSignal<string>;
526
+ description: _angular_core.WritableSignal<string | undefined>;
527
+ editable: _angular_core.Signal<boolean>;
528
+ isVisible: _angular_core.Signal<string | boolean>;
529
+ isRequired: _angular_core.Signal<boolean>;
530
+ layout: _angular_core.Signal<AXPEntityPropertyLayoutConfig>;
531
+ node: _angular_core.Signal<AXPWidgetNode>;
532
+ }
533
+ declare class AXPEntityMasterCreateViewModel {
534
+ private readonly injector;
535
+ private readonly config;
536
+ private readonly initialData;
537
+ private readonly commandOptions;
538
+ private entityDef;
539
+ private workflow;
540
+ private expressionEvaluator;
541
+ builder: AXPWidgetCoreService;
542
+ constructor(injector: Injector, config: AXPEntity, initialData: any | undefined, commandOptions: any);
543
+ context: _angular_core.WritableSignal<any>;
544
+ options: _angular_core.WritableSignal<any>;
545
+ isInProgress: _angular_core.WritableSignal<boolean>;
546
+ canCreateNewOne: _angular_core.WritableSignal<boolean>;
547
+ redirect: _angular_core.WritableSignal<boolean>;
548
+ sections: _angular_core.Signal<AXPEntityCreateViewSectionViewModel[]>;
549
+ save(): Promise<any | void>;
550
+ createNewOne(): Promise<void>;
551
+ }
552
+ declare class AXPEntityCreateViewModelFactory {
553
+ private entityService;
554
+ private layout;
555
+ private injector;
556
+ create(moduleName: string, entityName: string, initialData?: any, options?: {
557
+ canCreateNewOne: boolean;
558
+ redirect: boolean;
559
+ }): Promise<AXPEntityMasterCreateViewModel>;
560
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityCreateViewModelFactory, never>;
561
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityCreateViewModelFactory>;
562
+ }
563
+
564
+ interface AXPEntityMasterListViewSortPropViewModel {
565
+ name: string;
566
+ title: string;
567
+ dir?: string;
568
+ }
569
+ /** Built-in card list row action that toggles multi-select mode via {@link AXPEntityMasterListViewModel.selectedItems}. */
570
+ declare const AXPEntityMasterListCardSelectActionName = "axp-entity-card:select";
571
+ interface AXPEntityMasterListCardSecondaryActionItem {
572
+ name: string;
573
+ title: string;
574
+ icon?: string;
575
+ color?: string;
576
+ disabled?: boolean | string;
577
+ divided?: boolean;
578
+ isCardSelect?: boolean;
579
+ }
580
+ declare class AXPEntityMasterListViewQueryViewModel {
581
+ private entity;
582
+ private section;
583
+ private view;
584
+ constructor(entity: AXPEntity, section: AXPEntityMasterListViewModel, view: AXPQueryView);
585
+ name: string;
586
+ title: string;
587
+ sorts: _acorex_platform_common.AXPQuerySort[];
588
+ columns: string[];
589
+ conditions: _acorex_platform_common.AXPQueryFilter[];
590
+ indexCol: boolean | undefined;
591
+ pageSize: number | undefined;
592
+ }
593
+ declare class AXPEntityMasterListViewModel {
594
+ private injector;
595
+ private config;
596
+ readonly entityDef: AXPEntity;
597
+ private readonly _viewDef;
598
+ private readonly formatService;
599
+ private readonly session;
600
+ private readonly workflow;
601
+ private readonly settings;
602
+ private readonly widgetResolver;
603
+ private readonly expressionEvaluator;
604
+ private readonly translation;
605
+ private readonly commandService;
606
+ private readonly eventService;
607
+ private readonly queryExecutor;
608
+ private readonly filterOperatorMiddleware;
609
+ private readonly entityDefinitionRegistry;
610
+ private settingEntityKey;
611
+ private readonly destroyed;
612
+ private lastAppliedSortKey;
613
+ private lastAppliedFilterKey;
614
+ private hasQueryParamsFilters;
615
+ /** Persisted expanded row ids for hierarchical lists (per view). */
616
+ private readonly expandedRowIds;
617
+ /** When true, row expand/collapse is not written to user settings (restore in progress). */
618
+ skipExpandedRowPersistence: boolean;
619
+ /** Resolved take/skip for the current view (null until loaded from settings). */
620
+ private readonly resolvedListPaging;
621
+ /** When true, pager changes are not persisted (programmatic UI sync). */
622
+ skipListPagingPersistence: boolean;
623
+ private listPersistenceMode;
624
+ events$: Subject<{
625
+ action: string;
626
+ meta?: any;
627
+ }>;
628
+ views: _angular_core.Signal<AXPEntityMasterListViewQueryViewModel[]>;
629
+ view: _angular_core.WritableSignal<AXPEntityMasterListViewQueryViewModel>;
630
+ private readonly showRowIndexColumnEnabled;
631
+ /**
632
+ * Row index column: if the list view defines `indexCol` (true/false), that overrides the user setting;
633
+ * if `indexCol` is omitted, visibility follows {@link AXPCommonSettings.ShowRowIndexColumn}.
634
+ */
635
+ showIndexColumn: _angular_core.Signal<boolean>;
636
+ /** Layouts enabled via `interfaces.master.list.layouts.*.enabled`. */
637
+ enabledListLayouts: _angular_core.Signal<AXPEntityMasterListLayoutType[]>;
638
+ /** True when the user can switch between multiple enabled layouts. */
639
+ canSwitchListLayout: _angular_core.Signal<boolean>;
640
+ /** Active list layout for the current view. */
641
+ activeListLayout: _angular_core.WritableSignal<AXPEntityMasterListLayoutType>;
642
+ tableLayout: _angular_core.Signal<{
643
+ enabled?: boolean;
644
+ columns: AXPEntityTableColumn[];
645
+ } | undefined>;
646
+ cardLayout: _angular_core.Signal<{
647
+ enabled?: boolean;
648
+ header: {
649
+ title?: string;
650
+ description?: string;
651
+ icon?: string;
652
+ };
653
+ fields: AXPCardField[];
654
+ } | undefined>;
655
+ /** Global expanded state for all card bodies in card layout. */
656
+ cardContentExpanded: _angular_core.WritableSignal<boolean>;
657
+ /** Current presentation mode (table, compact cards, or expanded cards). */
658
+ listDisplayMode: _angular_core.Signal<AXPEntityMasterListDisplayMode>;
659
+ /**
660
+ * Sets global card body visibility for card layout.
661
+ */
662
+ setCardContentExpanded(expanded: boolean): void;
663
+ /**
664
+ * Switches table vs compact/expanded card presentation.
665
+ */
666
+ setListDisplayMode(mode: AXPEntityMasterListDisplayMode): void;
667
+ /** Enabled layouts with display metadata for the title layout switcher. */
668
+ availableListLayouts: _angular_core.Signal<AXPEntityMasterListLayoutOption[]>;
669
+ /** Active layout option (for title icon and switcher selection state). */
670
+ currentListLayout: _angular_core.Signal<AXPEntityMasterListLayoutOption | null>;
671
+ private static readonly LAYOUT_META;
672
+ /**
673
+ * Switches to the given layout when it is enabled.
674
+ * Persists the choice at entity list level (shared across all views).
675
+ */
676
+ setListLayout(layout: AXPEntityMasterListLayoutType): void;
677
+ /**
678
+ * Cycles to the next enabled layout (table → card → table …).
679
+ * No-op when only one layout is enabled.
680
+ */
681
+ switchListLayout(): AXPEntityMasterListLayoutType;
682
+ private resolveActiveListLayout;
683
+ private applyListLayoutFromSettings;
684
+ private createExpressionScope;
685
+ private resolveCommandNameExpression;
686
+ private resolveTitleExpression;
687
+ /**
688
+ * Resolves a card header value (title, description, icon) from a property path, expression, or literal.
689
+ * Supports multiple `{{ ... }}` segments in one string (e.g. `{{context.eval("a")}} - {{context.eval("b")}}`).
690
+ * Multi-language maps (e.g. `{ "en-US": "...", "fa-IR": "..." }`) are returned as-is for the translate pipe.
691
+ */
692
+ resolveCardHeaderValue(value: string | undefined, rowData: unknown): Promise<AXPMultiLanguageString>;
693
+ /**
694
+ * Keeps i18n payloads intact for `translate`; coerces only plain scalars to string.
695
+ */
696
+ private normalizeCardHeaderDisplayValue;
697
+ /**
698
+ * Resolves badge color for a card header field (semantic token or expression per row).
699
+ */
700
+ resolveCardBadgeColor(field: AXPEntityListViewCardFieldViewModel, rowData: unknown): Promise<AXStyleColorType>;
701
+ private resolveCardBadgeColorValue;
702
+ private resolveTriggerName;
703
+ setView(viewName?: string | null): Promise<void>;
704
+ dataSource: AXDataSource<any>;
705
+ constructor(injector: Injector, config: AXPEntity);
706
+ private syncShowRowIndexColumnSetting;
707
+ /**
708
+ * Applies {@link AXPCommonSettings.EntityListPersistenceMode} for this list instance.
709
+ * Call once when the list view model is created (before loading list UI state).
710
+ */
711
+ initializeListPersistence(): Promise<void>;
712
+ getListPersistenceMode(): Promise<AXPEntityListPersistenceMode>;
713
+ shouldLoadPersistedListState(): Promise<boolean>;
714
+ shouldPersistListState(): Promise<boolean>;
715
+ private clearEntityListSettings;
716
+ applySettings(): Promise<void>;
717
+ ensureListPagingResolved(): Promise<void>;
718
+ getResolvedListPaging(): AXPEntityListPagingState;
719
+ applyPagingToDataSourceWithoutLoad(): void;
720
+ saveListPaging(take: number, skip: number): void;
721
+ resetListPagingSkip(): void;
722
+ private loadListPagingFromViewSettings;
723
+ getExpandedRowIds(): string[];
724
+ /**
725
+ * Updates persisted expanded row ids when the user expands or collapses a tree row.
726
+ */
727
+ updateExpandedRowId(rowId: string, expanded: boolean): void;
728
+ handleRowExpandChange(rowData: Record<string, unknown>): void;
729
+ saveSettings(changesType: 'columnSizes' | 'columnOrders' | 'view' | 'pageSize' | 'listPaging' | 'filters' | 'sorts' | 'expandedRows' | 'listLayout' | 'cardContentExpanded', data?: unknown): Promise<void>;
730
+ selectedItems: _angular_core.WritableSignal<any[]>;
731
+ /**
732
+ * Selected category from the category sidebar (left panel).
733
+ * Used to set default category when creating new entities via command.
734
+ * Structure: { id: string; title: string } or null when "All Items" is selected.
735
+ */
736
+ selectedCategory: _angular_core.WritableSignal<{
737
+ id: string;
738
+ title: string;
739
+ } | null>;
740
+ parentKey: _angular_core.Signal<string | undefined>;
741
+ hasSelectedItems: _angular_core.Signal<boolean>;
742
+ clearSelection(): void;
743
+ /**
744
+ * Sets the selected category from the category sidebar.
745
+ * Call with null to clear (e.g. when "All Items" is selected).
746
+ */
747
+ setSelectedCategory(category: {
748
+ id: string;
749
+ title: string;
750
+ } | null): void;
751
+ title: _angular_core.Signal<string>;
752
+ description: _angular_core.Signal<string | null>;
753
+ inlineFiltersPlaceholders: _angular_core.Signal<string[]>;
754
+ hasInlineFilters: _angular_core.Signal<boolean>;
755
+ beardcrumbs: _angular_core.Signal<AXPBreadcrumbItem[]>;
756
+ private allActions;
757
+ /** Flattened actions including children for execute lookup */
758
+ private flattenedActions;
759
+ getPrimaryActions(): Promise<AXPEntityCommandTriggerViewModel[]>;
760
+ getSecondaryActions(): Promise<AXPEntityCommandTriggerViewModel[]>;
761
+ selectedScopeActionsCount: _angular_core.Signal<number>;
762
+ primaryRowActions: _angular_core.Signal<AXPEntityCommandTriggerViewModel[]>;
763
+ secondaryRowActions(rowData: any): Promise<AXPEntityCommandTriggerViewModel[]>;
764
+ /**
765
+ * Secondary actions for card layout rows, with the built-in Select action last (divider above it).
766
+ */
767
+ cardSecondaryRowActions(rowData: unknown): Promise<AXPEntityMasterListCardSecondaryActionItem[]>;
768
+ filterQueries: _angular_core.WritableSignal<AXPFilterQuery[]>;
769
+ private static readonly URL_FILTER_OPERATOR_TYPES;
770
+ get properties(): AXPEntityProperty[];
771
+ /**
772
+ * Canonical JSON for the `filters` query param (sorted by field), or null when there are no active value filters.
773
+ */
774
+ filtersQueryParamCanonical(queries: AXPFilterQuery[]): string | null;
775
+ /**
776
+ * Parse a `filters` query string to the same canonical form used by {@link filtersQueryParamCanonical}.
777
+ */
778
+ static parseQueryParamFiltersToCanonical(filtersJson: string | null): string | null;
779
+ private toUrlFilterPayloadItems;
780
+ private static coerceFilterOperatorFromUrl;
781
+ /**
782
+ * Apply filters from query params
783
+ */
784
+ applyFiltersFromQueryParams(filtersJson: string | null): boolean;
785
+ get filtersDef(): AXPFilterDefinition[];
786
+ get preloadFiltersDef(): AXPFilterDefinition[];
787
+ applyViewFilters(): Promise<void>;
788
+ resetFilters(): void;
789
+ applyFilterAndSort(): Promise<void>;
790
+ private allAvailableColumns;
791
+ visibleColumnCount: () => number;
792
+ columns: _angular_core.WritableSignal<AXPEntityListViewColumnViewModel[]>;
793
+ resetColumns(): void;
794
+ onColumnsChanged(columns: AXPEntityListViewColumnViewModel[]): Promise<void>;
795
+ applyViewColumns(): void;
796
+ onColumnsOrderChanged(event: any): void;
797
+ private mergeDisplayFieldWithColumn;
798
+ private buildVirtualDisplayProperty;
799
+ private normalizeRelatedColumnNames;
800
+ private findRelatedEntityForField;
801
+ private getRegisteredEntity;
802
+ private resolveRelatedEntityProperty;
803
+ private resolveRelatedEntityColumnDataPath;
804
+ private deriveDataPathFromLookupProperty;
805
+ private resolveParentDataPathForRelatedField;
806
+ private resolveDisplayFieldProperty;
807
+ private resolveCardField;
808
+ private allAvailableCardFields;
809
+ cardFields: _angular_core.WritableSignal<AXPEntityListViewCardFieldViewModel[]>;
810
+ applyCardFields(): void;
811
+ sortableFields: () => {
812
+ name: string;
813
+ title: string;
814
+ dir: undefined;
815
+ }[];
816
+ sortableFieldsCount: () => number;
817
+ canSort: () => boolean;
818
+ canAddMoreSort: () => boolean;
819
+ sortedCount: () => number;
820
+ sortedFields: _angular_core.WritableSignal<AXPEntityMasterListViewSortPropViewModel[]>;
821
+ resetSorts(): void;
822
+ /**
823
+ * Applies active sorts in the given order (click order, saved settings, or view defaults).
824
+ */
825
+ private setActiveSortsFromQueries;
826
+ applyViewSorts(): void;
827
+ /**
828
+ * Active sort direction for a column (synced with toolbar sort UI and dataSource).
829
+ */
830
+ getColumnSortDirection(columnName: string): 'asc' | 'desc' | undefined;
831
+ /**
832
+ * 1-based priority index when multiple columns are sorted (Ctrl+click order).
833
+ */
834
+ getColumnSortIndex(columnName: string): number | undefined;
835
+ /** True when active sorts still match the current view defaults (not yet customized). */
836
+ private isViewDefaultSorts;
837
+ /**
838
+ * Toggles column sort (asc → desc → none). Without Ctrl, only one column is active.
839
+ * With Ctrl/Cmd, multiple columns are sorted in click order (first clicked = primary).
840
+ */
841
+ toggleColumnSort(columnName: string, multiSort: boolean): Promise<void>;
842
+ executeCommand(commandName: string, data?: any): Promise<void>;
843
+ /**
844
+ * Merges default category from selected category in sidebar when executing create command.
845
+ * For Entity:Create and create-entity, if entity has category plugin and a category is selected,
846
+ * pre-fills categoryIds and categories for the create form.
847
+ */
848
+ private mergeDefaultCategoryForCreate;
849
+ /**
850
+ * Seeds create payloads with fixed list-view conditions (e.g. scope=T on the tenant dashboards view)
851
+ * so new rows match the view context and downstream queries (such as home dashboard) can find them.
852
+ */
853
+ private mergeViewConditionsForCreate;
854
+ private evaluateExpressions;
855
+ execute(command: AXPExecuteCommand): Promise<void>;
856
+ destroy(): void;
857
+ }
858
+ declare class AXPEntityListViewModelFactory {
859
+ private entityService;
860
+ private layout;
861
+ private injector;
862
+ create(moduleName: string, entityName: string): Promise<AXPEntityMasterListViewModel>;
863
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityListViewModelFactory, never>;
864
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityListViewModelFactory>;
865
+ }
866
+ declare const AXPEntityListViewModelResolver: ResolveFn<Promise<AXPEntityMasterListViewModel>>;
867
+
868
+ declare class AXPEntityMasterSingleViewGroupViewModel {
869
+ private entity;
870
+ private section;
871
+ constructor(entity: AXPEntity, section: AXPEntitySectionView);
872
+ group: _acorex_platform_common.AXPEntityPropertyGroup;
873
+ name: _angular_core.WritableSignal<string>;
874
+ isLoading: _angular_core.WritableSignal<boolean>;
875
+ title: _angular_core.Signal<string>;
876
+ description: _angular_core.Signal<string | null | undefined>;
877
+ layout: _angular_core.Signal<AXPGridLayoutOptions>;
878
+ props: _angular_core.Signal<AXPEntityMasterSingleElementViewModel[]>;
879
+ editableProps: _angular_core.Signal<AXPEntityMasterSingleElementViewModel[]>;
880
+ editable: _angular_core.Signal<boolean>;
881
+ }
882
+ declare class AXPEntityMasterSingleElementViewModel {
883
+ private entity;
884
+ private section;
885
+ private propertyView;
886
+ constructor(entity: AXPEntity, section: AXPEntityMasterSingleViewGroupViewModel, propertyView: AXPEntityPropertyView);
887
+ private property;
888
+ name: _angular_core.WritableSignal<string>;
889
+ path: _angular_core.WritableSignal<string>;
890
+ title: _angular_core.WritableSignal<string>;
891
+ showLabel: _angular_core.WritableSignal<boolean>;
892
+ description: _angular_core.WritableSignal<string | undefined>;
893
+ layout: _angular_core.Signal<AXPGridLayoutOptions>;
894
+ node: _angular_core.Signal<AXPWidgetNode>;
895
+ }
896
+ declare class AXPEntityMasterSingleViewModel {
897
+ private injector;
898
+ private config;
899
+ private entityData;
900
+ entityDef: AXPEntity;
901
+ private readonly _viewDef;
902
+ private readonly session;
903
+ private readonly formatService;
904
+ private readonly workflow;
905
+ private readonly commandService;
906
+ private readonly destroyed;
907
+ private translateService;
908
+ private entityService;
909
+ private expressionEvaluator;
910
+ private entityDefinitionRegistryService;
911
+ private _updateTrigger;
912
+ readonly updateTrigger: _angular_core.Signal<number>;
913
+ constructor(injector: Injector, config: AXPEntity, entityData: any);
914
+ context: _angular_core.WritableSignal<any>;
915
+ private actions;
916
+ primaryActions: _angular_core.Signal<AXPEntityCommandTriggerViewModel[]>;
917
+ secondaryActions: _angular_core.Signal<AXPEntityCommandTriggerViewModel[]>;
918
+ sections: _angular_core.Signal<AXPEntityMasterSingleViewGroupViewModel[]>;
919
+ navigateToUp(): void;
920
+ title: _angular_core.Signal<string>;
921
+ description: _angular_core.Signal<string | null>;
922
+ beardcrumbs: _angular_core.Signal<AXPBreadcrumbItem[]>;
923
+ evaluateExpressions: (options: {
924
+ [key: string]: string;
925
+ }, data: any) => Promise<any>;
926
+ relatedEntities: _angular_core.Signal<Promise<AXPEntityDetailListViewModel[]>>;
927
+ executeCommand(commandName: string, data?: any): Promise<void>;
928
+ execute(command: AXPExecuteCommand): Promise<void>;
929
+ destroy(): void;
930
+ }
931
+ declare class AXPEntityDetailViewModelFactory {
932
+ private entityService;
933
+ private layout;
934
+ private injector;
935
+ create(moduleName: string, entityName: string, id: string): Promise<AXPEntityMasterSingleViewModel>;
936
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityDetailViewModelFactory, never>;
937
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityDetailViewModelFactory>;
938
+ }
939
+ declare const AXPEntityDetailViewModelResolver: ResolveFn<Promise<AXPEntityMasterSingleViewModel>>;
940
+
941
+ declare class AXPEntityUpdateViewSectionViewModel {
942
+ private entity;
943
+ private section;
944
+ constructor(entity: AXPEntity, section: AXPEntitySectionView);
945
+ group: _acorex_platform_common.AXPEntityPropertyGroup;
946
+ name: _angular_core.WritableSignal<string>;
947
+ title: _angular_core.Signal<string>;
948
+ description: _angular_core.Signal<string | null | undefined>;
949
+ layout: _angular_core.Signal<AXPGridLayoutOptions>;
950
+ elements: _angular_core.Signal<AXPEntityMasterUpdateElementViewModel[]>;
951
+ }
952
+ declare class AXPEntityMasterUpdateElementViewModel {
953
+ private entity;
954
+ private property;
955
+ constructor(entity: AXPEntity, property: AXPEntityProperty);
956
+ name: _angular_core.WritableSignal<string>;
957
+ title: _angular_core.WritableSignal<string>;
958
+ description: _angular_core.WritableSignal<string | undefined>;
959
+ editable: _angular_core.Signal<boolean>;
960
+ isVisible: _angular_core.Signal<string | boolean>;
961
+ isRequired: _angular_core.Signal<boolean>;
962
+ layout: _angular_core.Signal<AXPEntityPropertyLayoutConfig>;
963
+ node: _angular_core.Signal<AXPWidgetNode>;
964
+ }
965
+ declare class AXPEntityMasterUpdateViewModel {
966
+ private injector;
967
+ private config;
968
+ private entityData;
969
+ private props;
970
+ private entityDef;
971
+ private workflow;
972
+ private sessionService;
973
+ private get moduleName();
974
+ private get entityName();
975
+ private get entityId();
976
+ builder: AXPWidgetCoreService;
977
+ constructor(injector: Injector, config: AXPEntity, entityData: any, props: string[]);
978
+ isInProgress: _angular_core.WritableSignal<boolean>;
979
+ context: _angular_core.WritableSignal<any>;
980
+ elements: _angular_core.Signal<AXPEntityMasterUpdateElementViewModel[]>;
981
+ sections: _angular_core.Signal<AXPEntityUpdateViewSectionViewModel[]>;
982
+ save(): Promise<any>;
983
+ reset(): void;
984
+ }
985
+ declare class AXPEntityMasterUpdateViewModelFactory {
986
+ private entityService;
987
+ private layout;
988
+ private injector;
989
+ create(moduleName: string, entityName: string, id: string, props: string[]): Promise<AXPEntityMasterUpdateViewModel>;
990
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityMasterUpdateViewModelFactory, never>;
991
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityMasterUpdateViewModelFactory>;
992
+ }
993
+
994
+ type AXPEntityMasterListCardLayout = NonNullable<NonNullable<AXPEntityMasterListView['layouts']>['card']>;
995
+ interface AXPEntityModifierContext {
996
+ readonly entity: AXPEntity;
997
+ plugins: {
998
+ list(): NonNullable<AXPEntity['plugins']>;
999
+ add(...items: NonNullable<AXPEntity['plugins']>): AXPEntityModifierContext;
1000
+ remove(predicate: (p: NonNullable<AXPEntity['plugins']>[number]) => boolean): AXPEntityModifierContext;
1001
+ find(name: string): {
1002
+ get(): NonNullable<AXPEntity['plugins']>[number] | undefined;
1003
+ update(updater: (p: NonNullable<AXPEntity['plugins']>[number]) => NonNullable<AXPEntity['plugins']>[number]): AXPEntityModifierContext;
1004
+ };
1005
+ };
1006
+ title: {
1007
+ get(): string;
1008
+ set(newTitle: string): AXPEntityModifierContext;
1009
+ };
1010
+ module: {
1011
+ get(): string;
1012
+ set(newModule: string): AXPEntityModifierContext;
1013
+ };
1014
+ name: {
1015
+ get(): string;
1016
+ set(newName: string): AXPEntityModifierContext;
1017
+ };
1018
+ parentKey: {
1019
+ get(): string | undefined;
1020
+ set(newKey: string | undefined): AXPEntityModifierContext;
1021
+ };
1022
+ category: {
1023
+ get(): AXPCategoryEntity | undefined;
1024
+ update(updater: (cat: AXPCategoryEntity | undefined) => AXPCategoryEntity): AXPEntityModifierContext;
1025
+ };
1026
+ properties: {
1027
+ list(): AXPEntityProperty[];
1028
+ add(...props: AXPEntityProperty[]): AXPEntityModifierContext;
1029
+ remove(predicate: (p: AXPEntityProperty) => boolean): AXPEntityModifierContext;
1030
+ find(name: string): {
1031
+ get(): AXPEntityProperty | undefined;
1032
+ update(updater: (p: AXPEntityProperty) => AXPEntityProperty): AXPEntityModifierContext;
1033
+ };
1034
+ };
1035
+ columns: {
1036
+ list(): AXPEntityTableColumn[] | undefined;
1037
+ add(...cols: AXPEntityTableColumn[]): AXPEntityModifierContext;
1038
+ remove(predicate: (c: AXPEntityTableColumn) => boolean): AXPEntityModifierContext;
1039
+ find(name: string): {
1040
+ get(): AXPEntityTableColumn | undefined;
1041
+ update(updater: (c: AXPEntityTableColumn) => AXPEntityTableColumn): AXPEntityModifierContext;
1042
+ };
1043
+ };
1044
+ formats: {
1045
+ get(): AXPEntity['formats'];
1046
+ update(updater: (formats: AXPEntity['formats']) => AXPEntity['formats']): AXPEntityModifierContext;
1047
+ };
1048
+ relatedEntities: {
1049
+ list(): AXPRelatedEntity[] | undefined;
1050
+ add(...related: AXPRelatedEntity[]): AXPEntityModifierContext;
1051
+ remove(predicate: (r: AXPRelatedEntity) => boolean): AXPEntityModifierContext;
1052
+ };
1053
+ groups: {
1054
+ list(): AXPEntityPropertyGroup[] | undefined;
1055
+ add(...groups: AXPEntityPropertyGroup[]): AXPEntityModifierContext;
1056
+ remove(predicate: (g: AXPEntityPropertyGroup) => boolean): AXPEntityModifierContext;
1057
+ };
1058
+ commands: {
1059
+ get(): AXPEntity['commands'] | undefined;
1060
+ update(updater: (c: AXPEntity['commands'] | undefined) => AXPEntity['commands']): AXPEntityModifierContext;
1061
+ };
1062
+ queries: {
1063
+ get(): AXPEntity['queries'];
1064
+ update(updater: (q: AXPEntity['queries']) => AXPEntity['queries']): AXPEntityModifierContext;
1065
+ };
1066
+ validations: {
1067
+ get(): AXPEntity['validations'] | undefined;
1068
+ update(updater: (v: AXPEntity['validations'] | undefined) => AXPEntity['validations']): AXPEntityModifierContext;
1069
+ };
1070
+ interfaces: {
1071
+ get(): AXPEntity['interfaces'] | undefined;
1072
+ update(updater: (i: AXPEntity['interfaces'] | undefined) => AXPEntity['interfaces']): AXPEntityModifierContext;
1073
+ master: {
1074
+ get(): NonNullable<AXPEntity['interfaces']>['master'] | undefined;
1075
+ update(updater: (m: NonNullable<AXPEntity['interfaces']>['master'] | undefined) => NonNullable<AXPEntity['interfaces']>['master']): AXPEntityModifierContext;
1076
+ create: {
1077
+ get(): AXPEntityMasterCreateLayoutView | undefined;
1078
+ update(updater: (c: AXPEntityMasterCreateLayoutView | undefined) => AXPEntityMasterCreateLayoutView): AXPEntityModifierContext;
1079
+ };
1080
+ modify: {
1081
+ get(): AXPEntityMasterUpdateLayoutView | undefined;
1082
+ update(updater: (c: AXPEntityMasterUpdateLayoutView | undefined) => AXPEntityMasterUpdateLayoutView): AXPEntityModifierContext;
1083
+ };
1084
+ single: {
1085
+ get(): AXPEntityMasterSingleLayoutView | undefined;
1086
+ update(updater: (c: AXPEntityMasterSingleLayoutView | undefined) => AXPEntityMasterSingleLayoutView): AXPEntityModifierContext;
1087
+ };
1088
+ list: {
1089
+ get(): AXPEntityMasterListView | undefined;
1090
+ update(updater: (c: AXPEntityMasterListView | undefined) => AXPEntityMasterListView): AXPEntityModifierContext;
1091
+ card: {
1092
+ get(): AXPEntityMasterListCardLayout | undefined;
1093
+ set(layout: AXPEntityMasterListCardLayout): AXPEntityModifierContext;
1094
+ update(updater: (layout: AXPEntityMasterListCardLayout | undefined) => AXPEntityMasterListCardLayout | undefined): AXPEntityModifierContext;
1095
+ remove(): AXPEntityModifierContext;
1096
+ };
1097
+ };
1098
+ };
1099
+ detail: {
1100
+ get(): NonNullable<AXPEntity['interfaces']>['detail'] | undefined;
1101
+ update(updater: (d: NonNullable<AXPEntity['interfaces']>['detail'] | undefined) => NonNullable<AXPEntity['interfaces']>['detail']): AXPEntityModifierContext;
1102
+ list: {
1103
+ get(): AXPEntityDetailListView | undefined;
1104
+ update(updater: (l: AXPEntityDetailListView | undefined) => AXPEntityDetailListView): AXPEntityModifierContext;
1105
+ };
1106
+ };
1107
+ };
1108
+ toEntity(): AXPEntity;
1109
+ }
1110
+ type AXPEntityModifier = (context: AXPEntityModifierContext) => void;
1111
+ interface AXPEntityModifierProvider {
1112
+ entityName: string | RegExp;
1113
+ modifier: AXPEntityModifier;
1114
+ order?: number;
1115
+ }
1116
+
1117
+ declare function ensureListActions(ctx: AXPEntityModifierContext): void;
1118
+ declare function actionExists(actions: any[] | undefined, commandName: string, name?: string): boolean;
1119
+ interface AXPEntityLayoutSectionLike {
1120
+ id: string;
1121
+ }
1122
+ interface AXPEntityLayoutPropertyLike {
1123
+ name: string;
1124
+ }
1125
+ interface AXPEntityLayoutLike<TSection extends AXPEntityLayoutSectionLike = AXPEntityLayoutSectionLike, TProperty extends AXPEntityLayoutPropertyLike = AXPEntityLayoutPropertyLike> {
1126
+ sections: TSection[];
1127
+ properties?: TProperty[];
1128
+ }
1129
+ /**
1130
+ * Clones `sections` and `properties` arrays to prevent accidental cross-interface mutations.
1131
+ * Many entity definitions reuse the same array instances across create/update/single interfaces.
1132
+ */
1133
+ declare function cloneLayoutArrays<TLayout extends AXPEntityLayoutLike>(layout: TLayout): TLayout & {
1134
+ properties: NonNullable<TLayout['properties']>;
1135
+ };
1136
+ declare function ensureLayoutSection<TLayout extends AXPEntityLayoutLike>(layout: TLayout, section: TLayout['sections'][number]): void;
1137
+ declare function ensureLayoutPropertyView<TLayout extends AXPEntityLayoutLike>(layout: TLayout & {
1138
+ properties: NonNullable<TLayout['properties']>;
1139
+ }, prop: NonNullable<TLayout['properties']>[number]): void;
1140
+
1141
+ interface AXPEntityActionPlugin {
1142
+ name: string;
1143
+ order?: number;
1144
+ apply: (ctx: AXPEntityModifierContext, options?: any) => Promise<void> | void;
1145
+ }
1146
+ declare const AXP_ENTITY_ACTION_PLUGIN: InjectionToken<AXPEntityActionPlugin[]>;
1147
+
1148
+ declare class AXPEntityMiddleware {
1149
+ private exactModifiers;
1150
+ private patternModifiers;
1151
+ protected providedModifiers: AXPEntityModifierProvider[];
1152
+ protected providedActionPlugins: AXPEntityActionPlugin[];
1153
+ protected injector: Injector;
1154
+ constructor();
1155
+ register(entityName: string | RegExp, modifier: AXPEntityModifier, order?: number): void;
1156
+ process(entity: AXPEntity): Promise<AXPEntity>;
1157
+ private createModifierStep;
1158
+ private createPluginStep;
1159
+ private wildcardToRegExp;
1160
+ private normalizeRegExp;
1161
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityMiddleware, never>;
1162
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityMiddleware>;
1163
+ }
1164
+
1165
+ declare function createModifierContext(entity: AXPEntity): AXPEntityModifierContext;
1166
+
1167
+ declare const AXP_ENTITY_MODIFIER: InjectionToken<AXPEntityModifierProvider[]>;
1168
+
1169
+ declare class AXPEntityPreloadFiltersViewModel {
1170
+ private injector;
1171
+ private config;
1172
+ readonly entityDef: AXPEntity;
1173
+ private readonly widgetResolver;
1174
+ constructor(injector: Injector, config: AXPEntity);
1175
+ /**
1176
+ * Entity title
1177
+ */
1178
+ title: _angular_core.Signal<string>;
1179
+ /**
1180
+ * Entity description
1181
+ */
1182
+ description: _angular_core.Signal<string | null>;
1183
+ /**
1184
+ * All filter definitions for properties with preload enabled
1185
+ */
1186
+ preloadFiltersDef: _angular_core.Signal<AXPFilterDefinition[]>;
1187
+ /**
1188
+ * Required filter definitions only
1189
+ */
1190
+ requiredFiltersDef: _angular_core.Signal<AXPFilterDefinition[]>;
1191
+ /**
1192
+ * Serialize filter values to plain objects (remove signals, functions, etc.)
1193
+ */
1194
+ serializeFilters(filters: any): AXPFilterQuery[];
1195
+ }
1196
+ declare const AXPEntityPreloadFiltersViewModelResolver: ResolveFn<Promise<AXPEntityPreloadFiltersViewModel>>;
1197
+
1198
+ type AXPCollectEntityQuickSearchPathsResolver = (moduleName: string, entityName: string) => Promise<AXPEntity | null>;
1199
+ /**
1200
+ * Lodash-get paths for quick search from a single entity definition: string-like property names
1201
+ * plus lookup `expose[].target` paths (e.g. `brand.title`).
1202
+ */
1203
+ declare function collectQuickSearchPathsFromSingleEntityDefinition(entity: AXPEntity | null | undefined): string[];
1204
+ /**
1205
+ * Adds dotted paths from master columns (`name` or `options.dataPath`), e.g. `person.fullName`, `jobDefinition.title`.
1206
+ */
1207
+ declare function collectNestedFieldPathsFromEntityColumns(entity: AXPEntity | null | undefined): string[];
1208
+ /**
1209
+ * Collects lodash-get field paths used for mock/API quick search (`contains` / OR filters):
1210
+ * host properties and lookup expose targets, dotted column paths, and merge-detail related entities
1211
+ * prefixed with the related entity merge `persistence.dataPath` (e.g. `person.firstName`).
1212
+ */
1213
+ declare function collectEntityQuickSearchFieldPaths(entity: AXPEntity | null | undefined, resolveRelatedDefinition: AXPCollectEntityQuickSearchPathsResolver): Promise<string[]>;
1214
+
1215
+ interface AXPEntityPreloadEntity {
1216
+ module: string;
1217
+ entity: string;
1218
+ }
1219
+ interface AXPEntityDefinitionPreloader {
1220
+ preload(): AXPEntityPreloadEntity[];
1221
+ }
1222
+ declare class AXPEntityDefinitionRegistryService {
1223
+ private middleware;
1224
+ private columnEnrichment;
1225
+ private onChanged;
1226
+ get onChanged$(): rxjs.Observable<{
1227
+ name: string;
1228
+ }>;
1229
+ private entities;
1230
+ private entityResolver;
1231
+ /**
1232
+ * Force re-load and re-process entity definitions, then re-register them.
1233
+ * Overloads:
1234
+ * - refresh(): refresh all registered entities
1235
+ * - refresh(fullName: string): refresh by fully-qualified name `<module>.<entity>`
1236
+ * - refresh(moduleName: string, entityName: string): refresh by parts
1237
+ */
1238
+ refresh(): Promise<void>;
1239
+ refresh(fullName: string): Promise<void>;
1240
+ refresh(moduleName: string, entityName: string): Promise<void>;
1241
+ /** Executes the actual refresh for a single entity */
1242
+ private refreshOne;
1243
+ /**
1244
+ * Registers a new entity configuration. Entities are identified uniquely by a combination
1245
+ * of their module and name.
1246
+ *
1247
+ * @param config The configuration object of the entity to be registered.
1248
+ */
1249
+ register(config: AXPEntity): void;
1250
+ /**
1251
+ * Returns an array of all registered entity configurations.
1252
+ *
1253
+ * @returns An array of AXPEntity objects.
1254
+ */
1255
+ getAll(): AXPEntity[];
1256
+ /**
1257
+ * Clear all registered entity configurations.
1258
+ * Should be called when modules are cleared to prevent stale entity data.
1259
+ * @param preserveModules Optional list of module names whose entities should be preserved
1260
+ */
1261
+ clear(preserveModules?: string[]): void;
1262
+ /**
1263
+ * Resolves an entity configuration based on module and entity name. If the configuration
1264
+ * is not already registered, attempts to load it dynamically. Throws an error if the
1265
+ * entity cannot be found or loaded.
1266
+ *
1267
+ * @param moduleName The module name of the entity.
1268
+ * @param entityName The name of the entity.
1269
+ * @returns A promise resolving to the entity configuration.
1270
+ * @throws Error if the entity configuration cannot be resolved.
1271
+ */
1272
+ resolve(moduleName: string, entityName: string): Promise<AXPEntity>;
1273
+ exists(moduleName: string, entityName: string): Promise<boolean>;
1274
+ /**
1275
+ * Creates a unique key for an entity based on its module and name.
1276
+ *
1277
+ * @param moduleName The module name of the entity.
1278
+ * @param entityName The name of the entity.
1279
+ * @returns The unique key for the entity.
1280
+ */
1281
+ private createEntityKey;
1282
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityDefinitionRegistryService, never>;
1283
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityDefinitionRegistryService>;
1284
+ }
1285
+
1286
+ type AXPEntityAggregateReducerType = 'count' | 'sum' | 'min' | 'max' | 'avg';
1287
+ interface AXPEntityAggregateMeasure {
1288
+ reducer: AXPEntityAggregateReducerType;
1289
+ /** Required for sum, min, max, and avg. Ignored for count (rows per group). */
1290
+ field?: string;
1291
+ /** Result column name; defaults are derived from the reducer and field. */
1292
+ alias?: string;
1293
+ }
1294
+ /**
1295
+ * Aggregate stored rows after the same filter/sort pipeline as {@link AXPQueryRequest}.
1296
+ * Group keys use dotted field paths (same as lodash-style getters).
1297
+ */
1298
+ interface AXPEntityAggregateRequest extends Pick<AXPQueryRequest, 'filter' | 'sort'> {
1299
+ groupBy: string[];
1300
+ measures: AXPEntityAggregateMeasure[];
1301
+ }
1302
+ interface AXPEntityAggregateResult {
1303
+ rows: Record<string, unknown>[];
1304
+ }
1305
+ interface AXPEntityQueryAllOptions {
1306
+ /**
1307
+ * Page size for backends that read page-by-page (HTTP API).
1308
+ * In-memory backends load the filtered set once and ignore this.
1309
+ */
1310
+ pageSize?: number;
1311
+ /** Maximum rows to return or scan (safety cap). */
1312
+ maxRows?: number;
1313
+ }
1314
+ interface AXPEntityQueryAllResult<T> {
1315
+ items: T[];
1316
+ /** Row count matching filter/sort before applying maxRows. */
1317
+ total: number;
1318
+ /** True when maxRows prevented returning every matching row. */
1319
+ truncated: boolean;
1320
+ }
1321
+ interface AXPEntityAggregateOptions {
1322
+ /** Maximum rows to load for aggregation when the backend pages remotely (default 50_000). */
1323
+ maxRows?: number;
1324
+ /** Page size for remote paging during aggregate (default 500). */
1325
+ pageSize?: number;
1326
+ }
1327
+
1328
+ /**
1329
+ * Pure aggregation over already-filtered plain rows (e.g. outputs of {@link filterSortEntityRows}).
1330
+ */
1331
+ declare function computeEntityAggregates<T extends Record<string, unknown>>(rows: T[], request: AXPEntityAggregateRequest): Record<string, unknown>[];
1332
+
1333
+ interface RunEntityQueryAdapters<T = unknown> {
1334
+ getRawAll(entityName: string): Promise<T[]>;
1335
+ getDirectChildCount(categoryId: string, entityName: string): Promise<number>;
1336
+ getAllChildCategoryIds(categoryId: string, entityName: string): Promise<string[]>;
1337
+ }
1338
+ /**
1339
+ * Check if the entity is a category entity (ends with 'Category').
1340
+ */
1341
+ declare function isCategoryEntity(entityName: string): boolean;
1342
+ /**
1343
+ * Check if the filter is a category filter (contains operator on categoryIds field).
1344
+ * Handles both simple filters and compound filters.
1345
+ */
1346
+ declare function isCategoryFilter(filter: any): boolean;
1347
+ /**
1348
+ * Loads raw rows for an entity and applies the same sorting and filtering as {@link runEntityQuery},
1349
+ * without pagination.
1350
+ */
1351
+ declare function filterSortEntityRows<T = unknown>(entityName: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>, adapters: RunEntityQueryAdapters<T>): Promise<T[]>;
1352
+ /**
1353
+ * Shared entity query logic: sort, filter (including recursive category filter), childrenCount, pagination.
1354
+ */
1355
+ declare function runEntityQuery<T = unknown>(entityName: string, request: AXPQueryRequest, adapters: RunEntityQueryAdapters<T>): Promise<AXPPagedListResult<T>>;
1356
+
1357
+ /**
1358
+ * One audit point in time for a record lifecycle event.
1359
+ *
1360
+ * Used inside {@link AXPRecordAuditInfo} (`created`, `updated`, `deleted`).
1361
+ * Backends and mock middleware typically set `at` and `by`; `reason` and `source`
1362
+ * (for example `api`, `system`, `import`) are optional diagnostic fields.
1363
+ */
1364
+ interface AXPAuditEvent {
1365
+ at?: Date;
1366
+ by?: AXPUserReference;
1367
+ /** Optional business or technical reason for the event. */
1368
+ reason?: string;
1369
+ /** Optional origin of the change (for example `api`, `system`, `import`). */
1370
+ source?: string;
1371
+ }
1372
+ /**
1373
+ * Aggregated audit trail for a persisted row.
1374
+ *
1375
+ * Filled by APIs or connectivity mock middleware when creating, updating, or
1376
+ * soft-deleting records. UI surfaces may show these via the history plugin or
1377
+ * custom columns. Version snapshot pipelines often **omit** this object from
1378
+ * stored snapshots while still applying it to live payloads.
1379
+ *
1380
+ * @remarks Fields are optional today; callers should tolerate partial data.
1381
+ */
1382
+ interface AXPRecordAuditInfo {
1383
+ created?: AXPAuditEvent;
1384
+ updated?: AXPAuditEvent;
1385
+ deleted?: AXPAuditEvent;
1386
+ }
1387
+ /**
1388
+ * Cross-cutting flags that are not part of the domain schema but affect how a
1389
+ * row is shown or edited (visibility, built-in/system rows, immutability).
1390
+ *
1391
+ * Module entity models sometimes expose only this slice (for example
1392
+ * `stateInfo` on business units) when the rest of the row uses a bespoke shape.
1393
+ *
1394
+ * @remarks Entity list/detail flows should honor these flags where applicable.
1395
+ */
1396
+ interface AXPRecordStateInfo {
1397
+ isHidden?: boolean;
1398
+ isSystem?: boolean;
1399
+ isImmutable?: boolean;
1400
+ /** @deprecated Prefer explicit domain modeling over this flag. */
1401
+ isDistributed?: boolean;
1402
+ }
1403
+ /**
1404
+ * Tenancy and actor scope for a row in a multi-tenant application.
1405
+ *
1406
+ * Used to associate a record with a tenant, application instance, or owning
1407
+ * user when the API returns ownership metadata alongside domain fields.
1408
+ */
1409
+ interface AXPRecordOwnershipInfo {
1410
+ tenantId?: string;
1411
+ applicationId?: string;
1412
+ userId?: string;
1413
+ }
1414
+ /**
1415
+ * Workflow linkage for a domain record (set when a run is started or bound).
1416
+ *
1417
+ * Populated by workflow engine, middleware, or integration — not declared as
1418
+ * entity definition properties. Entities with the `workflow` plugin may carry
1419
+ * this object when a {@link WorkflowManagement.WorkflowInstance} drives the row.
1420
+ */
1421
+ interface AXPRecordWorkflowInfo {
1422
+ /** Workflow instance id for this record's active or last run. */
1423
+ instanceId?: string | null;
1424
+ /** Logical workflow definition id (same as WorkflowInstance.definitionId). */
1425
+ definitionId?: string | null;
1426
+ /** Correlation id for idempotent start and related-run lookup (same as WorkflowInstance.correlationId). */
1427
+ correlationId?: string | null;
1428
+ /** When set, pins the run to a workflow definition version; omit for current default. */
1429
+ pinnedVersion?: number | null;
1430
+ }
1431
+ /** Entity query filter field for {@link AXPRecordWorkflowInfo.instanceId}. */
1432
+ declare const AXP_RECORD_WORKFLOW_INFO_INSTANCE_ID_FIELD: "workflowInfo.instanceId";
1433
+ /** Entity query filter field for {@link AXPRecordWorkflowInfo.correlationId}. */
1434
+ declare const AXP_RECORD_WORKFLOW_INFO_CORRELATION_ID_FIELD: "workflowInfo.correlationId";
1435
+ /** Entity query filter field for {@link AXPRecordWorkflowInfo.definitionId}. */
1436
+ declare const AXP_RECORD_WORKFLOW_INFO_DEFINITION_ID_FIELD: "workflowInfo.definitionId";
1437
+ /** Returns a trimmed workflow instance id from a record, if present. */
1438
+ declare function getRecordWorkflowInstanceId(record: {
1439
+ workflowInfo?: AXPRecordWorkflowInfo | null;
1440
+ } | null | undefined): string | null;
1441
+ /** Returns a trimmed workflow correlation id from a record, if present. */
1442
+ declare function getRecordWorkflowCorrelationId(record: {
1443
+ workflowInfo?: AXPRecordWorkflowInfo | null;
1444
+ } | null | undefined): string | null;
1445
+ /** Builds canonical workflow metadata for a domain record (engine / middleware). */
1446
+ declare function buildAXPRecordWorkflowInfo(params: {
1447
+ instanceId: string;
1448
+ definitionId?: string | null;
1449
+ correlationId?: string | null;
1450
+ pinnedVersion?: number | null;
1451
+ }): AXPRecordWorkflowInfo;
1452
+ /**
1453
+ * Base shape for **entity row** TypeScript models across modules: a stable
1454
+ * identifier plus optional platform metadata.
1455
+ *
1456
+ * Module-specific interfaces extend this with domain properties
1457
+ * (`extends AXPEntityModel<string>` / `AXPEntityModel<Id>`) while reusing
1458
+ * `auditInfo`, `stateInfo`, `ownershipInfo`, and `workflowInfo` when the backend sends them.
1459
+ */
1460
+ interface AXPEntityModel<Id> {
1461
+ id: Id;
1462
+ auditInfo?: AXPRecordAuditInfo;
1463
+ stateInfo?: AXPRecordStateInfo;
1464
+ ownershipInfo?: AXPRecordOwnershipInfo;
1465
+ workflowInfo?: AXPRecordWorkflowInfo;
1466
+ }
1467
+ interface AXPEntityCreateDto {
1468
+ }
1469
+ interface AXPEntityUpdateDto<Id> {
1470
+ id: Id;
1471
+ }
1472
+ interface AXPEntityOutputDto<Id> {
1473
+ id: Id;
1474
+ }
1475
+ interface AXPEntityDetailDto<Id> extends AXPEntityOutputDto<Id> {
1476
+ }
1477
+ interface AXPEntityListItemDto<Id> extends AXPEntityOutputDto<Id> {
1478
+ }
1479
+
1480
+ declare abstract class AXPEntityStorageService<TKey, TDetailDto extends AXPEntityDetailDto<TKey> = AXPEntityModel<TKey>, TListItemDto extends AXPEntityListItemDto<TKey> = TDetailDto, TCreateDto extends AXPEntityCreateDto = TDetailDto, TUpdateDto extends AXPEntityUpdateDto<TKey> = TDetailDto> {
1481
+ abstract get dbName(): string;
1482
+ abstract initial(entityName: string, collection: TCreateDto[], options?: {
1483
+ mergeType?: 'merge' | 'replace';
1484
+ uniqueKeys?: string[];
1485
+ }): Promise<TCreateDto[]>;
1486
+ abstract getOne(entityName: string, id: TKey): Promise<TDetailDto>;
1487
+ abstract updateOne(entityName: string, id: TKey, keyValues: Omit<Partial<TUpdateDto>, 'id'>): Promise<TDetailDto>;
1488
+ abstract deleteOne(entityName: string, id: TKey): Promise<void>;
1489
+ abstract insertOne(entityName: string, entity: TCreateDto): Promise<TKey>;
1490
+ abstract getAll(entityName: string): Promise<TListItemDto[]>;
1491
+ abstract query(entityName: string, request: AXPQueryRequest): Promise<AXPPagedListResult<TListItemDto>>;
1492
+ abstract count(entityName: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>): Promise<number>;
1493
+ abstract queryAll(entityName: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>, options?: AXPEntityQueryAllOptions): Promise<AXPEntityQueryAllResult<TListItemDto>>;
1494
+ abstract getMany(entityName: string, ids: TKey[]): Promise<(TListItemDto | null)[]>;
1495
+ abstract exists(entityName: string, id: TKey): Promise<boolean>;
1496
+ abstract upsertOne(entityName: string, entity: TCreateDto, options?: {
1497
+ merge?: boolean;
1498
+ }): Promise<TKey>;
1499
+ abstract aggregate(entityName: string, request: AXPEntityAggregateRequest, options?: AXPEntityAggregateOptions): Promise<AXPEntityAggregateResult>;
1500
+ }
1501
+ declare abstract class AXPEntityDataProvider<TKey, TDetailDto extends AXPEntityDetailDto<TKey> = AXPEntityModel<TKey>, TListItemDto extends AXPEntityListItemDto<TKey> = TDetailDto, TCreateDto extends AXPEntityCreateDto = TDetailDto, TUpdateDto extends AXPEntityUpdateDto<TKey> = TDetailDto> {
1502
+ abstract get entityName(): string;
1503
+ abstract initial(collection: TCreateDto[]): Promise<void>;
1504
+ abstract getOne(id: TKey): Promise<TDetailDto>;
1505
+ abstract getAll(): Promise<TListItemDto[]>;
1506
+ abstract updateOne(id: TKey, keyValues: Omit<Partial<TUpdateDto>, 'id'>): Promise<TDetailDto>;
1507
+ abstract deleteOne(id: TKey): Promise<void>;
1508
+ abstract insertOne(entity: TCreateDto): Promise<TKey>;
1509
+ abstract query(request: AXPQueryRequest): Promise<AXPPagedListResult<TListItemDto>>;
1510
+ abstract count(request: Pick<AXPQueryRequest, 'filter' | 'sort'>): Promise<number>;
1511
+ abstract queryAll(request: Pick<AXPQueryRequest, 'filter' | 'sort'>, options?: AXPEntityQueryAllOptions): Promise<AXPEntityQueryAllResult<TListItemDto>>;
1512
+ abstract getMany(ids: TKey[]): Promise<(TListItemDto | null)[]>;
1513
+ abstract exists(id: TKey): Promise<boolean>;
1514
+ abstract upsertOne(entity: TCreateDto, options?: {
1515
+ merge?: boolean;
1516
+ }): Promise<TKey>;
1517
+ abstract aggregate(request: AXPEntityAggregateRequest, options?: AXPEntityAggregateOptions): Promise<AXPEntityAggregateResult>;
1518
+ }
1519
+ declare class AXPEntityDataProviderImpl<TKey, TDetailDto extends AXPEntityDetailDto<TKey> = AXPEntityModel<TKey>, TListItemDto extends AXPEntityListItemDto<TKey> = TDetailDto, TCreateDto extends AXPEntityCreateDto = TDetailDto, TUpdateDto extends AXPEntityUpdateDto<TKey> = TDetailDto> implements AXPEntityDataProvider<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto> {
1520
+ private storageService;
1521
+ entityName: string;
1522
+ constructor(storageService: AXPEntityStorageService<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto>, entityName: string);
1523
+ initial(collection: TCreateDto[]): Promise<void>;
1524
+ getOne(id: TKey): Promise<TDetailDto>;
1525
+ getAll(): Promise<TListItemDto[]>;
1526
+ query(request: AXPQueryRequest): Promise<AXPPagedListResult<TListItemDto>>;
1527
+ updateOne(id: TKey, keyValues: Omit<Partial<TUpdateDto>, 'id'>): Promise<TDetailDto>;
1528
+ deleteOne(id: TKey): Promise<void>;
1529
+ insertOne(entity: TCreateDto): Promise<TKey>;
1530
+ count(request: Pick<AXPQueryRequest, 'filter' | 'sort'>): Promise<number>;
1531
+ queryAll(request: Pick<AXPQueryRequest, 'filter' | 'sort'>, options?: AXPEntityQueryAllOptions): Promise<AXPEntityQueryAllResult<TListItemDto>>;
1532
+ getMany(ids: TKey[]): Promise<(TListItemDto | null)[]>;
1533
+ exists(id: TKey): Promise<boolean>;
1534
+ upsertOne(entity: TCreateDto, options?: {
1535
+ merge?: boolean;
1536
+ }): Promise<TKey>;
1537
+ aggregate(request: AXPEntityAggregateRequest, options?: AXPEntityAggregateOptions): Promise<AXPEntityAggregateResult>;
1538
+ }
1539
+ declare abstract class AXMEntityCrudService<TKey, TDetailDto extends AXPEntityDetailDto<TKey> = AXPEntityModel<TKey>, TListItemDto extends AXPEntityListItemDto<TKey> = TDetailDto, TCreateDto extends AXPEntityCreateDto = TDetailDto, TUpdateDto extends AXPEntityUpdateDto<TKey> = TDetailDto> {
1540
+ abstract insertOne(request: TCreateDto): Promise<TKey>;
1541
+ abstract getOne(id: TKey): Promise<TDetailDto>;
1542
+ abstract deleteOne(id: TKey): Promise<void>;
1543
+ abstract updateOne(id: TKey, values: Omit<Partial<TUpdateDto>, 'id'>): Promise<TDetailDto>;
1544
+ abstract query(request: AXPQueryRequest): Promise<AXPPagedListResult<TListItemDto>>;
1545
+ }
1546
+ declare class AXMEntityCrudServiceImpl<TKey, TDetailDto extends AXPEntityDetailDto<TKey> = AXPEntityModel<TKey>, TListItemDto extends AXPEntityListItemDto<TKey> = TDetailDto, TCreateDto extends AXPEntityCreateDto = Omit<TDetailDto, 'id'>, TUpdateDto extends AXPEntityUpdateDto<TKey> = TDetailDto> {
1547
+ private entityName;
1548
+ private _storageService;
1549
+ private entityRegistery;
1550
+ private _entityDataProvider;
1551
+ private _entityCategoryDataProvider;
1552
+ constructor(entityName: string);
1553
+ insertOne(request: TCreateDto): Promise<TKey>;
1554
+ getOne(id: TKey): Promise<TDetailDto>;
1555
+ deleteOne(id: TKey): Promise<void>;
1556
+ updateOne(id: TKey, values: Omit<Partial<TUpdateDto>, 'id'>): Promise<TDetailDto>;
1557
+ query(request?: AXPQueryRequest): Promise<AXPPagedListResult<TListItemDto>>;
1558
+ findOne(filter: AXDataSourceFilterOption): Promise<TListItemDto>;
1559
+ getRoots(request: {}): Promise<AXPPagedListResult<TListItemDto>>;
1560
+ getChildren(request: {
1561
+ parentId: TKey;
1562
+ parentKey?: string;
1563
+ }): Promise<AXPPagedListResult<TListItemDto>>;
1564
+ getByCategory(request: {
1565
+ categoryId: TKey;
1566
+ categoryKey?: string;
1567
+ }): Promise<AXPPagedListResult<TListItemDto>>;
1568
+ getCategoriesList(request?: AXPQueryRequest): Promise<AXPPagedListResult<AXPCategoryEntity$1<TKey>>>;
1569
+ get storageService(): AXPEntityStorageService<any, any, any, any, any>;
1570
+ count(request: Pick<AXPQueryRequest, 'filter' | 'sort'>): Promise<number>;
1571
+ queryAll(request: Pick<AXPQueryRequest, 'filter' | 'sort'>, options?: AXPEntityQueryAllOptions): Promise<AXPEntityQueryAllResult<TListItemDto>>;
1572
+ getMany(ids: TKey[]): Promise<(TListItemDto | null)[]>;
1573
+ exists(id: TKey): Promise<boolean>;
1574
+ upsertOne(entity: TCreateDto, options?: {
1575
+ merge?: boolean;
1576
+ }): Promise<TKey>;
1577
+ aggregate(request: AXPEntityAggregateRequest, options?: AXPEntityAggregateOptions): Promise<AXPEntityAggregateResult>;
1578
+ custom<Req, Res>(request: Req): Promise<void>;
1579
+ }
1580
+
1581
+ interface AXPEntityConfigs {
1582
+ viewers: {
1583
+ root: () => Type<any> | Promise<Type<any>>;
1584
+ detail: {
1585
+ list: () => Type<any> | Promise<Type<any>>;
1586
+ };
1587
+ master: {
1588
+ single: () => Type<any> | Promise<Type<any>>;
1589
+ details: () => Type<any> | Promise<Type<any>>;
1590
+ create: () => Type<any> | Promise<Type<any>>;
1591
+ modify: () => Type<any> | Promise<Type<any>>;
1592
+ list: () => Type<any> | Promise<Type<any>>;
1593
+ };
1594
+ };
1595
+ }
1596
+ declare const AXP_ENTITY_CONFIG_TOKEN: InjectionToken<AXPEntityConfigs>;
1597
+ /** Raw input from entity loaders' list(). */
1598
+ type AXPEntityListInput = {
1599
+ name: string;
1600
+ module: string;
1601
+ };
1602
+ /** Output from listAll(); fullName is populated by the resolver. */
1603
+ type AXPEntityListEntry = {
1604
+ name: string;
1605
+ module: string;
1606
+ fullName: string;
1607
+ };
1608
+ interface AXPEntityDefinitionLoader {
1609
+ get(moduleName: string, entityName: string): Promise<AXPEntity | null>;
1610
+ list(): Promise<AXPEntityListInput[]>;
1611
+ }
1612
+ declare const AXP_ENTITY_DEFINITION_LOADER: InjectionToken<AXPEntityDefinitionLoader>;
1613
+ declare class AXPEntityResolver {
1614
+ private providers;
1615
+ /** Aggregates list() from all entity loaders (including lazy). Populates fullName. */
1616
+ listAll(): Promise<AXPEntityListEntry[]>;
1617
+ get(moduleName: string, entityName: string): Promise<AXPEntity | null>;
1618
+ private resolveLoaders;
1619
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityResolver, never>;
1620
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityResolver>;
1621
+ }
1622
+
1623
+ declare class AXPAttachmentsPluginModule {
1624
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPAttachmentsPluginModule, never>;
1625
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AXPAttachmentsPluginModule, never, never, never>;
1626
+ static ɵinj: _angular_core.ɵɵInjectorDeclaration<AXPAttachmentsPluginModule>;
1627
+ }
1628
+
1629
+ declare class AXPEntityModule {
1630
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityModule, never>;
1631
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AXPEntityModule, never, [typeof i1.RouterModule, typeof AXPAttachmentsPluginModule, typeof i3.AXPWorkflowModule, typeof i4.AXPWidgetCoreModule, typeof i5.LayoutBuilderModule], never>;
1632
+ static ɵinj: _angular_core.ɵɵInjectorDeclaration<AXPEntityModule>;
1633
+ }
1634
+
1635
+ /**
1636
+ * Data accessor for entity operations.
1637
+ * Provides methods to query and execute commands with smart resolution:
1638
+ * 1. Checks entity definition queries/commands first
1639
+ * 2. Falls back to CRUD service if not defined
1640
+ */
1641
+ declare class EntityDataAccessor<TKey = any, TDetailDto extends AXPEntityDetailDto<TKey> = AXPEntityModel<TKey>, TListItemDto extends AXPEntityListItemDto<TKey> = TDetailDto, TCreateDto extends AXPEntityCreateDto = Omit<TDetailDto, 'id'>, TUpdateDto extends AXPEntityUpdateDto<TKey> = TDetailDto> {
1642
+ private module;
1643
+ private entity;
1644
+ private entityRegistry;
1645
+ private queryExecutor;
1646
+ private commandService;
1647
+ private crudService;
1648
+ private entityDef;
1649
+ private entityDefPromise;
1650
+ constructor(module: string, entity: string, entityRegistry: AXPEntityDefinitionRegistryService, queryExecutor: AXPQueryExecutor, commandService: AXPCommandService);
1651
+ /**
1652
+ * Resolves the entity definition lazily and caches it.
1653
+ * @returns The resolved entity definition
1654
+ */
1655
+ private resolveEntityDef;
1656
+ /**
1657
+ * Gets a single entity by key.
1658
+ * @param key - The entity key
1659
+ * @returns The entity detail or null if not found
1660
+ */
1661
+ byKey(key: TKey): Promise<TDetailDto | null>;
1662
+ /**
1663
+ * Queries a list of entities.
1664
+ * @param request - The query request (optional)
1665
+ * @returns The paged list result
1666
+ */
1667
+ query(request?: AXPQueryRequest): Promise<AXPPagedListResult<TListItemDto>>;
1668
+ /**
1669
+ * Creates a new entity.
1670
+ * @param data - The entity data to create
1671
+ * @returns The created entity key
1672
+ */
1673
+ create(data: TCreateDto): Promise<TKey>;
1674
+ /**
1675
+ * Updates an existing entity.
1676
+ * @param id - The entity key
1677
+ * @param data - The entity data to update
1678
+ * @returns The updated entity
1679
+ */
1680
+ update(id: TKey, data: Omit<Partial<TUpdateDto>, 'id'>): Promise<TDetailDto>;
1681
+ /**
1682
+ * Deletes an entity.
1683
+ * @param id - The entity key
1684
+ */
1685
+ delete(id: TKey): Promise<void>;
1686
+ }
1687
+ /**
1688
+ * Builder class for entity operations.
1689
+ * Provides methods to create paths and access entity data.
1690
+ */
1691
+ declare class EntityBuilder {
1692
+ private sessionService;
1693
+ private entityRegistry;
1694
+ private queryExecutor;
1695
+ private commandService;
1696
+ readonly module: string;
1697
+ readonly entity: string;
1698
+ constructor(module: string, entity: string, sessionService: AXPSessionService, entityRegistry: AXPEntityDefinitionRegistryService, queryExecutor: AXPQueryExecutor, commandService: AXPCommandService);
1699
+ /**
1700
+ * Creates a path for the entity.
1701
+ * @param path - The path segment (defaults to 'list')
1702
+ * @returns The full path string
1703
+ */
1704
+ createPath(path?: string): string;
1705
+ /**
1706
+ * Gets the data accessor for the entity with generic type support.
1707
+ * Entity definition is resolved lazily on first method call.
1708
+ * @returns An EntityDataAccessor instance
1709
+ */
1710
+ data<TKey = any, TDetailDto extends AXPEntityDetailDto<TKey> = AXPEntityModel<TKey>, TListItemDto extends AXPEntityListItemDto<TKey> = TDetailDto, TCreateDto extends AXPEntityCreateDto = Omit<TDetailDto, 'id'>, TUpdateDto extends AXPEntityUpdateDto<TKey> = TDetailDto>(): EntityDataAccessor<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto>;
1711
+ }
1712
+ declare class AXPEntityService {
1713
+ private sessionService;
1714
+ private entityRegistry;
1715
+ private queryExecutor;
1716
+ private commandService;
1717
+ /**
1718
+ * @deprecated Use `withEntity(module, entity).createPath(path)` instead.
1719
+ * This method will be removed in a future version.
1720
+ */
1721
+ createPath(module: string, entity: string, path?: string): string;
1722
+ /**
1723
+ * Creates a builder for entity operations.
1724
+ * Entity definition is resolved lazily when data accessor methods are called.
1725
+ * @param module - The module name
1726
+ * @param entity - The entity name
1727
+ * @returns An EntityBuilder instance
1728
+ */
1729
+ withEntity(module: string, entity: string): EntityBuilder;
1730
+ /**
1731
+ * Creates a builder for entity operations using dot notation.
1732
+ * Entity definition is resolved lazily when data accessor methods are called.
1733
+ * @param entityKey - The entity key in format "module.entity"
1734
+ * @returns An EntityBuilder instance
1735
+ * @throws Error if the entity key format is invalid
1736
+ */
1737
+ withEntity(entityKey: string): EntityBuilder;
1738
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityService, never>;
1739
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityService>;
1740
+ }
1741
+
1742
+ /** How to show attachments in entity single/create/update: as a section (default) or as a separate page. */
1743
+ type AttachmentsDisplayMode = 'section' | 'page';
1744
+ /** Component key used when display is 'page'. Register a page component with this key via AXP_PAGE_COMPONENT_PROVIDER. */
1745
+ declare const ATTACHMENTS_PAGE_COMPONENT_KEY = "entity-attachments-page";
1746
+ type AttachmentLocalizedText = string | Record<string, string>;
1747
+ type AttachmentSectionOptions = {
1748
+ order?: number;
1749
+ title?: AttachmentLocalizedText;
1750
+ };
1751
+ type AttachmentsEditDialogOptions = {
1752
+ mode?: 'manual' | 'auto';
1753
+ fields?: {
1754
+ name?: boolean;
1755
+ title?: boolean;
1756
+ description?: boolean;
1757
+ };
1758
+ };
1759
+ type AttachmentsPluginOptions = {
1760
+ field?: string;
1761
+ title?: AttachmentLocalizedText;
1762
+ display?: AttachmentsDisplayMode;
1763
+ accept?: string;
1764
+ multiple?: boolean;
1765
+ fileEditable?: boolean;
1766
+ /** When true, attachments field and list action run in read-only mode (widget option `readonly`). */
1767
+ 'readonly'?: boolean;
1768
+ /** When true (default), registers a list column for the attachments field. Set false to hide the column. */
1769
+ showListColumn?: boolean;
1770
+ /** When true (default), registers the list upload action. Set false to omit the action. */
1771
+ showListAction?: boolean;
1772
+ /** Section options when display is 'section'. */
1773
+ section?: AttachmentSectionOptions;
1774
+ /** File edit dialog options. */
1775
+ editDialog?: AttachmentsEditDialogOptions;
1776
+ plugins?: {
1777
+ name: string;
1778
+ options?: unknown;
1779
+ }[];
1780
+ /** Widget option `showBorder`. Default false for attachments (section and page). */
1781
+ showBorder?: boolean;
1782
+ /** Widget option `showAddItemButton`. Default false when display is `page`, true for section. */
1783
+ showAddItemButton?: boolean;
1784
+ };
1785
+ /**
1786
+ * Attachments plugin.
1787
+ * - Always ensures an attachments group and property; when display is 'section' (default), adds a section to single/create/update layouts.
1788
+ * - When display is 'page', adds a page to entity.pages with ATTACHMENTS_PAGE_COMPONENT_KEY; register a page component with that key via AXP_PAGE_COMPONENT_PROVIDER.
1789
+ * - List column and list upload action can be turned off with `showListColumn` / `showListAction` (both default true).
1790
+ * - Uses provided accept/multiple/fileEditable; others are fixed.
1791
+ */
1792
+ declare const attachmentsPlugin: AXPEntityActionPlugin;
1793
+
1794
+ interface AXPEntityStorageContext<TKey = any, TDetailDto extends AXPEntityDetailDto<TKey> = any, TListItemDto extends AXPEntityListItemDto<TKey> = any, TCreateDto extends AXPEntityCreateDto = any, TUpdateDto extends AXPEntityUpdateDto<TKey> = any> {
1795
+ op: AXPEntityOp;
1796
+ entityName: string;
1797
+ id?: TKey;
1798
+ data?: TCreateDto | Omit<Partial<TUpdateDto>, 'id'>;
1799
+ request?: AXPQueryRequest;
1800
+ previous?: TDetailDto;
1801
+ result?: any;
1802
+ locals: Map<string, unknown>;
1803
+ backend: {
1804
+ getOne: (entityName: string, id: TKey) => Promise<TDetailDto>;
1805
+ insertOne: (entityName: string, entity: TCreateDto) => Promise<TKey>;
1806
+ query: (entityName: string, request: AXPQueryRequest) => Promise<AXPPagedListResult<TListItemDto>>;
1807
+ updateOne: (entityName: string, id: TKey, data: Partial<TUpdateDto>) => Promise<TDetailDto>;
1808
+ deleteOne: (entityName: string, id: TKey) => Promise<void>;
1809
+ count: (entityName: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>) => Promise<number>;
1810
+ queryAll: (entityName: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>, options?: AXPEntityQueryAllOptions) => Promise<AXPEntityQueryAllResult<TListItemDto>>;
1811
+ getMany: (entityName: string, ids: TKey[]) => Promise<(TListItemDto | null)[]>;
1812
+ exists: (entityName: string, id: TKey) => Promise<boolean>;
1813
+ upsertOne: (entityName: string, entity: TCreateDto, options?: {
1814
+ merge?: boolean;
1815
+ }) => Promise<TKey>;
1816
+ aggregate: (entityName: string, request: AXPEntityAggregateRequest, options?: AXPEntityAggregateOptions) => Promise<AXPEntityAggregateResult>;
1817
+ };
1818
+ }
1819
+ interface AXPEntityStorageMiddleware<TKey = any, TDetailDto extends AXPEntityDetailDto<TKey> = any, TListItemDto extends AXPEntityListItemDto<TKey> = any, TCreateDto extends AXPEntityCreateDto = any, TUpdateDto extends AXPEntityUpdateDto<TKey> = any> {
1820
+ target?: {
1821
+ ops?: AXPEntityOp[];
1822
+ entity?: string | RegExp;
1823
+ predicate?: (ctx: AXPEntityStorageContext<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto>) => boolean;
1824
+ order?: number;
1825
+ };
1826
+ execute: (ctx: AXPEntityStorageContext<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto>, next: () => Promise<void>) => Promise<void>;
1827
+ }
1828
+ /**
1829
+ * Error type that can be thrown by middlewares to abort the chain with a structured payload.
1830
+ */
1831
+ declare class AXPMiddlewareAbortError extends Error {
1832
+ readonly message: string;
1833
+ readonly options: {
1834
+ code?: string;
1835
+ status?: number;
1836
+ details?: any;
1837
+ };
1838
+ constructor(message: string, options?: {
1839
+ code?: string;
1840
+ status?: number;
1841
+ details?: any;
1842
+ });
1843
+ toResponse(): AXPMiddlewareErrorResponse;
1844
+ }
1845
+ /** Type guard for AXPMiddlewareAbortError */
1846
+ declare function isAXPMiddlewareAbortError(error: unknown): error is AXPMiddlewareAbortError;
1847
+
1848
+ declare const eventDispatchMiddleware: AXPEntityStorageMiddleware;
1849
+
1850
+ /**
1851
+ * Entity modifier that applies column widths using the column width service
1852
+ * Uses the generic column width resolution system from core library
1853
+ * Note: inject() works here because modifiers are executed via runInInjectionContext()
1854
+ */
1855
+ declare const columnWidthMiddleware: AXPEntityModifier;
1856
+ /**
1857
+ * Default provider that applies column width middleware to all entities
1858
+ */
1859
+ declare const columnWidthMiddlewareProvider: AXPEntityModifierProvider;
1860
+
1861
+ /**
1862
+ * Default order for common list view columns.
1863
+ * Lower numbers appear first. Columns not in this map get order 500 (middle).
1864
+ * Use high numbers (990+) for columns that should appear at the end.
1865
+ */
1866
+ declare const DEFAULT_COLUMN_ORDER: Record<string, number>;
1867
+ /**
1868
+ * Entity modifier that sorts list view columns by default order.
1869
+ * Similar to layout-ordering for sections/properties, but for list columns.
1870
+ */
1871
+ declare const columnOrderingMiddleware: AXPEntityModifier;
1872
+ /**
1873
+ * Factory to create a column ordering middleware with custom order config
1874
+ */
1875
+ declare const createColumnOrderingMiddlewareProvider: (columnOrder?: Record<string, number>, entityName?: string | RegExp) => AXPEntityModifierProvider;
1876
+ /**
1877
+ * Default provider that applies column ordering to all entities
1878
+ */
1879
+ declare const columnOrderingMiddlewareProvider: AXPEntityModifierProvider;
1880
+
1881
+ /**
1882
+ * Default colSpans for two properties in one section (`md` / `lg`).
1883
+ * Missing `positions[*].colSpan` are filled only; entities keep full control.
1884
+ */
1885
+ interface PairSpanRule {
1886
+ first: string;
1887
+ second: string;
1888
+ /** Col span applied to {@link first} */
1889
+ firstSpan: number;
1890
+ /** Col span applied to {@link second} */
1891
+ secondSpan: number;
1892
+ breakpoints?: readonly ('sm' | 'md' | 'lg')[];
1893
+ }
1894
+ interface SectionOrderConfig {
1895
+ sections: Record<string, number>;
1896
+ properties: Record<string, number>;
1897
+ /**
1898
+ * Defaults for pairing two columns (e.g. code + title). Replace or extend defaults.
1899
+ * - `undefined`: use {@link DEFAULT_PAIR_SPAN_RULES}
1900
+ * - `false`: do not apply any pair spans
1901
+ * - `[...]` + spread `DEFAULT_PAIR_SPAN_RULES` when you want to append custom pairs
1902
+ */
1903
+ pairSpanRules?: PairSpanRule[] | false;
1904
+ }
1905
+ /**
1906
+ * Default shipped rules: narrow identifier + wider title on `md` / `lg`.
1907
+ */
1908
+ declare const DEFAULT_PAIR_SPAN_RULES: readonly PairSpanRule[];
1909
+ declare const DEFAULT_SECTION_ORDER: Record<string, number>;
1910
+ declare const DEFAULT_PROPERTY_ORDER: Record<string, number>;
1911
+ declare const layoutOrderingMiddlewareFactory: (config: SectionOrderConfig) => AXPEntityModifier;
1912
+ declare const createLayoutOrderingMiddlewareProvider: (config?: Partial<SectionOrderConfig>, entityName?: string | RegExp) => AXPEntityModifierProvider;
1913
+ declare const layoutOrderingMiddlewareProvider: AXPEntityModifierProvider;
1914
+
1915
+ /**
1916
+ * Provides synchronous access to the ApplyLayoutOrdering setting.
1917
+ * Used by layout ordering middleware to avoid async in the modifier and prevent startup deadlocks.
1918
+ * Value is updated on onLoaded/onChanged; first read can trigger a one-time background get (no await).
1919
+ */
1920
+ declare class AXPLayoutOrderingConfigService {
1921
+ private readonly settingsService;
1922
+ private readonly _applyOrdering;
1923
+ private syncScheduled;
1924
+ constructor();
1925
+ getApplyOrdering(): boolean;
1926
+ private syncFromSettings;
1927
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLayoutOrderingConfigService, never>;
1928
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPLayoutOrderingConfigService>;
1929
+ }
1930
+
1931
+ /**
1932
+ * Ensures all entities have a searchResult.description.
1933
+ * Uses @{i18nScope}:module.title when missing (guaranteed to exist in i18n).
1934
+ */
1935
+ declare const searchResultDescriptionMiddleware: AXPEntityModifier;
1936
+ declare const searchResultDescriptionMiddlewareProvider: AXPEntityModifierProvider;
1937
+
1938
+ /**
1939
+ * When enabled in regional settings ({@link AXPRegionalSetting.MultiLanguageSupport}), walks each
1940
+ * property's `schema.interface` widget tree and sets `options.multiLanguage` on matching text-like
1941
+ * editors (including nested GridLayout leaves such as `pre.content` / `post.summaryContent`), unless
1942
+ * the node already specifies `multiLanguage` (including explicit false to opt out).
1943
+ */
1944
+ declare const defaultMultiLanguageMiddleware: AXPEntityModifier;
1945
+ declare const defaultMultiLanguageMiddlewareProvider: AXPEntityModifierProvider;
1946
+
1947
+ /**
1948
+ * When an entity has no `interfaces.master.list.layouts.card`, creates a sensible default
1949
+ * from list columns and property names (title, description, remaining columns as card fields).
1950
+ */
1951
+ declare const defaultCardLayoutMiddleware: AXPEntityModifier;
1952
+ declare const defaultCardLayoutMiddlewareProvider: AXPEntityModifierProvider;
1953
+
1954
+ /**
1955
+ * Registers entity CRUD commands and queries for the given entity keys.
1956
+ * Use in app/module providers; consumes AXPEntityService from this package.
1957
+ */
1958
+ declare function provideEntity(entityKeys: string[]): EnvironmentProviders;
1959
+
1960
+ interface AXPGetEntityDetailsQueryInput {
1961
+ entity: string;
1962
+ id: string;
1963
+ }
1964
+ interface AXPGetEntityDetailsQueryResult {
1965
+ success: boolean;
1966
+ entityDefinition?: AXPEntity;
1967
+ entityData?: any;
1968
+ error?: string;
1969
+ }
1970
+ /**
1971
+ * Generic query to get entity details including entity definition and entity data
1972
+ * Can be used by any entity to retrieve its definition and data by ID
1973
+ */
1974
+ declare class AXPGetEntityDetailsQuery implements AXPQuery<AXPGetEntityDetailsQueryInput, AXPGetEntityDetailsQueryResult> {
1975
+ private readonly entityDefinitionRegistry;
1976
+ private readonly injector;
1977
+ /**
1978
+ * Execute the query to fetch entity definition and data
1979
+ * @param input - Query input containing entity and ID information
1980
+ */
1981
+ fetch(input: AXPGetEntityDetailsQueryInput): Promise<AXPGetEntityDetailsQueryResult>;
1982
+ /**
1983
+ * Get entity data using the entity's CRUD service
1984
+ * @param entity - Full entity path (ModuleName.EntityName)
1985
+ * @param id - Entity ID
1986
+ * @returns Promise resolving to entity data
1987
+ */
1988
+ private getEntityData;
1989
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPGetEntityDetailsQuery, never>;
1990
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPGetEntityDetailsQuery>;
1991
+ }
1992
+
1993
+ /**
1994
+ * i18n key for the synthetic root node ("all categories"). Resolve in templates with the translate pipe.
1995
+ */
1996
+ declare const AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY = "@general:terms.interface.selection.all-items";
1997
+ interface CategoryQueryEvent {
1998
+ skip: number;
1999
+ take: number;
2000
+ sort?: AXDataSourceSortOption[];
2001
+ filter?: {
2002
+ field?: string;
2003
+ value?: unknown;
2004
+ operator?: {
2005
+ type: string;
2006
+ };
2007
+ filters?: unknown[];
2008
+ logic?: string;
2009
+ };
2010
+ }
2011
+ interface CategoryQueryResult {
2012
+ items: Record<string, unknown>[];
2013
+ total?: number;
2014
+ totalCount?: number;
2015
+ }
2016
+ type CategoryQueryFunction = (event: CategoryQueryEvent) => Promise<CategoryQueryResult>;
2017
+ interface CategoryTreeConfig {
2018
+ entityKey: string;
2019
+ textField?: string;
2020
+ valueField?: string;
2021
+ parentKey?: string;
2022
+ }
2023
+ interface CategoryTreeNodeData {
2024
+ categoryEntityDef: AXPEntity | null;
2025
+ categoryEntityQueryFunc: CategoryQueryFunction | null;
2026
+ basicQueryEvent: CategoryQueryEvent;
2027
+ }
2028
+ declare class AXPCategoryTreeService {
2029
+ protected readonly entityResolver: AXPEntityDefinitionRegistryService;
2030
+ private readonly translation;
2031
+ /** Sort field for list queries (backend); matches configured category display field. */
2032
+ private getAlphabeticalSortOptions;
2033
+ /**
2034
+ * Sort tree nodes by resolved display title (locale-aware).
2035
+ * Ensures correct order for multi-language titles when storage order differs from UI order.
2036
+ */
2037
+ private sortTreeNodesByDisplayTitle;
2038
+ /**
2039
+ * Initialize category tree data source
2040
+ */
2041
+ initializeCategoryTree(config: CategoryTreeConfig): Promise<CategoryTreeNodeData | null>;
2042
+ /**
2043
+ * Create root node with children from items
2044
+ */
2045
+ createRootNode(items: Record<string, unknown>[], config: CategoryTreeConfig): Promise<AXTreeViewNode>;
2046
+ /**
2047
+ * Convert entity item to AXTreeViewNode format
2048
+ */
2049
+ convertToTreeNode(item: Record<string, unknown>, config: CategoryTreeConfig): AXTreeViewNode;
2050
+ /**
2051
+ * Load root categories
2052
+ */
2053
+ loadRootCategories(treeData: CategoryTreeNodeData, config: CategoryTreeConfig): Promise<Record<string, unknown>[] | null>;
2054
+ /**
2055
+ * Fetches a single category item by ID. Uses byKey when available (full item with parent),
2056
+ * otherwise falls back to list query with filter so ancestor chains can be built.
2057
+ */
2058
+ fetchItemById(id: string, treeData: CategoryTreeNodeData, config: CategoryTreeConfig): Promise<Record<string, unknown> | null>;
2059
+ /**
2060
+ * Load children for a given node
2061
+ */
2062
+ loadChildren(node: AXTreeViewNode, treeData: CategoryTreeNodeData, config: CategoryTreeConfig): Promise<AXTreeViewNode[]>;
2063
+ /**
2064
+ * Search categories recursively (all levels)
2065
+ */
2066
+ searchCategories(searchValue: string, treeData: CategoryTreeNodeData, config: CategoryTreeConfig): Promise<Record<string, unknown>[] | null>;
2067
+ /**
2068
+ * Update children at a specific node in the tree
2069
+ */
2070
+ updateChildrenAtPath(nodes: AXTreeViewNode[], targetId: string, childNodes: AXTreeViewNode[]): AXTreeViewNode[];
2071
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPCategoryTreeService, never>;
2072
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPCategoryTreeService>;
2073
+ }
2074
+
2075
+ declare class AXPRelatedColumnEnrichmentService {
2076
+ private readonly metadataResolver;
2077
+ /**
2078
+ * Enriches entity columns with:
2079
+ * 1. dataPath for FK columns (e.g. fromPersonId) derived from lookup property schema
2080
+ * 2. title and showAs from related entity properties for dotted paths (e.g. person.firstName)
2081
+ */
2082
+ enrich(entity: AXPEntity): Promise<AXPEntity>;
2083
+ /**
2084
+ * Derives dataPath for FK columns from lookup property schema.
2085
+ * Uses expose.target where source matches textField (default 'title').
2086
+ */
2087
+ private deriveDataPathForFkColumn;
2088
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPRelatedColumnEnrichmentService, never>;
2089
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPRelatedColumnEnrichmentService>;
2090
+ }
2091
+
2092
+ interface AXPRelatedColumnMetadata {
2093
+ title?: string;
2094
+ showAs?: AXPEntityTableColumn['showAs'];
2095
+ }
2096
+ declare class AXPRelatedColumnMetadataResolver {
2097
+ private readonly entityLoader;
2098
+ /**
2099
+ * Resolves title and showAs for a column that references a related entity property via dotted path.
2100
+ * Uses relatedEntities when available; falls back to lookup expose when not.
2101
+ */
2102
+ resolve(entity: AXPEntity, columnName: string): Promise<AXPRelatedColumnMetadata | null>;
2103
+ /**
2104
+ * Finds a lookup property whose expose target matches the dotted path.
2105
+ * Returns the lookup's entity string (e.g. 'PersonCore.Person') or null.
2106
+ */
2107
+ private findLookupEntityByExposeTarget;
2108
+ /**
2109
+ * Derives showAs from source property schema.
2110
+ * Passes through the full interface (type, options, children) for column display.
2111
+ */
2112
+ private deriveShowAs;
2113
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPRelatedColumnMetadataResolver, never>;
2114
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPRelatedColumnMetadataResolver>;
2115
+ }
2116
+
2117
+ interface IEntitySelectorStage {
2118
+ /** Select target entity using "module.entity" format */
2119
+ entity(fullName: string): IInterfaceSelectorStage;
2120
+ }
2121
+ interface IInterfaceSelectorStage {
2122
+ /** Use master.create interface */
2123
+ create(initialData?: any): IPropertyFilterStage;
2124
+ /** Use master.update interface. Accepts id (string) or full record data (object). */
2125
+ update(data: string | Record<string, any>): IPropertyFilterStage;
2126
+ /** Use master.single interface (read-only view). Accepts id (string) or full record data (object). */
2127
+ single(data: string | Record<string, any>): IPropertyFilterStage;
2128
+ }
2129
+ interface IPropertyFilterStage {
2130
+ /** Only include provided property names (by AXPEntityProperty.name). Mutually exclusive with exclude(). */
2131
+ include(...propertyNames: string[]): IPropertyFilterStage;
2132
+ /** Exclude provided property names (by AXPEntityProperty.name). Ignored if include() was already set. */
2133
+ exclude(...propertyNames: string[]): IPropertyFilterStage;
2134
+ /** Mark provided property names as readonly. Overrides property schema for display. */
2135
+ readonlyProperties(...propertyNames: string[]): IPropertyFilterStage;
2136
+ /** Optionally override dialog title */
2137
+ title(text: string): IPropertyFilterStage;
2138
+ /** Provide initial dialog context/model data */
2139
+ context(context: any): IPropertyFilterStage;
2140
+ /** Override dialog size (e.g., 'sm' | 'md' | 'lg' | 'xl' | 'full') */
2141
+ size(size: AXPopupSizeType): IPropertyFilterStage;
2142
+ /** Configure footer actions (cancel/submit/custom). If not called, defaults to cancel+submit. */
2143
+ actions(delegate: (a: IActionBuilder) => void): IPropertyFilterStage;
2144
+ /**
2145
+ * Handler invoked when user clicks an action. Receives AXPDialogRef.
2146
+ * If handler throws, dialog stays open for retry.
2147
+ * If handler returns, dialog closes and show() resolves with the return value.
2148
+ */
2149
+ onAction<T = any>(handler: (dialogRef: AXPDialogRef) => T | Promise<T>): IPropertyFilterStage & {
2150
+ show(): Promise<T>;
2151
+ };
2152
+ /** Add an extra field into a specific group, using the original field builder API */
2153
+ field(groupId: string, path: string, delegate?: (field: CompatFormFieldBuilder) => void): IPropertyFilterStage;
2154
+ /** Build and return the widget node without showing dialog */
2155
+ build(): Promise<AXPWidgetNode>;
2156
+ /** Show dialog */
2157
+ show(): Promise<AXPDialogRef>;
2158
+ mode(mode: 'edit' | 'view'): IPropertyFilterStage;
2159
+ }
2160
+ declare class AXPEntityFormBuilderService implements IEntitySelectorStage {
2161
+ private readonly entityRegistry;
2162
+ private readonly layoutBuilder;
2163
+ private readonly deviceService;
2164
+ private readonly expressionEvaluator;
2165
+ entity(fullName: string): IInterfaceSelectorStage;
2166
+ /**
2167
+ * Fetches a record by ID for the specified entity.
2168
+ * @param fullName - Entity full name in "module.entity" format
2169
+ * @param id - Record ID to fetch
2170
+ * @returns Promise resolving to the record data, or empty object if not found
2171
+ */
2172
+ getRecordById(fullName: string, id: string): Promise<Record<string, any>>;
2173
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityFormBuilderService, never>;
2174
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityFormBuilderService>;
2175
+ }
2176
+ type CompatFormFieldBuilder = {
2177
+ path(path: string): any;
2178
+ layout(config: any): any;
2179
+ visible(condition: boolean | string): any;
2180
+ readonly(condition: boolean | string): any;
2181
+ customWidget(type: string, options?: any): any;
2182
+ } & Partial<IFormFieldBuilder>;
2183
+
2184
+ declare const AXP_ENTITY_STORAGE_BACKEND: InjectionToken<AXPEntityStorageService<any, any, any, any, any>>;
2185
+ declare const AXP_ENTITY_STORAGE_MIDDLEWARE: InjectionToken<AXPEntityStorageMiddleware<any, any, any, any, any>[]>;
2186
+
2187
+ declare class AXPMiddlewareEntityStorageService<TKey = any, TDetailDto extends AXPEntityDetailDto<TKey> = any, TListItemDto extends AXPEntityListItemDto<TKey> = any, TCreateDto extends AXPEntityCreateDto = any, TUpdateDto extends AXPEntityUpdateDto<TKey> = any> extends AXPEntityStorageService<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto> {
2188
+ private readonly backend;
2189
+ private readonly allMiddlewares;
2190
+ private readonly injector;
2191
+ /** In-flight read requests - identical parallel requests share one execution */
2192
+ private readonly inFlight;
2193
+ get dbName(): string;
2194
+ private filterMiddlewares;
2195
+ private compose;
2196
+ private run;
2197
+ private createCtx;
2198
+ initial(entityName: string, collection: TCreateDto[], options?: {
2199
+ mergeType?: 'merge' | 'replace';
2200
+ uniqueKeys?: string[];
2201
+ }): Promise<TCreateDto[]>;
2202
+ getOne(entityName: string, id: TKey): Promise<TDetailDto>;
2203
+ updateOne(entityName: string, id: TKey, keyValues: Omit<Partial<TUpdateDto>, 'id'>): Promise<TDetailDto>;
2204
+ deleteOne(entityName: string, id: TKey): Promise<void>;
2205
+ insertOne(entityName: string, entity: TCreateDto): Promise<TKey>;
2206
+ getAll(entityName: string): Promise<TListItemDto[]>;
2207
+ query(entityName: string, request: AXPQueryRequest): Promise<AXPPagedListResult<TListItemDto>>;
2208
+ count(entityName: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>): Promise<number>;
2209
+ queryAll(entityName: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>, options?: AXPEntityQueryAllOptions): Promise<AXPEntityQueryAllResult<TListItemDto>>;
2210
+ getMany(entityName: string, ids: TKey[]): Promise<(TListItemDto | null)[]>;
2211
+ exists(entityName: string, id: TKey): Promise<boolean>;
2212
+ upsertOne(entityName: string, entity: TCreateDto, options?: {
2213
+ merge?: boolean;
2214
+ }): Promise<TKey>;
2215
+ aggregate(entityName: string, request: AXPEntityAggregateRequest, options?: AXPEntityAggregateOptions): Promise<AXPEntityAggregateResult>;
2216
+ private runWithDedup;
2217
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMiddlewareEntityStorageService<any, any, any, any, any>, never>;
2218
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPMiddlewareEntityStorageService<any, any, any, any, any>>;
2219
+ }
2220
+
2221
+ declare function entityMasterCreateAction(): AXPEntityAction;
2222
+ declare function entityMasterEditAction(): AXPEntityAction;
2223
+ declare function entityMasterBulkDeleteAction(): AXPEntityAction;
2224
+ declare function entityMasterViewAction(): AXPEntityAction;
2225
+ declare function entityMasterDeleteAction(): AXPEntityAction;
2226
+ declare function entityMasterCrudActions(options?: {
2227
+ create?: boolean;
2228
+ delete?: boolean;
2229
+ view?: boolean;
2230
+ edit?: boolean;
2231
+ }): AXPEntityAction[];
2232
+ declare function entityMasterRecordActions(): AXPEntityAction[];
2233
+ declare function entityDetailsCreateActions(parentId: string): AXPEntityAction;
2234
+ /**
2235
+ * Type-level Create with empty `process.data`; the FK is supplied from `relatedEntity.persistence.foreignKeyField`
2236
+ * when the related list is built (see `mergeForeignKeyFieldIntoCreateActions`).
2237
+ */
2238
+ declare function entityDetailsCreateActionsDeferredParent(): AXPEntityAction;
2239
+ /**
2240
+ * Ensures each type-level `Entity:Create` action includes `process.data[foreignKeyField]` bound to the parent row id.
2241
+ */
2242
+ declare function mergeForeignKeyFieldIntoCreateActions(foreignKeyField: string | undefined, actions: AXPEntityAction[] | undefined): AXPEntityAction[];
2243
+ /** Property names hidden on nested Create from a related list (`excludeProperties` plus `foreignKeyField` when set). */
2244
+ declare function collectNestedCreateHiddenProperties(relatedEntity: AXPRelatedEntity): string[] | undefined;
2245
+ declare function entityDetailsSimpleCondition(fk: string): AXPQueryFilter;
2246
+ declare function entityDetailsReferenceCondition(type: string): AXPQueryFilter[];
2247
+ declare function entityDetailsEditAction(): AXPEntityAction;
2248
+ declare function entityDetailsNewEditAction(): AXPEntityAction;
2249
+ declare function entityOverrideDetailsViewAction(): AXPEntityAction;
2250
+ declare function entityDetailsCrudActions(parentId?: string, options?: {
2251
+ create?: boolean;
2252
+ delete?: boolean;
2253
+ view?: boolean;
2254
+ edit?: boolean;
2255
+ }): AXPEntityAction[];
2256
+ declare function entityDetailsReferenceCreateActions(type: string): AXPEntityAction[];
2257
+ type AXPEntityChangeSet = {
2258
+ [key: string]: {
2259
+ oldValue: any;
2260
+ newValue: any;
2261
+ added?: any[];
2262
+ removed?: any[];
2263
+ };
2264
+ };
2265
+ /**
2266
+ * Computes a diff between two plain objects with array-aware semantics.
2267
+ * - For arrays of objects with an id field, computes added/removed by id.
2268
+ * - For arrays of primitives or objects without id, uses deep equality.
2269
+ * - For scalars/objects, reports oldValue/newValue when changed.
2270
+ */
2271
+ declare function detectEntityChanges(oldObj: any, newObj: any): AXPEntityChangeSet;
2272
+
2273
+ declare class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent implements OnInit {
2274
+ protected readonly categoryTreeService: AXPCategoryTreeService;
2275
+ /** i18n key for the synthetic "all items" root row; resolved in the template with the translate pipe. */
2276
+ protected readonly categoryTreeRootTitleI18nKey = "@general:terms.interface.selection.all-items";
2277
+ private readonly translationService;
2278
+ protected readonly highlightService: AXHighlightService;
2279
+ private readonly changeDetectorRef;
2280
+ entityKey: _angular_core.WritableSignal<string>;
2281
+ textField: _angular_core.WritableSignal<string>;
2282
+ valueField: _angular_core.WritableSignal<string>;
2283
+ allowMultiple: _angular_core.WritableSignal<boolean>;
2284
+ selectedValues: _angular_core.WritableSignal<string[]>;
2285
+ /** Optional input for when popup passes selected values via inputs instead of data */
2286
+ selectedValuesInput: _angular_core.WritableSignal<string[]>;
2287
+ searchPlaceholder: _angular_core.WritableSignal<string>;
2288
+ excludedNodeId: _angular_core.WritableSignal<string | undefined>;
2289
+ searchWithChildren: _angular_core.WritableSignal<boolean>;
2290
+ protected tree: _angular_core.Signal<AXTreeViewComponent | undefined>;
2291
+ protected loading: _angular_core.WritableSignal<boolean>;
2292
+ protected selectedNodeIds: _angular_core.WritableSignal<string[]>;
2293
+ protected searchValue: _angular_core.WritableSignal<string>;
2294
+ protected searchResultCount: _angular_core.WritableSignal<number>;
2295
+ protected isSearching: _angular_core.WritableSignal<boolean>;
2296
+ protected resultsFoundText: _angular_core.WritableSignal<string>;
2297
+ protected noRecordsTitle: _angular_core.WritableSignal<string>;
2298
+ private currentSearchTerm;
2299
+ private isRefreshing;
2300
+ private isUpdatingSelection;
2301
+ /**
2302
+ * Computed property to check if we should show the "no search results" empty state.
2303
+ * Returns true when search is active, not searching, and no results found.
2304
+ */
2305
+ protected readonly showNoSearchResults: _angular_core.Signal<boolean>;
2306
+ protected treeData: CategoryTreeNodeData | null;
2307
+ private treeConfig;
2308
+ private nodeDataCache;
2309
+ private matchingNodeIds;
2310
+ private relevantNodeIds;
2311
+ private expandedNodesBeforeSearch;
2312
+ private nodesExpandedDuringSearch;
2313
+ private initialExpandSyncDone;
2314
+ constructor();
2315
+ ngOnInit(): void;
2316
+ private initializeTree;
2317
+ /**
2318
+ * Called when popup data arrives after ngOnInit: load data, set selection, expand and sync.
2319
+ */
2320
+ private runInitialExpandAndSync;
2321
+ /**
2322
+ * Runs expand path + sync selection once the tree viewChild is available.
2323
+ * Uses retry loop so we don't run before the view has rendered the tree.
2324
+ */
2325
+ private runExpandAndSyncWhenTreeReady;
2326
+ /**
2327
+ * Handles search input value changes - Uses server-side search for efficiency and reliability
2328
+ */
2329
+ handleSearchChange(event: AXValueChangedEvent<string>): Promise<void>;
2330
+ /**
2331
+ * Collects all parent IDs for the given search results
2332
+ * Handles both nested 'parent' object and 'parentId' field in search results
2333
+ * Recursively fetches parent nodes to build the full parent chain
2334
+ */
2335
+ private collectParentIds;
2336
+ /**
2337
+ * Collects children IDs for matching search results recursively
2338
+ * Adds all descendants (children, grandchildren, etc.) to relevantNodeIds so they appear in the filtered tree
2339
+ */
2340
+ private collectChildrenIds;
2341
+ /**
2342
+ * Recursively collects all descendant IDs for a given node
2343
+ */
2344
+ private collectChildrenRecursively;
2345
+ /**
2346
+ * Fetches a single item by ID. Uses category tree service so byKey is used when available
2347
+ * (returns full item with parent/parentId for building ancestor chains).
2348
+ */
2349
+ private fetchItemById;
2350
+ /**
2351
+ * Sorts parent IDs by their depth (root first, leaves last)
2352
+ * Optimized to use cached data and batch fetch missing items
2353
+ */
2354
+ private sortParentsByDepth;
2355
+ /**
2356
+ * Updates translated messages for search results
2357
+ */
2358
+ private updateTranslatedMessages;
2359
+ /**
2360
+ * Resets search state and restores tree to original expanded state
2361
+ */
2362
+ private resetSearch;
2363
+ /**
2364
+ * Restores selection state after tree reload.
2365
+ * Expands ancestor nodes and selects the previously selected leaf nodes.
2366
+ */
2367
+ private restoreSelectionAfterReload;
2368
+ protected onNodeSelect(event: AXTreeViewNodeSelectEvent): Promise<void>;
2369
+ /** Datasource callback for tree-view component. */
2370
+ protected datasource: (id?: string) => Promise<AXTreeViewNode[]>;
2371
+ protected onConfirm(): Promise<void>;
2372
+ protected onCancel(): Promise<void>;
2373
+ /**
2374
+ * Clears all selected items
2375
+ */
2376
+ protected onClearAll(): void;
2377
+ /**
2378
+ * Checks if a node matches the current search term
2379
+ */
2380
+ protected isMatchingNode(nodeId: string): boolean;
2381
+ /**
2382
+ * Checks if a node is currently selected
2383
+ */
2384
+ protected isNodeSelected(nodeId: string | number | undefined): boolean;
2385
+ /**
2386
+ * Expands parent nodes, collects all LEAF descendants, and selects them visually.
2387
+ * If the parent itself is a leaf (no children), it will be added.
2388
+ * When prefetchedChildren is provided, avoids an extra datasource(parentId) call.
2389
+ */
2390
+ private selectAllLeafDescendants;
2391
+ /**
2392
+ * Removes all LEAF descendants from selectedNodeIds.
2393
+ * For 'all' node: clears everything and uses tree's deselectAll().
2394
+ * For other nodes: tree handles visual state via user click.
2395
+ */
2396
+ private deselectAllLeafDescendants;
2397
+ /**
2398
+ * Recursively expands parent nodes and collects LEAF node IDs.
2399
+ * When treeComponent is provided, expands each parent node before loading children.
2400
+ * When prefetchedChildren is provided, uses it instead of calling datasource(parentId) (one less API call).
2401
+ * Fetches each node's children at most once by passing grandchildren when recursing.
2402
+ */
2403
+ private collectLeafNodes;
2404
+ /**
2405
+ * Checks if a node has children
2406
+ */
2407
+ private nodeHasChildren;
2408
+ /**
2409
+ * Checks if a node is a leaf (has no children)
2410
+ */
2411
+ private isLeafNodeCheck;
2412
+ /**
2413
+ * Caches node data from a tree node
2414
+ */
2415
+ private cacheNodeFromTreeNode;
2416
+ /**
2417
+ * Builds complete ancestor chains for all selected node IDs.
2418
+ * Returns a Map where key is the selected node ID and value is array of ancestor IDs from root to parent.
2419
+ * Batch-fetches missing node and ancestor data in parallel to minimize API calls.
2420
+ */
2421
+ private buildAncestorChains;
2422
+ /**
2423
+ * Expands ancestor nodes in order from root to leaf.
2424
+ * This ensures parent nodes are loaded into the tree before selecting children.
2425
+ */
2426
+ private expandAncestorNodesInOrder;
2427
+ /** Waits until the node is expanded (tree has loaded children). Polls so deep paths load. */
2428
+ private waitForNodeExpanded;
2429
+ /**
2430
+ * Syncs selection state with the tree component.
2431
+ * Selects leaf nodes and manually updates parent states (indeterminate/selected).
2432
+ */
2433
+ private syncSelectionWithTree;
2434
+ /**
2435
+ * Updates parent node states (selected/indeterminate) based on children selection.
2436
+ * Called after leaf nodes are selected to properly show parent states.
2437
+ * Works bottom-up from deepest parents to root, tracking states in a Map.
2438
+ */
2439
+ private updateParentStatesAfterSelection;
2440
+ /**
2441
+ * Loads node data for IDs that are selected but not yet in the cache.
2442
+ * This is critical for pre-selected values in collapsed branches.
2443
+ * Fetches all missing IDs in parallel to minimize API calls and latency.
2444
+ */
2445
+ private loadMissingNodeData;
2446
+ /**
2447
+ * For each selected id, if cached item has no parent (e.g. batch query returned minimal fields),
2448
+ * re-fetch by id so we have parent/parentId for building ancestor chains.
2449
+ * Fetches all needing refresh in parallel.
2450
+ */
2451
+ private ensureParentDataInCache;
2452
+ /**
2453
+ * Resolves parent ID from node data: supports nested `parent` object or flat parentId/parentKey.
2454
+ */
2455
+ private getParentIdFromNodeData;
2456
+ /**
2457
+ * Marks nodes as selected in the tree structure based on selectedNodeIds.
2458
+ * This ensures pre-selected nodes appear selected when the tree is rendered.
2459
+ */
2460
+ private markNodesAsSelected;
2461
+ /**
2462
+ * Marks a single node as selected if it's in the selectedNodeIds list.
2463
+ */
2464
+ private markNodeAsSelectedIfNeeded;
2465
+ /**
2466
+ * Marks a node and its children as disabled if the node ID matches the excluded ID.
2467
+ */
2468
+ private markNodeAsDisabled;
2469
+ /**
2470
+ * Processes root node: marks excluded as disabled, marks selected, and syncs selection with tree component
2471
+ */
2472
+ private processRootNode;
2473
+ /**
2474
+ * Processes child nodes: marks excluded as disabled
2475
+ * Selection marking is handled in datasource callback ONLY during initial load
2476
+ */
2477
+ private processChildNodes;
2478
+ /**
2479
+ * Caches node data from items array
2480
+ */
2481
+ private cacheNodeData;
2482
+ /**
2483
+ * Caches node data from tree nodes
2484
+ */
2485
+ private cacheNodeDataFromNodes;
2486
+ /**
2487
+ * Calculate the full path from root to the selected node.
2488
+ * Returns an array of strings like ["Operations", "IT Operations"] for node "IT Operations" under parent "Operations".
2489
+ * Uses tree-view's getNodePath() API when available, otherwise falls back to manual calculation.
2490
+ */
2491
+ private calculateNodePath;
2492
+ /**
2493
+ * Manual path calculation fallback
2494
+ */
2495
+ private calculateNodePathManually;
2496
+ /**
2497
+ * Get the display title for a node.
2498
+ */
2499
+ private getNodeTitle;
2500
+ private getSelectedItems;
2501
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityCategoryTreeSelectorComponent, never>;
2502
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityCategoryTreeSelectorComponent, "axp-entity-category-tree-selector", never, {}, {}, never, never, true, never>;
2503
+ }
2504
+
2505
+ declare class AXPEntityCategoryWidgetColumnComponent extends AXPColumnWidgetComponent<any> {
2506
+ protected readonly entityDetailPopoverService: AXPEntityDetailPopoverService;
2507
+ protected readonly formatService: AXFormatService;
2508
+ protected readonly entityResolver: AXPEntityDefinitionRegistryService;
2509
+ private readonly categoryBatchResolver;
2510
+ private readonly rawValueSignal;
2511
+ set rawValueInput(value: any);
2512
+ protected entity: _angular_core.Signal<string>;
2513
+ protected valueField: _angular_core.Signal<string>;
2514
+ protected textField: _angular_core.Signal<string>;
2515
+ protected columnName: _angular_core.Signal<string>;
2516
+ protected defaultTextField: _angular_core.Signal<string>;
2517
+ protected displayField: _angular_core.Signal<string>;
2518
+ protected host: ElementRef<any>;
2519
+ private entityDef;
2520
+ protected displayItems: _angular_core.WritableSignal<any[]>;
2521
+ protected selectedItemIndex: _angular_core.WritableSignal<number>;
2522
+ private efEntity;
2523
+ private efDisplay;
2524
+ protected visibleItems: _angular_core.Signal<any[]>;
2525
+ protected columnItems: _angular_core.Signal<AXPColumnItemListItem[]>;
2526
+ protected showItemDetail(item: any, index: number): Promise<void>;
2527
+ protected handleItemClick(listItem: AXPColumnItemListItem): void;
2528
+ protected getItemPath(item: any): string[];
2529
+ protected hasParent(item: any): boolean;
2530
+ protected getItemText(item: any): string;
2531
+ protected joinPath(path: string[]): string;
2532
+ protected getItemId(item: any): string;
2533
+ protected getBreadcrumbPath(item: any): string;
2534
+ private resolveItemsWithPaths;
2535
+ /**
2536
+ * Build path from categories array when record has full chain (id, parentId, title).
2537
+ * Used when middleware enriches categories on create/update.
2538
+ */
2539
+ private buildItemWithPathFromChain;
2540
+ private extractItemWithPath;
2541
+ /**
2542
+ * Calculate the full path from root to the item.
2543
+ * Returns an array of strings like ["C", "B"] for item B under parent C.
2544
+ */
2545
+ private calculateItemPath;
2546
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityCategoryWidgetColumnComponent, never>;
2547
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityCategoryWidgetColumnComponent, "axp-entity-category-widget-column", never, { "rawValue": { "alias": "rawValue"; "required": false; }; "rowData": { "alias": "rowData"; "required": false; }; "rawValueInput": { "alias": "rawValue"; "required": false; }; }, {}, never, never, true, never>;
2548
+ }
2549
+
2550
+ interface AXPEntityCategoryWidgetOptions {
2551
+ disabled?: boolean | AXPExpression;
2552
+ readonly?: boolean | AXPExpression;
2553
+ placeholder?: string;
2554
+ entity?: string;
2555
+ multiple?: boolean;
2556
+ textField?: string;
2557
+ valueField?: string;
2558
+ parentKey?: string;
2559
+ expose?: Array<{
2560
+ source: string;
2561
+ target: string;
2562
+ }>;
2563
+ allowClear?: boolean;
2564
+ look?: 'select' | 'lookup';
2565
+ maxVisible?: number;
2566
+ characterLimit?: number | 'auto';
2567
+ sectionLimit?: number | 'auto';
2568
+ }
2569
+
2570
+ declare class AXPEntityCategoryWidgetEditComponent extends AXPValueWidgetComponent<any, AXPEntityCategoryWidgetOptions> {
2571
+ #private;
2572
+ protected readonly entityResolver: AXPEntityDefinitionRegistryService;
2573
+ protected readonly popupService: AXPopupService;
2574
+ private readonly translateService;
2575
+ protected readonly cdr: ChangeDetectorRef;
2576
+ protected entity: _angular_core.Signal<string>;
2577
+ protected multiple: _angular_core.Signal<boolean>;
2578
+ protected disabled: _angular_core.Signal<boolean>;
2579
+ protected textField: _angular_core.Signal<string>;
2580
+ protected valueField: _angular_core.Signal<string>;
2581
+ protected expose: _angular_core.Signal<{
2582
+ source: string;
2583
+ target: string;
2584
+ }[] | undefined>;
2585
+ protected allowClear: _angular_core.Signal<boolean>;
2586
+ protected characterLimit: _angular_core.Signal<number | "auto">;
2587
+ protected sectionLimit: _angular_core.Signal<number | "auto">;
2588
+ protected defaultTextField: _angular_core.Signal<string>;
2589
+ protected displayField: _angular_core.Signal<string>;
2590
+ protected searchPlaceholderText: _angular_core.WritableSignal<string>;
2591
+ protected selectedItems: _angular_core.WritableSignal<any[]>;
2592
+ protected isLoading: _angular_core.WritableSignal<boolean>;
2593
+ protected isOpen: _angular_core.WritableSignal<boolean>;
2594
+ protected tagBox: _angular_core.Signal<AXTagBoxComponent | undefined>;
2595
+ protected searchTerm: _angular_core.WritableSignal<string | null>;
2596
+ private entityDef;
2597
+ /**
2598
+ * Flag to prevent the value effect from running during internal updates.
2599
+ * This prevents circular dependency when setItems() calls setValue().
2600
+ */
2601
+ private isInternalUpdate;
2602
+ protected handleAddClick(e: AXClickEvent): void;
2603
+ protected handleValueChange(e: AXValueChangedEvent): void;
2604
+ protected handleOnBlur(e: AXFocusEvent): void;
2605
+ protected handleKeyUp(e: AXHtmlEvent): Promise<void>;
2606
+ protected handleClearClick(): void;
2607
+ protected handleRemoveItem(event: Event, index: number): Promise<void>;
2608
+ clearInput(): void;
2609
+ private showTreeSelector;
2610
+ clear(): void;
2611
+ private findByValue;
2612
+ private setItems;
2613
+ private singleOrMultiple;
2614
+ protected getItemLabel(item: any): string;
2615
+ /**
2616
+ * Get item path as array for breadcrumb component (raw MLS or string per segment).
2617
+ */
2618
+ protected getItemPath(item: any): AXPMultiLanguageString[];
2619
+ /**
2620
+ * Join path array with separator.
2621
+ * Override this method to customize the separator (e.g., " > ", " -> ", " / ")
2622
+ */
2623
+ protected joinPath(path: unknown[]): string;
2624
+ protected getItemId(item: any): string;
2625
+ /**
2626
+ * Calculate the full path from root to the item.
2627
+ * Returns an array of strings like ["C", "B"] for item B under parent C.
2628
+ */
2629
+ private calculateItemPath;
2630
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityCategoryWidgetEditComponent, never>;
2631
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityCategoryWidgetEditComponent, "axp-entity-category-widget-edit", never, {}, {}, never, never, true, never>;
2632
+ }
2633
+
2634
+ declare class AXPEntityCategoryWidgetViewComponent extends AXPValueWidgetComponent<any> {
2635
+ protected readonly entityResolver: AXPEntityDefinitionRegistryService;
2636
+ protected entity: _angular_core.Signal<string>;
2637
+ protected multiple: _angular_core.Signal<boolean>;
2638
+ protected valueField: _angular_core.Signal<string>;
2639
+ protected textField: _angular_core.Signal<string>;
2640
+ protected badgeClass: _angular_core.Signal<string>;
2641
+ protected displayField: _angular_core.Signal<string>;
2642
+ protected loading: _angular_core.WritableSignal<boolean>;
2643
+ private entityDef;
2644
+ protected displayItems: _angular_core.WritableSignal<{
2645
+ id: string;
2646
+ titleRaw: AXPMultiLanguageString | null | undefined;
2647
+ }[]>;
2648
+ private efEntity;
2649
+ private efDisplay;
2650
+ private extractItem;
2651
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityCategoryWidgetViewComponent, never>;
2652
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityCategoryWidgetViewComponent, "axp-entity-category-widget-view", never, {}, {}, never, never, true, never>;
2653
+ }
2654
+
2655
+ declare const AXPEntityCategoryWidget: AXPWidgetConfig;
2656
+
2657
+ declare class AXPTruncatedBreadcrumbComponent implements OnDestroy {
2658
+ private readonly mlsResolver;
2659
+ /** Plain string or locale map per segment; truncation uses resolved text (see {@link resolvedSectionTexts}). */
2660
+ sections: _angular_core.InputSignal<readonly (_acorex_core_translation.AXMultiLanguageString | null | undefined)[]>;
2661
+ characterLimit: _angular_core.InputSignal<number | "auto">;
2662
+ sectionLimit: _angular_core.InputSignal<number | "auto">;
2663
+ separatorIcon: _angular_core.InputSignal<string>;
2664
+ ellipsisIcon: _angular_core.InputSignal<string>;
2665
+ eyeIcon: _angular_core.InputSignal<string>;
2666
+ protected container: _angular_core.Signal<ElementRef<HTMLDivElement> | undefined>;
2667
+ protected isExpanded: _angular_core.WritableSignal<boolean>;
2668
+ private containerWidth;
2669
+ private resizeObserver;
2670
+ /** Resolved display strings for length / ellipsis (same rules as the pipe). */
2671
+ protected resolvedSectionTexts: _angular_core.Signal<string[]>;
2672
+ protected effectiveCharacterLimit: _angular_core.Signal<number>;
2673
+ protected effectiveSectionLimit: _angular_core.Signal<number>;
2674
+ protected hasTruncatedText: _angular_core.Signal<boolean>;
2675
+ protected hasHiddenSections: _angular_core.Signal<boolean>;
2676
+ /**
2677
+ * canToggle: If this is false, NO Eye Icon and NO Click events will exist.
2678
+ */
2679
+ protected canToggle: _angular_core.Signal<boolean>;
2680
+ protected allSectionsTruncated: _angular_core.Signal<{
2681
+ text: string;
2682
+ original: string;
2683
+ }[]>;
2684
+ protected displayedSections: _angular_core.Signal<{
2685
+ text: string;
2686
+ original: string;
2687
+ }[]>;
2688
+ protected lastSection: _angular_core.Signal<{
2689
+ text: string;
2690
+ original: string;
2691
+ }>;
2692
+ protected fullPath: _angular_core.Signal<string>;
2693
+ constructor();
2694
+ ngOnDestroy(): void;
2695
+ protected handleSeparatorClick(event: Event): void;
2696
+ protected handleEllipsisClick(event: Event): void;
2697
+ protected handleCollapseClick(event: Event): void;
2698
+ private initializeResizeObserver;
2699
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTruncatedBreadcrumbComponent, never>;
2700
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPTruncatedBreadcrumbComponent, "axp-truncated-breadcrumb", never, { "sections": { "alias": "sections"; "required": false; "isSignal": true; }; "characterLimit": { "alias": "characterLimit"; "required": false; "isSignal": true; }; "sectionLimit": { "alias": "sectionLimit"; "required": false; "isSignal": true; }; "separatorIcon": { "alias": "separatorIcon"; "required": false; "isSignal": true; }; "ellipsisIcon": { "alias": "ellipsisIcon"; "required": false; "isSignal": true; }; "eyeIcon": { "alias": "eyeIcon"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2701
+ }
2702
+
2703
+ declare const AXPEntityDefinitionProviderWidget: AXPWidgetConfig;
2704
+ declare module '@acorex/platform/layout/widget-core' {
2705
+ interface AXPWidgetTypesMap {
2706
+ entityDefinitionProvider: 'entity-definition-provider-editor';
2707
+ }
2708
+ }
2709
+
2710
+ declare class AXPEntityDefinitionProviderWidgetEditComponent extends AXPProviderSelectWidgetEditBase {
2711
+ private readonly entityRegistry;
2712
+ /**
2713
+ * Last applied module filter (from context) to avoid redundant reloads.
2714
+ */
2715
+ private readonly lastModuleFilterKey;
2716
+ /**
2717
+ * Reloads entity options when `filterModuleField` changes in form context (not only via `widget.refresh()`).
2718
+ */
2719
+ private readonly reloadWhenModuleContextChanges;
2720
+ /**
2721
+ * Options:
2722
+ * - `filterModuleField`: sibling context field name (e.g. `entityListModule`); when set, only entities in that module are listed.
2723
+ * - `valueFormat`: `fullKey` (`module.name`, default) or `entityName` (short name only, for menus that store `entityListRef.entity`).
2724
+ */
2725
+ protected loadDataSourceRows(): Promise<Array<{
2726
+ value: string;
2727
+ title: string;
2728
+ }>>;
2729
+ refresh(): void;
2730
+ /**
2731
+ * Reads sibling field from context store data (same shape as `lodash/get` paths).
2732
+ */
2733
+ private readModuleFromContext;
2734
+ /**
2735
+ * Resolves a sibling field path relative to the current widget's parent path.
2736
+ */
2737
+ private resolveSiblingContextPath;
2738
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityDefinitionProviderWidgetEditComponent, never>;
2739
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityDefinitionProviderWidgetEditComponent, "axp-entity-definition-provider-widget-edit", never, {}, {}, never, never, true, never>;
2740
+ }
2741
+
2742
+ declare class AXPEntityListTableService {
2743
+ private readonly workflow;
2744
+ private readonly commandService;
2745
+ private readonly expressionEvaluator;
2746
+ private readonly settings;
2747
+ /**
2748
+ * Convert Entity to List Widget Options
2749
+ */
2750
+ convertEntityToListOptions(entity: AXPEntity, options: any, allActions: AXPEntityCommandTriggerViewModel[]): Promise<AXPDataListWidgetComponentOptions>;
2751
+ /**
2752
+ * Create DataSource for Entity
2753
+ */
2754
+ private createDataSource;
2755
+ /**
2756
+ * Convert Properties to Columns
2757
+ */
2758
+ private createColumnsFromProperties;
2759
+ /**
2760
+ * Map EntityTableColumn to ListWidgetColumn
2761
+ */
2762
+ private mapEntityColumnToWidgetColumn;
2763
+ /**
2764
+ * Convert Entity Actions to Row Commands
2765
+ */
2766
+ private createRowCommands;
2767
+ /**
2768
+ * Wraps string values with AXP_ROW_EXPR_PREFIX so widget-renderer does not
2769
+ * evaluate them (it only treats {{ ... }} as expressions). Data-list will
2770
+ * unwrap and evaluate per row with row data. Only used for secondary commands.
2771
+ */
2772
+ private wrapRowExpr;
2773
+ /**
2774
+ * Check if entity has Selected Scope Actions
2775
+ */
2776
+ private hasSelectedScopeActions;
2777
+ private evaluateExpressions;
2778
+ /**
2779
+ * Handle execution of a row command (shared by double-click and command handlers)
2780
+ */
2781
+ private handleRowCommand;
2782
+ /**
2783
+ * When a related entity list declares `excludeProperties`, row commands bypass the details page
2784
+ * `execute()` merge — apply the same exclusions for embedded create/update commands.
2785
+ */
2786
+ private mergeRelatedListFormOptions;
2787
+ /**
2788
+ * Create default events
2789
+ */
2790
+ private createDefaultEvents;
2791
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityListTableService, never>;
2792
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityListTableService>;
2793
+ }
2794
+
2795
+ interface AXPEntityListToolbarConvertOptions {
2796
+ excludeColumns?: string[];
2797
+ includeColumns?: string[];
2798
+ /** Related list: evaluated `AXPEntityTableColumn[]` from `AXPRelatedEntity.columns` */
2799
+ relatedTableColumns?: AXPEntityTableColumn[];
2800
+ customFilterDefinitions?: Partial<AXPFilterDefinition>[];
2801
+ }
2802
+ declare class AXPEntityListToolbarService {
2803
+ private readonly widgetResolver;
2804
+ /**
2805
+ * Convert Entity to Toolbar Options
2806
+ */
2807
+ convertEntityToolbarOptions(entity: AXPEntity, options: AXPEntityListToolbarConvertOptions | undefined): Promise<{
2808
+ filterDefinitions: AXPFilterDefinition[];
2809
+ columnDefinitions: AXPColumnQuery[];
2810
+ sortDefinitions: AXPSortDefinition[];
2811
+ }>;
2812
+ /**
2813
+ * Merges custom filter definitions into the entity-derived list by `field`.
2814
+ * Matching fields: custom properties are applied on top of the base definition.
2815
+ * Non-matching custom entries are appended.
2816
+ */
2817
+ private mergeFilterDefinitions;
2818
+ private filterFieldKey;
2819
+ private mergeFilterDefinition;
2820
+ /**
2821
+ * Create Filter Definitions for Toolbar
2822
+ */
2823
+ private createFilterDefinitions;
2824
+ /**
2825
+ * Create Column Definitions for Toolbar.
2826
+ * Includes both entity.properties and enriched columns (e.g. person.firstName with showAs).
2827
+ */
2828
+ private createColumnDefinitions;
2829
+ /**
2830
+ * Create Sort Definitions for Toolbar.
2831
+ * Includes entity.properties with sort enabled, plus enriched columns (dotted paths).
2832
+ */
2833
+ private createSortDefinitions;
2834
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityListToolbarService, never>;
2835
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityListToolbarService>;
2836
+ }
2837
+
2838
+ declare class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
2839
+ #private;
2840
+ protected entityService: AXPEntityDefinitionRegistryService;
2841
+ protected workflow: AXPWorkflowService;
2842
+ protected entityListTableService: AXPEntityListTableService;
2843
+ protected entityListToolbarService: AXPEntityListToolbarService;
2844
+ protected deviceService: AXPDeviceService;
2845
+ protected commandService: AXPCommandService;
2846
+ protected eventService: AXPBroadcastEventService;
2847
+ private readonly expressionEvaluator;
2848
+ private readonly route;
2849
+ protected isMounted: _angular_core.WritableSignal<boolean>;
2850
+ readonly entity: _angular_core.WritableSignal<AXPEntity | null>;
2851
+ protected listNode: _angular_core.WritableSignal<AXPWidgetNode | null>;
2852
+ protected list: _angular_core.Signal<AXPWidgetRendererDirective | undefined>;
2853
+ protected allWidgets: _angular_core.Signal<readonly AXPWidgetRendererDirective[]>;
2854
+ protected listWidget: _angular_core.WritableSignal<AXPWidgetRendererDirective | undefined>;
2855
+ protected toolbarWidget: _angular_core.Signal<AXPWidgetRendererDirective | undefined>;
2856
+ protected selectedItems: _angular_core.WritableSignal<any[]>;
2857
+ protected toolbarNode: _angular_core.WritableSignal<AXPWidgetNode | null>;
2858
+ protected destroyed: Subject<void>;
2859
+ protected entitySource: _angular_core.Signal<any>;
2860
+ protected excludeColumns: _angular_core.Signal<string[]>;
2861
+ protected includeColumns: _angular_core.Signal<string[]>;
2862
+ protected relatedTableColumns: _angular_core.Signal<AXPEntityTableColumn[] | undefined>;
2863
+ protected customFilterDefinitions: _angular_core.Signal<Partial<AXPFilterDefinition>[] | undefined>;
2864
+ protected externalActions: _angular_core.Signal<AXPEntityAction[]>;
2865
+ protected maxHeight: _angular_core.Signal<string>;
2866
+ protected showEntityActions: _angular_core.Signal<any>;
2867
+ protected showToolbar: _angular_core.Signal<any>;
2868
+ protected allActions: _angular_core.Signal<AXPEntityCommandTriggerViewModel[]>;
2869
+ protected primaryActions: _angular_core.Signal<AXPActionMenuItem[]>;
2870
+ protected handleUnselectAll(): void;
2871
+ protected secondaryActions: _angular_core.Signal<AXPActionMenuItem[]>;
2872
+ protected handleActionClick(item: AXPActionMenuItem): void;
2873
+ protected handleSecondaryActionClick(item: AXPActionMenuItem): void;
2874
+ protected execute(commandName: string, _data: unknown): Promise<void>;
2875
+ /**
2876
+ * Resolves toolbar commands including nested dropdown (`items`) actions.
2877
+ */
2878
+ private findToolbarAction;
2879
+ private evaluateToolbarExpressions;
2880
+ /**
2881
+ * Parses the `filters` query param (same shape as standalone entity list routes).
2882
+ */
2883
+ private parseFiltersFromRoute;
2884
+ /**
2885
+ * Route `filters` apply only when the active details `page` matches this list's entity
2886
+ * (e.g. WorkOrder filters must not affect FailureRegister on the same asset layout).
2887
+ */
2888
+ private shouldApplyRouteFilters;
2889
+ /**
2890
+ * Merges route filters into related-entity toolbar filters (route wins per field).
2891
+ */
2892
+ private mergeToolbarFilters;
2893
+ private getMergedToolbarFilters;
2894
+ /**
2895
+ * Applies merged route + parent-scope filters to the widget value and data source.
2896
+ */
2897
+ private applyMergedRouteFiltersToList;
2898
+ /**
2899
+ * Re-evaluates related-entity list filters from the live dialog form context (e.g. after create saves the main row id).
2900
+ */
2901
+ private applyRelatedFiltersFromContext;
2902
+ /**
2903
+ * Pushes current toolbar filters to the embedded list data source when both exist.
2904
+ * Returns false while data-list is still mounting (see deferred listNode.set in ngOnInit).
2905
+ */
2906
+ private pushToolbarFiltersToDataSource;
2907
+ /**
2908
+ * Writes toolbar filters from specs and pushes them onto the data source so refresh/reload keeps the parent scope.
2909
+ */
2910
+ private applyRelatedFiltersFromContextAndDatasource;
2911
+ /**
2912
+ * Refreshes the embedded data list (toolbar / workflow). In wizard mode, `refresh` is patched to re-apply scoped filters first.
2913
+ */
2914
+ private refreshGridWithParentScopedFilters;
2915
+ protected queries: undefined;
2916
+ /**
2917
+ * Validates that all required dependencies are available
2918
+ */
2919
+ private hasRequiredDependencies;
2920
+ /**
2921
+ * Handles all query-related changes (filters, sorts, columns)
2922
+ */
2923
+ private handleQueryChanges;
2924
+ /**
2925
+ * Analyzes what has changed between current and previous queries
2926
+ */
2927
+ private analyzeChanges;
2928
+ /**
2929
+ * Applies filter and sort changes to the data source
2930
+ */
2931
+ private applyDataSourceChanges;
2932
+ /**
2933
+ * Handles list refresh logic based on changes and mount status
2934
+ */
2935
+ private handleListRefresh;
2936
+ /**
2937
+ * Handles column-related changes
2938
+ * TODO: Implement column change logic
2939
+ */
2940
+ private handleColumnChanges;
2941
+ protected context: {};
2942
+ protected previousQueries: any;
2943
+ ngOnInit(): Promise<void>;
2944
+ ngAfterViewInit(): Promise<void>;
2945
+ ngOnDestroy(): void;
2946
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityListWidgetViewComponent, never>;
2947
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityListWidgetViewComponent, "ng-component", never, {}, {}, never, never, true, never>;
2948
+ }
2949
+
2950
+ declare const AXPEntityListWidget: AXPWidgetConfig;
2951
+
2952
+ declare class AXPEditFileUploaderCommand implements AXPCommand<{
2953
+ file: AXPFileListItem;
2954
+ plugins?: {
2955
+ name: string;
2956
+ options?: unknown;
2957
+ }[];
2958
+ excludePlugins?: string[];
2959
+ enableTitleDescription?: boolean;
2960
+ isNewFile?: boolean;
2961
+ }, AXPFileListItem> {
2962
+ private readonly layoutBuilder;
2963
+ private readonly translationService;
2964
+ private readonly hooks;
2965
+ execute(input: {
2966
+ file: AXPFileListItem;
2967
+ plugins?: {
2968
+ name: string;
2969
+ options?: unknown;
2970
+ }[];
2971
+ excludePlugins?: string[];
2972
+ enableTitleDescription?: boolean;
2973
+ isNewFile?: boolean;
2974
+ }): Promise<AXPExecuteCommandResult<AXPFileListItem>>;
2975
+ private showEditDialog;
2976
+ /**
2977
+ * Build form fields from hook items (old format parameters)
2978
+ */
2979
+ private buildFormFields;
2980
+ /**
2981
+ * Build groups/containers from hook groups (old format groups)
2982
+ */
2983
+ private buildGroups;
2984
+ /**
2985
+ * Apply widget configuration to field based on widget type
2986
+ */
2987
+ private applyWidget;
2988
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEditFileUploaderCommand, never>;
2989
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEditFileUploaderCommand>;
2990
+ }
2991
+
2992
+ declare class AXPFileListComponent implements OnInit, OnDestroy {
2993
+ private fileTypeService;
2994
+ private fileStorageService;
2995
+ private commandExecutor;
2996
+ private hooks;
2997
+ isLoading: _angular_core.WritableSignal<boolean>;
2998
+ private fileTypes;
2999
+ onRemove: _angular_core.OutputEmitterRef<AXPFileListItem>;
3000
+ onRevert: _angular_core.OutputEmitterRef<AXPFileListItem>;
3001
+ onRename: _angular_core.OutputEmitterRef<AXPFileListItem>;
3002
+ readonly: _angular_core.InputSignal<boolean>;
3003
+ fileEditable: _angular_core.InputSignal<boolean>;
3004
+ /** When true, edit dialog shows name, title and description fields. Default false. */
3005
+ enableTitleDescription: _angular_core.InputSignal<boolean>;
3006
+ multiple: _angular_core.InputSignal<boolean>;
3007
+ files: _angular_core.InputSignal<AXPFileListItem[]>;
3008
+ plugins: _angular_core.InputSignal<{
3009
+ name: string;
3010
+ options?: unknown;
3011
+ }[] | undefined>;
3012
+ excludePlugins: _angular_core.InputSignal<string[] | undefined>;
3013
+ capabilities: _angular_core.InputSignal<AXCFileUploaderCapabilities | undefined>;
3014
+ /**
3015
+ * All files should be displayed, even those with `deleted` status.
3016
+ * The template will handle the visual differences based on the status.
3017
+ */
3018
+ displayFiles: _angular_core.Signal<AXPFileListItem[]>;
3019
+ private fileIdToActions;
3020
+ private globalActions;
3021
+ private filesChangeEffect;
3022
+ private getDefaultActions;
3023
+ /** True when the widget is readonly or this file row is locked (`readOnly`). */
3024
+ isItemInteractionLocked(file: AXPFileListItem): boolean;
3025
+ actionsFor(file: AXPFileListItem, index: number): any[];
3026
+ private loadActionsFor;
3027
+ ngOnInit(): Promise<void>;
3028
+ private loadGlobalActions;
3029
+ protected getFileInfo(fileName: string): {
3030
+ icon: string;
3031
+ type: string;
3032
+ };
3033
+ handleFileDownload(event: AXClickEvent, file: AXPFileListItem): Promise<void>;
3034
+ handleFileRemove(event: AXClickEvent, file: AXPFileListItem): Promise<void>;
3035
+ /**
3036
+ * Handle revert action – emit the file so parent components can update the status.
3037
+ */
3038
+ handleFileRevert(event: AXClickEvent, file: AXPFileListItem): void;
3039
+ /**
3040
+ * Handle file edit action – open rename popup
3041
+ */
3042
+ handleFileEdit(event: any, file: AXPFileListItem): Promise<void>;
3043
+ ngOnDestroy(): void;
3044
+ runAction(action: any): Promise<void>;
3045
+ protected getActionColor(action: any): string;
3046
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPFileListComponent, never>;
3047
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPFileListComponent, "axp-file-list", never, { "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "fileEditable": { "alias": "fileEditable"; "required": false; "isSignal": true; }; "enableTitleDescription": { "alias": "enableTitleDescription"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "files": { "alias": "files"; "required": false; "isSignal": true; }; "plugins": { "alias": "plugins"; "required": false; "isSignal": true; }; "excludePlugins": { "alias": "excludePlugins"; "required": false; "isSignal": true; }; "capabilities": { "alias": "capabilities"; "required": false; "isSignal": true; }; }, { "onRemove": "onRemove"; "onRevert": "onRevert"; "onRename": "onRename"; }, never, never, true, never>;
3048
+ }
3049
+
3050
+ /** Stable fingerprint for one file row; ignores Blob binary content. */
3051
+ declare function fingerprintAttachmentItem(item: unknown): string;
3052
+ /** Order-independent fingerprint for attachment lists. */
3053
+ declare function fingerprintAttachments(value: unknown): string;
3054
+ /** True when lists represent the same attachments regardless of blob vs fileId shape. */
3055
+ declare function attachmentsSemanticallyEqual(a: unknown, b: unknown): boolean;
3056
+ /** Attachment rows that remain after a successful save (drops soft-deleted rows). */
3057
+ declare function committedAttachments(value: unknown): AXPFileListItem[];
3058
+ /**
3059
+ * Post-save attachment list: drops soft-deleted rows and promotes pending `attached` rows to `uploaded`
3060
+ * so deferred-save pages get the same delete/revert behavior as after a full reload.
3061
+ */
3062
+ declare function persistedAttachments(value: unknown): AXPFileListItem[];
3063
+
3064
+ interface AXPFileUploaderEntityFilesScope {
3065
+ name: string;
3066
+ id: string;
3067
+ field: string;
3068
+ }
3069
+ declare function isFileListItem(value: unknown): value is AXPFileListItem;
3070
+ /** Whether a list-row value represents one attachment (file item, id reference, or fileId source). */
3071
+ declare function isAttachmentListEntry(value: unknown): boolean;
3072
+ declare function attachmentFieldCount(fieldValue: unknown): number;
3073
+ declare function normalizeEntityFieldToFileList(fieldValue: unknown): AXPFileListItem[];
3074
+ declare function resolveFileUploaderEntityScope(options: Record<string, unknown>, rowData: Record<string, unknown> | undefined, fieldFallback?: string): AXPFileUploaderEntityFilesScope | undefined;
3075
+
3076
+ interface AXPFileUploaderLoadFilesInput extends AXPFileUploaderEntityFilesScope {
3077
+ }
3078
+ interface AXPFileUploaderLoadFilesResult {
3079
+ files: AXPFileListItem[];
3080
+ /** Count including file-id references, not only hydrated AXPFileListItem rows. */
3081
+ count: number;
3082
+ }
3083
+ declare class AXPFileUploaderLoadFilesQuery implements AXPQuery<AXPFileUploaderLoadFilesInput, AXPFileUploaderLoadFilesResult> {
3084
+ private readonly injector;
3085
+ fetch(input: AXPFileUploaderLoadFilesInput): Promise<AXPFileUploaderLoadFilesResult>;
3086
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPFileUploaderLoadFilesQuery, never>;
3087
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPFileUploaderLoadFilesQuery>;
3088
+ }
3089
+
3090
+ interface AXPFileUploaderSaveFilesInput extends AXPFileUploaderEntityFilesScope {
3091
+ files: AXPFileListItem[];
3092
+ }
3093
+ interface AXPFileUploaderSaveFilesResult {
3094
+ entityData: Record<string, unknown>;
3095
+ }
3096
+ declare class AXPFileUploaderSaveFilesCommand implements AXPCommand<AXPFileUploaderSaveFilesInput, AXPFileUploaderSaveFilesResult> {
3097
+ private readonly injector;
3098
+ execute(input: AXPFileUploaderSaveFilesInput): Promise<AXPExecuteCommandResult<AXPFileUploaderSaveFilesResult>>;
3099
+ }
3100
+
3101
+ /** Serializable upload action exposed via widget `api().getUploadActions()`. */
3102
+ interface AXPFileUploaderUploadActionDescriptor {
3103
+ plugin: string;
3104
+ text?: string;
3105
+ textKey?: string;
3106
+ icon?: string;
3107
+ }
3108
+ type AXPFileUploaderEditDialogMode = 'manual' | 'auto';
3109
+ interface AXPFileUploaderEditDialogFieldOptions {
3110
+ name?: boolean;
3111
+ title?: boolean;
3112
+ description?: boolean;
3113
+ }
3114
+ interface AXPFileUploaderEditDialogOptions {
3115
+ mode?: AXPFileUploaderEditDialogMode;
3116
+ fields?: AXPFileUploaderEditDialogFieldOptions;
3117
+ }
3118
+ declare function resolveFileUploaderEditDialog(options?: Record<string, unknown>): AXPFileUploaderEditDialogOptions | undefined;
3119
+ declare function isFileUploaderEditDialogAuto(editDialog?: AXPFileUploaderEditDialogOptions): boolean;
3120
+ declare function hasFileUploaderTitleOrDescriptionFields(editDialog?: AXPFileUploaderEditDialogOptions): boolean;
3121
+
3122
+ declare class AXPFileUploaderWidgetColumnComponent extends AXPColumnWidgetComponent<AXPFileListItem[]> {
3123
+ protected fileCount: _angular_core.WritableSignal<number>;
3124
+ private loadRequestId;
3125
+ private fileService;
3126
+ private queryExecutor;
3127
+ constructor();
3128
+ openFileList(): Promise<void>;
3129
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPFileUploaderWidgetColumnComponent, never>;
3130
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPFileUploaderWidgetColumnComponent, "axp-file-uploader-widget-column", never, { "rawValue": { "alias": "rawValue"; "required": false; }; "rowData": { "alias": "rowData"; "required": false; }; }, {}, never, never, true, never>;
3131
+ }
3132
+
3133
+ declare class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent<AXPFileListItem[] | undefined> {
3134
+ protected readonly fileService: AXFileService;
3135
+ private readonly hooks;
3136
+ private readonly fileActionsService;
3137
+ private readonly commandExecutor;
3138
+ private readonly dirtyChangeSubject;
3139
+ private readonly uploadActionsChangeSubject;
3140
+ private readonly savedSnapshot;
3141
+ private readonly baselineFingerprint;
3142
+ private readonly baselinePendingReconcile;
3143
+ private readonly isDirtySignal;
3144
+ private skipDirtyEvaluation;
3145
+ /** Status before soft-delete; used for restore when baseline was not synced (section layout). */
3146
+ private readonly statusBeforeDelete;
3147
+ private readonly autoBaselineSynced;
3148
+ /** Sync baseline from context when not wired by a deferred-save page (section layout). */
3149
+ private readonly baselineInitEffect;
3150
+ protected multiple: _angular_core.Signal<boolean>;
3151
+ private readonly acceptOverride;
3152
+ protected accept: _angular_core.Signal<string>;
3153
+ protected plugins: _angular_core.Signal<{
3154
+ name: string;
3155
+ options?: unknown;
3156
+ }[]>;
3157
+ protected pluginNames: _angular_core.Signal<string[]>;
3158
+ protected excludePlugins: _angular_core.Signal<string[]>;
3159
+ protected fileEditable: _angular_core.Signal<boolean>;
3160
+ protected editDialog: _angular_core.Signal<_acorex_platform_layout_entity.AXPFileUploaderEditDialogOptions | undefined>;
3161
+ protected enableTitleDescription: _angular_core.Signal<boolean>;
3162
+ /** When mode is `auto`, show the edit dialog after each file select. */
3163
+ protected showEditDialogAfterSelect: _angular_core.Signal<boolean>;
3164
+ protected readonly: _angular_core.Signal<boolean>;
3165
+ protected showBorder: _angular_core.Signal<boolean>;
3166
+ protected showAddItemButton: _angular_core.Signal<boolean>;
3167
+ protected maxFileSize: _angular_core.Signal<number>;
3168
+ protected isDragOver: _angular_core.WritableSignal<boolean>;
3169
+ private readonly innerActions;
3170
+ protected readonly fileActions: _angular_core.Signal<AXCFileUploaderAction[]>;
3171
+ ngOnInit(): void;
3172
+ setValue(value: AXPFileListItem[] | null | undefined): void;
3173
+ /** Align dirty baseline with persisted attachments (call when record loads or after discard remount). */
3174
+ syncBaseline(saved: AXPFileListItem[] | undefined): void;
3175
+ /** Mark current list as saved; clears dirty and drops soft-deleted rows from the UI. */
3176
+ markSaved(): void;
3177
+ /** Revert widget value to last saved baseline. */
3178
+ discardToBaseline(): void;
3179
+ api(): AXPWidgetCoreElementAPI;
3180
+ /** Current upload actions for host pages (always read via api; list may change after plugins load). */
3181
+ getUploadActionDescriptors(): AXPFileUploaderUploadActionDescriptor[];
3182
+ runUploadActionByPlugin(plugin: string): Promise<void>;
3183
+ private notifyUploadActionsChanged;
3184
+ private evaluateDirty;
3185
+ private setDirty;
3186
+ private loadActions;
3187
+ private configureFromHooks;
3188
+ /**
3189
+ * Process files from various sources (file picker, drag-drop, etc.)
3190
+ * When showEditDialogAfterSelect is true, the edit dialog (with plugin hooks) is shown per file before adding; otherwise files are added and user can edit via Edit button.
3191
+ */
3192
+ private processFiles;
3193
+ /**
3194
+ * Show edit dialog per file and add only those submitted. Used when showEditDialogAfterSelect is true (both from zone and from dropdown actions).
3195
+ */
3196
+ private addFilesWithEditDialogAsync;
3197
+ protected files: _angular_core.Signal<AXPFileListItem[]>;
3198
+ handleFileRemove(file: AXPFileListItem): void;
3199
+ removeFile(file: AXPFileListItem): void;
3200
+ /**
3201
+ * Revert a deleted file back to its pre-delete status.
3202
+ */
3203
+ handleFileRevert(file: AXPFileListItem): void;
3204
+ private resolveRestoredStatus;
3205
+ /**
3206
+ * Handle file rename action. Persists name/title/description to file storage immediately when edited
3207
+ * so they are saved even if the entity payload does not carry these fields.
3208
+ */
3209
+ handleFileRename(file: AXPFileListItem): void;
3210
+ clear(): void;
3211
+ protected readonly capabilities: AXCFileUploaderCapabilities;
3212
+ onFileChange(event: {
3213
+ event: Event;
3214
+ files: File[];
3215
+ }): void;
3216
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPFileUploaderWidgetEditComponent, never>;
3217
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPFileUploaderWidgetEditComponent, "axp-file-uploader-widget-edit", never, {}, {}, never, never, true, never>;
3218
+ }
3219
+
3220
+ declare class AXPFileUploaderWidgetViewComponent extends AXPValueWidgetComponent<AXPFileListItem[]> {
3221
+ protected files: _angular_core.Signal<AXPFileListItem[]>;
3222
+ private get __class();
3223
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPFileUploaderWidgetViewComponent, never>;
3224
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPFileUploaderWidgetViewComponent, "axp-file-uploader-widget-view", never, {}, {}, never, never, true, never>;
3225
+ }
3226
+
3227
+ declare const AXPFileUploaderWidget: AXPWidgetConfig;
3228
+ interface AXPFileUploaderWidgetDesignerOptions {
3229
+ multiple?: boolean;
3230
+ accept?: string;
3231
+ plugins?: {
3232
+ name: string;
3233
+ options?: unknown;
3234
+ }[];
3235
+ excludePlugins?: string[];
3236
+ readonly?: boolean;
3237
+ fileEditable?: boolean;
3238
+ maxFileSize?: number;
3239
+ enableTitleDescription?: boolean;
3240
+ showEditDialogAfterSelect?: boolean;
3241
+ showBorder?: boolean;
3242
+ showAddItemButton?: boolean;
3243
+ }
3244
+ interface AXPFileUploaderWidgetViewOptions {
3245
+ }
3246
+ interface AXPFileUploaderWidgetEditOptions {
3247
+ multiple?: boolean;
3248
+ accept?: string;
3249
+ plugins?: {
3250
+ name: string;
3251
+ options?: unknown;
3252
+ }[];
3253
+ excludePlugins?: string[];
3254
+ readonly?: boolean;
3255
+ fileEditable?: boolean;
3256
+ maxFileSize?: number;
3257
+ enableTitleDescription?: boolean;
3258
+ showEditDialogAfterSelect?: boolean;
3259
+ showBorder?: boolean;
3260
+ showAddItemButton?: boolean;
3261
+ }
3262
+ interface AXPFileUploaderWidgetColumnOptions {
3263
+ }
3264
+ interface AXPFileUploaderWidgetPrintOptions {
3265
+ }
3266
+ interface AXPFileUploaderWidgetOptions {
3267
+ designer: AXPFileUploaderWidgetDesignerOptions;
3268
+ view: AXPFileUploaderWidgetViewOptions;
3269
+ edit: AXPFileUploaderWidgetEditOptions;
3270
+ print: AXPFileUploaderWidgetPrintOptions;
3271
+ column: AXPFileUploaderWidgetColumnOptions;
3272
+ }
3273
+ declare module '@acorex/platform/layout/widget-core' {
3274
+ interface AXPWidgetTypesMap {
3275
+ attachments: 'attachments';
3276
+ }
3277
+ }
3278
+
3279
+ interface AXPFileUploaderShowFileListEntityContext extends AXPFileUploaderEntityFilesScope {
3280
+ }
3281
+ interface AXPFileUploaderShowFileListOptions {
3282
+ /** When set, files are loaded and saved via FileUploader:LoadFiles / FileUploader:SaveFiles. */
3283
+ entity?: AXPFileUploaderShowFileListEntityContext;
3284
+ /** Direct files (e.g. grid column preview); skips load/save commands. */
3285
+ files?: AXPFileListItem[];
3286
+ readonly?: boolean;
3287
+ multiple?: boolean;
3288
+ accept?: string;
3289
+ fileEditable?: boolean;
3290
+ maxFileSize?: number;
3291
+ showAddItemButton?: boolean;
3292
+ plugins?: {
3293
+ name: string;
3294
+ options?: unknown;
3295
+ }[];
3296
+ editDialog?: AXPFileUploaderEditDialogOptions;
3297
+ }
3298
+ declare class AXPFileUploaderWidgetService {
3299
+ private popupService;
3300
+ private translate;
3301
+ private commandExecutor;
3302
+ private queryExecutor;
3303
+ showFileList(options?: AXPFileUploaderShowFileListOptions): Promise<AXPFileListItem[] | undefined>;
3304
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPFileUploaderWidgetService, never>;
3305
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPFileUploaderWidgetService>;
3306
+ }
3307
+
3308
+ type AXPLookupWidgetLookType = 'select' | 'lookup';
3309
+ /**
3310
+ * How the lookup column resolves related items for display in entity lists.
3311
+ * - `hydrated`: titles (and optional ids) are already on the row; inline preview + overflow popover use row data only.
3312
+ * - `idsWithCount`: ids and optional count live on the row; the cell shows a count summary and loads titles via entity `byKey` when the popover opens.
3313
+ * - `countOnly`: only a count is on the row; the popover loads ids/titles via a registered `AXPQuery` when opened.
3314
+ */
3315
+ type AXPLookupColumnResolveStrategy = 'hydrated' | 'idsWithCount' | 'countOnly';
3316
+ /**
3317
+ * Column list only: controls how the lookup column loads and displays related items in grids.
3318
+ * Omitted or empty strategy defaults to `hydrated` at runtime.
3319
+ */
3320
+ interface AXPLookupColumnResolveOptions {
3321
+ /** Default `hydrated` when omitted. */
3322
+ strategy?: AXPLookupColumnResolveStrategy;
3323
+ /** Lodash-style path on `rowData` for the displayed count (e.g. `rolesCount`). */
3324
+ countFieldPath?: string;
3325
+ /** Lodash-style path on `rowData` for the related id list (`idsWithCount`). If omitted, the column `rawValue` is used. */
3326
+ idsPath?: string;
3327
+ /** Registered query key for `AXPQueryExecutor.fetch` when using `countOnly`. */
3328
+ queryKey?: string;
3329
+ /**
3330
+ * Maps query input property names to lodash-style paths on `rowData` (e.g. `{ "userId": "id" }`).
3331
+ * May be a JSON string when set from the layout designer text field.
3332
+ */
3333
+ queryParams?: Record<string, string> | string;
3334
+ /**
3335
+ * Dot path into the named query result for the items array. Defaults to `items` when the result is an object.
3336
+ * If the query returns an array directly, leave unset and handle at runtime.
3337
+ */
3338
+ queryResultItemsPath?: string;
3339
+ }
3340
+ interface AXPLookupDisplayOptions {
3341
+ displayFormat?: string;
3342
+ textField?: string;
3343
+ isMultiLanguage?: (value: unknown) => boolean;
3344
+ }
3345
+ /** Column list: entity detail popover when clicking a lookup value. */
3346
+ interface AXPLookupPopoverOptions {
3347
+ /** When `false`, lookup values are not clickable and the detail popover does not open. Default `true`. */
3348
+ enabled?: boolean;
3349
+ }
3350
+ /** Row actions to show in the lookup data selector popup (subset of entity list actions). */
3351
+ interface AXPLookupSelectorRowActionsConfig {
3352
+ /** Primary icon buttons (e.g. preview). Match full command name or suffix such as `:Preview`. */
3353
+ primary?: string[];
3354
+ /** Secondary actions in the row dropdown menu. */
3355
+ secondary?: string[];
3356
+ }
3357
+ interface AXPLookupWidgetOptions {
3358
+ disabled?: boolean | AXPExpression;
3359
+ readonly?: boolean | AXPExpression;
3360
+ placeholder?: string;
3361
+ expose?: string | string[];
3362
+ look?: AXPLookupWidgetLookType;
3363
+ allowClear?: boolean;
3364
+ displayFormat?: string;
3365
+ /** Column list: entity detail popover behavior. */
3366
+ popover?: AXPLookupPopoverOptions;
3367
+ /** Column list: lazy resolve and summary behavior. */
3368
+ columnResolve?: AXPLookupColumnResolveOptions;
3369
+ /** Lookup selector popup: entity row actions to display. */
3370
+ selectorRowActions?: AXPLookupSelectorRowActionsConfig;
3371
+ }
3372
+
3373
+ /**
3374
+ * Normalizes lookup/search display templates for row-based formatting.
3375
+ * Converts `context.eval('path')` expressions to `{{ path }}` and single braces to mustache form.
3376
+ */
3377
+ declare function normalizeLookupDisplayTemplate(template: string): string;
3378
+ /**
3379
+ * Resolves the display template for a lookup item.
3380
+ * Priority: explicit `displayFormat` → entity `formats.lookup` (template) → entity `formats.searchResult.title`.
3381
+ * Returns undefined when `textField` is set or no template applies (use {@link resolveLookupDisplayField} instead).
3382
+ */
3383
+ declare function resolveLookupDisplayTemplate(entity: AXPEntity | null | undefined, options: AXPLookupDisplayOptions): string | undefined;
3384
+ /**
3385
+ * Resolves the property path used for lookup display when no template applies.
3386
+ * Priority: explicit `textField` → entity `formats.lookup` (simple path) → common property names.
3387
+ */
3388
+ declare function resolveLookupDisplayField(entity: AXPEntity | null | undefined, options: AXPLookupDisplayOptions): string;
3389
+ /**
3390
+ * Formats a lookup row for display using template and/or field resolution.
3391
+ */
3392
+ declare function formatLookupItemDisplay(item: unknown, entity: AXPEntity | null | undefined, options: AXPLookupDisplayOptions, formatService: AXFormatService, resolveMultiLanguage?: (value: AXPMultiLanguageString) => string): string | AXPMultiLanguageString;
3393
+ /** True when a formatted label still contains unresolved template markers. */
3394
+ declare function isUnresolvedLookupDisplayTemplate(value: string): boolean;
3395
+
3396
+ declare class AXPLookupWidgetViewComponent extends AXPValueWidgetComponent<any> {
3397
+ protected readonly formatService: AXFormatService;
3398
+ protected readonly translation: AXTranslationService;
3399
+ protected readonly entityResolver: AXPEntityDefinitionRegistryService;
3400
+ protected entity: _angular_core.Signal<string>;
3401
+ protected multiple: _angular_core.Signal<boolean>;
3402
+ protected valueField: _angular_core.Signal<string>;
3403
+ protected textField: _angular_core.Signal<string>;
3404
+ protected badgeClass: _angular_core.Signal<string>;
3405
+ protected displayFormat: _angular_core.Signal<string | undefined>;
3406
+ protected displayField: _angular_core.Signal<string>;
3407
+ protected loading: _angular_core.WritableSignal<boolean>;
3408
+ private entityDef;
3409
+ protected displayItems: _angular_core.WritableSignal<any[]>;
3410
+ private efEntity;
3411
+ private efDisplay;
3412
+ private extractItem;
3413
+ private getDisplayRaw;
3414
+ private get __class();
3415
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLookupWidgetViewComponent, never>;
3416
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPLookupWidgetViewComponent, "axp-lookup-widget-view", never, {}, {}, never, never, true, never>;
3417
+ }
3418
+
3419
+ /**
3420
+ * Selects which entity list row actions appear in the data selector.
3421
+ * Match by full command name, action `name`, trigger name, or command suffix (e.g. `:Preview`).
3422
+ */
3423
+ interface AXPEntityDataSelectorRowActionsConfig {
3424
+ primary?: string[];
3425
+ secondary?: string[];
3426
+ }
3427
+ declare class AXPEntityDataSelectorRowActionsService {
3428
+ private readonly expressionEvaluator;
3429
+ private readonly workflow;
3430
+ private readonly commandService;
3431
+ /**
3432
+ * Build a row-actions handler for {@link AXPDataSelectorComponent} from entity list actions.
3433
+ */
3434
+ createHandler(entity: AXPEntity, config: AXPEntityDataSelectorRowActionsConfig): AXPDataSelectorRowActionsHandler | undefined;
3435
+ private buildIndividualActions;
3436
+ private filterActions;
3437
+ private matchesActionFilter;
3438
+ private getCommandNameFromTrigger;
3439
+ private flattenActions;
3440
+ private toRowCommandItems;
3441
+ private evaluateActionsForRow;
3442
+ private createExpressionScope;
3443
+ private resolveTriggerName;
3444
+ private resolveCommandNameExpression;
3445
+ private resolveTitleExpression;
3446
+ private executeCommand;
3447
+ private evaluateActionOptions;
3448
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityDataSelectorRowActionsService, never>;
3449
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityDataSelectorRowActionsService>;
3450
+ }
3451
+
3452
+ interface AXPEntityDataSelectorSelectionOptions {
3453
+ multiple?: boolean;
3454
+ selectedItemIds?: string[] | number[];
3455
+ /** Allow confirming with no selection (clears the lookup value). Default: true. */
3456
+ allowUnselect?: boolean;
3457
+ }
3458
+ interface AXPEntityDataSelectorGridOptions {
3459
+ columns?: string[];
3460
+ pageSize?: number;
3461
+ }
3462
+ interface AXPEntityDataSelectorFilterOptions {
3463
+ value?: AXDataSourceFilterOption | null;
3464
+ parent?: AXDataSourceFilterOption | null;
3465
+ }
3466
+ interface AXPEntityDataSelectorSearchOptions {
3467
+ fields?: string[];
3468
+ initial?: string;
3469
+ }
3470
+ interface AXPEntityDataSelectorSortOptions {
3471
+ fields?: {
3472
+ name: string;
3473
+ dir: 'asc' | 'desc';
3474
+ }[];
3475
+ }
3476
+ interface AXPEntityDataSelectorCategoryFilterOptions {
3477
+ field: string;
3478
+ operator?: 'equal' | 'contains' | 'in';
3479
+ }
3480
+ interface AXPEntityDataSelectorCategoryOptions {
3481
+ /** When false, category sidebar is hidden. Default: true (auto-detect from entity plugin). */
3482
+ enabled?: boolean;
3483
+ title?: string;
3484
+ width?: string;
3485
+ filter?: AXPEntityDataSelectorCategoryFilterOptions;
3486
+ dataSource?: AXPCategoryTreeDataSource;
3487
+ }
3488
+ interface AXPEntityDataSelectorCreateOptions {
3489
+ mode?: AXPDataSelectorAllowCreate;
3490
+ }
3491
+ /** Nested options for {@link AXPEntityDataSelectorService.open}. */
3492
+ interface AXPEntityDataSelectorOpenOptions {
3493
+ entity: AXPEntity;
3494
+ title: string;
3495
+ selection?: AXPEntityDataSelectorSelectionOptions;
3496
+ grid?: AXPEntityDataSelectorGridOptions;
3497
+ filter?: AXPEntityDataSelectorFilterOptions;
3498
+ search?: AXPEntityDataSelectorSearchOptions;
3499
+ sort?: AXPEntityDataSelectorSortOptions;
3500
+ category?: AXPEntityDataSelectorCategoryOptions;
3501
+ create?: AXPEntityDataSelectorCreateOptions;
3502
+ /** Entity list row actions to expose in the selector grid (matched by command name). */
3503
+ rowActions?: AXPEntityDataSelectorRowActionsConfig;
3504
+ }
3505
+ /**
3506
+ * @deprecated Use {@link AXPEntityDataSelectorOpenOptions}. Will be removed in a future release.
3507
+ */
3508
+ interface AXPEntityDataSelectorOptions {
3509
+ entity: AXPEntity;
3510
+ title: string;
3511
+ allowMultiple?: boolean;
3512
+ /** Allow confirming with no selection (clears the lookup value). Default: true. */
3513
+ allowUnselect?: boolean;
3514
+ filters?: AXDataSourceFilterOption | null;
3515
+ parentFilters?: AXDataSourceFilterOption | null;
3516
+ columns?: string[];
3517
+ sortedFields?: {
3518
+ name: string;
3519
+ dir: 'asc' | 'desc';
3520
+ }[];
3521
+ allowCreate?: AXPDataSelectorAllowCreate;
3522
+ searchFields?: string[];
3523
+ initialSearchTerm?: string;
3524
+ selectedItemIds?: string[] | number[];
3525
+ categoryFilter?: {
3526
+ title: string;
3527
+ dataSource: AXPCategoryTreeDataSource;
3528
+ filterField: string;
3529
+ filterOperator?: 'equal' | 'contains' | 'in';
3530
+ width?: string;
3531
+ };
3532
+ showCategoryFilter?: boolean;
3533
+ rowActions?: AXPEntityDataSelectorRowActionsConfig;
3534
+ }
3535
+ type AXPEntityDataSelectorOpenInput = AXPEntityDataSelectorOpenOptions | AXPEntityDataSelectorOptions;
3536
+ interface AXPEntityDataSelectorResult {
3537
+ items: any[];
3538
+ }
3539
+ /**
3540
+ * Returns true when flat (legacy) option fields are present on the input object.
3541
+ */
3542
+ declare function isLegacyEntityDataSelectorOptions(options: AXPEntityDataSelectorOpenInput): options is AXPEntityDataSelectorOptions;
3543
+ /**
3544
+ * Maps deprecated flat options to {@link AXPEntityDataSelectorOpenOptions}.
3545
+ */
3546
+ declare function mapLegacyEntityDataSelectorOptions(legacy: AXPEntityDataSelectorOptions): AXPEntityDataSelectorOpenOptions;
3547
+ /**
3548
+ * Normalizes legacy flat or nested options to {@link AXPEntityDataSelectorOpenOptions}.
3549
+ * When both shapes are mixed, nested groups take precedence over mapped legacy values.
3550
+ */
3551
+ declare function normalizeEntityDataSelectorOptions(options: AXPEntityDataSelectorOpenInput): AXPEntityDataSelectorOpenOptions;
3552
+ declare class AXPEntityDataSelectorService {
3553
+ private readonly dataSelectorService;
3554
+ private readonly filterOperatorMiddleware;
3555
+ private readonly widgetResolver;
3556
+ private readonly entityResolver;
3557
+ private readonly commandService;
3558
+ private readonly categoryTreeService;
3559
+ private readonly translationService;
3560
+ private readonly rowActionsService;
3561
+ /**
3562
+ * Open entity data selector popup.
3563
+ * Accepts nested {@link AXPEntityDataSelectorOpenOptions} or deprecated flat {@link AXPEntityDataSelectorOptions}.
3564
+ */
3565
+ open(options: AXPEntityDataSelectorOpenInput): Promise<AXPEntityDataSelectorResult | null>;
3566
+ /**
3567
+ * Execute Entity:Create and return created item.
3568
+ * Used by lookup widget and data selector for inline create.
3569
+ */
3570
+ executeEntityCreate(entity: AXPEntity, mode: 'full' | 'quick'): Promise<any | null>;
3571
+ /**
3572
+ * Normalize item's phones/emails for expose/display.
3573
+ * Call this when receiving items from any source (create, API, selector).
3574
+ */
3575
+ normalizeItemContactArrays(item: any): any;
3576
+ /**
3577
+ * Apply category sidebar config from normalized options or entity plugin auto-detection.
3578
+ */
3579
+ private applyCategoryFilter;
3580
+ /**
3581
+ * Create data selector configuration from entity options
3582
+ */
3583
+ private createDataSelectorConfig;
3584
+ /**
3585
+ * Create data source from entity definition
3586
+ */
3587
+ private createDataSource;
3588
+ /**
3589
+ * Create columns configuration from entity definition
3590
+ */
3591
+ private createColumns;
3592
+ /**
3593
+ * Get searchable fields from entity properties
3594
+ */
3595
+ private getSearchFields;
3596
+ /**
3597
+ * Get allowCreate mode from entity
3598
+ */
3599
+ private getAllowCreate;
3600
+ /**
3601
+ * Execute Entity:Create and return created item
3602
+ */
3603
+ private executeCreate;
3604
+ /**
3605
+ * Normalize phones/emails from repeater form to plain arrays of { value: string }.
3606
+ * Repeater/ContactBox can return nested structure: { value: { label: "", value: "101010" } }
3607
+ * Contact widget expects: { value: "101010", label?: string }
3608
+ */
3609
+ private normalizeContactArrays;
3610
+ /**
3611
+ * Create category tree data source from category entity key.
3612
+ * Uses the same {@link AXPCategoryTreeService} as the entity master list category sidebar.
3613
+ */
3614
+ private createCategoryTreeDataSource;
3615
+ /**
3616
+ * Build category tree data source callbacks backed by shared category tree service.
3617
+ */
3618
+ private buildCategoryTreeDataSource;
3619
+ /**
3620
+ * Map a category entity row to {@link AXPCategoryEntity} for the reusable category tree component.
3621
+ */
3622
+ private mapCategoryItemToEntity;
3623
+ /**
3624
+ * Map a lazy-loaded tree node to {@link AXPCategoryEntity}.
3625
+ */
3626
+ private mapCategoryTreeNodeToEntity;
3627
+ /**
3628
+ * Resolve category display text, including multi-language titles.
3629
+ */
3630
+ private resolveCategoryText;
3631
+ /**
3632
+ * Merge custom and parent filters into data source query
3633
+ */
3634
+ private mergeFilters;
3635
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityDataSelectorService, never>;
3636
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityDataSelectorService>;
3637
+ }
3638
+
3639
+ /**
3640
+ * Base interface for lookup widget look components
3641
+ * All look components should implement this interface to ensure consistency
3642
+ */
3643
+ declare abstract class LookupWidgetLookBase {
3644
+ abstract refresh(): void;
3645
+ abstract focus(): void;
3646
+ abstract clear(): void;
3647
+ }
3648
+
3649
+ declare class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent<any> {
3650
+ #private;
3651
+ protected readonly injector: Injector;
3652
+ protected readonly entityResolver: AXPEntityDefinitionRegistryService;
3653
+ protected readonly entityService: AXPEntityService;
3654
+ protected readonly entityDataSelectorService: AXPEntityDataSelectorService;
3655
+ private readonly mlsResolver;
3656
+ protected componentLook: _angular_core.Signal<LookupWidgetLookBase | undefined>;
3657
+ protected expose: _angular_core.Signal<string | any[] | undefined>;
3658
+ protected entity: _angular_core.Signal<string>;
3659
+ protected disabled: _angular_core.Signal<string | boolean>;
3660
+ protected columns: _angular_core.Signal<string[]>;
3661
+ protected textField: _angular_core.Signal<string>;
3662
+ /**
3663
+ * Template for select look (`ax-select-box`). Uses `textTemplate` when set, otherwise
3664
+ * falls back to `displayFormat` (same as tagbox). Single braces are expanded to `{{ }}`
3665
+ * for the select box template engine (see `AXPDataListWidgetComponent.textTemplate`).
3666
+ */
3667
+ protected textTemplate: _angular_core.Signal<string | null>;
3668
+ protected hasClearButton: _angular_core.Signal<boolean>;
3669
+ protected showItemTooltip: _angular_core.Signal<boolean>;
3670
+ protected isItemTruncated: _angular_core.Signal<boolean>;
3671
+ protected customFilter: _angular_core.Signal<AXDataSourceFilterOption>;
3672
+ protected placeholder: _angular_core.Signal<string>;
3673
+ protected filterMode: _angular_core.Signal<boolean>;
3674
+ protected multiple: _angular_core.Signal<boolean>;
3675
+ protected allowUnselect: _angular_core.Signal<boolean>;
3676
+ protected look: _angular_core.Signal<AXPLookupWidgetLookType>;
3677
+ protected displayField: _angular_core.Signal<string>;
3678
+ protected allowCreate: _angular_core.Signal<"none" | "full" | "quick">;
3679
+ protected selectorRowActions: _angular_core.Signal<AXPLookupSelectorRowActionsConfig | undefined>;
3680
+ protected valueField: _angular_core.Signal<string>;
3681
+ protected displayFormat: _angular_core.Signal<string | undefined>;
3682
+ protected conditions?: AXPQueryFilter[];
3683
+ protected filter: AXDataSourceFilterOption | null;
3684
+ protected entityDef: _angular_core.WritableSignal<AXPEntity | null>;
3685
+ protected selectedItems: _angular_core.WritableSignal<any[]>;
3686
+ protected initialItems: _angular_core.WritableSignal<boolean>;
3687
+ protected initialized: _angular_core.WritableSignal<boolean>;
3688
+ protected previousValue: _angular_core.WritableSignal<any>;
3689
+ protected isLoading: _angular_core.WritableSignal<boolean>;
3690
+ private hasValue;
3691
+ private findByValue;
3692
+ protected handleComponentValueChanged(items: any[] | null): void;
3693
+ protected handleCreateClick(_e: AXClickEvent): Promise<void>;
3694
+ private executeCreate;
3695
+ protected setLoading: (loading: boolean) => void;
3696
+ protected setItems: (items: any[]) => void;
3697
+ /**
3698
+ * Writes expose targets into context using per-path updates.
3699
+ * Avoids `contextService.patch()` with nested objects: patch shallow-merges top-level keys only,
3700
+ * so e.g. `{ person: { educationLevel: { id, title } } }` would replace the entire `person`
3701
+ * object and drop sibling fields like `person.educationLevelId`, causing a value/effect loop.
3702
+ */
3703
+ private expoesItems;
3704
+ outputs(): (string | {
3705
+ [name: string]: unknown;
3706
+ })[];
3707
+ private singleOrMultiple;
3708
+ refresh(): void;
3709
+ clear(): void;
3710
+ focus(): void;
3711
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLookupWidgetEditComponent, never>;
3712
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPLookupWidgetEditComponent, "axp-lookup-widget-edit", never, {}, {}, never, never, true, never>;
3713
+ }
3714
+
3715
+ declare class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent<any> {
3716
+ private readonly entityDetailPopoverService;
3717
+ private readonly translation;
3718
+ private readonly formatService;
3719
+ private readonly entityService;
3720
+ private readonly entityResolver;
3721
+ private readonly queryExecutor;
3722
+ protected moreButton: _angular_core.Signal<ElementRef<any> | undefined>;
3723
+ protected lazyTrigger: _angular_core.Signal<ElementRef<any> | undefined>;
3724
+ protected morePopover: _angular_core.Signal<AXPopoverComponent | undefined>;
3725
+ protected host: ElementRef<any>;
3726
+ protected valueField: string;
3727
+ protected entity: string;
3728
+ protected columnName: string;
3729
+ protected maxVisible: number;
3730
+ protected lookupDisplayOptions: _angular_core.Signal<{
3731
+ displayFormat: string | undefined;
3732
+ textField: string | undefined;
3733
+ isMultiLanguage: (value: unknown) => value is _acorex_core_translation.AXMultiLanguageMap;
3734
+ }>;
3735
+ protected displayFormat: _angular_core.Signal<string | undefined>;
3736
+ protected displayField: _angular_core.Signal<string>;
3737
+ protected columnResolve: _angular_core.Signal<AXPLookupColumnResolveOptions | undefined>;
3738
+ protected resolveStrategy: _angular_core.Signal<AXPLookupColumnResolveStrategy>;
3739
+ protected isHydratedStrategy: _angular_core.Signal<boolean>;
3740
+ protected detailPopoverEnabled: _angular_core.Signal<boolean>;
3741
+ protected isMorePopoverOpen: _angular_core.WritableSignal<boolean>;
3742
+ protected selectedItemIndex: _angular_core.WritableSignal<number>;
3743
+ protected resolvedPopoverItems: _angular_core.WritableSignal<any[]>;
3744
+ protected resolveStatus: _angular_core.WritableSignal<"error" | "idle" | "loading" | "ready">;
3745
+ protected resolveError: _angular_core.WritableSignal<string | null>;
3746
+ protected summaryLabel: _angular_core.WritableSignal<string>;
3747
+ protected popoverHeader: _angular_core.WritableSignal<string>;
3748
+ private entityDef;
3749
+ private hydratedDisplayItems;
3750
+ private hydrateRequestId;
3751
+ protected displayItems: _angular_core.Signal<any[]>;
3752
+ protected allItems: _angular_core.Signal<any[]>;
3753
+ protected visibleItems: _angular_core.Signal<any[]>;
3754
+ protected hasMoreItems: _angular_core.Signal<boolean>;
3755
+ protected idsFromRow: _angular_core.Signal<any[]>;
3756
+ protected displayCount: _angular_core.Signal<number>;
3757
+ protected popoverListItems: _angular_core.Signal<any[]>;
3758
+ /** Avoid resetting lazy cache on every CD when `rowData` is a new object reference for the same row. */
3759
+ private previousLazyRowId;
3760
+ constructor();
3761
+ protected showMoreItems(): void;
3762
+ protected openLazyPopover(): void;
3763
+ protected onPopoverOpenChange(event: unknown): void;
3764
+ protected showItemDetail(item: any, index: number): Promise<void>;
3765
+ protected handleItemClick(index: number): void;
3766
+ protected handleResolvedItemClick(index: number): void;
3767
+ protected handlePopoverItemClick(index: number): void;
3768
+ /**
3769
+ * True when the cell can render without fetching row data via byKey.
3770
+ * Uses textField / expose targets on the row — not merely whether column dataPath differs from columnName.
3771
+ */
3772
+ protected hasPreresolvedDisplay(): boolean;
3773
+ protected getDisplayRaw(item: any): string;
3774
+ private refreshSummaryLabel;
3775
+ private refreshPopoverHeader;
3776
+ private resetLazyState;
3777
+ private openPopoverFromRef;
3778
+ private closeMorePopover;
3779
+ private ensureLazyItemsLoaded;
3780
+ /**
3781
+ * ax-popover may emit a boolean, CustomEvent with detail, or a DOM Event depending on version.
3782
+ */
3783
+ private coercePopoverOpenEvent;
3784
+ private loadByIds;
3785
+ private loadByNamedQuery;
3786
+ private buildNamedQueryInput;
3787
+ private parseQueryParamsMap;
3788
+ private extractItemsFromQueryResult;
3789
+ private extractItem;
3790
+ private hydrateScalarIds;
3791
+ private isMultiValueLookup;
3792
+ /** Row display text resolved via widget textField and expose targets (not column dataPath alone). */
3793
+ private getRowDisplayTextFromTextField;
3794
+ private getExposeTargets;
3795
+ private hasDisplayTextOnLookupValue;
3796
+ private renderLookupLabel;
3797
+ private formatDisplayValue;
3798
+ /** True when a scalar cell value is a stored entity key (uuid/numeric), not pre-resolved display text. */
3799
+ private isLikelyEntityId;
3800
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLookupWidgetColumnComponent, never>;
3801
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPLookupWidgetColumnComponent, "ng-component", never, { "rawValue": { "alias": "rawValue"; "required": false; }; "rowData": { "alias": "rowData"; "required": false; }; }, {}, never, never, true, never>;
3802
+ }
3803
+
3804
+ declare const AXPLookupWidget: AXPWidgetConfig;
3805
+
3806
+ /**
3807
+ * Unified reference format for all sources
3808
+ */
3809
+ interface AXPMultiSourceRef {
3810
+ /** Source identifier (e.g., 'site-location', 'inline-address', 'employee-user') */
3811
+ sourceKey: string;
3812
+ /** Entity ID if entity source (optional for inline sources) */
3813
+ refId?: string;
3814
+ /** Always present - used for display */
3815
+ displayName: string;
3816
+ /** Full data (for inline sources or denormalized entity data) */
3817
+ data?: any;
3818
+ /** Additional metadata */
3819
+ meta?: Record<string, unknown>;
3820
+ }
3821
+ /**
3822
+ * Stored value type
3823
+ * - Single: AXPMultiSourceRef
3824
+ * - Multiple: AXPMultiSourceRef[]
3825
+ */
3826
+ type AXPMultiSourceValue = AXPMultiSourceRef | AXPMultiSourceRef[];
3827
+ /**
3828
+ * Source type
3829
+ */
3830
+ declare enum AXPMultiSourceType {
3831
+ Entity = "entity",
3832
+ Inline = "inline"
3833
+ }
3834
+ /**
3835
+ * Single source item definition
3836
+ */
3837
+ interface AXPMultiSourceItem {
3838
+ /** Unique identifier for this source */
3839
+ key: string;
3840
+ /** Display information */
3841
+ title: string;
3842
+ icon?: string;
3843
+ badge?: string;
3844
+ description?: string;
3845
+ /** Source type */
3846
+ type: AXPMultiSourceType;
3847
+ /** For entity sources: entity name (e.g., 'LocationManagement.Location') */
3848
+ entity?: string;
3849
+ /** For inline sources: command key to execute for inline creation (e.g., 'Module.Entity:CreateInline') */
3850
+ inlineCreateCommand?: string;
3851
+ /** Optional: Filter/constraints for this source */
3852
+ filters?: AXDataSourceFilterOption;
3853
+ /** Optional: Custom search fields */
3854
+ searchFields?: string[];
3855
+ /** Display format template for results */
3856
+ displayFormat?: string;
3857
+ /** Value transformation (how to store this source) */
3858
+ valueTransform?: (item: any) => AXPMultiSourceRef;
3859
+ }
3860
+ /**
3861
+ * Complete source configuration (from provider)
3862
+ */
3863
+ interface AXPMultiSourceDefinition {
3864
+ /** Provider name */
3865
+ name: string;
3866
+ /** Display title */
3867
+ title: string;
3868
+ /** Sources array */
3869
+ sources: AXPMultiSourceItem[];
3870
+ /** Default search strategy */
3871
+ searchStrategy: 'unified' | 'tabs' | 'grouped';
3872
+ /** Default display format */
3873
+ defaultDisplayFormat?: string;
3874
+ /** Default multiple selection */
3875
+ defaultMultiple?: boolean;
3876
+ }
3877
+ /**
3878
+ * Widget options
3879
+ */
3880
+ interface AXPMultiSourceSelectorWidgetOptions {
3881
+ /** Provider name (required) */
3882
+ providerName: string;
3883
+ /** Override multiple selection (optional, uses provider default if not specified) */
3884
+ multiple?: boolean;
3885
+ /** Override display format (optional, uses provider default if not specified) */
3886
+ displayFormat?: string;
3887
+ /** Additional filters to apply to all sources */
3888
+ filters?: AXDataSourceFilterOption;
3889
+ /** Custom placeholder */
3890
+ placeholder?: string;
3891
+ /** Allow clear */
3892
+ allowClear?: boolean;
3893
+ }
3894
+
3895
+ /**
3896
+ * Injection token for multi-source definition providers
3897
+ */
3898
+ declare const AXP_MULTI_SOURCE_DEFINITION_PROVIDER: InjectionToken<AXPMultiSourceDefinitionProvider[]>;
3899
+ /**
3900
+ * Provider context for building definitions
3901
+ */
3902
+ declare class AXPMultiSourceDefinitionProviderContext {
3903
+ private definitions;
3904
+ addDefinition(definition: AXPMultiSourceDefinition): void;
3905
+ getDefinitions(): AXPMultiSourceDefinition[];
3906
+ findDefinition(name: string): AXPMultiSourceDefinition | undefined;
3907
+ }
3908
+ /**
3909
+ * Provider interface
3910
+ */
3911
+ interface AXPMultiSourceDefinitionProvider {
3912
+ provide(context: AXPMultiSourceDefinitionProviderContext): Promise<void> | void;
3913
+ }
3914
+ /**
3915
+ * Service for managing multi-source definitions
3916
+ */
3917
+ declare class AXPMultiSourceDefinitionProviderService {
3918
+ private readonly providers;
3919
+ private cache;
3920
+ private load;
3921
+ /**
3922
+ * Get definition by name
3923
+ */
3924
+ getDefinition(name: string): Promise<AXPMultiSourceDefinition>;
3925
+ /**
3926
+ * Reload definitions (clear cache)
3927
+ */
3928
+ reload(): Promise<void>;
3929
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMultiSourceDefinitionProviderService, never>;
3930
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPMultiSourceDefinitionProviderService>;
3931
+ }
3932
+
3933
+ declare const AXPMultiSourceSelectorWidget: AXPWidgetConfig;
3934
+
3935
+ /**
3936
+ * Search result item with source information
3937
+ */
3938
+ interface AXPMultiSourceSearchResultItem {
3939
+ source: AXPMultiSourceItem;
3940
+ item: any;
3941
+ }
3942
+ /**
3943
+ * Search result
3944
+ */
3945
+ interface AXPMultiSourceSearchResult {
3946
+ items: AXPMultiSourceSearchResultItem[];
3947
+ total: number;
3948
+ }
3949
+ declare class AXPMultiSourceFederatedSearchService {
3950
+ private readonly entityResolver;
3951
+ /**
3952
+ * Search across all enabled sources
3953
+ */
3954
+ search(definition: AXPMultiSourceDefinition, searchTerm: string, filters?: AXDataSourceFilterOption): Promise<AXPMultiSourceSearchResult>;
3955
+ /**
3956
+ * Search single source
3957
+ */
3958
+ searchSource(source: AXPMultiSourceItem, searchTerm: string, filters?: AXDataSourceFilterOption): Promise<{
3959
+ items: any[];
3960
+ total: number;
3961
+ }>;
3962
+ /**
3963
+ * Resolve entity from entity name string (e.g., 'LocationManagement.Location')
3964
+ */
3965
+ private resolveEntity;
3966
+ /**
3967
+ * Search entity using entity queries
3968
+ */
3969
+ private searchEntity;
3970
+ /**
3971
+ * Build search filters from search term
3972
+ */
3973
+ private buildSearchFilters;
3974
+ /**
3975
+ * Get default searchable fields from entity
3976
+ */
3977
+ private getDefaultSearchFields;
3978
+ /**
3979
+ * Merge multiple filters
3980
+ */
3981
+ private mergeFilters;
3982
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMultiSourceFederatedSearchService, never>;
3983
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPMultiSourceFederatedSearchService>;
3984
+ }
3985
+
3986
+ /**
3987
+ * Selector open configuration
3988
+ */
3989
+ interface AXPMultiSourceSelectorOpenConfig {
3990
+ definition: AXPMultiSourceDefinition;
3991
+ multiple: boolean;
3992
+ selectedValues?: AXPMultiSourceValue;
3993
+ filters?: AXDataSourceFilterOption;
3994
+ title?: string;
3995
+ }
3996
+ /**
3997
+ * Selector result
3998
+ */
3999
+ interface AXPMultiSourceSelectorResult {
4000
+ items: AXPMultiSourceRef[];
4001
+ }
4002
+ declare class AXPMultiSourceSelectorService {
4003
+ private readonly popupService;
4004
+ private readonly definitionService;
4005
+ /**
4006
+ * Open selector popup by provider name
4007
+ */
4008
+ openByProviderName(providerName: string, config: {
4009
+ multiple: boolean;
4010
+ selectedValues?: AXPMultiSourceValue;
4011
+ filters?: AXDataSourceFilterOption;
4012
+ title?: string;
4013
+ }): Promise<AXPMultiSourceSelectorResult | null>;
4014
+ /**
4015
+ * Open selector popup
4016
+ */
4017
+ open(config: AXPMultiSourceSelectorOpenConfig): Promise<AXPMultiSourceSelectorResult | null>;
4018
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMultiSourceSelectorService, never>;
4019
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPMultiSourceSelectorService>;
4020
+ }
4021
+
4022
+ /**
4023
+ * Multi-source selector popup component
4024
+ */
4025
+ declare class AXPMultiSourceSelectorComponent extends AXBasePageComponent {
4026
+ private readonly entityDataSelectorService;
4027
+ private readonly entityResolver;
4028
+ private readonly translationService;
4029
+ protected config: _angular_core.WritableSignal<AXPMultiSourceSelectorOpenConfig>;
4030
+ protected definition: _angular_core.Signal<AXPMultiSourceDefinition>;
4031
+ protected activeTabKey: _angular_core.WritableSignal<string | null>;
4032
+ protected activeSource: _angular_core.Signal<AXPMultiSourceItem | null>;
4033
+ protected selectedItems: _angular_core.WritableSignal<AXPMultiSourceRef[]>;
4034
+ protected readonly AXPMultiSourceType: typeof AXPMultiSourceType;
4035
+ protected ngOnInit(): void;
4036
+ protected handleTabClick(source: AXPMultiSourceItem): void;
4037
+ protected handleSelectFromSource(source: AXPMultiSourceItem): Promise<void>;
4038
+ protected handleCancel(): void;
4039
+ protected handleConfirm(): void;
4040
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMultiSourceSelectorComponent, never>;
4041
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPMultiSourceSelectorComponent, "axp-multi-source-selector", never, {}, {}, never, never, true, never>;
4042
+ }
4043
+
4044
+ declare class AXPMultiSourceSelectorWidgetEditComponent extends AXPValueWidgetComponent<any> {
4045
+ protected readonly popupService: AXPopupService;
4046
+ protected readonly definitionService: AXPMultiSourceDefinitionProviderService;
4047
+ protected readonly selectorService: AXPMultiSourceSelectorService;
4048
+ protected tagBox: _angular_core.Signal<AXTagBoxComponent | undefined>;
4049
+ protected providerName: _angular_core.Signal<string>;
4050
+ protected disabled: _angular_core.Signal<boolean>;
4051
+ protected multiple: _angular_core.Signal<boolean>;
4052
+ protected allowClear: _angular_core.Signal<boolean>;
4053
+ protected placeholderText: _angular_core.Signal<string>;
4054
+ protected searchTerm: _angular_core.WritableSignal<string | null>;
4055
+ protected selectedItems: _angular_core.WritableSignal<AXPMultiSourceRef[]>;
4056
+ protected isLoading: _angular_core.WritableSignal<boolean>;
4057
+ protected isOpen: _angular_core.WritableSignal<boolean>;
4058
+ protected definition: _angular_core.WritableSignal<AXPMultiSourceDefinition | null>;
4059
+ private efProvider;
4060
+ private efValue;
4061
+ protected handleOnClick(e: AXClickEvent): void;
4062
+ protected handleValueChange(e: AXValueChangedEvent): void;
4063
+ protected handleSearchInputChange(e: AXValueChangedEvent): void;
4064
+ protected handleOnBlur(e: AXFocusEvent): void;
4065
+ protected handleKeyUp(e: AXHtmlEvent): Promise<void>;
4066
+ protected handleClearClick(): void;
4067
+ private findByValue;
4068
+ private normalizeToRef;
4069
+ private showSelector;
4070
+ private setItems;
4071
+ refresh(): void;
4072
+ clear(): void;
4073
+ private clearInput;
4074
+ protected getTagLabel(item: AXPMultiSourceRef): string;
4075
+ private singleOrMultiple;
4076
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMultiSourceSelectorWidgetEditComponent, never>;
4077
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPMultiSourceSelectorWidgetEditComponent, "axp-multi-source-selector-widget-edit", never, {}, {}, never, never, true, never>;
4078
+ }
4079
+
4080
+ declare class AXPMultiSourceSelectorWidgetViewComponent extends AXPValueWidgetComponent<any> {
4081
+ protected readonly formatService: AXFormatService;
4082
+ protected readonly definitionService: AXPMultiSourceDefinitionProviderService;
4083
+ protected providerName: _angular_core.Signal<string>;
4084
+ protected multiple: _angular_core.Signal<boolean>;
4085
+ protected badgeClass: _angular_core.Signal<string>;
4086
+ protected displayFormat: _angular_core.Signal<string | undefined>;
4087
+ protected loading: _angular_core.WritableSignal<boolean>;
4088
+ private definition;
4089
+ protected displayItems: _angular_core.WritableSignal<{
4090
+ id: string;
4091
+ text: string;
4092
+ }[]>;
4093
+ private efProvider;
4094
+ private efDisplay;
4095
+ private extractDisplayItem;
4096
+ private getDisplayText;
4097
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMultiSourceSelectorWidgetViewComponent, never>;
4098
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPMultiSourceSelectorWidgetViewComponent, "axp-multi-source-selector-widget-view", never, {}, {}, never, never, true, never>;
4099
+ }
4100
+
4101
+ declare class AXPMultiSourceSelectorWidgetColumnComponent extends AXPColumnWidgetComponent<any> {
4102
+ private readonly formatService;
4103
+ private readonly definitionService;
4104
+ protected providerName: string;
4105
+ protected columnName: string;
4106
+ protected maxVisible: number;
4107
+ protected displayFormat: _angular_core.Signal<string | undefined>;
4108
+ private definition;
4109
+ constructor();
4110
+ protected displayItems: _angular_core.Signal<{
4111
+ id: string;
4112
+ text: string;
4113
+ }[]>;
4114
+ protected allItems: _angular_core.Signal<{
4115
+ id: string;
4116
+ text: string;
4117
+ }[]>;
4118
+ protected visibleItems: _angular_core.Signal<{
4119
+ id: string;
4120
+ text: string;
4121
+ }[]>;
4122
+ protected hasMoreItems: _angular_core.Signal<boolean>;
4123
+ protected remainingItemsCount: _angular_core.Signal<number>;
4124
+ private loadDefinition;
4125
+ private extractDisplayItem;
4126
+ private getDisplayText;
4127
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMultiSourceSelectorWidgetColumnComponent, never>;
4128
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPMultiSourceSelectorWidgetColumnComponent, "axp-multi-source-selector-widget-column", never, { "rawValue": { "alias": "rawValue"; "required": false; }; "rowData": { "alias": "rowData"; "required": false; }; }, {}, never, never, true, never>;
4129
+ }
4130
+
4131
+ declare class AXPSelectorStructureWidgetColumnComponent extends AXPValueWidgetComponent {
4132
+ protected identityField: _angular_core.Signal<string>;
4133
+ protected textField: _angular_core.Signal<string>;
4134
+ protected valueField: _angular_core.Signal<string>;
4135
+ protected previewIcon: _angular_core.Signal<string>;
4136
+ protected cellText: _angular_core.Signal<string>;
4137
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPSelectorStructureWidgetColumnComponent, never>;
4138
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPSelectorStructureWidgetColumnComponent, "axp-selector-structure-widget-column", never, {}, {}, never, never, true, never>;
4139
+ }
4140
+
4141
+ type AXPSelectorStructureSelectorMode = 'select' | 'lookup';
4142
+ type AXPSelectorStructureStructureMode = 'schema' | 'freeform';
4143
+ type AXPSelectorStructureIdentityDisplay = 'readonly' | 'hidden';
4144
+ /** UI layout: standard = global multi-select + collapse rows; compactPanel = per-row select (address-style). */
4145
+ type AXPSelectorStructurePresentationMode = 'standard' | 'compactPanel';
4146
+ interface AXPSelectorStructureFieldDef {
4147
+ name: string;
4148
+ title: string;
4149
+ widgetType: string;
4150
+ options?: Record<string, unknown>;
4151
+ }
4152
+ declare const AXPSelectorStructureWidget: AXPWidgetConfig;
4153
+ interface AXPSelectorStructureWidgetDesignerOptions {
4154
+ selectorMode?: AXPSelectorStructureSelectorMode;
4155
+ structureMode?: AXPSelectorStructureStructureMode;
4156
+ presentation?: AXPSelectorStructurePresentationMode;
4157
+ previewIcon?: string;
4158
+ placeholder?: string;
4159
+ contextSiblingPath?: string;
4160
+ identityField?: string;
4161
+ identityDisplay?: AXPSelectorStructureIdentityDisplay;
4162
+ valueField?: string;
4163
+ textField?: string;
4164
+ dataSource?: unknown;
4165
+ multiple?: boolean;
4166
+ lookup?: {
4167
+ entity?: string;
4168
+ look?: 'select' | 'lookup';
4169
+ filter?: unknown;
4170
+ hasClearButton?: boolean;
4171
+ };
4172
+ structureFields?: AXPSelectorStructureFieldDef[];
4173
+ freeformPath?: string;
4174
+ }
4175
+ interface AXPSelectorStructureWidgetViewOptions extends AXPSelectorStructureWidgetDesignerOptions {
4176
+ }
4177
+ interface AXPSelectorStructureWidgetEditOptions extends AXPSelectorStructureWidgetDesignerOptions {
4178
+ }
4179
+ interface AXPSelectorStructureWidgetColumnOptions {
4180
+ identityField?: string;
4181
+ textField?: string;
4182
+ previewIcon?: string;
4183
+ }
4184
+ interface AXPSelectorStructureWidgetPrintOptions {
4185
+ }
4186
+ interface AXPSelectorStructureWidgetOptions {
4187
+ designer: AXPSelectorStructureWidgetDesignerOptions;
4188
+ view: AXPSelectorStructureWidgetViewOptions;
4189
+ edit: AXPSelectorStructureWidgetEditOptions;
4190
+ print: AXPSelectorStructureWidgetPrintOptions;
4191
+ column: AXPSelectorStructureWidgetColumnOptions;
4192
+ }
4193
+
4194
+ declare class AXPSelectorStructureWidgetEditComponent extends AXPValueWidgetComponent {
4195
+ #private;
4196
+ private readonly entityRegistry;
4197
+ protected selectorMode: _angular_core.Signal<"select" | "lookup">;
4198
+ protected structureMode: _angular_core.Signal<"schema" | "freeform">;
4199
+ protected contextSiblingPath: _angular_core.Signal<string>;
4200
+ protected identityField: _angular_core.Signal<string>;
4201
+ protected identityDisplay: _angular_core.Signal<"readonly" | "hidden">;
4202
+ protected valueField: _angular_core.Signal<string>;
4203
+ protected textField: _angular_core.Signal<string>;
4204
+ protected multiple: _angular_core.Signal<boolean>;
4205
+ protected freeformPath: _angular_core.Signal<string>;
4206
+ protected lookupEntityKey: _angular_core.Signal<string | undefined>;
4207
+ protected lookupHasClearButton: _angular_core.Signal<boolean>;
4208
+ protected lookupCustomFilter: _angular_core.Signal<AXDataSourceFilterOption | undefined>;
4209
+ protected disabled: _angular_core.Signal<boolean>;
4210
+ protected presentationMode: _angular_core.Signal<"standard" | "compactPanel">;
4211
+ /** Compact panel (address-style) applies only to sibling select mode; lookup falls back to standard layout. */
4212
+ protected useCompactLayout: _angular_core.Signal<boolean>;
4213
+ protected previewIcon: _angular_core.Signal<string>;
4214
+ protected placeholder: _angular_core.Signal<string>;
4215
+ protected compactSelectPlaceholder: _angular_core.Signal<string>;
4216
+ protected addCompactItemLabel: _angular_core.Signal<string>;
4217
+ protected clearRowTitle: _angular_core.Signal<string>;
4218
+ protected removeRowTitle: _angular_core.Signal<string>;
4219
+ protected resolvedSiblingPath(): string;
4220
+ /**
4221
+ * Items shown in the selector: sibling context array when path is set, otherwise optional static `dataSource` array.
4222
+ */
4223
+ protected contextItems: _angular_core.Signal<unknown[]>;
4224
+ protected contextSelectDataSource: _angular_core.Signal<AXDataSource<unknown>>;
4225
+ protected selectedSourceItems: _angular_core.WritableSignal<unknown[]>;
4226
+ protected compactRowDataSources: _angular_core.Signal<AXDataSource<unknown>[]>;
4227
+ protected compactRowSelectedItems: _angular_core.Signal<unknown[][]>;
4228
+ protected lookupEntityDef: _angular_core.WritableSignal<AXPEntity | null>;
4229
+ protected defaultLookupSorts: _angular_core.Signal<AXDataSourceSortOption[]>;
4230
+ protected lookupDataSource: _angular_core.Signal<AXDataSource<unknown> | null>;
4231
+ protected lookupTextField: _angular_core.Signal<string>;
4232
+ protected lookupSelectedItems: _angular_core.WritableSignal<unknown[]>;
4233
+ protected rows: _angular_core.Signal<Record<string, unknown>[]>;
4234
+ protected structureFields: _angular_core.Signal<AXPSelectorStructureFieldDef[]>;
4235
+ protected structureFieldNodes: _angular_core.Signal<{
4236
+ name: string;
4237
+ title: string;
4238
+ node: AXPWidgetNode;
4239
+ }[]>;
4240
+ protected identityLabel: _angular_core.Signal<string>;
4241
+ protected identityNode: _angular_core.Signal<AXPWidgetNode | null>;
4242
+ protected freeformHeading: _angular_core.Signal<string>;
4243
+ protected keyPlaceholder: _angular_core.Signal<string>;
4244
+ protected valuePlaceholder: _angular_core.Signal<string>;
4245
+ protected addPairLabel: _angular_core.Signal<string>;
4246
+ protected removePairTitle: _angular_core.Signal<string>;
4247
+ protected disabledHint: _angular_core.Signal<string>;
4248
+ protected trackRow(row: Record<string, unknown>): unknown;
4249
+ protected rowCaption(row: Record<string, unknown>): string;
4250
+ protected isDraftRow(row: Record<string, unknown>): boolean;
4251
+ protected isRowSelectLocked(row: Record<string, unknown>): boolean;
4252
+ /**
4253
+ * Items available for row `index`: all source items minus keys already chosen on other committed rows;
4254
+ * always includes the current row's selected item so the select can display it.
4255
+ */
4256
+ protected exclusiveItemsForRow(index: number): unknown[];
4257
+ private newRowUid;
4258
+ protected handleCompactSelectChange(index: number, e: AXValueChangedEvent): void;
4259
+ protected applyCompactRowFromItem(index: number, rawItem: unknown | undefined): void;
4260
+ protected clearCompactRow(index: number): void;
4261
+ protected removeCompactRow(index: number): void;
4262
+ protected addCompactRow(): void;
4263
+ protected handleSelectValueChange(e: AXValueChangedEvent): void;
4264
+ protected handleLookupValueChange(e: AXValueChangedEvent): void;
4265
+ protected applyRowsFromSourceItems(items: unknown[]): void;
4266
+ protected handleSchemaContextChange(rowKey: unknown, e: AXPContextChangeEvent): void;
4267
+ protected freeformEntries(row: Record<string, unknown>): {
4268
+ key: string;
4269
+ value: string;
4270
+ index: number;
4271
+ }[];
4272
+ private serializeFreeformValue;
4273
+ protected onFreeformKeyInput(row: Record<string, unknown>, entry: {
4274
+ key: string;
4275
+ value: string;
4276
+ index: number;
4277
+ }, nextKey: string): void;
4278
+ protected patchFreeformValue(row: Record<string, unknown>, key: string, raw: string): void;
4279
+ protected removeFreeformKey(row: Record<string, unknown>, key: string): void;
4280
+ protected addFreeformPair(row: Record<string, unknown>): void;
4281
+ private renameFreeformKey;
4282
+ private patchFreeformMap;
4283
+ private tryParseFreeformString;
4284
+ private mergeListFilter;
4285
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPSelectorStructureWidgetEditComponent, never>;
4286
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPSelectorStructureWidgetEditComponent, "axp-selector-structure-widget-edit", never, {}, {}, never, never, true, never>;
4287
+ }
4288
+
4289
+ declare class AXPSelectorStructureWidgetViewComponent extends AXPValueWidgetComponent {
4290
+ protected identityField: _angular_core.Signal<string>;
4291
+ protected textField: _angular_core.Signal<string>;
4292
+ protected valueField: _angular_core.Signal<string>;
4293
+ protected previewIcon: _angular_core.Signal<string>;
4294
+ protected summaries: _angular_core.Signal<string[]>;
4295
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPSelectorStructureWidgetViewComponent, never>;
4296
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPSelectorStructureWidgetViewComponent, "axp-selector-structure-widget-view", never, {}, {}, never, never, true, never>;
4297
+ }
4298
+
4299
+ declare const AXPEntityCreateEvent: {
4300
+ (payload: {
4301
+ entity: string;
4302
+ meta?: any;
4303
+ }): {
4304
+ type: string;
4305
+ payload: {
4306
+ entity: string;
4307
+ meta?: any;
4308
+ };
4309
+ };
4310
+ type: string;
4311
+ };
4312
+ declare class AXPEntityCreatePopupAction extends AXPWorkflowAction {
4313
+ private entityRegistery;
4314
+ private popupService;
4315
+ private platform;
4316
+ private factory;
4317
+ private config;
4318
+ private translateService;
4319
+ execute(context: AXPWorkflowContext): Promise<void>;
4320
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityCreatePopupAction, never>;
4321
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityCreatePopupAction>;
4322
+ }
4323
+ declare class AXPEntityCreateSubmittedAction extends AXPWorkflowAction {
4324
+ execute(context: AXPWorkflowContext): Promise<void>;
4325
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityCreateSubmittedAction, never>;
4326
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityCreateSubmittedAction>;
4327
+ }
4328
+ declare const AXPCreateEntityWorkflow: AXPWorkflow;
4329
+
4330
+ declare const AXPEntityDeletedEvent: {
4331
+ (payload: {
4332
+ entity: string;
4333
+ ids: string[];
4334
+ meta?: any;
4335
+ }): {
4336
+ type: string;
4337
+ payload: {
4338
+ entity: string;
4339
+ ids: string[];
4340
+ meta?: any;
4341
+ };
4342
+ };
4343
+ type: string;
4344
+ };
4345
+ interface AXPEntityDeleteOptions {
4346
+ source: string;
4347
+ ids: string[];
4348
+ }
4349
+ declare class AXPEntityPerformDeleteAction extends AXPWorkflowAction {
4350
+ private entityRegistery;
4351
+ private dialogService;
4352
+ private loadingDialog;
4353
+ private translationService;
4354
+ private settingsService;
4355
+ execute(context: AXPWorkflowContext): Promise<void>;
4356
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityPerformDeleteAction, never>;
4357
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityPerformDeleteAction>;
4358
+ }
4359
+ declare const AXPDeleteEntityWorkflow: AXPWorkflow;
4360
+
4361
+ declare class AXPQuickEntityModifyPopupAction extends AXPWorkflowAction {
4362
+ private popupService;
4363
+ private platform;
4364
+ private translateService;
4365
+ private entityRegistery;
4366
+ private config;
4367
+ private factory;
4368
+ execute(context: AXPWorkflowContext): Promise<void>;
4369
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPQuickEntityModifyPopupAction, never>;
4370
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPQuickEntityModifyPopupAction>;
4371
+ }
4372
+ declare const AXPQuickModifyEntityWorkflow: AXPWorkflow;
4373
+ declare class AXPEntityApplyUpdatesAction extends AXPWorkflowAction {
4374
+ private entityRegistery;
4375
+ execute(context: AXPWorkflowContext): Promise<void>;
4376
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityApplyUpdatesAction, never>;
4377
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityApplyUpdatesAction>;
4378
+ }
4379
+
4380
+ declare const AXPEntityModifyEvent: {
4381
+ (payload: {
4382
+ entity: string;
4383
+ values: any;
4384
+ }): {
4385
+ type: string;
4386
+ payload: {
4387
+ entity: string;
4388
+ values: any;
4389
+ };
4390
+ };
4391
+ type: string;
4392
+ };
4393
+ declare class AXPEntityModifySectionPopupAction extends AXPWorkflowAction {
4394
+ private popupService;
4395
+ private platform;
4396
+ private translateService;
4397
+ private entityRegistery;
4398
+ private config;
4399
+ private factory;
4400
+ execute(context: AXPWorkflowContext): Promise<void>;
4401
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityModifySectionPopupAction, never>;
4402
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityModifySectionPopupAction>;
4403
+ }
4404
+ declare class AXPEntityModifyConfirmedAction extends AXPWorkflowAction {
4405
+ execute(context: AXPWorkflowContext): Promise<void>;
4406
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityModifyConfirmedAction, never>;
4407
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityModifyConfirmedAction>;
4408
+ }
4409
+ declare const AXPModifyEntitySectionWorkflow: AXPWorkflow;
4410
+
4411
+ declare class AXPShowDetailViewAction extends AXPWorkflowAction {
4412
+ private navigation;
4413
+ private sessionService;
4414
+ execute(context: AXPWorkflowContext): Promise<void>;
4415
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPShowDetailViewAction, never>;
4416
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPShowDetailViewAction>;
4417
+ }
4418
+ declare const AXPShowDetailsViewWorkflow: AXPWorkflow;
4419
+
4420
+ /** Optional list filters passed into `show-list-view` (e.g. from `Entity:List` with `conditions`). */
4421
+ interface AXPShowListViewCondition {
4422
+ name?: string;
4423
+ field?: string;
4424
+ operator?: {
4425
+ type: string;
4426
+ };
4427
+ value?: unknown;
4428
+ }
4429
+ declare class AXPShowListViewAction extends AXPWorkflowAction {
4430
+ private navigation;
4431
+ private sessionService;
4432
+ execute(context: AXPWorkflowContext): Promise<void>;
4433
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPShowListViewAction, never>;
4434
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPShowListViewAction>;
4435
+ }
4436
+ declare const AXPShowListViewWorkflow: AXPWorkflow;
4437
+
4438
+ export { ATTACHMENTS_PAGE_COMPONENT_KEY, AXMEntityCrudService, AXMEntityCrudServiceImpl, AXPCategoryTreeService, AXPCreateEntityCommand, AXPCreateEntityWorkflow, AXPDataSeederService, AXPDeleteEntityWorkflow, AXPEditFileUploaderCommand, AXPEntitiesListDataSourceDefinition, AXPEntityApplyUpdatesAction, AXPEntityCategoryTreeSelectorComponent, AXPEntityCategoryWidget, AXPEntityCategoryWidgetColumnComponent, AXPEntityCategoryWidgetEditComponent, AXPEntityCategoryWidgetViewComponent, AXPEntityCommandTriggerViewModel, AXPEntityCreateEvent, AXPEntityCreatePopupAction, AXPEntityCreateSubmittedAction, AXPEntityCreateViewElementViewModel, AXPEntityCreateViewModelFactory, AXPEntityCreateViewSectionViewModel, AXPEntityDataProvider, AXPEntityDataProviderImpl, AXPEntityDataSelectorRowActionsService, AXPEntityDataSelectorService, AXPEntityDefinitionProviderWidget, AXPEntityDefinitionProviderWidgetEditComponent, AXPEntityDefinitionRegistryService, AXPEntityDeletedEvent, AXPEntityDetailListViewModel, AXPEntityDetailPopoverComponent, AXPEntityDetailPopoverService, AXPEntityDetailViewModelFactory, AXPEntityDetailViewModelResolver, AXPEntityEventDispatcherService, AXPEntityEventsKeys, AXPEntityFormBuilderService, AXPEntityListPersistenceModeDefault, AXPEntityListTableService, AXPEntityListToolbarService, AXPEntityListViewCardFieldViewModel, AXPEntityListViewColumnViewModel, AXPEntityListViewModelFactory, AXPEntityListViewModelResolver, AXPEntityListWidget, AXPEntityListWidgetViewComponent, AXPEntityMasterCreateViewModel, AXPEntityMasterListCardSelectActionName, AXPEntityMasterListViewModel, AXPEntityMasterListViewQueryViewModel, AXPEntityMasterSingleElementViewModel, AXPEntityMasterSingleViewGroupViewModel, AXPEntityMasterSingleViewModel, AXPEntityMasterUpdateElementViewModel, AXPEntityMasterUpdateViewModel, AXPEntityMasterUpdateViewModelFactory, AXPEntityMiddleware, AXPEntityModifyConfirmedAction, AXPEntityModifyEvent, AXPEntityModifySectionPopupAction, AXPEntityModule, AXPEntityPerformDeleteAction, AXPEntityPreloadFiltersContainerComponent, AXPEntityPreloadFiltersViewModel, AXPEntityPreloadFiltersViewModelResolver, AXPEntityResolver, AXPEntityService, AXPEntityStorageService, AXPEntityUpdateViewSectionViewModel, AXPFileListComponent, AXPFileUploaderLoadFilesQuery, AXPFileUploaderSaveFilesCommand, AXPFileUploaderWidget, AXPFileUploaderWidgetColumnComponent, AXPFileUploaderWidgetEditComponent, AXPFileUploaderWidgetService, AXPFileUploaderWidgetViewComponent, AXPGetEntityDetailsQuery, AXPLayoutOrderingConfigService, AXPLookupWidget, AXPLookupWidgetColumnComponent, AXPLookupWidgetEditComponent, AXPLookupWidgetViewComponent, AXPMiddlewareAbortError, AXPMiddlewareEntityStorageService, AXPModifyEntitySectionWorkflow, AXPMultiSourceDefinitionProviderContext, AXPMultiSourceDefinitionProviderService, AXPMultiSourceFederatedSearchService, AXPMultiSourceSelectorComponent, AXPMultiSourceSelectorService, AXPMultiSourceSelectorWidget, AXPMultiSourceSelectorWidgetColumnComponent, AXPMultiSourceSelectorWidgetEditComponent, AXPMultiSourceSelectorWidgetViewComponent, AXPMultiSourceType, AXPOpenEntityDetailsCommand, AXPQuickEntityModifyPopupAction, AXPQuickModifyEntityWorkflow, AXPRelatedColumnEnrichmentService, AXPRelatedColumnMetadataResolver, AXPSelectorStructureWidget, AXPSelectorStructureWidgetColumnComponent, AXPSelectorStructureWidgetEditComponent, AXPSelectorStructureWidgetViewComponent, AXPShowDetailViewAction, AXPShowDetailsViewWorkflow, AXPShowListViewAction, AXPShowListViewWorkflow, AXPTruncatedBreadcrumbComponent, AXPUpdateEntityCommand, AXPViewEntityDetailsCommand, AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY, AXP_DATA_SEEDER_TOKEN, AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER, AXP_ENTITY_MODIFIER, AXP_ENTITY_STORAGE_BACKEND, AXP_ENTITY_STORAGE_MIDDLEWARE, AXP_MULTI_SOURCE_DEFINITION_PROVIDER, AXP_RECORD_WORKFLOW_INFO_CORRELATION_ID_FIELD, AXP_RECORD_WORKFLOW_INFO_DEFINITION_ID_FIELD, AXP_RECORD_WORKFLOW_INFO_INSTANCE_ID_FIELD, DEFAULT_COLUMN_ORDER, DEFAULT_PAIR_SPAN_RULES, DEFAULT_PROPERTY_ORDER, DEFAULT_SECTION_ORDER, ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY, EntityBuilder, EntityDataAccessor, actionExists, applyDataSourcePagingWithoutLoad, attachmentFieldCount, attachmentsPlugin, attachmentsSemanticallyEqual, axpCreateEntityAiToolInputDefaults, axpCreateEntityCommandDefinition, buildAXPRecordWorkflowInfo, canPersistEntityListState, cloneLayoutArrays, collectEntityQuickSearchFieldPaths, collectNestedCreateHiddenProperties, collectNestedFieldPathsFromEntityColumns, collectQuickSearchPathsFromSingleEntityDefinition, columnOrderingMiddleware, columnOrderingMiddlewareProvider, columnWidthMiddleware, columnWidthMiddlewareProvider, committedAttachments, computeEntityAggregates, createColumnOrderingMiddlewareProvider, createLayoutOrderingMiddlewareProvider, createModifierContext, defaultCardLayoutMiddleware, defaultCardLayoutMiddlewareProvider, defaultMultiLanguageMiddleware, defaultMultiLanguageMiddlewareProvider, detectEntityChanges, ensureLayoutPropertyView, ensureLayoutSection, ensureListActions, entityDetailsCreateActions, entityDetailsCreateActionsDeferredParent, entityDetailsCrudActions, entityDetailsEditAction, entityDetailsNewEditAction, entityDetailsReferenceCondition, entityDetailsReferenceCreateActions, entityDetailsSimpleCondition, entityMasterBulkDeleteAction, entityMasterCreateAction, entityMasterCrudActions, entityMasterDeleteAction, entityMasterEditAction, entityMasterRecordActions, entityMasterViewAction, entityOverrideDetailsViewAction, eventDispatchMiddleware, filterSortEntityRows, findEntityListRowDataInTree, fingerprintAttachmentItem, fingerprintAttachments, formatLookupItemDisplay, getDataSourcePageIndex, getEntityListRowId, getMasterInterfacePropertySortKey, getRecordWorkflowCorrelationId, getRecordWorkflowInstanceId, hasFileUploaderTitleOrDescriptionFields, isAXPMiddlewareAbortError, isAttachmentListEntry, isCategoryEntity, isCategoryFilter, isFileListItem, isFileUploaderEditDialogAuto, isLegacyEntityDataSelectorOptions, isUnresolvedLookupDisplayTemplate, layoutOrderingMiddlewareFactory, layoutOrderingMiddlewareProvider, mapLegacyEntityDataSelectorOptions, mergeForeignKeyFieldIntoCreateActions, normalizeEntityDataSelectorOptions, normalizeEntityFieldToFileList, normalizeEntityListPersistenceMode, normalizeListPaging, normalizeLookupDisplayTemplate, persistedAttachments, provideEntity, resolveEntityPluginDetailPageOrder, resolveFileUploaderEditDialog, resolveFileUploaderEntityScope, resolveLookupDisplayField, resolveLookupDisplayTemplate, restoreEntityListExpandedRows, runEntityQuery, searchResultDescriptionMiddleware, searchResultDescriptionMiddlewareProvider, shouldLoadEntityListStateFromStorage, shouldResetEntityListStateOnRouteEntry };
4439
+ export type { AXPAuditEvent, AXPCollectEntityQuickSearchPathsResolver, AXPDataSeeder, AXPEntityActionPlugin, AXPEntityAggregateMeasure, AXPEntityAggregateOptions, AXPEntityAggregateReducerType, AXPEntityAggregateRequest, AXPEntityAggregateResult, AXPEntityCategoryWidgetOptions, AXPEntityChangeSet, AXPEntityConfigs, AXPEntityCreateDto, AXPEntityDataSelectorCategoryFilterOptions, AXPEntityDataSelectorCategoryOptions, AXPEntityDataSelectorCreateOptions, AXPEntityDataSelectorFilterOptions, AXPEntityDataSelectorGridOptions, AXPEntityDataSelectorOpenInput, AXPEntityDataSelectorOpenOptions, AXPEntityDataSelectorOptions, AXPEntityDataSelectorResult, AXPEntityDataSelectorRowActionsConfig, AXPEntityDataSelectorSearchOptions, AXPEntityDataSelectorSelectionOptions, AXPEntityDataSelectorSortOptions, AXPEntityDefinitionLoader, AXPEntityDefinitionPreloader, AXPEntityDeleteOptions, AXPEntityDetailDto, AXPEntityDetailPopoverOptions, AXPEntityLayoutLike, AXPEntityLayoutPropertyLike, AXPEntityLayoutSectionLike, AXPEntityListEntry, AXPEntityListExpandRowRef, AXPEntityListInput, AXPEntityListItemDto, AXPEntityListPagingState, AXPEntityListPersistenceMode, AXPEntityListToolbarConvertOptions, AXPEntityMasterListCardLayout, AXPEntityMasterListCardSecondaryActionItem, AXPEntityMasterListViewSortPropViewModel, AXPEntityModel, AXPEntityModifier, AXPEntityModifierContext, AXPEntityModifierProvider, AXPEntityOutputDto, AXPEntityPreloadEntity, AXPEntityQueryAllOptions, AXPEntityQueryAllResult, AXPEntityStorageContext, AXPEntityStorageMiddleware, AXPEntityUpdateDto, AXPFileUploaderEditDialogFieldOptions, AXPFileUploaderEditDialogMode, AXPFileUploaderEditDialogOptions, AXPFileUploaderEntityFilesScope, AXPFileUploaderLoadFilesInput, AXPFileUploaderLoadFilesResult, AXPFileUploaderSaveFilesInput, AXPFileUploaderSaveFilesResult, AXPFileUploaderShowFileListEntityContext, AXPFileUploaderShowFileListOptions, AXPFileUploaderUploadActionDescriptor, AXPFileUploaderWidgetColumnOptions, AXPFileUploaderWidgetDesignerOptions, AXPFileUploaderWidgetEditOptions, AXPFileUploaderWidgetOptions, AXPFileUploaderWidgetPrintOptions, AXPFileUploaderWidgetViewOptions, AXPGetEntityDetailsQueryInput, AXPGetEntityDetailsQueryResult, AXPLookupColumnResolveOptions, AXPLookupColumnResolveStrategy, AXPLookupDisplayOptions, AXPLookupPopoverOptions, AXPLookupSelectorRowActionsConfig, AXPLookupWidgetLookType, AXPLookupWidgetOptions, AXPMultiSourceDefinition, AXPMultiSourceDefinitionProvider, AXPMultiSourceItem, AXPMultiSourceRef, AXPMultiSourceSearchResult, AXPMultiSourceSearchResultItem, AXPMultiSourceSelectorOpenConfig, AXPMultiSourceSelectorResult, AXPMultiSourceSelectorWidgetOptions, AXPMultiSourceValue, AXPOpenEntityDetailsCommandInput, AXPRecordAuditInfo, AXPRecordOwnershipInfo, AXPRecordStateInfo, AXPRecordWorkflowInfo, AXPRelatedColumnMetadata, AXPSelectorStructureFieldDef, AXPSelectorStructureIdentityDisplay, AXPSelectorStructurePresentationMode, AXPSelectorStructureSelectorMode, AXPSelectorStructureStructureMode, AXPSelectorStructureWidgetColumnOptions, AXPSelectorStructureWidgetDesignerOptions, AXPSelectorStructureWidgetEditOptions, AXPSelectorStructureWidgetOptions, AXPSelectorStructureWidgetPrintOptions, AXPSelectorStructureWidgetViewOptions, AXPShowListViewCondition, AttachmentsDisplayMode, AttachmentsPluginOptions, CategoryQueryEvent, CategoryQueryFunction, CategoryQueryResult, CategoryTreeConfig, CategoryTreeNodeData, EntityDetailPluginPageSlot, PairSpanRule, ResolveEntityPluginDetailPageOrderOptions, RunEntityQueryAdapters, SectionOrderConfig, SkipEntityComponentPageRef };