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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/fesm2022/acorex-platform-auth.mjs +281 -23
  2. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  3. package/fesm2022/acorex-platform-common-common-settings.provider-Bi1RYif5.mjs +163 -0
  4. package/fesm2022/acorex-platform-common-common-settings.provider-Bi1RYif5.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-common.mjs +1047 -263
  6. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-core.mjs +1138 -510
  8. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-domain.mjs +557 -826
  10. package/fesm2022/acorex-platform-domain.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-layout-builder.mjs +804 -186
  12. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  13. package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs +121 -0
  14. package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-layout-components.mjs +6208 -2344
  16. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  17. package/fesm2022/acorex-platform-layout-designer.mjs +456 -204
  18. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-layout-entity.mjs +18632 -10286
  20. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-layout-views.mjs +538 -168
  22. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  23. package/fesm2022/acorex-platform-layout-widget-core.mjs +720 -456
  24. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  25. package/fesm2022/{acorex-platform-layout-widgets-button-widget-designer.component-C3VoBb_b.mjs → acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs} +10 -10
  26. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs.map +1 -0
  27. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CDYAGBku.mjs +103 -0
  28. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CDYAGBku.mjs.map +1 -0
  29. package/fesm2022/{acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs → acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs} +6 -7
  30. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs.map +1 -0
  31. package/fesm2022/{acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs → acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs} +12 -12
  32. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs.map +1 -0
  33. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BGO75IMz.mjs +116 -0
  34. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BGO75IMz.mjs.map +1 -0
  35. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-DmzNTYiS.mjs} +6 -6
  36. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-DmzNTYiS.mjs.map +1 -0
  37. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-BNG_588B.mjs} +5 -5
  38. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-BNG_588B.mjs.map +1 -0
  39. package/fesm2022/{acorex-platform-layout-widgets-text-block-widget-designer.component-Df1BFkSa.mjs → acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs} +6 -6
  40. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs.map +1 -0
  41. package/fesm2022/acorex-platform-layout-widgets.mjs +8728 -4269
  42. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  43. package/fesm2022/acorex-platform-native.mjs +8 -7
  44. package/fesm2022/acorex-platform-native.mjs.map +1 -1
  45. package/fesm2022/acorex-platform-runtime.mjs +391 -166
  46. package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
  47. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cx1lLUaR.mjs +160 -0
  48. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cx1lLUaR.mjs.map +1 -0
  49. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-AOrcgjDF.mjs +120 -0
  50. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-AOrcgjDF.mjs.map +1 -0
  51. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs → acorex-platform-themes-default-entity-master-single-view.component-BfCeUU5F.mjs} +19 -26
  52. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-BfCeUU5F.mjs.map +1 -0
  53. package/fesm2022/{acorex-platform-themes-default-error-401.component-cfREo88K.mjs → acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs} +4 -4
  54. package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs.map +1 -0
  55. package/fesm2022/{acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs → acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs} +4 -4
  56. package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs.map +1 -0
  57. package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs +19 -0
  58. package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs.map +1 -0
  59. package/fesm2022/acorex-platform-themes-default.mjs +1836 -67
  60. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  61. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs → acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs} +6 -6
  62. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs.map +1 -0
  63. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs → acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs} +6 -6
  64. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs.map +1 -0
  65. package/fesm2022/{acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs → acorex-platform-themes-shared-settings.provider-DK6R87Lf.mjs} +24 -25
  66. package/fesm2022/acorex-platform-themes-shared-settings.provider-DK6R87Lf.mjs.map +1 -0
  67. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs +94 -0
  68. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs.map +1 -0
  69. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs +86 -0
  70. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs.map +1 -0
  71. package/fesm2022/acorex-platform-themes-shared.mjs +674 -573
  72. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  73. package/fesm2022/acorex-platform-workflow.mjs +1715 -535
  74. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  75. package/fesm2022/acorex-platform.mjs.map +1 -1
  76. package/package.json +37 -37
  77. package/{auth/index.d.ts → types/acorex-platform-auth.d.ts} +241 -4
  78. package/{common/index.d.ts → types/acorex-platform-common.d.ts} +598 -80
  79. package/{core/index.d.ts → types/acorex-platform-core.d.ts} +595 -132
  80. package/{domain/index.d.ts → types/acorex-platform-domain.d.ts} +744 -412
  81. package/{layout/builder/index.d.ts → types/acorex-platform-layout-builder.d.ts} +193 -48
  82. package/types/acorex-platform-layout-components.d.ts +2979 -0
  83. package/{layout/designer/index.d.ts → types/acorex-platform-layout-designer.d.ts} +96 -18
  84. package/{layout/entity/index.d.ts → types/acorex-platform-layout-entity.d.ts} +1601 -261
  85. package/{layout/views/index.d.ts → types/acorex-platform-layout-views.d.ts} +116 -55
  86. package/{layout/widget-core/index.d.ts → types/acorex-platform-layout-widget-core.d.ts} +272 -124
  87. package/{layout/widgets/index.d.ts → types/acorex-platform-layout-widgets.d.ts} +1055 -157
  88. package/{native/index.d.ts → types/acorex-platform-native.d.ts} +0 -7
  89. package/types/acorex-platform-runtime.d.ts +571 -0
  90. package/{themes/default/index.d.ts → types/acorex-platform-themes-default.d.ts} +122 -5
  91. package/{themes/shared/index.d.ts → types/acorex-platform-themes-shared.d.ts} +1 -1
  92. package/types/acorex-platform-workflow.d.ts +1884 -0
  93. package/fesm2022/acorex-platform-common-common-settings.provider-zhqNP3xb.mjs +0 -71
  94. package/fesm2022/acorex-platform-common-common-settings.provider-zhqNP3xb.mjs.map +0 -1
  95. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-C3VoBb_b.mjs.map +0 -1
  96. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs +0 -135
  97. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs.map +0 -1
  98. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs.map +0 -1
  99. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs.map +0 -1
  100. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs.map +0 -1
  101. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs.map +0 -1
  102. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Df1BFkSa.mjs.map +0 -1
  103. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs +0 -157
  104. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs.map +0 -1
  105. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DyDa_hyd.mjs +0 -1542
  106. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DyDa_hyd.mjs.map +0 -1
  107. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs +0 -101
  108. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs.map +0 -1
  109. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs.map +0 -1
  110. package/fesm2022/acorex-platform-themes-default-error-401.component-cfREo88K.mjs.map +0 -1
  111. package/fesm2022/acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs.map +0 -1
  112. package/fesm2022/acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs +0 -19
  113. package/fesm2022/acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs.map +0 -1
  114. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs.map +0 -1
  115. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs.map +0 -1
  116. package/fesm2022/acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs.map +0 -1
  117. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs +0 -65
  118. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs.map +0 -1
  119. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs +0 -64
  120. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs.map +0 -1
  121. package/layout/components/index.d.ts +0 -1669
  122. package/runtime/index.d.ts +0 -307
  123. package/workflow/index.d.ts +0 -1808
  124. /package/{index.d.ts → types/acorex-platform.d.ts} +0 -0
@@ -1,43 +1,111 @@
1
- import { AXPExecuteCommandResult, AXPMetaData, AXPGridLayoutOptions, AXPBreadcrumbItem, AXPFilterQuery, AXPFilterDefinition, AXPExecuteCommand, AXPUserReference, AXPQueryRequest, AXPPagedListResult, AXPCategoryEntity as AXPCategoryEntity$1, AXPMiddlewareErrorResponse, AXHighlightService, AXPExpression, AXPColumnQuery, AXPSortDefinition, AXPDeviceService, AXPBroadcastEventService, AXPActionMenuItem } from '@acorex/platform/core';
1
+ import * as _acorex_platform_core from '@acorex/platform/core';
2
+ import { AXPExecuteCommandResult, AXPMetaData, AXPDataSourceDefinitionProvider, AXPDataSourceDefinition, AXPGridLayoutOptions, AXPBreadcrumbItem, AXPFilterQuery, AXPFilterDefinition, AXPExecuteCommand, AXPQueryRequest, AXPPagedListResult, AXPUserReference, AXPCategoryEntity as AXPCategoryEntity$1, AXPEntityOp, AXPMiddlewareErrorResponse, AXHighlightService, AXPExpression, AXPMultiLanguageString, AXPColumnQuery, AXPSortDefinition, AXPDeviceService, AXPBroadcastEventService, AXPActionMenuItem, AXPContextChangeEvent } from '@acorex/platform/core';
2
3
  import { AXPCommand, AXPQueryExecutor, AXPCommandService, AXPQuery } from '@acorex/platform/runtime';
3
4
  import * as _angular_core from '@angular/core';
4
- import { ElementRef, InjectionToken, Injector, Type, OnInit, ChangeDetectorRef, OnDestroy } from '@angular/core';
5
+ import { ElementRef, InjectionToken, Injector, Type, EnvironmentProviders, OnInit, ChangeDetectorRef, OnDestroy } from '@angular/core';
5
6
  import { AXPopoverComponent } from '@acorex/components/popover';
6
7
  import * as i3 from '@acorex/platform/layout/widget-core';
7
8
  import { AXPWidgetNode, AXPWidgetColumnNode, AXPWidgetCoreService, AXPColumnWidgetComponent, AXPValueWidgetComponent, AXPWidgetConfig, AXPWidgetRendererDirective } from '@acorex/platform/layout/widget-core';
8
- import { AXStyleColorType, AXDataSource, AXDataSourceFilterOption, AXValueChangedEvent, AXClickEvent, AXFocusEvent, AXHtmlEvent, AXDataSourceSortOption } from '@acorex/cdk/common';
9
+ import { AXPPreloadFiltersApplyEvent, AXPColumnItemListItem, AXPDataSelectorAllowCreate, AXPCategoryTreeDataSource } from '@acorex/platform/layout/components';
10
+ import { AXPPageLayoutBaseComponent } from '@acorex/platform/layout/views';
11
+ import { AXStyleColorType, AXDataSource, AXDataSourceFilterOption, AXDataSourceSortOption, AXValueChangedEvent, AXClickEvent, AXFocusEvent, AXHtmlEvent } from '@acorex/cdk/common';
9
12
  import * as _acorex_platform_common from '@acorex/platform/common';
10
- import { AXPEntityCommandScope, AXPEntity, AXPEntityAction, AXPEntityProperty, AXPEntityTableColumn, AXPRelatedEntity, AXPEntitySectionView, AXPEntityPropertyCreateView, AXPEntityPropertyLayoutConfig, AXPQueryView, AXPEntityPropertyView, AXPCategoryEntity, AXPEntityPropertyGroup, AXPEntityMasterCreateLayoutView, AXPEntityMasterUpdateLayoutView, AXPEntityMasterSingleLayoutView, AXPEntityMasterListView, AXPEntityDetailListView, AXPQueryFilter } from '@acorex/platform/common';
13
+ import { AXPEntityCommandScope, AXPEntity, AXPEntityAction, AXPEntityProperty, AXPEntityTableColumn, AXPRelatedEntity, AXPEntitySectionView, AXPEntityPropertyCreateView, AXPEntityPropertyLayoutConfig, AXPQueryView, AXPEntityPropertyView, AXPCategoryEntity, AXPEntityPropertyGroup, AXPEntityMasterCreateLayoutView, AXPEntityMasterUpdateLayoutView, AXPEntityMasterSingleLayoutView, AXPEntityMasterListView, AXPEntityDetailListView, AXPEntityPage, AXPQueryFilter } from '@acorex/platform/common';
11
14
  import * as i1 from '@angular/router';
12
15
  import { ResolveFn } from '@angular/router';
13
16
  import * as rxjs from 'rxjs';
14
17
  import { Subject } from 'rxjs';
18
+ export { AXPEntityDefinitionCrudService, AXP_ENTITY_DEFINITION_CRUD_SERVICE } from '@acorex/platform/domain';
15
19
  import * as i2 from '@acorex/platform/workflow';
16
- import { AXPWorkflowService, AXPWorkflowAction, AXPWorkflowContext, AXPWorkflow } from '@acorex/platform/workflow';
20
+ import { AXPWorkflowService, AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext } from '@acorex/platform/workflow';
21
+ import * as i4 from '@acorex/platform/layout/builder';
22
+ import { IActionBuilder, AXPDialogRef, IFormFieldBuilder } from '@acorex/platform/layout/builder';
17
23
  import { AXPSessionService } from '@acorex/platform/auth';
18
- import { AXTreeViewNode, AXTreeViewComponent, AXTreeViewNodeToggleEvent, AXTreeViewNodeSelectEvent, AXTreeViewSelectionChangeEvent } from '@acorex/components/tree-view';
19
- import { AXTranslationService } from '@acorex/core/translation';
24
+ import { AXTreeViewNode, AXTreeViewComponent, AXTreeViewNodeSelectEvent } from '@acorex/components/tree-view';
20
25
  import { AXPopupSizeType, AXPopupService } from '@acorex/components/popup';
21
- import { IActionBuilder, IFormFieldBuilder, AXPDialogRef } from '@acorex/platform/layout/builder';
22
26
  import { AXBasePageComponent } from '@acorex/components/page';
23
27
  import { AXFormatService } from '@acorex/core/format';
24
28
  import { AXTagBoxComponent } from '@acorex/components/tag-box';
25
- import { AXPDataListWidgetComponentOptions } from '@acorex/platform/layout/widgets';
26
- import { AXSelectBoxComponent } from '@acorex/components/select-box';
29
+ import * as _acorex_core_translation from '@acorex/core/translation';
30
+ import { AXPProviderSelectWidgetEditBase, AXPDataListWidgetComponentOptions } from '@acorex/platform/layout/widgets';
27
31
 
28
32
  declare class AXPCreateEntityCommand implements AXPCommand<any, any> {
29
33
  private entityForm;
30
- private settingsService;
31
34
  private entityService;
32
35
  private toastService;
33
36
  private translationService;
34
- private eventService;
37
+ private settingsService;
38
+ private openEntityDetailsCommand;
35
39
  protected context: {};
36
40
  execute(input: any): Promise<AXPExecuteCommandResult<any>>;
37
41
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPCreateEntityCommand, never>;
38
42
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPCreateEntityCommand>;
39
43
  }
40
44
 
45
+ /**
46
+ * Merged into AI/tool payloads for `Entity:Create` so post-create navigation does not run from agent flows.
47
+ * Applied in the AI module when normalizing tool arguments (not in the generic command executor).
48
+ */
49
+ declare const axpCreateEntityAiToolInputDefaults: {
50
+ readonly __context__: {
51
+ readonly options: {
52
+ readonly process: {
53
+ readonly redirect: false;
54
+ };
55
+ };
56
+ };
57
+ };
58
+ declare const axpCreateEntityCommandDefinition: {
59
+ key: string;
60
+ title: string;
61
+ description: string;
62
+ executionMode: "frontend";
63
+ inputs: ({
64
+ name: string;
65
+ title: string;
66
+ description: string;
67
+ interface: {
68
+ name: string;
69
+ };
70
+ validations?: undefined;
71
+ } | {
72
+ name: string;
73
+ title: string;
74
+ description: string;
75
+ interface: {
76
+ name: string;
77
+ };
78
+ validations: {
79
+ rule: string;
80
+ }[];
81
+ })[];
82
+ outcomes: {
83
+ mode: "dynamic";
84
+ summary: string;
85
+ derivesFrom: string;
86
+ };
87
+ capabilities: "ai"[];
88
+ ai: {
89
+ shortDescription: string;
90
+ usage: {
91
+ whenToUse: string[];
92
+ avoidWhen: string[];
93
+ followUpTools: string[];
94
+ };
95
+ tags: string[];
96
+ toolInputDefaults: {
97
+ __context__: {
98
+ readonly options: {
99
+ readonly process: {
100
+ readonly redirect: false;
101
+ };
102
+ };
103
+ };
104
+ };
105
+ };
106
+ categories: _acorex_platform_core.AXPDefinitionCategory[];
107
+ };
108
+
41
109
  declare class AXPUpdateEntityCommand implements AXPCommand<any, any> {
42
110
  private readonly entityForm;
43
111
  private readonly settingsService;
@@ -89,10 +157,20 @@ declare class AXPEntityDetailPopoverComponent {
89
157
  textField: _angular_core.InputSignal<string>;
90
158
  valueField: _angular_core.InputSignal<string>;
91
159
  item: _angular_core.InputSignal<AXPMetaData | undefined>;
160
+ breadcrumb: _angular_core.InputSignal<string | null>;
92
161
  protected detailPopover: _angular_core.Signal<AXPopoverComponent | undefined>;
93
162
  protected entityDetails: _angular_core.WritableSignal<any>;
94
163
  protected isLoadingDetails: _angular_core.WritableSignal<boolean>;
95
164
  protected isDetailPopoverOpen: _angular_core.WritableSignal<boolean>;
165
+ /**
166
+ * Stable list of property widgets for the template. Must be a signal (computed), not a method:
167
+ * calling a method from the template rebuilds nodes every CD cycle and can make the widget renderer loop.
168
+ */
169
+ protected readonly entityPropertiesWithWidgets: _angular_core.Signal<{
170
+ name: string;
171
+ title: string;
172
+ node: AXPWidgetNode;
173
+ }[]>;
96
174
  /**
97
175
  * Show the entity detail popover
98
176
  */
@@ -118,13 +196,14 @@ declare class AXPEntityDetailPopoverComponent {
118
196
  * Name priority MUST come before widget-type priority.
119
197
  */
120
198
  private getNameImportanceScore;
121
- protected getEntityPropertiesWithWidgets(): Array<{
122
- name: string;
123
- title: string;
124
- node: AXPWidgetNode;
125
- }>;
199
+ private buildEntityPropertiesWithWidgets;
200
+ /**
201
+ * Resolves the data path for a property. For lookups with expose, returns the expanded path
202
+ * when data has it (e.g. personTitle). Otherwise returns property name (e.g. personTitleId).
203
+ */
204
+ private resolveDataPath;
126
205
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityDetailPopoverComponent, never>;
127
- 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; }; "item": { "alias": "item"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
206
+ 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; }; "item": { "alias": "item"; "required": false; "isSignal": true; }; "breadcrumb": { "alias": "breadcrumb"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
128
207
  }
129
208
 
130
209
  interface AXPEntityDetailPopoverOptions {
@@ -133,6 +212,7 @@ interface AXPEntityDetailPopoverOptions {
133
212
  item: AXPMetaData;
134
213
  textField?: string;
135
214
  valueField?: string;
215
+ breadcrumb?: string;
136
216
  }
137
217
  declare class AXPEntityDetailPopoverService {
138
218
  private readonly applicationRef;
@@ -156,6 +236,25 @@ declare class AXPEntityDetailPopoverService {
156
236
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityDetailPopoverService>;
157
237
  }
158
238
 
239
+ declare class AXPEntityPreloadFiltersContainerComponent extends AXPPageLayoutBaseComponent {
240
+ private readonly route;
241
+ private readonly router;
242
+ private readonly entityService;
243
+ private readonly filterOperatorMiddleware;
244
+ protected readonly noMatchText: _angular_core.WritableSignal<string | null>;
245
+ private vm;
246
+ preloadFiltersDef: _angular_core.Signal<_acorex_platform_core.AXPFilterDefinition[]>;
247
+ hasNoRequiredFilters: _angular_core.Signal<boolean>;
248
+ protected getPageTitle(): string;
249
+ protected getPageDescription(): string | null;
250
+ onApply(event: AXPPreloadFiltersApplyEvent): Promise<void>;
251
+ onShowAll(): Promise<void>;
252
+ private buildPreloadFilterQueries;
253
+ private buildListQueryFilter;
254
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityPreloadFiltersContainerComponent, never>;
255
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityPreloadFiltersContainerComponent, "axp-entity-preload-filters-container", never, {}, {}, never, never, true, never>;
256
+ }
257
+
159
258
  interface AXPDataSeeder {
160
259
  seed(): Promise<void>;
161
260
  }
@@ -167,8 +266,17 @@ declare class AXPDataSeederService {
167
266
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPDataSeederService>;
168
267
  }
169
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
+
170
278
  declare class AXPEntityCommandTriggerViewModel {
171
- priority: 'primary' | 'secondary';
279
+ priority: 'primary' | 'secondary' | 'none';
172
280
  order: number;
173
281
  color: AXStyleColorType;
174
282
  icon: string;
@@ -182,7 +290,9 @@ declare class AXPEntityCommandTriggerViewModel {
182
290
  options: any;
183
291
  metadata?: AXPMetaData;
184
292
  default?: boolean;
185
- constructor(entity: AXPEntity, action: AXPEntityAction);
293
+ items?: AXPEntityCommandTriggerViewModel[];
294
+ isChild?: boolean;
295
+ constructor(entity: AXPEntity, action: AXPEntityAction, isChild?: boolean);
186
296
  }
187
297
  declare class AXPEntityListViewColumnViewModel {
188
298
  readonly property: AXPEntityProperty;
@@ -190,7 +300,7 @@ declare class AXPEntityListViewColumnViewModel {
190
300
  constructor(property: AXPEntityProperty, column: AXPEntityTableColumn);
191
301
  name: string;
192
302
  title: string;
193
- visible: boolean;
303
+ visible: string | boolean;
194
304
  dir: "asc" | "desc" | undefined;
195
305
  sortEnabled: boolean | undefined;
196
306
  width: '';
@@ -207,12 +317,19 @@ declare class AXPEntityDetailListViewModel {
207
317
  private filterOperatorMiddleware;
208
318
  private expressionEvaluator;
209
319
  private queryExecutor;
320
+ private readonly settingsService;
321
+ private readonly destroyed;
322
+ private readonly showRowIndexColumnEnabled;
323
+ /** Whether the row index column is shown (user setting). */
324
+ readonly showIndexColumn: _angular_core.Signal<boolean>;
210
325
  dataSource: AXDataSource<any>;
211
326
  parentKey: _angular_core.Signal<string | undefined>;
212
327
  constructor(injector: Injector, detailEntityConfig: AXPRelatedEntity, parent: {
213
328
  entity: AXPEntity;
214
329
  data: any;
215
330
  });
331
+ private syncShowRowIndexColumnSetting;
332
+ destroy(): void;
216
333
  initialize(): Promise<void>;
217
334
  selectedItems: _angular_core.WritableSignal<any[]>;
218
335
  hasSelectedItems: _angular_core.Signal<boolean>;
@@ -250,6 +367,49 @@ declare const AXPEntityEventsKeys: {
250
367
  REFRESH_DATA: string;
251
368
  };
252
369
 
370
+ interface AXPEntityListExpandRowRef {
371
+ data: Record<string, unknown>;
372
+ }
373
+ /**
374
+ * Resolves a stable row id from entity list row data.
375
+ */
376
+ declare function getEntityListRowId(data: Record<string, unknown>, key?: string): string;
377
+ /**
378
+ * Finds row data in a hierarchical grid tree (root rows and nested children).
379
+ */
380
+ declare function findEntityListRowDataInTree(items: unknown[], id: string, key: string): Record<string, unknown> | null;
381
+ /**
382
+ * Restores expanded rows after data load (parents before children).
383
+ */
384
+ declare function restoreEntityListExpandedRows(options: {
385
+ expandedRowIds: string[];
386
+ rowKey: string;
387
+ getDisplayedRows: () => unknown[];
388
+ expandRow: (row: AXPEntityListExpandRowRef) => Promise<void>;
389
+ }): Promise<void>;
390
+
391
+ interface AXPEntityListPagingState {
392
+ take: number;
393
+ skip: number;
394
+ }
395
+ /**
396
+ * Applies take/skip to the data source without triggering {@link AXDataSource.load}.
397
+ */
398
+ declare function applyDataSourcePagingWithoutLoad(dataSource: AXDataSource, paging: AXPEntityListPagingState): void;
399
+ declare function getDataSourcePageIndex(dataSource: AXDataSource): number;
400
+ declare function normalizeListPaging(paging: Partial<AXPEntityListPagingState> | undefined, defaultTake: number): AXPEntityListPagingState;
401
+
402
+ /** How entity list UI state (columns, filters, paging, etc.) is persisted for the user. */
403
+ type AXPEntityListPersistenceMode = 'none' | 'persistent' | 'route';
404
+ declare const AXPEntityListPersistenceModeDefault: AXPEntityListPersistenceMode;
405
+ declare function normalizeEntityListPersistenceMode(value: unknown): AXPEntityListPersistenceMode;
406
+ declare function canPersistEntityListState(mode: AXPEntityListPersistenceMode): boolean;
407
+ /** `none` never reads list state from user settings. */
408
+ declare function shouldLoadEntityListStateFromStorage(mode: AXPEntityListPersistenceMode): boolean;
409
+ /** `route` clears stored list state when the route entity (module + name) changes. */
410
+ declare function shouldResetEntityListStateOnRouteEntry(mode: AXPEntityListPersistenceMode): boolean;
411
+ declare const ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY = "axp-entity-list-route-context";
412
+
253
413
  /**
254
414
  * Entity Event Dispatcher - A wrapper for entity-specific events
255
415
  * Handles pattern-based dispatching for entity operations with wildcard support
@@ -362,35 +522,112 @@ declare class AXPEntityMasterListViewModel {
362
522
  private readonly destroyed;
363
523
  private lastAppliedSortKey;
364
524
  private lastAppliedFilterKey;
525
+ private hasQueryParamsFilters;
526
+ /** Persisted expanded row ids for hierarchical lists (per view). */
527
+ private readonly expandedRowIds;
528
+ /** When true, row expand/collapse is not written to user settings (restore in progress). */
529
+ skipExpandedRowPersistence: boolean;
530
+ /** Resolved take/skip for the current view (null until loaded from settings). */
531
+ private readonly resolvedListPaging;
532
+ /** When true, pager changes are not persisted (programmatic UI sync). */
533
+ skipListPagingPersistence: boolean;
534
+ private listPersistenceMode;
365
535
  events$: Subject<{
366
536
  action: string;
367
537
  meta?: any;
368
538
  }>;
369
539
  views: _angular_core.Signal<AXPEntityMasterListViewQueryViewModel[]>;
370
540
  view: _angular_core.WritableSignal<AXPEntityMasterListViewQueryViewModel>;
541
+ private readonly showRowIndexColumnEnabled;
542
+ /**
543
+ * Row index column: if the list view defines `indexCol` (true/false), that overrides the user setting;
544
+ * if `indexCol` is omitted, visibility follows {@link AXPCommonSettings.ShowRowIndexColumn}.
545
+ */
546
+ showIndexColumn: _angular_core.Signal<boolean>;
547
+ private createExpressionScope;
548
+ private resolveCommandNameExpression;
549
+ private resolveTitleExpression;
550
+ private resolveTriggerName;
371
551
  setView(viewName?: string | null): Promise<void>;
372
552
  dataSource: AXDataSource<any>;
373
553
  constructor(injector: Injector, config: AXPEntity);
554
+ private syncShowRowIndexColumnSetting;
555
+ /**
556
+ * Applies {@link AXPCommonSettings.EntityListPersistenceMode} for this list instance.
557
+ * Call once when the list view model is created (before loading list UI state).
558
+ */
559
+ initializeListPersistence(): Promise<void>;
560
+ getListPersistenceMode(): Promise<AXPEntityListPersistenceMode>;
561
+ shouldLoadPersistedListState(): Promise<boolean>;
562
+ shouldPersistListState(): Promise<boolean>;
563
+ private clearEntityListSettings;
374
564
  applySettings(): Promise<void>;
375
- saveSettings(changesType: 'columnSizes' | 'columnOrders' | 'view' | 'pageSize' | 'filters' | 'sorts', data?: any): Promise<void>;
565
+ ensureListPagingResolved(): Promise<void>;
566
+ getResolvedListPaging(): AXPEntityListPagingState;
567
+ applyPagingToDataSourceWithoutLoad(): void;
568
+ saveListPaging(take: number, skip: number): void;
569
+ resetListPagingSkip(): void;
570
+ private loadListPagingFromViewSettings;
571
+ getExpandedRowIds(): string[];
572
+ /**
573
+ * Updates persisted expanded row ids when the user expands or collapses a tree row.
574
+ */
575
+ updateExpandedRowId(rowId: string, expanded: boolean): void;
576
+ handleRowExpandChange(rowData: Record<string, unknown>): void;
577
+ saveSettings(changesType: 'columnSizes' | 'columnOrders' | 'view' | 'pageSize' | 'listPaging' | 'filters' | 'sorts' | 'expandedRows', data?: unknown): Promise<void>;
376
578
  selectedItems: _angular_core.WritableSignal<any[]>;
579
+ /**
580
+ * Selected category from the category sidebar (left panel).
581
+ * Used to set default category when creating new entities via command.
582
+ * Structure: { id: string; title: string } or null when "All Items" is selected.
583
+ */
584
+ selectedCategory: _angular_core.WritableSignal<{
585
+ id: string;
586
+ title: string;
587
+ } | null>;
377
588
  parentKey: _angular_core.Signal<string | undefined>;
378
589
  hasSelectedItems: _angular_core.Signal<boolean>;
379
590
  clearSelection(): void;
591
+ /**
592
+ * Sets the selected category from the category sidebar.
593
+ * Call with null to clear (e.g. when "All Items" is selected).
594
+ */
595
+ setSelectedCategory(category: {
596
+ id: string;
597
+ title: string;
598
+ } | null): void;
380
599
  title: _angular_core.Signal<string>;
381
600
  description: _angular_core.Signal<string | null>;
382
601
  inlineFiltersPlaceholders: _angular_core.Signal<string[]>;
383
602
  hasInlineFilters: _angular_core.Signal<boolean>;
384
603
  beardcrumbs: _angular_core.Signal<AXPBreadcrumbItem[]>;
385
604
  private allActions;
605
+ /** Flattened actions including children for execute lookup */
606
+ private flattenedActions;
386
607
  getPrimaryActions(): Promise<AXPEntityCommandTriggerViewModel[]>;
387
608
  getSecondaryActions(): Promise<AXPEntityCommandTriggerViewModel[]>;
388
609
  selectedScopeActionsCount: _angular_core.Signal<number>;
389
610
  primaryRowActions: _angular_core.Signal<AXPEntityCommandTriggerViewModel[]>;
390
611
  secondaryRowActions(rowData: any): Promise<AXPEntityCommandTriggerViewModel[]>;
391
612
  filterQueries: _angular_core.WritableSignal<AXPFilterQuery[]>;
613
+ private static readonly URL_FILTER_OPERATOR_TYPES;
392
614
  get properties(): AXPEntityProperty[];
615
+ /**
616
+ * Canonical JSON for the `filters` query param (sorted by field), or null when there are no active value filters.
617
+ */
618
+ filtersQueryParamCanonical(queries: AXPFilterQuery[]): string | null;
619
+ /**
620
+ * Parse a `filters` query string to the same canonical form used by {@link filtersQueryParamCanonical}.
621
+ */
622
+ static parseQueryParamFiltersToCanonical(filtersJson: string | null): string | null;
623
+ private toUrlFilterPayloadItems;
624
+ private static coerceFilterOperatorFromUrl;
625
+ /**
626
+ * Apply filters from query params
627
+ */
628
+ applyFiltersFromQueryParams(filtersJson: string | null): boolean;
393
629
  get filtersDef(): AXPFilterDefinition[];
630
+ get preloadFiltersDef(): AXPFilterDefinition[];
394
631
  applyViewFilters(): Promise<void>;
395
632
  resetFilters(): void;
396
633
  applyFilterAndSort(): Promise<void>;
@@ -414,6 +651,17 @@ declare class AXPEntityMasterListViewModel {
414
651
  resetSorts(): void;
415
652
  applyViewSorts(): void;
416
653
  executeCommand(commandName: string, data?: any): Promise<void>;
654
+ /**
655
+ * Merges default category from selected category in sidebar when executing create command.
656
+ * For Entity:Create and create-entity, if entity has category plugin and a category is selected,
657
+ * pre-fills categoryIds and categories for the create form.
658
+ */
659
+ private mergeDefaultCategoryForCreate;
660
+ /**
661
+ * Seeds create payloads with fixed list-view conditions (e.g. scope=T on the tenant dashboards view)
662
+ * so new rows match the view context and downstream queries (such as home dashboard) can find them.
663
+ */
664
+ private mergeViewConditionsForCreate;
417
665
  private evaluateExpressions;
418
666
  execute(command: AXPExecuteCommand): Promise<void>;
419
667
  destroy(): void;
@@ -520,6 +768,7 @@ declare class AXPEntityMasterUpdateElementViewModel {
520
768
  title: _angular_core.WritableSignal<string>;
521
769
  description: _angular_core.WritableSignal<string | undefined>;
522
770
  editable: _angular_core.Signal<boolean>;
771
+ isVisible: _angular_core.Signal<string | boolean>;
523
772
  isRequired: _angular_core.Signal<boolean>;
524
773
  layout: _angular_core.Signal<AXPEntityPropertyLayoutConfig>;
525
774
  node: _angular_core.Signal<AXPWidgetNode>;
@@ -553,8 +802,63 @@ declare class AXPEntityMasterUpdateViewModelFactory {
553
802
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityMasterUpdateViewModelFactory>;
554
803
  }
555
804
 
805
+ type AXPCollectEntityQuickSearchPathsResolver = (moduleName: string, entityName: string) => Promise<AXPEntity | null>;
806
+ /**
807
+ * Lodash-get paths for quick search from a single entity definition: string-like property names
808
+ * plus lookup `expose[].target` paths (e.g. `brand.title`).
809
+ */
810
+ declare function collectQuickSearchPathsFromSingleEntityDefinition(entity: AXPEntity | null | undefined): string[];
811
+ /**
812
+ * Adds dotted paths from master columns (`name` or `options.dataPath`), e.g. `person.fullName`, `jobDefinition.title`.
813
+ */
814
+ declare function collectNestedFieldPathsFromEntityColumns(entity: AXPEntity | null | undefined): string[];
815
+ /**
816
+ * Collects lodash-get field paths used for mock/API quick search (`contains` / OR filters):
817
+ * host properties and lookup expose targets, dotted column paths, and merge-detail related entities
818
+ * prefixed with the related entity merge `persistence.dataPath` (e.g. `person.firstName`).
819
+ */
820
+ declare function collectEntityQuickSearchFieldPaths(entity: AXPEntity | null | undefined, resolveRelatedDefinition: AXPCollectEntityQuickSearchPathsResolver): Promise<string[]>;
821
+
822
+ declare class AXPEntityPreloadFiltersViewModel {
823
+ private injector;
824
+ private config;
825
+ readonly entityDef: AXPEntity;
826
+ private readonly widgetResolver;
827
+ constructor(injector: Injector, config: AXPEntity);
828
+ /**
829
+ * Entity title
830
+ */
831
+ title: _angular_core.Signal<string>;
832
+ /**
833
+ * Entity description
834
+ */
835
+ description: _angular_core.Signal<string | null>;
836
+ /**
837
+ * All filter definitions for properties with preload enabled
838
+ */
839
+ preloadFiltersDef: _angular_core.Signal<AXPFilterDefinition[]>;
840
+ /**
841
+ * Required filter definitions only
842
+ */
843
+ requiredFiltersDef: _angular_core.Signal<AXPFilterDefinition[]>;
844
+ /**
845
+ * Serialize filter values to plain objects (remove signals, functions, etc.)
846
+ */
847
+ serializeFilters(filters: any): AXPFilterQuery[];
848
+ }
849
+ declare const AXPEntityPreloadFiltersViewModelResolver: ResolveFn<Promise<AXPEntityPreloadFiltersViewModel>>;
850
+
556
851
  interface AXPEntityModifierContext {
557
852
  readonly entity: AXPEntity;
853
+ plugins: {
854
+ list(): NonNullable<AXPEntity['plugins']>;
855
+ add(...items: NonNullable<AXPEntity['plugins']>): AXPEntityModifierContext;
856
+ remove(predicate: (p: NonNullable<AXPEntity['plugins']>[number]) => boolean): AXPEntityModifierContext;
857
+ find(name: string): {
858
+ get(): NonNullable<AXPEntity['plugins']>[number] | undefined;
859
+ update(updater: (p: NonNullable<AXPEntity['plugins']>[number]) => NonNullable<AXPEntity['plugins']>[number]): AXPEntityModifierContext;
860
+ };
861
+ };
558
862
  title: {
559
863
  get(): string;
560
864
  set(newTitle: string): AXPEntityModifierContext;
@@ -657,6 +961,7 @@ type AXPEntityModifier = (context: AXPEntityModifierContext) => void;
657
961
  interface AXPEntityModifierProvider {
658
962
  entityName: string | RegExp;
659
963
  modifier: AXPEntityModifier;
964
+ order?: number;
660
965
  }
661
966
 
662
967
  declare function ensureListActions(ctx: AXPEntityModifierContext): void;
@@ -697,8 +1002,10 @@ declare class AXPEntityMiddleware {
697
1002
  protected providedActionPlugins: AXPEntityActionPlugin[];
698
1003
  protected injector: Injector;
699
1004
  constructor();
700
- register(entityName: string | RegExp, modifier: AXPEntityModifier): void;
1005
+ register(entityName: string | RegExp, modifier: AXPEntityModifier, order?: number): void;
701
1006
  process(entity: AXPEntity): Promise<AXPEntity>;
1007
+ private createModifierStep;
1008
+ private createPluginStep;
702
1009
  private wildcardToRegExp;
703
1010
  private normalizeRegExp;
704
1011
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityMiddleware, never>;
@@ -718,6 +1025,7 @@ interface AXPEntityDefinitionPreloader {
718
1025
  }
719
1026
  declare class AXPEntityDefinitionRegistryService {
720
1027
  private middleware;
1028
+ private columnEnrichment;
721
1029
  private onChanged;
722
1030
  get onChanged$(): rxjs.Observable<{
723
1031
  name: string;
@@ -779,30 +1087,145 @@ declare class AXPEntityDefinitionRegistryService {
779
1087
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityDefinitionRegistryService>;
780
1088
  }
781
1089
 
1090
+ type AXPEntityAggregateReducerType = 'count' | 'sum' | 'min' | 'max' | 'avg';
1091
+ interface AXPEntityAggregateMeasure {
1092
+ reducer: AXPEntityAggregateReducerType;
1093
+ /** Required for sum, min, max, and avg. Ignored for count (rows per group). */
1094
+ field?: string;
1095
+ /** Result column name; defaults are derived from the reducer and field. */
1096
+ alias?: string;
1097
+ }
1098
+ /**
1099
+ * Aggregate stored rows after the same filter/sort pipeline as {@link AXPQueryRequest}.
1100
+ * Group keys use dotted field paths (same as lodash-style getters).
1101
+ */
1102
+ interface AXPEntityAggregateRequest extends Pick<AXPQueryRequest, 'filter' | 'sort'> {
1103
+ groupBy: string[];
1104
+ measures: AXPEntityAggregateMeasure[];
1105
+ }
1106
+ interface AXPEntityAggregateResult {
1107
+ rows: Record<string, unknown>[];
1108
+ }
1109
+ interface AXPEntityQueryAllOptions {
1110
+ /**
1111
+ * Page size for backends that read page-by-page (HTTP API).
1112
+ * In-memory backends load the filtered set once and ignore this.
1113
+ */
1114
+ pageSize?: number;
1115
+ /** Maximum rows to return or scan (safety cap). */
1116
+ maxRows?: number;
1117
+ }
1118
+ interface AXPEntityQueryAllResult<T> {
1119
+ items: T[];
1120
+ /** Row count matching filter/sort before applying maxRows. */
1121
+ total: number;
1122
+ /** True when maxRows prevented returning every matching row. */
1123
+ truncated: boolean;
1124
+ }
1125
+ interface AXPEntityAggregateOptions {
1126
+ /** Maximum rows to load for aggregation when the backend pages remotely (default 50_000). */
1127
+ maxRows?: number;
1128
+ /** Page size for remote paging during aggregate (default 500). */
1129
+ pageSize?: number;
1130
+ }
1131
+
1132
+ /**
1133
+ * Pure aggregation over already-filtered plain rows (e.g. outputs of {@link filterSortEntityRows}).
1134
+ */
1135
+ declare function computeEntityAggregates<T extends Record<string, unknown>>(rows: T[], request: AXPEntityAggregateRequest): Record<string, unknown>[];
1136
+
1137
+ interface RunEntityQueryAdapters<T = unknown> {
1138
+ getRawAll(entityName: string): Promise<T[]>;
1139
+ getDirectChildCount(categoryId: string, entityName: string): Promise<number>;
1140
+ getAllChildCategoryIds(categoryId: string, entityName: string): Promise<string[]>;
1141
+ }
1142
+ /**
1143
+ * Check if the entity is a category entity (ends with 'Category').
1144
+ */
1145
+ declare function isCategoryEntity(entityName: string): boolean;
1146
+ /**
1147
+ * Check if the filter is a category filter (contains operator on categoryIds field).
1148
+ * Handles both simple filters and compound filters.
1149
+ */
1150
+ declare function isCategoryFilter(filter: any): boolean;
1151
+ /**
1152
+ * Loads raw rows for an entity and applies the same sorting and filtering as {@link runEntityQuery},
1153
+ * without pagination.
1154
+ */
1155
+ declare function filterSortEntityRows<T = unknown>(entityName: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>, adapters: RunEntityQueryAdapters<T>): Promise<T[]>;
1156
+ /**
1157
+ * Shared entity query logic: sort, filter (including recursive category filter), childrenCount, pagination.
1158
+ */
1159
+ declare function runEntityQuery<T = unknown>(entityName: string, request: AXPQueryRequest, adapters: RunEntityQueryAdapters<T>): Promise<AXPPagedListResult<T>>;
1160
+
1161
+ /**
1162
+ * One audit point in time for a record lifecycle event.
1163
+ *
1164
+ * Used inside {@link AXPRecordAuditInfo} (`created`, `updated`, `deleted`).
1165
+ * Backends and mock middleware typically set `at` and `by`; `reason` and `source`
1166
+ * (for example `api`, `system`, `import`) are optional diagnostic fields.
1167
+ */
782
1168
  interface AXPAuditEvent {
783
1169
  at?: Date;
784
1170
  by?: AXPUserReference;
1171
+ /** Optional business or technical reason for the event. */
785
1172
  reason?: string;
1173
+ /** Optional origin of the change (for example `api`, `system`, `import`). */
786
1174
  source?: string;
787
1175
  }
788
- interface AXPAuditInfo {
1176
+ /**
1177
+ * Aggregated audit trail for a persisted row.
1178
+ *
1179
+ * Filled by APIs or connectivity mock middleware when creating, updating, or
1180
+ * soft-deleting records. UI surfaces may show these via the history plugin or
1181
+ * custom columns. Version snapshot pipelines often **omit** this object from
1182
+ * stored snapshots while still applying it to live payloads.
1183
+ *
1184
+ * @remarks Fields are optional today; callers should tolerate partial data.
1185
+ */
1186
+ interface AXPRecordAuditInfo {
789
1187
  created?: AXPAuditEvent;
790
1188
  updated?: AXPAuditEvent;
791
1189
  deleted?: AXPAuditEvent;
792
1190
  }
1191
+ /**
1192
+ * Cross-cutting flags that are not part of the domain schema but affect how a
1193
+ * row is shown or edited (visibility, built-in/system rows, immutability).
1194
+ *
1195
+ * Module entity models sometimes expose only this slice (for example
1196
+ * `stateInfo` on business units) when the rest of the row uses a bespoke shape.
1197
+ *
1198
+ * @remarks Entity list/detail flows should honor these flags where applicable.
1199
+ */
793
1200
  interface AXPRecordStateInfo {
794
1201
  isHidden?: boolean;
795
1202
  isSystem?: boolean;
796
1203
  isImmutable?: boolean;
1204
+ /** @deprecated Prefer explicit domain modeling over this flag. */
797
1205
  isDistributed?: boolean;
798
1206
  }
1207
+ /**
1208
+ * Tenancy and actor scope for a row in a multi-tenant application.
1209
+ *
1210
+ * Used to associate a record with a tenant, application instance, or owning
1211
+ * user when the API returns ownership metadata alongside domain fields.
1212
+ */
799
1213
  interface AXPRecordOwnershipInfo {
800
1214
  tenantId?: string;
801
1215
  applicationId?: string;
1216
+ userId?: string;
802
1217
  }
1218
+ /**
1219
+ * Base shape for **entity row** TypeScript models across modules: a stable
1220
+ * identifier plus optional platform metadata.
1221
+ *
1222
+ * Module-specific interfaces extend this with domain properties
1223
+ * (`extends AXPEntityModel<string>` / `AXPEntityModel<Id>`) while reusing
1224
+ * `auditInfo`, `stateInfo`, and `ownershipInfo` when the backend sends them.
1225
+ */
803
1226
  interface AXPEntityModel<Id> {
804
1227
  id: Id;
805
- auditInfo?: AXPAuditInfo;
1228
+ auditInfo?: AXPRecordAuditInfo;
806
1229
  stateInfo?: AXPRecordStateInfo;
807
1230
  ownershipInfo?: AXPRecordOwnershipInfo;
808
1231
  }
@@ -831,6 +1254,14 @@ declare abstract class AXPEntityStorageService<TKey, TDetailDto extends AXPEntit
831
1254
  abstract insertOne(entityName: string, entity: TCreateDto): Promise<TKey>;
832
1255
  abstract getAll(entityName: string): Promise<TListItemDto[]>;
833
1256
  abstract query(entityName: string, request: AXPQueryRequest): Promise<AXPPagedListResult<TListItemDto>>;
1257
+ abstract count(entityName: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>): Promise<number>;
1258
+ abstract queryAll(entityName: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>, options?: AXPEntityQueryAllOptions): Promise<AXPEntityQueryAllResult<TListItemDto>>;
1259
+ abstract getMany(entityName: string, ids: TKey[]): Promise<(TListItemDto | null)[]>;
1260
+ abstract exists(entityName: string, id: TKey): Promise<boolean>;
1261
+ abstract upsertOne(entityName: string, entity: TCreateDto, options?: {
1262
+ merge?: boolean;
1263
+ }): Promise<TKey>;
1264
+ abstract aggregate(entityName: string, request: AXPEntityAggregateRequest, options?: AXPEntityAggregateOptions): Promise<AXPEntityAggregateResult>;
834
1265
  }
835
1266
  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> {
836
1267
  abstract get entityName(): string;
@@ -841,6 +1272,14 @@ declare abstract class AXPEntityDataProvider<TKey, TDetailDto extends AXPEntityD
841
1272
  abstract deleteOne(id: TKey): Promise<void>;
842
1273
  abstract insertOne(entity: TCreateDto): Promise<TKey>;
843
1274
  abstract query(request: AXPQueryRequest): Promise<AXPPagedListResult<TListItemDto>>;
1275
+ abstract count(request: Pick<AXPQueryRequest, 'filter' | 'sort'>): Promise<number>;
1276
+ abstract queryAll(request: Pick<AXPQueryRequest, 'filter' | 'sort'>, options?: AXPEntityQueryAllOptions): Promise<AXPEntityQueryAllResult<TListItemDto>>;
1277
+ abstract getMany(ids: TKey[]): Promise<(TListItemDto | null)[]>;
1278
+ abstract exists(id: TKey): Promise<boolean>;
1279
+ abstract upsertOne(entity: TCreateDto, options?: {
1280
+ merge?: boolean;
1281
+ }): Promise<TKey>;
1282
+ abstract aggregate(request: AXPEntityAggregateRequest, options?: AXPEntityAggregateOptions): Promise<AXPEntityAggregateResult>;
844
1283
  }
845
1284
  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> {
846
1285
  private storageService;
@@ -853,6 +1292,14 @@ declare class AXPEntityDataProviderImpl<TKey, TDetailDto extends AXPEntityDetail
853
1292
  updateOne(id: TKey, keyValues: Omit<Partial<TUpdateDto>, 'id'>): Promise<TDetailDto>;
854
1293
  deleteOne(id: TKey): Promise<void>;
855
1294
  insertOne(entity: TCreateDto): Promise<TKey>;
1295
+ count(request: Pick<AXPQueryRequest, 'filter' | 'sort'>): Promise<number>;
1296
+ queryAll(request: Pick<AXPQueryRequest, 'filter' | 'sort'>, options?: AXPEntityQueryAllOptions): Promise<AXPEntityQueryAllResult<TListItemDto>>;
1297
+ getMany(ids: TKey[]): Promise<(TListItemDto | null)[]>;
1298
+ exists(id: TKey): Promise<boolean>;
1299
+ upsertOne(entity: TCreateDto, options?: {
1300
+ merge?: boolean;
1301
+ }): Promise<TKey>;
1302
+ aggregate(request: AXPEntityAggregateRequest, options?: AXPEntityAggregateOptions): Promise<AXPEntityAggregateResult>;
856
1303
  }
857
1304
  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> {
858
1305
  abstract insertOne(request: TCreateDto): Promise<TKey>;
@@ -885,6 +1332,14 @@ declare class AXMEntityCrudServiceImpl<TKey, TDetailDto extends AXPEntityDetailD
885
1332
  }): Promise<AXPPagedListResult<TListItemDto>>;
886
1333
  getCategoriesList(request?: AXPQueryRequest): Promise<AXPPagedListResult<AXPCategoryEntity$1<TKey>>>;
887
1334
  get storageService(): AXPEntityStorageService<any, any, any, any, any>;
1335
+ count(request: Pick<AXPQueryRequest, 'filter' | 'sort'>): Promise<number>;
1336
+ queryAll(request: Pick<AXPQueryRequest, 'filter' | 'sort'>, options?: AXPEntityQueryAllOptions): Promise<AXPEntityQueryAllResult<TListItemDto>>;
1337
+ getMany(ids: TKey[]): Promise<(TListItemDto | null)[]>;
1338
+ exists(id: TKey): Promise<boolean>;
1339
+ upsertOne(entity: TCreateDto, options?: {
1340
+ merge?: boolean;
1341
+ }): Promise<TKey>;
1342
+ aggregate(request: AXPEntityAggregateRequest, options?: AXPEntityAggregateOptions): Promise<AXPEntityAggregateResult>;
888
1343
  custom<Req, Res>(request: Req): Promise<void>;
889
1344
  }
890
1345
 
@@ -904,20 +1359,85 @@ interface AXPEntityConfigs {
904
1359
  };
905
1360
  }
906
1361
  declare const AXP_ENTITY_CONFIG_TOKEN: InjectionToken<AXPEntityConfigs>;
1362
+ /** Raw input from entity loaders' list(). */
1363
+ type AXPEntityListInput = {
1364
+ name: string;
1365
+ module: string;
1366
+ };
1367
+ /** Output from listAll(); fullName is populated by the resolver. */
1368
+ type AXPEntityListEntry = {
1369
+ name: string;
1370
+ module: string;
1371
+ fullName: string;
1372
+ };
907
1373
  interface AXPEntityDefinitionLoader {
908
1374
  get(moduleName: string, entityName: string): Promise<AXPEntity | null>;
1375
+ list(): Promise<AXPEntityListInput[]>;
909
1376
  }
910
1377
  declare const AXP_ENTITY_DEFINITION_LOADER: InjectionToken<AXPEntityDefinitionLoader>;
911
1378
  declare class AXPEntityResolver {
912
1379
  private providers;
1380
+ /** Aggregates list() from all entity loaders (including lazy). Populates fullName. */
1381
+ listAll(): Promise<AXPEntityListEntry[]>;
913
1382
  get(moduleName: string, entityName: string): Promise<AXPEntity | null>;
1383
+ private resolveLoaders;
914
1384
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityResolver, never>;
915
1385
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityResolver>;
916
1386
  }
917
1387
 
1388
+ /**
1389
+ * Built-in entity detail tabs from plugins. Sidebar order (after related page-list / page-detail
1390
+ * tabs): meta-data-builder → attachments → documents → comments → history.
1391
+ */
1392
+ type EntityDetailPluginPageSlot = 'meta-data-builder' | 'attachments' | 'documents' | 'comments' | 'history';
1393
+ /** Identifies an `entity.pages` entry when skipping its order during recomputation. */
1394
+ interface SkipEntityComponentPageRef {
1395
+ componentKey: string;
1396
+ /** When set, only the page with this `field` is skipped (e.g. attachments / meta-data per field). */
1397
+ field?: string;
1398
+ }
1399
+ interface ResolveEntityPluginDetailPageOrderOptions {
1400
+ /** Component key of the page being added or updated (used to count sibling tabs in the same slot). */
1401
+ componentKey: string;
1402
+ /**
1403
+ * Ignore this page when counting siblings / recomputing (the page currently being updated).
1404
+ */
1405
+ skipPage?: SkipEntityComponentPageRef;
1406
+ /**
1407
+ * Field name for multi-page slots (`attachments`, `meta-data-builder`). Omit for single-tab slots.
1408
+ */
1409
+ field?: string;
1410
+ /** Gap between auto-assigned related tab orders. Default: 10. */
1411
+ relatedOrderStep?: number;
1412
+ /** Minimum start of the plugin zone (after related tabs). Default: 100_000. */
1413
+ pluginZoneFloor?: number;
1414
+ }
1415
+ /**
1416
+ * Resolves `layout.order` for a built-in plugin detail tab (`entity.pages`).
1417
+ *
1418
+ * 1. Assigns finite `layout.order` values to related `page-list` / `page-detail` rows that omit
1419
+ * `order` (the composer otherwise treats them as +Infinity).
1420
+ * 2. Places plugin tabs in a fixed relative order: meta-data-builder → attachments → documents →
1421
+ * comments → history, after all related tabs.
1422
+ */
1423
+ declare function resolveEntityPluginDetailPageOrder(input: {
1424
+ relatedEntities?: AXPRelatedEntity[];
1425
+ pages?: Array<AXPEntityPage & {
1426
+ field?: string;
1427
+ }>;
1428
+ }, slot: EntityDetailPluginPageSlot, options: ResolveEntityPluginDetailPageOrderOptions): number;
1429
+
1430
+ /**
1431
+ * Sort key for entries in `interfaces.master.{create|update|single}.properties`.
1432
+ * Uses `layout.order` when set and finite; otherwise the property index in that list.
1433
+ */
1434
+ declare function getMasterInterfacePropertySortKey(interfaceRow: {
1435
+ layout?: AXPEntityPropertyLayoutConfig | undefined;
1436
+ } | undefined, indexInMasterInterfaceList: number): number;
1437
+
918
1438
  declare class AXPEntityModule {
919
1439
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityModule, never>;
920
- static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AXPEntityModule, never, [typeof i1.RouterModule, typeof i2.AXPWorkflowModule, typeof i3.AXPWidgetCoreModule], never>;
1440
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AXPEntityModule, never, [typeof i1.RouterModule, typeof i2.AXPWorkflowModule, typeof i3.AXPWidgetCoreModule, typeof i4.LayoutBuilderModule], never>;
921
1441
  static ɵinj: _angular_core.ɵɵInjectorDeclaration<AXPEntityModule>;
922
1442
  }
923
1443
 
@@ -1028,7 +1548,6 @@ declare class AXPEntityService {
1028
1548
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityService>;
1029
1549
  }
1030
1550
 
1031
- type AXPEntityOp = 'initial' | 'create' | 'update' | 'delete' | 'getOne' | 'getAll' | 'query';
1032
1551
  interface AXPEntityStorageContext<TKey = any, TDetailDto extends AXPEntityDetailDto<TKey> = any, TListItemDto extends AXPEntityListItemDto<TKey> = any, TCreateDto extends AXPEntityCreateDto = any, TUpdateDto extends AXPEntityUpdateDto<TKey> = any> {
1033
1552
  op: AXPEntityOp;
1034
1553
  entityName: string;
@@ -1042,7 +1561,16 @@ interface AXPEntityStorageContext<TKey = any, TDetailDto extends AXPEntityDetail
1042
1561
  getOne: (entityName: string, id: TKey) => Promise<TDetailDto>;
1043
1562
  insertOne: (entityName: string, entity: TCreateDto) => Promise<TKey>;
1044
1563
  query: (entityName: string, request: AXPQueryRequest) => Promise<AXPPagedListResult<TListItemDto>>;
1045
- updateOne: (entityName: string, id: TKey, data: Partial<TUpdateDto>) => Promise<void>;
1564
+ updateOne: (entityName: string, id: TKey, data: Partial<TUpdateDto>) => Promise<TDetailDto>;
1565
+ deleteOne: (entityName: string, id: TKey) => Promise<void>;
1566
+ count: (entityName: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>) => Promise<number>;
1567
+ queryAll: (entityName: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>, options?: AXPEntityQueryAllOptions) => Promise<AXPEntityQueryAllResult<TListItemDto>>;
1568
+ getMany: (entityName: string, ids: TKey[]) => Promise<(TListItemDto | null)[]>;
1569
+ exists: (entityName: string, id: TKey) => Promise<boolean>;
1570
+ upsertOne: (entityName: string, entity: TCreateDto, options?: {
1571
+ merge?: boolean;
1572
+ }) => Promise<TKey>;
1573
+ aggregate: (entityName: string, request: AXPEntityAggregateRequest, options?: AXPEntityAggregateOptions) => Promise<AXPEntityAggregateResult>;
1046
1574
  };
1047
1575
  }
1048
1576
  interface AXPEntityStorageMiddleware<TKey = any, TDetailDto extends AXPEntityDetailDto<TKey> = any, TListItemDto extends AXPEntityListItemDto<TKey> = any, TCreateDto extends AXPEntityCreateDto = any, TUpdateDto extends AXPEntityUpdateDto<TKey> = any> {
@@ -1077,66 +1605,107 @@ declare function isAXPMiddlewareAbortError(error: unknown): error is AXPMiddlewa
1077
1605
  declare const eventDispatchMiddleware: AXPEntityStorageMiddleware;
1078
1606
 
1079
1607
  /**
1080
- * Map of column name -> width value
1081
- * Example: { title: '300px', description: '300px' }
1608
+ * Entity modifier that applies column widths using the column width service
1609
+ * Uses the generic column width resolution system from core library
1610
+ * Note: inject() works here because modifiers are executed via runInInjectionContext()
1611
+ */
1612
+ declare const columnWidthMiddleware: AXPEntityModifier;
1613
+ /**
1614
+ * Default provider that applies column width middleware to all entities
1082
1615
  */
1083
- type ColumnWidthConfig = Record<string, string | number>;
1616
+ declare const columnWidthMiddlewareProvider: AXPEntityModifierProvider;
1617
+
1084
1618
  /**
1085
- * Default widths for common text columns
1619
+ * Default order for common list view columns.
1620
+ * Lower numbers appear first. Columns not in this map get order 500 (middle).
1621
+ * Use high numbers (990+) for columns that should appear at the end.
1086
1622
  */
1087
- declare const DEFAULT_COLUMN_WIDTHS: ColumnWidthConfig;
1623
+ declare const DEFAULT_COLUMN_ORDER: Record<string, number>;
1088
1624
  /**
1089
- * Factory to create a column width middleware using provided config map.
1090
- * Sets width for columns defined in the map if not already defined on the column.
1625
+ * Entity modifier that sorts list view columns by default order.
1626
+ * Similar to layout-ordering for sections/properties, but for list columns.
1091
1627
  */
1092
- declare const columnWidthMiddlewareFactory: (widths: ColumnWidthConfig) => AXPEntityModifier;
1628
+ declare const columnOrderingMiddleware: AXPEntityModifier;
1093
1629
  /**
1094
- * Helper to create a provider for the column width middleware.
1095
- * By default it applies to all entities using the '*' pattern.
1630
+ * Factory to create a column ordering middleware with custom order config
1096
1631
  */
1097
- declare const createColumnWidthMiddlewareProvider: (widths: ColumnWidthConfig, entityName?: string | RegExp) => AXPEntityModifierProvider;
1632
+ declare const createColumnOrderingMiddlewareProvider: (columnOrder?: Record<string, number>, entityName?: string | RegExp) => AXPEntityModifierProvider;
1098
1633
  /**
1099
- * Default provider registered with the default map.
1634
+ * Default provider that applies column ordering to all entities
1100
1635
  */
1101
- declare const columnWidthMiddlewareProvider: AXPEntityModifierProvider;
1636
+ declare const columnOrderingMiddlewareProvider: AXPEntityModifierProvider;
1102
1637
 
1103
1638
  /**
1104
- * Configuration for section ordering
1639
+ * Default colSpans for two properties in one section (`md` / `lg`).
1640
+ * Missing `positions[*].colSpan` are filled only; entities keep full control.
1105
1641
  */
1642
+ interface PairSpanRule {
1643
+ first: string;
1644
+ second: string;
1645
+ /** Col span applied to {@link first} */
1646
+ firstSpan: number;
1647
+ /** Col span applied to {@link second} */
1648
+ secondSpan: number;
1649
+ breakpoints?: readonly ('sm' | 'md' | 'lg')[];
1650
+ }
1106
1651
  interface SectionOrderConfig {
1107
- /**
1108
- * Default order for common sections
1109
- * Lower numbers appear first
1110
- */
1111
1652
  sections: Record<string, number>;
1653
+ properties: Record<string, number>;
1112
1654
  /**
1113
- * Default order for properties within sections
1114
- * Key format: 'sectionId.propertyName' or just 'propertyName' for any section
1655
+ * Defaults for pairing two columns (e.g. code + title). Replace or extend defaults.
1656
+ * - `undefined`: use {@link DEFAULT_PAIR_SPAN_RULES}
1657
+ * - `false`: do not apply any pair spans
1658
+ * - `[...]` + spread `DEFAULT_PAIR_SPAN_RULES` when you want to append custom pairs
1115
1659
  */
1116
- properties: Record<string, number>;
1660
+ pairSpanRules?: PairSpanRule[] | false;
1117
1661
  }
1118
1662
  /**
1119
- * Default order for common sections
1663
+ * Default shipped rules: narrow identifier + wider title on `md` / `lg`.
1120
1664
  */
1665
+ declare const DEFAULT_PAIR_SPAN_RULES: readonly PairSpanRule[];
1121
1666
  declare const DEFAULT_SECTION_ORDER: Record<string, number>;
1667
+ declare const DEFAULT_PROPERTY_ORDER: Record<string, number>;
1668
+ declare const layoutOrderingMiddlewareFactory: (config: SectionOrderConfig) => AXPEntityModifier;
1669
+ declare const createLayoutOrderingMiddlewareProvider: (config?: Partial<SectionOrderConfig>, entityName?: string | RegExp) => AXPEntityModifierProvider;
1670
+ declare const layoutOrderingMiddlewareProvider: AXPEntityModifierProvider;
1671
+
1122
1672
  /**
1123
- * Default order for common properties
1124
- * Format: 'sectionId.propertyName' for section-specific or 'propertyName' for any section
1673
+ * Provides synchronous access to the ApplyLayoutOrdering setting.
1674
+ * Used by layout ordering middleware to avoid async in the modifier and prevent startup deadlocks.
1675
+ * Value is updated on onLoaded/onChanged; first read can trigger a one-time background get (no await).
1125
1676
  */
1126
- declare const DEFAULT_PROPERTY_ORDER: Record<string, number>;
1677
+ declare class AXPLayoutOrderingConfigService {
1678
+ private readonly settingsService;
1679
+ private readonly _applyOrdering;
1680
+ private syncScheduled;
1681
+ constructor();
1682
+ getApplyOrdering(): boolean;
1683
+ private syncFromSettings;
1684
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLayoutOrderingConfigService, never>;
1685
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPLayoutOrderingConfigService>;
1686
+ }
1687
+
1127
1688
  /**
1128
- * Factory to create a layout ordering middleware
1689
+ * Ensures all entities have a searchResult.description.
1690
+ * Uses @{i18nScope}:module.title when missing (guaranteed to exist in i18n).
1129
1691
  */
1130
- declare const layoutOrderingMiddlewareFactory: (config: SectionOrderConfig) => AXPEntityModifier;
1692
+ declare const searchResultDescriptionMiddleware: AXPEntityModifier;
1693
+ declare const searchResultDescriptionMiddlewareProvider: AXPEntityModifierProvider;
1694
+
1131
1695
  /**
1132
- * Helper to create a provider for the layout ordering middleware
1133
- * By default it applies to all entities using the '*' pattern
1696
+ * When enabled in regional settings ({@link AXPRegionalSetting.MultiLanguageSupport}), walks each
1697
+ * property's `schema.interface` widget tree and sets `options.multiLanguage` on matching text-like
1698
+ * editors (including nested GridLayout leaves such as `pre.content` / `post.summaryContent`), unless
1699
+ * the node already specifies `multiLanguage` (including explicit false to opt out).
1134
1700
  */
1135
- declare const createLayoutOrderingMiddlewareProvider: (config?: Partial<SectionOrderConfig>, entityName?: string | RegExp) => AXPEntityModifierProvider;
1701
+ declare const defaultMultiLanguageMiddleware: AXPEntityModifier;
1702
+ declare const defaultMultiLanguageMiddlewareProvider: AXPEntityModifierProvider;
1703
+
1136
1704
  /**
1137
- * Default provider registered with the default configuration
1705
+ * Registers entity CRUD commands and queries for the given entity keys.
1706
+ * Use in app/module providers; consumes AXPEntityService from this package.
1138
1707
  */
1139
- declare const layoutOrderingMiddlewareProvider: AXPEntityModifierProvider;
1708
+ declare function provideEntity(entityKeys: string[]): EnvironmentProviders;
1140
1709
 
1141
1710
  interface AXPGetEntityDetailsQueryInput {
1142
1711
  entity: string;
@@ -1171,9 +1740,14 @@ declare class AXPGetEntityDetailsQuery implements AXPQuery<AXPGetEntityDetailsQu
1171
1740
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPGetEntityDetailsQuery>;
1172
1741
  }
1173
1742
 
1743
+ /**
1744
+ * i18n key for the synthetic root node ("all categories"). Resolve in templates with the translate pipe.
1745
+ */
1746
+ declare const AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY = "@general:terms.interface.selection.all-items";
1174
1747
  interface CategoryQueryEvent {
1175
1748
  skip: number;
1176
1749
  take: number;
1750
+ sort?: AXDataSourceSortOption[];
1177
1751
  filter?: {
1178
1752
  field?: string;
1179
1753
  value?: unknown;
@@ -1203,7 +1777,14 @@ interface CategoryTreeNodeData {
1203
1777
  }
1204
1778
  declare class AXPCategoryTreeService {
1205
1779
  protected readonly entityResolver: AXPEntityDefinitionRegistryService;
1206
- protected readonly translate: AXTranslationService;
1780
+ private readonly translation;
1781
+ /** Sort field for list queries (backend); matches configured category display field. */
1782
+ private getAlphabeticalSortOptions;
1783
+ /**
1784
+ * Sort tree nodes by resolved display title (locale-aware).
1785
+ * Ensures correct order for multi-language titles when storage order differs from UI order.
1786
+ */
1787
+ private sortTreeNodesByDisplayTitle;
1207
1788
  /**
1208
1789
  * Initialize category tree data source
1209
1790
  */
@@ -1220,6 +1801,11 @@ declare class AXPCategoryTreeService {
1220
1801
  * Load root categories
1221
1802
  */
1222
1803
  loadRootCategories(treeData: CategoryTreeNodeData, config: CategoryTreeConfig): Promise<Record<string, unknown>[] | null>;
1804
+ /**
1805
+ * Fetches a single category item by ID. Uses byKey when available (full item with parent),
1806
+ * otherwise falls back to list query with filter so ancestor chains can be built.
1807
+ */
1808
+ fetchItemById(id: string, treeData: CategoryTreeNodeData, config: CategoryTreeConfig): Promise<Record<string, unknown> | null>;
1223
1809
  /**
1224
1810
  * Load children for a given node
1225
1811
  */
@@ -1236,6 +1822,48 @@ declare class AXPCategoryTreeService {
1236
1822
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPCategoryTreeService>;
1237
1823
  }
1238
1824
 
1825
+ declare class AXPRelatedColumnEnrichmentService {
1826
+ private readonly metadataResolver;
1827
+ /**
1828
+ * Enriches entity columns with:
1829
+ * 1. dataPath for FK columns (e.g. fromPersonId) derived from lookup property schema
1830
+ * 2. title and showAs from related entity properties for dotted paths (e.g. person.firstName)
1831
+ */
1832
+ enrich(entity: AXPEntity): Promise<AXPEntity>;
1833
+ /**
1834
+ * Derives dataPath for FK columns from lookup property schema.
1835
+ * Uses expose.target where source matches textField (default 'title').
1836
+ */
1837
+ private deriveDataPathForFkColumn;
1838
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPRelatedColumnEnrichmentService, never>;
1839
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPRelatedColumnEnrichmentService>;
1840
+ }
1841
+
1842
+ interface AXPRelatedColumnMetadata {
1843
+ title?: string;
1844
+ showAs?: AXPEntityTableColumn['showAs'];
1845
+ }
1846
+ declare class AXPRelatedColumnMetadataResolver {
1847
+ private readonly entityLoader;
1848
+ /**
1849
+ * Resolves title and showAs for a column that references a related entity property via dotted path.
1850
+ * Uses relatedEntities when available; falls back to lookup expose when not.
1851
+ */
1852
+ resolve(entity: AXPEntity, columnName: string): Promise<AXPRelatedColumnMetadata | null>;
1853
+ /**
1854
+ * Finds a lookup property whose expose target matches the dotted path.
1855
+ * Returns the lookup's entity string (e.g. 'PersonCore.Person') or null.
1856
+ */
1857
+ private findLookupEntityByExposeTarget;
1858
+ /**
1859
+ * Derives showAs from source property schema.
1860
+ * Passes through the full interface (type, options, children) for column display.
1861
+ */
1862
+ private deriveShowAs;
1863
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPRelatedColumnMetadataResolver, never>;
1864
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPRelatedColumnMetadataResolver>;
1865
+ }
1866
+
1239
1867
  interface IEntitySelectorStage {
1240
1868
  /** Select target entity using "module.entity" format */
1241
1869
  entity(fullName: string): IInterfaceSelectorStage;
@@ -1253,6 +1881,8 @@ interface IPropertyFilterStage {
1253
1881
  include(...propertyNames: string[]): IPropertyFilterStage;
1254
1882
  /** Exclude provided property names (by AXPEntityProperty.name). Ignored if include() was already set. */
1255
1883
  exclude(...propertyNames: string[]): IPropertyFilterStage;
1884
+ /** Mark provided property names as readonly. Overrides property schema for display. */
1885
+ readonlyProperties(...propertyNames: string[]): IPropertyFilterStage;
1256
1886
  /** Optionally override dialog title */
1257
1887
  title(text: string): IPropertyFilterStage;
1258
1888
  /** Provide initial dialog context/model data */
@@ -1261,8 +1891,18 @@ interface IPropertyFilterStage {
1261
1891
  size(size: AXPopupSizeType): IPropertyFilterStage;
1262
1892
  /** Configure footer actions (cancel/submit/custom). If not called, defaults to cancel+submit. */
1263
1893
  actions(delegate: (a: IActionBuilder) => void): IPropertyFilterStage;
1894
+ /**
1895
+ * Handler invoked when user clicks an action. Receives AXPDialogRef.
1896
+ * If handler throws, dialog stays open for retry.
1897
+ * If handler returns, dialog closes and show() resolves with the return value.
1898
+ */
1899
+ onAction<T = any>(handler: (dialogRef: AXPDialogRef) => T | Promise<T>): IPropertyFilterStage & {
1900
+ show(): Promise<T>;
1901
+ };
1264
1902
  /** Add an extra field into a specific group, using the original field builder API */
1265
1903
  field(groupId: string, path: string, delegate?: (field: CompatFormFieldBuilder) => void): IPropertyFilterStage;
1904
+ /** Build and return the widget node without showing dialog */
1905
+ build(): Promise<AXPWidgetNode>;
1266
1906
  /** Show dialog */
1267
1907
  show(): Promise<AXPDialogRef>;
1268
1908
  mode(mode: 'edit' | 'view'): IPropertyFilterStage;
@@ -1271,7 +1911,15 @@ declare class AXPEntityFormBuilderService implements IEntitySelectorStage {
1271
1911
  private readonly entityRegistry;
1272
1912
  private readonly layoutBuilder;
1273
1913
  private readonly deviceService;
1914
+ private readonly expressionEvaluator;
1274
1915
  entity(fullName: string): IInterfaceSelectorStage;
1916
+ /**
1917
+ * Fetches a record by ID for the specified entity.
1918
+ * @param fullName - Entity full name in "module.entity" format
1919
+ * @param id - Record ID to fetch
1920
+ * @returns Promise resolving to the record data, or empty object if not found
1921
+ */
1922
+ getRecordById(fullName: string, id: string): Promise<Record<string, any>>;
1275
1923
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityFormBuilderService, never>;
1276
1924
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityFormBuilderService>;
1277
1925
  }
@@ -1290,6 +1938,8 @@ declare class AXPMiddlewareEntityStorageService<TKey = any, TDetailDto extends A
1290
1938
  private readonly backend;
1291
1939
  private readonly allMiddlewares;
1292
1940
  private readonly injector;
1941
+ /** In-flight read requests - identical parallel requests share one execution */
1942
+ private readonly inFlight;
1293
1943
  get dbName(): string;
1294
1944
  private filterMiddlewares;
1295
1945
  private compose;
@@ -1305,11 +1955,21 @@ declare class AXPMiddlewareEntityStorageService<TKey = any, TDetailDto extends A
1305
1955
  insertOne(entityName: string, entity: TCreateDto): Promise<TKey>;
1306
1956
  getAll(entityName: string): Promise<TListItemDto[]>;
1307
1957
  query(entityName: string, request: AXPQueryRequest): Promise<AXPPagedListResult<TListItemDto>>;
1958
+ count(entityName: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>): Promise<number>;
1959
+ queryAll(entityName: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>, options?: AXPEntityQueryAllOptions): Promise<AXPEntityQueryAllResult<TListItemDto>>;
1960
+ getMany(entityName: string, ids: TKey[]): Promise<(TListItemDto | null)[]>;
1961
+ exists(entityName: string, id: TKey): Promise<boolean>;
1962
+ upsertOne(entityName: string, entity: TCreateDto, options?: {
1963
+ merge?: boolean;
1964
+ }): Promise<TKey>;
1965
+ aggregate(entityName: string, request: AXPEntityAggregateRequest, options?: AXPEntityAggregateOptions): Promise<AXPEntityAggregateResult>;
1966
+ private runWithDedup;
1308
1967
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMiddlewareEntityStorageService<any, any, any, any, any>, never>;
1309
1968
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPMiddlewareEntityStorageService<any, any, any, any, any>>;
1310
1969
  }
1311
1970
 
1312
1971
  declare function entityMasterCreateAction(): AXPEntityAction;
1972
+ declare function entityMasterEditAction(): AXPEntityAction;
1313
1973
  declare function entityMasterBulkDeleteAction(): AXPEntityAction;
1314
1974
  declare function entityMasterViewAction(): AXPEntityAction;
1315
1975
  declare function entityMasterDeleteAction(): AXPEntityAction;
@@ -1321,12 +1981,23 @@ declare function entityMasterCrudActions(options?: {
1321
1981
  }): AXPEntityAction[];
1322
1982
  declare function entityMasterRecordActions(): AXPEntityAction[];
1323
1983
  declare function entityDetailsCreateActions(parentId: string): AXPEntityAction;
1984
+ /**
1985
+ * Type-level Create with empty `process.data`; the FK is supplied from `relatedEntity.persistence.foreignKeyField`
1986
+ * when the related list is built (see `mergeForeignKeyFieldIntoCreateActions`).
1987
+ */
1988
+ declare function entityDetailsCreateActionsDeferredParent(): AXPEntityAction;
1989
+ /**
1990
+ * Ensures each type-level `Entity:Create` action includes `process.data[foreignKeyField]` bound to the parent row id.
1991
+ */
1992
+ declare function mergeForeignKeyFieldIntoCreateActions(foreignKeyField: string | undefined, actions: AXPEntityAction[] | undefined): AXPEntityAction[];
1993
+ /** Property names hidden on nested Create from a related list (`excludeProperties` plus `foreignKeyField` when set). */
1994
+ declare function collectNestedCreateHiddenProperties(relatedEntity: AXPRelatedEntity): string[] | undefined;
1324
1995
  declare function entityDetailsSimpleCondition(fk: string): AXPQueryFilter;
1325
1996
  declare function entityDetailsReferenceCondition(type: string): AXPQueryFilter[];
1326
1997
  declare function entityDetailsEditAction(): AXPEntityAction;
1327
1998
  declare function entityDetailsNewEditAction(): AXPEntityAction;
1328
1999
  declare function entityOverrideDetailsViewAction(): AXPEntityAction;
1329
- declare function entityDetailsCrudActions(parentId: string, options?: {
2000
+ declare function entityDetailsCrudActions(parentId?: string, options?: {
1330
2001
  create?: boolean;
1331
2002
  delete?: boolean;
1332
2003
  view?: boolean;
@@ -1351,13 +2022,18 @@ declare function detectEntityChanges(oldObj: any, newObj: any): AXPEntityChangeS
1351
2022
 
1352
2023
  declare class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent implements OnInit {
1353
2024
  protected readonly categoryTreeService: AXPCategoryTreeService;
2025
+ /** i18n key for the synthetic "all items" root row; resolved in the template with the translate pipe. */
2026
+ protected readonly categoryTreeRootTitleI18nKey = "@general:terms.interface.selection.all-items";
1354
2027
  private readonly translationService;
1355
2028
  protected readonly highlightService: AXHighlightService;
2029
+ private readonly changeDetectorRef;
1356
2030
  entityKey: _angular_core.WritableSignal<string>;
1357
2031
  textField: _angular_core.WritableSignal<string>;
1358
2032
  valueField: _angular_core.WritableSignal<string>;
1359
2033
  allowMultiple: _angular_core.WritableSignal<boolean>;
1360
2034
  selectedValues: _angular_core.WritableSignal<string[]>;
2035
+ /** Optional input for when popup passes selected values via inputs instead of data */
2036
+ selectedValuesInput: _angular_core.WritableSignal<string[]>;
1361
2037
  searchPlaceholder: _angular_core.WritableSignal<string>;
1362
2038
  excludedNodeId: _angular_core.WritableSignal<string | undefined>;
1363
2039
  searchWithChildren: _angular_core.WritableSignal<boolean>;
@@ -1384,9 +2060,19 @@ declare class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent
1384
2060
  private relevantNodeIds;
1385
2061
  private expandedNodesBeforeSearch;
1386
2062
  private nodesExpandedDuringSearch;
1387
- private isInitializing;
2063
+ private initialExpandSyncDone;
2064
+ constructor();
1388
2065
  ngOnInit(): void;
1389
2066
  private initializeTree;
2067
+ /**
2068
+ * Called when popup data arrives after ngOnInit: load data, set selection, expand and sync.
2069
+ */
2070
+ private runInitialExpandAndSync;
2071
+ /**
2072
+ * Runs expand path + sync selection once the tree viewChild is available.
2073
+ * Uses retry loop so we don't run before the view has rendered the tree.
2074
+ */
2075
+ private runExpandAndSyncWhenTreeReady;
1390
2076
  /**
1391
2077
  * Handles search input value changes - Uses server-side search for efficiency and reliability
1392
2078
  */
@@ -1407,7 +2093,8 @@ declare class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent
1407
2093
  */
1408
2094
  private collectChildrenRecursively;
1409
2095
  /**
1410
- * Fetches a single item by ID from the server
2096
+ * Fetches a single item by ID. Uses category tree service so byKey is used when available
2097
+ * (returns full item with parent/parentId for building ancestor chains).
1411
2098
  */
1412
2099
  private fetchItemById;
1413
2100
  /**
@@ -1423,13 +2110,20 @@ declare class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent
1423
2110
  * Resets search state and restores tree to original expanded state
1424
2111
  */
1425
2112
  private resetSearch;
1426
- protected onNodeToggle(event: AXTreeViewNodeToggleEvent): Promise<void>;
2113
+ /**
2114
+ * Restores selection state after tree reload.
2115
+ * Expands ancestor nodes and selects the previously selected leaf nodes.
2116
+ */
2117
+ private restoreSelectionAfterReload;
1427
2118
  protected onNodeSelect(event: AXTreeViewNodeSelectEvent): Promise<void>;
1428
- protected onSelectionChange(event: AXTreeViewSelectionChangeEvent): Promise<void>;
1429
2119
  /** Datasource callback for tree-view component. */
1430
2120
  protected datasource: (id?: string) => Promise<AXTreeViewNode[]>;
1431
2121
  protected onConfirm(): Promise<void>;
1432
2122
  protected onCancel(): Promise<void>;
2123
+ /**
2124
+ * Clears all selected items
2125
+ */
2126
+ protected onClearAll(): void;
1433
2127
  /**
1434
2128
  * Checks if a node matches the current search term
1435
2129
  */
@@ -1439,62 +2133,76 @@ declare class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent
1439
2133
  */
1440
2134
  protected isNodeSelected(nodeId: string | number | undefined): boolean;
1441
2135
  /**
1442
- * Handles checkbox change event to toggle node selection
1443
- * In multiple mode: recursively selects/deselects children
1444
- * Parent states are handled automatically by tree component's intermediate-nested behavior
1445
- */
1446
- protected handleCheckboxChange(nodeId: string | number | undefined, checked: boolean): Promise<void>;
1447
- /**
1448
- * Selects a node and recursively selects all its children
2136
+ * Expands parent nodes, collects all LEAF descendants, and selects them visually.
2137
+ * If the parent itself is a leaf (no children), it will be added.
2138
+ * When prefetchedChildren is provided, avoids an extra datasource(parentId) call.
1449
2139
  */
1450
- private selectNodeAndChildren;
2140
+ private selectAllLeafDescendants;
1451
2141
  /**
1452
- * Collects all descendant node IDs recursively
2142
+ * Removes all LEAF descendants from selectedNodeIds.
2143
+ * For 'all' node: clears everything and uses tree's deselectAll().
2144
+ * For other nodes: tree handles visual state via user click.
1453
2145
  */
1454
- private collectAllDescendants;
2146
+ private deselectAllLeafDescendants;
1455
2147
  /**
1456
- * Deselects a node and recursively deselects all its children
2148
+ * Recursively expands parent nodes and collects LEAF node IDs.
2149
+ * When treeComponent is provided, expands each parent node before loading children.
2150
+ * When prefetchedChildren is provided, uses it instead of calling datasource(parentId) (one less API call).
2151
+ * Fetches each node's children at most once by passing grandchildren when recursing.
1457
2152
  */
1458
- private deselectNodeAndChildren;
2153
+ private collectLeafNodes;
1459
2154
  /**
1460
- * Recursively deselects all children of a parent node
2155
+ * Checks if a node has children
1461
2156
  */
1462
- private loadAndDeselectChildrenRecursively;
2157
+ private nodeHasChildren;
1463
2158
  /**
1464
- * Updates parent states based on children selection (select/intermediate)
1465
- * Called after a node is selected/deselected to update parent checkbox states
2159
+ * Checks if a node is a leaf (has no children)
1466
2160
  */
1467
- private updateParentStates;
2161
+ private isLeafNodeCheck;
1468
2162
  /**
1469
- * Recursively loads and selects all children of a parent node using the datasource
1470
- * This method directly calls datasource without expanding/collapsing nodes to avoid UI glitches
2163
+ * Caches node data from a tree node
1471
2164
  */
1472
- private loadAndSelectChildrenRecursively;
1473
- private updateSelectedNodes;
2165
+ private cacheNodeFromTreeNode;
1474
2166
  /**
1475
- * Updates all parent states based on their children's selection
1476
- * Used during initialization to ensure proper parent states (select/intermediate)
2167
+ * Builds complete ancestor chains for all selected node IDs.
2168
+ * Returns a Map where key is the selected node ID and value is array of ancestor IDs from root to parent.
2169
+ * Batch-fetches missing node and ancestor data in parallel to minimize API calls.
1477
2170
  */
1478
- private updateAllParentStates;
2171
+ private buildAncestorChains;
1479
2172
  /**
1480
- * Expands parents of selected nodes so they're visible when popup opens
2173
+ * Expands ancestor nodes in order from root to leaf.
2174
+ * This ensures parent nodes are loaded into the tree before selecting children.
1481
2175
  */
1482
- private expandParentsOfSelectedNodes;
2176
+ private expandAncestorNodesInOrder;
2177
+ /** Waits until the node is expanded (tree has loaded children). Polls so deep paths load. */
2178
+ private waitForNodeExpanded;
1483
2179
  /**
1484
- * Selects parents whose all children are selected
1485
- * This ensures that when all children of a parent are selected, the parent also appears selected
2180
+ * Syncs selection state with the tree component.
2181
+ * Selects leaf nodes and manually updates parent states (indeterminate/selected).
1486
2182
  */
1487
- private selectParentsWithAllChildrenSelected;
2183
+ private syncSelectionWithTree;
1488
2184
  /**
1489
- * Syncs selection state with the tree component
1490
- * Handles cases where nodes might not be in the tree structure yet
2185
+ * Updates parent node states (selected/indeterminate) based on children selection.
2186
+ * Called after leaf nodes are selected to properly show parent states.
2187
+ * Works bottom-up from deepest parents to root, tracking states in a Map.
1491
2188
  */
1492
- private syncSelectionWithTree;
2189
+ private updateParentStatesAfterSelection;
1493
2190
  /**
1494
2191
  * Loads node data for IDs that are selected but not yet in the cache.
1495
2192
  * This is critical for pre-selected values in collapsed branches.
2193
+ * Fetches all missing IDs in parallel to minimize API calls and latency.
1496
2194
  */
1497
2195
  private loadMissingNodeData;
2196
+ /**
2197
+ * For each selected id, if cached item has no parent (e.g. batch query returned minimal fields),
2198
+ * re-fetch by id so we have parent/parentId for building ancestor chains.
2199
+ * Fetches all needing refresh in parallel.
2200
+ */
2201
+ private ensureParentDataInCache;
2202
+ /**
2203
+ * Resolves parent ID from node data: supports nested `parent` object or flat parentId/parentKey.
2204
+ */
2205
+ private getParentIdFromNodeData;
1498
2206
  /**
1499
2207
  * Marks nodes as selected in the tree structure based on selectedNodeIds.
1500
2208
  * This ensures pre-selected nodes appear selected when the tree is rendered.
@@ -1513,7 +2221,8 @@ declare class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent
1513
2221
  */
1514
2222
  private processRootNode;
1515
2223
  /**
1516
- * Processes child nodes: marks excluded as disabled, marks selected, and syncs selection
2224
+ * Processes child nodes: marks excluded as disabled
2225
+ * Selection marking is handled in datasource callback ONLY during initial load
1517
2226
  */
1518
2227
  private processChildNodes;
1519
2228
  /**
@@ -1526,7 +2235,7 @@ declare class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent
1526
2235
  private cacheNodeDataFromNodes;
1527
2236
  /**
1528
2237
  * Calculate the full path from root to the selected node.
1529
- * Returns an array of strings like ["C", "B"] for node B under parent C.
2238
+ * Returns an array of strings like ["Operations", "IT Operations"] for node "IT Operations" under parent "Operations".
1530
2239
  * Uses tree-view's getNodePath() API when available, otherwise falls back to manual calculation.
1531
2240
  */
1532
2241
  private calculateNodePath;
@@ -1538,14 +2247,6 @@ declare class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent
1538
2247
  * Get the display title for a node.
1539
2248
  */
1540
2249
  private getNodeTitle;
1541
- /**
1542
- * Checks if a node is a leaf node (has no children)
1543
- */
1544
- private isLeafNode;
1545
- /**
1546
- * Checks if a node has children by querying the data source
1547
- */
1548
- private checkIfNodeHasChildren;
1549
2250
  private getSelectedItems;
1550
2251
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityCategoryTreeSelectorComponent, never>;
1551
2252
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityCategoryTreeSelectorComponent, "axp-entity-category-tree-selector", never, {}, {}, never, never, true, never>;
@@ -1555,6 +2256,7 @@ declare class AXPEntityCategoryWidgetColumnComponent extends AXPColumnWidgetComp
1555
2256
  protected readonly entityDetailPopoverService: AXPEntityDetailPopoverService;
1556
2257
  protected readonly formatService: AXFormatService;
1557
2258
  protected readonly entityResolver: AXPEntityDefinitionRegistryService;
2259
+ private readonly categoryBatchResolver;
1558
2260
  private readonly rawValueSignal;
1559
2261
  set rawValueInput(value: any);
1560
2262
  protected entity: _angular_core.Signal<string>;
@@ -1570,12 +2272,21 @@ declare class AXPEntityCategoryWidgetColumnComponent extends AXPColumnWidgetComp
1570
2272
  private efEntity;
1571
2273
  private efDisplay;
1572
2274
  protected visibleItems: _angular_core.Signal<any[]>;
2275
+ protected columnItems: _angular_core.Signal<AXPColumnItemListItem[]>;
1573
2276
  protected showItemDetail(item: any, index: number): Promise<void>;
1574
- protected handleItemClick(index: number): void;
2277
+ protected handleItemClick(listItem: AXPColumnItemListItem): void;
1575
2278
  protected getItemPath(item: any): string[];
1576
2279
  protected hasParent(item: any): boolean;
1577
2280
  protected getItemText(item: any): string;
2281
+ protected joinPath(path: string[]): string;
1578
2282
  protected getItemId(item: any): string;
2283
+ protected getBreadcrumbPath(item: any): string;
2284
+ private resolveItemsWithPaths;
2285
+ /**
2286
+ * Build path from categories array when record has full chain (id, parentId, title).
2287
+ * Used when middleware enriches categories on create/update.
2288
+ */
2289
+ private buildItemWithPathFromChain;
1579
2290
  private extractItemWithPath;
1580
2291
  /**
1581
2292
  * Calculate the full path from root to the item.
@@ -1633,6 +2344,11 @@ declare class AXPEntityCategoryWidgetEditComponent extends AXPValueWidgetCompone
1633
2344
  protected tagBox: _angular_core.Signal<AXTagBoxComponent | undefined>;
1634
2345
  protected searchTerm: _angular_core.WritableSignal<string | null>;
1635
2346
  private entityDef;
2347
+ /**
2348
+ * Flag to prevent the value effect from running during internal updates.
2349
+ * This prevents circular dependency when setItems() calls setValue().
2350
+ */
2351
+ private isInternalUpdate;
1636
2352
  protected handleAddClick(e: AXClickEvent): void;
1637
2353
  protected handleValueChange(e: AXValueChangedEvent): void;
1638
2354
  protected handleOnBlur(e: AXFocusEvent): void;
@@ -1647,14 +2363,14 @@ declare class AXPEntityCategoryWidgetEditComponent extends AXPValueWidgetCompone
1647
2363
  private singleOrMultiple;
1648
2364
  protected getItemLabel(item: any): string;
1649
2365
  /**
1650
- * Get item path as array for breadcrumb component
2366
+ * Get item path as array for breadcrumb component (raw MLS or string per segment).
1651
2367
  */
1652
- protected getItemPath(item: any): string[];
2368
+ protected getItemPath(item: any): AXPMultiLanguageString[];
1653
2369
  /**
1654
2370
  * Join path array with separator.
1655
2371
  * Override this method to customize the separator (e.g., " > ", " -> ", " / ")
1656
2372
  */
1657
- protected joinPath(path: string[]): string;
2373
+ protected joinPath(path: unknown[]): string;
1658
2374
  protected getItemId(item: any): string;
1659
2375
  /**
1660
2376
  * Calculate the full path from root to the item.
@@ -1666,7 +2382,6 @@ declare class AXPEntityCategoryWidgetEditComponent extends AXPValueWidgetCompone
1666
2382
  }
1667
2383
 
1668
2384
  declare class AXPEntityCategoryWidgetViewComponent extends AXPValueWidgetComponent<any> {
1669
- protected readonly formatService: AXFormatService;
1670
2385
  protected readonly entityResolver: AXPEntityDefinitionRegistryService;
1671
2386
  protected entity: _angular_core.Signal<string>;
1672
2387
  protected multiple: _angular_core.Signal<boolean>;
@@ -1678,12 +2393,11 @@ declare class AXPEntityCategoryWidgetViewComponent extends AXPValueWidgetCompone
1678
2393
  private entityDef;
1679
2394
  protected displayItems: _angular_core.WritableSignal<{
1680
2395
  id: string;
1681
- text: string;
2396
+ titleRaw: AXPMultiLanguageString | null | undefined;
1682
2397
  }[]>;
1683
2398
  private efEntity;
1684
2399
  private efDisplay;
1685
2400
  private extractItem;
1686
- private getDisplayText;
1687
2401
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityCategoryWidgetViewComponent, never>;
1688
2402
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityCategoryWidgetViewComponent, "axp-entity-category-widget-view", never, {}, {}, never, never, true, never>;
1689
2403
  }
@@ -1691,110 +2405,95 @@ declare class AXPEntityCategoryWidgetViewComponent extends AXPValueWidgetCompone
1691
2405
  declare const AXPEntityCategoryWidget: AXPWidgetConfig;
1692
2406
 
1693
2407
  declare class AXPTruncatedBreadcrumbComponent implements OnDestroy {
1694
- /**
1695
- * Array of path sections to display
1696
- */
1697
- sections: _angular_core.InputSignal<string[]>;
1698
- /**
1699
- * Maximum number of characters per section.
1700
- * Can be a number or 'auto' to calculate based on available space.
1701
- */
2408
+ private readonly mlsResolver;
2409
+ /** Plain string or locale map per segment; truncation uses resolved text (see {@link resolvedSectionTexts}). */
2410
+ sections: _angular_core.InputSignal<readonly (_acorex_core_translation.AXMultiLanguageString | null | undefined)[]>;
1702
2411
  characterLimit: _angular_core.InputSignal<number | "auto">;
1703
- /**
1704
- * Maximum number of sections to display before showing ellipsis.
1705
- * Can be a number or 'auto' to calculate based on available space.
1706
- */
1707
2412
  sectionLimit: _angular_core.InputSignal<number | "auto">;
1708
- /**
1709
- * Icon class for separator between sections
1710
- */
1711
2413
  separatorIcon: _angular_core.InputSignal<string>;
1712
- /**
1713
- * Icon class for ellipsis
1714
- */
1715
2414
  ellipsisIcon: _angular_core.InputSignal<string>;
1716
- /**
1717
- * Icon class for eye icon (collapse button)
1718
- */
1719
2415
  eyeIcon: _angular_core.InputSignal<string>;
1720
2416
  protected container: _angular_core.Signal<ElementRef<HTMLDivElement> | undefined>;
1721
2417
  protected isExpanded: _angular_core.WritableSignal<boolean>;
1722
2418
  private containerWidth;
1723
2419
  private resizeObserver;
1724
- /**
1725
- * Effective character limit (calculated if 'auto', otherwise uses input value)
1726
- */
2420
+ /** Resolved display strings for length / ellipsis (same rules as the pipe). */
2421
+ protected resolvedSectionTexts: _angular_core.Signal<string[]>;
1727
2422
  protected effectiveCharacterLimit: _angular_core.Signal<number>;
1728
- /**
1729
- * Effective section limit (calculated if 'auto', otherwise uses input value)
1730
- */
1731
2423
  protected effectiveSectionLimit: _angular_core.Signal<number>;
2424
+ protected hasTruncatedText: _angular_core.Signal<boolean>;
2425
+ protected hasHiddenSections: _angular_core.Signal<boolean>;
1732
2426
  /**
1733
- * All sections with truncated text (for collapsed display)
2427
+ * canToggle: If this is false, NO Eye Icon and NO Click events will exist.
1734
2428
  */
1735
- protected allSections: _angular_core.Signal<{
2429
+ protected canToggle: _angular_core.Signal<boolean>;
2430
+ protected allSectionsTruncated: _angular_core.Signal<{
1736
2431
  text: string;
1737
2432
  original: string;
1738
2433
  }[]>;
1739
- /**
1740
- * All sections with full text (for expanded display)
1741
- */
1742
- protected allSectionsFull: _angular_core.Signal<string[]>;
1743
- /**
1744
- * Sections to display (first N sections) when collapsed
1745
- */
1746
2434
  protected displayedSections: _angular_core.Signal<{
1747
2435
  text: string;
1748
2436
  original: string;
1749
2437
  }[]>;
1750
- /**
1751
- * Last section (always shown if there are hidden sections)
1752
- */
1753
2438
  protected lastSection: _angular_core.Signal<{
1754
2439
  text: string;
1755
2440
  original: string;
1756
2441
  }>;
1757
- /**
1758
- * Check if there are hidden sections
1759
- */
1760
- protected hasHiddenSections: _angular_core.Signal<boolean>;
2442
+ protected fullPath: _angular_core.Signal<string>;
1761
2443
  constructor();
1762
2444
  ngOnDestroy(): void;
1763
- /**
1764
- * Handles click on separator icon to expand
1765
- */
1766
2445
  protected handleSeparatorClick(event: Event): void;
1767
- /**
1768
- * Handles click on ellipsis icon to expand
1769
- */
1770
2446
  protected handleEllipsisClick(event: Event): void;
2447
+ protected handleCollapseClick(event: Event): void;
2448
+ private initializeResizeObserver;
2449
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTruncatedBreadcrumbComponent, never>;
2450
+ 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>;
2451
+ }
2452
+
2453
+ declare const AXPEntityDefinitionProviderWidget: AXPWidgetConfig;
2454
+ declare module '@acorex/platform/layout/widget-core' {
2455
+ interface AXPWidgetTypesMap {
2456
+ entityDefinitionProvider: 'entity-definition-provider-editor';
2457
+ }
2458
+ }
2459
+
2460
+ declare class AXPEntityDefinitionProviderWidgetEditComponent extends AXPProviderSelectWidgetEditBase {
2461
+ private readonly entityRegistry;
1771
2462
  /**
1772
- * Handles click on eye icon to collapse
2463
+ * Last applied module filter (from context) to avoid redundant reloads.
1773
2464
  */
1774
- protected handleCollapseClick(event: Event): void;
2465
+ private readonly lastModuleFilterKey;
1775
2466
  /**
1776
- * Initializes ResizeObserver to track container width
2467
+ * Reloads entity options when `filterModuleField` changes in form context (not only via `widget.refresh()`).
1777
2468
  */
1778
- private initializeResizeObserver;
2469
+ private readonly reloadWhenModuleContextChanges;
1779
2470
  /**
1780
- * Calculates automatic character limit based on available space
2471
+ * Options:
2472
+ * - `filterModuleField`: sibling context field name (e.g. `entityListModule`); when set, only entities in that module are listed.
2473
+ * - `valueFormat`: `fullKey` (`module.name`, default) or `entityName` (short name only, for menus that store `entityListRef.entity`).
1781
2474
  */
1782
- private calculateAutoCharacterLimit;
2475
+ protected loadDataSourceRows(): Promise<Array<{
2476
+ value: string;
2477
+ title: string;
2478
+ }>>;
2479
+ refresh(): void;
1783
2480
  /**
1784
- * Calculates automatic section limit based on available space
2481
+ * Reads sibling field from context store data (same shape as `lodash/get` paths).
1785
2482
  */
1786
- private calculateAutoSectionLimit;
2483
+ private readModuleFromContext;
1787
2484
  /**
1788
- * Truncates text to character limit with ellipsis
2485
+ * Resolves a sibling field path relative to the current widget's parent path.
1789
2486
  */
1790
- private truncateText;
1791
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTruncatedBreadcrumbComponent, never>;
1792
- 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>;
2487
+ private resolveSiblingContextPath;
2488
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityDefinitionProviderWidgetEditComponent, never>;
2489
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityDefinitionProviderWidgetEditComponent, "axp-entity-definition-provider-widget-edit", never, {}, {}, never, never, true, never>;
1793
2490
  }
1794
2491
 
1795
2492
  declare class AXPEntityListTableService {
1796
2493
  private readonly workflow;
2494
+ private readonly commandService;
1797
2495
  private readonly expressionEvaluator;
2496
+ private readonly settings;
1798
2497
  /**
1799
2498
  * Convert Entity to List Widget Options
1800
2499
  */
@@ -1815,6 +2514,12 @@ declare class AXPEntityListTableService {
1815
2514
  * Convert Entity Actions to Row Commands
1816
2515
  */
1817
2516
  private createRowCommands;
2517
+ /**
2518
+ * Wraps string values with AXP_ROW_EXPR_PREFIX so widget-renderer does not
2519
+ * evaluate them (it only treats {{ ... }} as expressions). Data-list will
2520
+ * unwrap and evaluate per row with row data. Only used for secondary commands.
2521
+ */
2522
+ private wrapRowExpr;
1818
2523
  /**
1819
2524
  * Check if entity has Selected Scope Actions
1820
2525
  */
@@ -1824,6 +2529,11 @@ declare class AXPEntityListTableService {
1824
2529
  * Handle execution of a row command (shared by double-click and command handlers)
1825
2530
  */
1826
2531
  private handleRowCommand;
2532
+ /**
2533
+ * When a related entity list declares `excludeProperties`, row commands bypass the details page
2534
+ * `execute()` merge — apply the same exclusions for embedded create/update commands.
2535
+ */
2536
+ private mergeRelatedListFormOptions;
1827
2537
  /**
1828
2538
  * Create default events
1829
2539
  */
@@ -1832,26 +2542,43 @@ declare class AXPEntityListTableService {
1832
2542
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityListTableService>;
1833
2543
  }
1834
2544
 
2545
+ interface AXPEntityListToolbarConvertOptions {
2546
+ excludeColumns?: string[];
2547
+ includeColumns?: string[];
2548
+ /** Related list: evaluated `AXPEntityTableColumn[]` from `AXPRelatedEntity.columns` */
2549
+ relatedTableColumns?: AXPEntityTableColumn[];
2550
+ customFilterDefinitions?: Partial<AXPFilterDefinition>[];
2551
+ }
1835
2552
  declare class AXPEntityListToolbarService {
1836
2553
  private readonly widgetResolver;
1837
2554
  /**
1838
2555
  * Convert Entity to Toolbar Options
1839
2556
  */
1840
- convertEntityToolbarOptions(entity: AXPEntity, options: any): Promise<{
2557
+ convertEntityToolbarOptions(entity: AXPEntity, options: AXPEntityListToolbarConvertOptions | undefined): Promise<{
1841
2558
  filterDefinitions: AXPFilterDefinition[];
1842
2559
  columnDefinitions: AXPColumnQuery[];
1843
2560
  sortDefinitions: AXPSortDefinition[];
1844
2561
  }>;
2562
+ /**
2563
+ * Merges custom filter definitions into the entity-derived list by `field`.
2564
+ * Matching fields: custom properties are applied on top of the base definition.
2565
+ * Non-matching custom entries are appended.
2566
+ */
2567
+ private mergeFilterDefinitions;
2568
+ private filterFieldKey;
2569
+ private mergeFilterDefinition;
1845
2570
  /**
1846
2571
  * Create Filter Definitions for Toolbar
1847
2572
  */
1848
2573
  private createFilterDefinitions;
1849
2574
  /**
1850
- * Create Column Definitions for Toolbar
2575
+ * Create Column Definitions for Toolbar.
2576
+ * Includes both entity.properties and enriched columns (e.g. person.firstName with showAs).
1851
2577
  */
1852
2578
  private createColumnDefinitions;
1853
2579
  /**
1854
- * Create Sort Definitions for Toolbar
2580
+ * Create Sort Definitions for Toolbar.
2581
+ * Includes entity.properties with sort enabled, plus enriched columns (dotted paths).
1855
2582
  */
1856
2583
  private createSortDefinitions;
1857
2584
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityListToolbarService, never>;
@@ -1867,6 +2594,8 @@ declare class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
1867
2594
  protected deviceService: AXPDeviceService;
1868
2595
  protected commandService: AXPCommandService;
1869
2596
  protected eventService: AXPBroadcastEventService;
2597
+ private readonly expressionEvaluator;
2598
+ private readonly route;
1870
2599
  protected isMounted: _angular_core.WritableSignal<boolean>;
1871
2600
  readonly entity: _angular_core.WritableSignal<AXPEntity | null>;
1872
2601
  protected listNode: _angular_core.WritableSignal<AXPWidgetNode | null>;
@@ -1880,6 +2609,8 @@ declare class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
1880
2609
  protected entitySource: _angular_core.Signal<any>;
1881
2610
  protected excludeColumns: _angular_core.Signal<string[]>;
1882
2611
  protected includeColumns: _angular_core.Signal<string[]>;
2612
+ protected relatedTableColumns: _angular_core.Signal<AXPEntityTableColumn[] | undefined>;
2613
+ protected customFilterDefinitions: _angular_core.Signal<Partial<AXPFilterDefinition>[] | undefined>;
1883
2614
  protected externalActions: _angular_core.Signal<AXPEntityAction[]>;
1884
2615
  protected maxHeight: _angular_core.Signal<string>;
1885
2616
  protected showEntityActions: _angular_core.Signal<any>;
@@ -1890,7 +2621,47 @@ declare class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
1890
2621
  protected secondaryActions: _angular_core.Signal<AXPActionMenuItem[]>;
1891
2622
  protected handleActionClick(item: AXPActionMenuItem): void;
1892
2623
  protected handleSecondaryActionClick(item: AXPActionMenuItem): void;
1893
- protected execute(commandName: string, data: any): Promise<void>;
2624
+ protected execute(commandName: string, _data: unknown): Promise<void>;
2625
+ /**
2626
+ * Resolves toolbar commands including nested dropdown (`items`) actions.
2627
+ */
2628
+ private findToolbarAction;
2629
+ private evaluateToolbarExpressions;
2630
+ /**
2631
+ * Parses the `filters` query param (same shape as standalone entity list routes).
2632
+ */
2633
+ private parseFiltersFromRoute;
2634
+ /**
2635
+ * Route `filters` apply only when the active details `page` matches this list's entity
2636
+ * (e.g. WorkOrder filters must not affect FailureRegister on the same asset layout).
2637
+ */
2638
+ private shouldApplyRouteFilters;
2639
+ /**
2640
+ * Merges route filters into related-entity toolbar filters (route wins per field).
2641
+ */
2642
+ private mergeToolbarFilters;
2643
+ private getMergedToolbarFilters;
2644
+ /**
2645
+ * Applies merged route + parent-scope filters to the widget value and data source.
2646
+ */
2647
+ private applyMergedRouteFiltersToList;
2648
+ /**
2649
+ * Re-evaluates related-entity list filters from the live dialog form context (e.g. after create saves the main row id).
2650
+ */
2651
+ private applyRelatedFiltersFromContext;
2652
+ /**
2653
+ * Pushes current toolbar filters to the embedded list data source when both exist.
2654
+ * Returns false while data-list is still mounting (see deferred listNode.set in ngOnInit).
2655
+ */
2656
+ private pushToolbarFiltersToDataSource;
2657
+ /**
2658
+ * Writes toolbar filters from specs and pushes them onto the data source so refresh/reload keeps the parent scope.
2659
+ */
2660
+ private applyRelatedFiltersFromContextAndDatasource;
2661
+ /**
2662
+ * Refreshes the embedded data list (toolbar / workflow). In wizard mode, `refresh` is patched to re-apply scoped filters first.
2663
+ */
2664
+ private refreshGridWithParentScopedFilters;
1894
2665
  protected queries: undefined;
1895
2666
  /**
1896
2667
  * Validates that all required dependencies are available
@@ -1928,32 +2699,6 @@ declare class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
1928
2699
 
1929
2700
  declare const AXPEntityListWidget: AXPWidgetConfig;
1930
2701
 
1931
- declare class AXPLookupFilterWidgetEditComponent extends AXPValueWidgetComponent<any> {
1932
- #private;
1933
- protected editorPath: string;
1934
- protected lookupWidgetRenderer: _angular_core.Signal<AXPWidgetRendererDirective | undefined>;
1935
- protected entity: _angular_core.Signal<string>;
1936
- protected textField: _angular_core.Signal<string>;
1937
- protected valueField: _angular_core.Signal<string>;
1938
- protected customFilter: _angular_core.Signal<AXDataSourceFilterOption>;
1939
- protected multiple: _angular_core.Signal<boolean>;
1940
- protected lookupNode: _angular_core.WritableSignal<AXPWidgetNode>;
1941
- private shouldFocus;
1942
- /**
1943
- * Public focus method to trigger focusing
1944
- */
1945
- focus(): void;
1946
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLookupFilterWidgetEditComponent, never>;
1947
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPLookupFilterWidgetEditComponent, "ng-component", never, {}, {}, never, never, true, never>;
1948
- }
1949
-
1950
- declare const AXPLookupFilterWidget: AXPWidgetConfig;
1951
- declare module '@acorex/platform/layout/widget-core' {
1952
- interface AXPWidgetTypesMap {
1953
- lookupFilter: 'lookup-filter';
1954
- }
1955
- }
1956
-
1957
2702
  declare class AXPLookupWidgetViewComponent extends AXPValueWidgetComponent<any> {
1958
2703
  protected readonly formatService: AXFormatService;
1959
2704
  protected readonly entityResolver: AXPEntityDefinitionRegistryService;
@@ -1970,7 +2715,7 @@ declare class AXPLookupWidgetViewComponent extends AXPValueWidgetComponent<any>
1970
2715
  private efEntity;
1971
2716
  private efDisplay;
1972
2717
  private extractItem;
1973
- private getDisplayText;
2718
+ private getDisplayRaw;
1974
2719
  private get __class();
1975
2720
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLookupWidgetViewComponent, never>;
1976
2721
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPLookupWidgetViewComponent, "axp-lookup-widget-view", never, {}, {}, never, never, true, never>;
@@ -1987,10 +2732,18 @@ interface AXPEntityDataSelectorOptions {
1987
2732
  name: string;
1988
2733
  dir: 'asc' | 'desc';
1989
2734
  }[];
1990
- allowCreate?: boolean;
2735
+ allowCreate?: AXPDataSelectorAllowCreate;
1991
2736
  searchFields?: string[];
1992
2737
  initialSearchTerm?: string;
1993
2738
  selectedItemIds?: string[] | number[];
2739
+ categoryFilter?: {
2740
+ title: string;
2741
+ dataSource: AXPCategoryTreeDataSource;
2742
+ filterField: string;
2743
+ filterOperator?: 'equal' | 'contains' | 'in';
2744
+ width?: string;
2745
+ };
2746
+ showCategoryFilter?: boolean;
1994
2747
  }
1995
2748
  interface AXPEntityDataSelectorResult {
1996
2749
  items: any[];
@@ -1999,20 +2752,22 @@ declare class AXPEntityDataSelectorService {
1999
2752
  private readonly dataSelectorService;
2000
2753
  private readonly filterOperatorMiddleware;
2001
2754
  private readonly widgetResolver;
2755
+ private readonly entityResolver;
2756
+ private readonly commandService;
2002
2757
  /**
2003
2758
  * Open entity data selector popup
2004
2759
  */
2005
2760
  open(options: AXPEntityDataSelectorOptions): Promise<AXPEntityDataSelectorResult | null>;
2006
2761
  /**
2007
- * Open entity data selector with category filter
2762
+ * Execute Entity:Create and return created item.
2763
+ * Used by lookup widget and data selector for inline create.
2008
2764
  */
2009
- openWithCategoryFilter(options: Omit<AXPEntityDataSelectorOptions, 'allowCreate'>, categoryFilterConfig: {
2010
- title: string;
2011
- dataSource: any;
2012
- filterField: string;
2013
- filterOperator?: 'equal' | 'contains' | 'in';
2014
- width?: string;
2015
- }): Promise<AXPEntityDataSelectorResult | null>;
2765
+ executeEntityCreate(entity: AXPEntity, mode: 'full' | 'quick'): Promise<any | null>;
2766
+ /**
2767
+ * Normalize item's phones/emails for expose/display.
2768
+ * Call this when receiving items from any source (create, API, selector).
2769
+ */
2770
+ normalizeItemContactArrays(item: any): any;
2016
2771
  /**
2017
2772
  * Create data selector configuration from entity options
2018
2773
  */
@@ -2030,9 +2785,23 @@ declare class AXPEntityDataSelectorService {
2030
2785
  */
2031
2786
  private getSearchFields;
2032
2787
  /**
2033
- * Check if entity supports create operation
2788
+ * Get allowCreate mode from entity
2789
+ */
2790
+ private getAllowCreate;
2791
+ /**
2792
+ * Execute Entity:Create and return created item
2793
+ */
2794
+ private executeCreate;
2795
+ /**
2796
+ * Normalize phones/emails from repeater form to plain arrays of { value: string }.
2797
+ * Repeater/ContactBox can return nested structure: { value: { label: "", value: "101010" } }
2798
+ * Contact widget expects: { value: "101010", label?: string }
2034
2799
  */
2035
- private canCreate;
2800
+ private normalizeContactArrays;
2801
+ /**
2802
+ * Create category tree data source from category entity key
2803
+ */
2804
+ private createCategoryTreeDataSource;
2036
2805
  /**
2037
2806
  * Merge custom and parent filters into data source query
2038
2807
  */
@@ -2041,7 +2810,48 @@ declare class AXPEntityDataSelectorService {
2041
2810
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityDataSelectorService>;
2042
2811
  }
2043
2812
 
2813
+ /**
2814
+ * Base interface for lookup widget look components
2815
+ * All look components should implement this interface to ensure consistency
2816
+ */
2817
+ declare abstract class LookupWidgetLookBase {
2818
+ abstract refresh(): void;
2819
+ abstract focus(): void;
2820
+ abstract clear(): void;
2821
+ }
2822
+
2044
2823
  type AXPLookupWidgetLookType = 'select' | 'lookup';
2824
+ /**
2825
+ * How the lookup column resolves related items for display in entity lists.
2826
+ * - `hydrated`: titles (and optional ids) are already on the row; inline preview + overflow popover use row data only.
2827
+ * - `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.
2828
+ * - `countOnly`: only a count is on the row; the popover loads ids/titles via a registered `AXPQuery` when opened.
2829
+ */
2830
+ type AXPLookupColumnResolveStrategy = 'hydrated' | 'idsWithCount' | 'countOnly';
2831
+ /**
2832
+ * Column list only: controls how the lookup column loads and displays related items in grids.
2833
+ * Omitted or empty strategy defaults to `hydrated` at runtime.
2834
+ */
2835
+ interface AXPLookupColumnResolveOptions {
2836
+ /** Default `hydrated` when omitted. */
2837
+ strategy?: AXPLookupColumnResolveStrategy;
2838
+ /** Lodash-style path on `rowData` for the displayed count (e.g. `rolesCount`). */
2839
+ countFieldPath?: string;
2840
+ /** Lodash-style path on `rowData` for the related id list (`idsWithCount`). If omitted, the column `rawValue` is used. */
2841
+ idsPath?: string;
2842
+ /** Registered query key for `AXPQueryExecutor.fetch` when using `countOnly`. */
2843
+ queryKey?: string;
2844
+ /**
2845
+ * Maps query input property names to lodash-style paths on `rowData` (e.g. `{ "userId": "id" }`).
2846
+ * May be a JSON string when set from the layout designer text field.
2847
+ */
2848
+ queryParams?: Record<string, string> | string;
2849
+ /**
2850
+ * Dot path into the named query result for the items array. Defaults to `items` when the result is an object.
2851
+ * If the query returns an array directly, leave unset and handle at runtime.
2852
+ */
2853
+ queryResultItemsPath?: string;
2854
+ }
2045
2855
  interface AXPLookupWidgetOptions {
2046
2856
  disabled?: boolean | AXPExpression;
2047
2857
  readonly?: boolean | AXPExpression;
@@ -2050,68 +2860,62 @@ interface AXPLookupWidgetOptions {
2050
2860
  look?: AXPLookupWidgetLookType;
2051
2861
  allowClear?: boolean;
2052
2862
  displayFormat?: string;
2863
+ /** Column list: lazy resolve and summary behavior. */
2864
+ columnResolve?: AXPLookupColumnResolveOptions;
2053
2865
  }
2054
2866
 
2055
2867
  declare class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent<any> {
2056
2868
  #private;
2057
2869
  protected readonly injector: Injector;
2058
2870
  protected readonly entityResolver: AXPEntityDefinitionRegistryService;
2059
- protected readonly formatService: AXFormatService;
2060
- protected readonly popupService: AXPopupService;
2871
+ protected readonly entityService: AXPEntityService;
2061
2872
  protected readonly entityDataSelectorService: AXPEntityDataSelectorService;
2062
- private readonly translateService;
2063
- protected selectBox: _angular_core.Signal<AXSelectBoxComponent | undefined>;
2064
- protected tagBox: _angular_core.Signal<AXTagBoxComponent | undefined>;
2065
- private shouldFocus;
2873
+ private readonly mlsResolver;
2874
+ protected componentLook: _angular_core.Signal<LookupWidgetLookBase | undefined>;
2066
2875
  protected expose: _angular_core.Signal<string | any[] | undefined>;
2067
2876
  protected entity: _angular_core.Signal<string>;
2068
- protected disabled: _angular_core.Signal<string>;
2877
+ protected disabled: _angular_core.Signal<string | boolean>;
2069
2878
  protected columns: _angular_core.Signal<string[]>;
2070
2879
  protected textField: _angular_core.Signal<string>;
2071
2880
  protected hasClearButton: _angular_core.Signal<boolean>;
2072
2881
  protected customFilter: _angular_core.Signal<AXDataSourceFilterOption>;
2882
+ protected placeholder: _angular_core.Signal<string>;
2883
+ protected filterMode: _angular_core.Signal<boolean>;
2073
2884
  protected multiple: _angular_core.Signal<boolean>;
2074
2885
  protected look: _angular_core.Signal<AXPLookupWidgetLookType>;
2075
- protected allowClear: _angular_core.Signal<boolean>;
2076
2886
  protected defaultTextField: _angular_core.Signal<string>;
2077
2887
  protected displayField: _angular_core.Signal<string>;
2078
- protected selectedItemsText: _angular_core.Signal<string>;
2888
+ protected allowCreate: _angular_core.Signal<"none" | "full" | "quick">;
2079
2889
  protected valueField: _angular_core.Signal<string>;
2080
2890
  protected displayFormat: _angular_core.Signal<string | undefined>;
2081
2891
  protected conditions?: AXPQueryFilter[];
2082
2892
  protected filter: AXDataSourceFilterOption | null;
2083
- private entityDef;
2084
- /**
2085
- * Get default sort order from entity's first list view
2086
- */
2087
- protected defaultSorts: _angular_core.Signal<AXDataSourceSortOption[]>;
2088
- protected dataSource: _angular_core.Signal<AXDataSource<unknown> | null>;
2089
- protected searchTerm: _angular_core.WritableSignal<string | null>;
2893
+ protected entityDef: _angular_core.WritableSignal<AXPEntity | null>;
2090
2894
  protected selectedItems: _angular_core.WritableSignal<any[]>;
2091
- textbox: _angular_core.Signal<AXTagBoxComponent | undefined>;
2895
+ protected initialItems: _angular_core.WritableSignal<boolean>;
2896
+ protected initialized: _angular_core.WritableSignal<boolean>;
2897
+ protected previousValue: _angular_core.WritableSignal<any>;
2092
2898
  protected isLoading: _angular_core.WritableSignal<boolean>;
2093
- protected isOpen: _angular_core.WritableSignal<boolean>;
2094
- private placeholderUpdateToken;
2899
+ private hasValue;
2095
2900
  private findByValue;
2096
- protected handleOnClick(e: AXClickEvent): void;
2097
- private showSelector;
2098
- protected selectBoxValueChange(e: AXValueChangedEvent): void;
2099
- protected handleValueChange(e: AXValueChangedEvent): void;
2100
- protected handleSearchInputChange(e: AXValueChangedEvent): void;
2101
- protected handleOnBlur(e: AXFocusEvent): void;
2102
- protected handleKeyUp(e: AXHtmlEvent): Promise<void>;
2103
- private setItems;
2104
- protected handleClearClick(): void;
2901
+ protected handleComponentValueChanged(items: any[] | null): void;
2902
+ protected handleCreateClick(_e: AXClickEvent): Promise<void>;
2903
+ private executeCreate;
2904
+ protected setLoading: (loading: boolean) => void;
2905
+ protected setItems: (items: any[]) => void;
2906
+ /**
2907
+ * Writes expose targets into context using per-path updates.
2908
+ * Avoids `contextService.patch()` with nested objects: patch shallow-merges top-level keys only,
2909
+ * so e.g. `{ person: { educationLevel: { id, title } } }` would replace the entire `person`
2910
+ * object and drop sibling fields like `person.educationLevelId`, causing a value/effect loop.
2911
+ */
2912
+ private expoesItems;
2913
+ outputs(): (string | {
2914
+ [name: string]: unknown;
2915
+ })[];
2916
+ private singleOrMultiple;
2105
2917
  refresh(): void;
2106
2918
  clear(): void;
2107
- clearInput(): void;
2108
- protected getTagLabel(item: any): string;
2109
- private searchByValue;
2110
- private mergeFilter;
2111
- private singleOrMultiple;
2112
- /**
2113
- * Public focus method to trigger focusing
2114
- */
2115
2919
  focus(): void;
2116
2920
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLookupWidgetEditComponent, never>;
2117
2921
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPLookupWidgetEditComponent, "axp-lookup-widget-edit", never, {}, {}, never, never, true, never>;
@@ -2119,8 +2923,12 @@ declare class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent<any>
2119
2923
 
2120
2924
  declare class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent<any> {
2121
2925
  private readonly entityDetailPopoverService;
2926
+ private readonly translation;
2122
2927
  private readonly formatService;
2928
+ private readonly entityService;
2929
+ private readonly queryExecutor;
2123
2930
  protected moreButton: _angular_core.Signal<ElementRef<any> | undefined>;
2931
+ protected lazyTrigger: _angular_core.Signal<ElementRef<any> | undefined>;
2124
2932
  protected morePopover: _angular_core.Signal<AXPopoverComponent | undefined>;
2125
2933
  protected host: ElementRef<any>;
2126
2934
  protected valueField: string;
@@ -2130,27 +2938,550 @@ declare class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent<an
2130
2938
  protected maxVisible: number;
2131
2939
  protected displayFormat: _angular_core.Signal<string | undefined>;
2132
2940
  protected displayField: _angular_core.Signal<string>;
2941
+ protected columnResolve: _angular_core.Signal<AXPLookupColumnResolveOptions | undefined>;
2942
+ protected resolveStrategy: _angular_core.Signal<AXPLookupColumnResolveStrategy>;
2943
+ protected isHydratedStrategy: _angular_core.Signal<boolean>;
2133
2944
  protected isMorePopoverOpen: _angular_core.WritableSignal<boolean>;
2134
2945
  protected selectedItemIndex: _angular_core.WritableSignal<number>;
2946
+ protected resolvedPopoverItems: _angular_core.WritableSignal<any[]>;
2947
+ protected resolveStatus: _angular_core.WritableSignal<"error" | "idle" | "loading" | "ready">;
2948
+ protected resolveError: _angular_core.WritableSignal<string | null>;
2949
+ protected summaryLabel: _angular_core.WritableSignal<string>;
2950
+ protected popoverHeader: _angular_core.WritableSignal<string>;
2135
2951
  protected displayItems: _angular_core.Signal<any[]>;
2136
2952
  protected allItems: _angular_core.Signal<any[]>;
2137
2953
  protected visibleItems: _angular_core.Signal<any[]>;
2138
2954
  protected hasMoreItems: _angular_core.Signal<boolean>;
2139
- protected remainingItemsCount: _angular_core.Signal<number>;
2955
+ protected idsFromRow: _angular_core.Signal<any[]>;
2956
+ protected displayCount: _angular_core.Signal<number>;
2957
+ protected popoverListItems: _angular_core.Signal<any[]>;
2958
+ /** Avoid resetting lazy cache on every CD when `rowData` is a new object reference for the same row. */
2959
+ private previousLazyRowId;
2960
+ constructor();
2140
2961
  protected showMoreItems(): void;
2141
- protected onMorePopoverOpenChange(event: any): void;
2962
+ protected openLazyPopover(): void;
2963
+ protected onPopoverOpenChange(event: unknown): void;
2142
2964
  protected showItemDetail(item: any, index: number): Promise<void>;
2143
2965
  protected handleItemClick(index: number): void;
2144
- private openMorePopover;
2966
+ protected handleResolvedItemClick(index: number): void;
2967
+ protected handlePopoverItemClick(index: number): void;
2968
+ protected getDisplayRaw(item: any): string;
2969
+ private refreshSummaryLabel;
2970
+ private refreshPopoverHeader;
2971
+ private resetLazyState;
2972
+ private openPopoverFromRef;
2145
2973
  private closeMorePopover;
2974
+ private ensureLazyItemsLoaded;
2975
+ /**
2976
+ * ax-popover may emit a boolean, CustomEvent with detail, or a DOM Event depending on version.
2977
+ */
2978
+ private coercePopoverOpenEvent;
2979
+ private loadByIds;
2980
+ private loadByNamedQuery;
2981
+ private buildNamedQueryInput;
2982
+ private parseQueryParamsMap;
2983
+ private extractItemsFromQueryResult;
2146
2984
  private extractItem;
2147
- protected getDisplayText(item: any): string;
2985
+ private resolveDisplayValue;
2148
2986
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLookupWidgetColumnComponent, never>;
2149
2987
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPLookupWidgetColumnComponent, "ng-component", never, { "rawValue": { "alias": "rawValue"; "required": false; }; "rowData": { "alias": "rowData"; "required": false; }; }, {}, never, never, true, never>;
2150
2988
  }
2151
2989
 
2152
2990
  declare const AXPLookupWidget: AXPWidgetConfig;
2153
2991
 
2992
+ /**
2993
+ * Unified reference format for all sources
2994
+ */
2995
+ interface AXPMultiSourceRef {
2996
+ /** Source identifier (e.g., 'site-location', 'inline-address', 'employee-user') */
2997
+ sourceKey: string;
2998
+ /** Entity ID if entity source (optional for inline sources) */
2999
+ refId?: string;
3000
+ /** Always present - used for display */
3001
+ displayName: string;
3002
+ /** Full data (for inline sources or denormalized entity data) */
3003
+ data?: any;
3004
+ /** Additional metadata */
3005
+ meta?: Record<string, unknown>;
3006
+ }
3007
+ /**
3008
+ * Stored value type
3009
+ * - Single: AXPMultiSourceRef
3010
+ * - Multiple: AXPMultiSourceRef[]
3011
+ */
3012
+ type AXPMultiSourceValue = AXPMultiSourceRef | AXPMultiSourceRef[];
3013
+ /**
3014
+ * Source type
3015
+ */
3016
+ declare enum AXPMultiSourceType {
3017
+ Entity = "entity",
3018
+ Inline = "inline"
3019
+ }
3020
+ /**
3021
+ * Single source item definition
3022
+ */
3023
+ interface AXPMultiSourceItem {
3024
+ /** Unique identifier for this source */
3025
+ key: string;
3026
+ /** Display information */
3027
+ title: string;
3028
+ icon?: string;
3029
+ badge?: string;
3030
+ description?: string;
3031
+ /** Source type */
3032
+ type: AXPMultiSourceType;
3033
+ /** For entity sources: entity name (e.g., 'LocationManagement.Location') */
3034
+ entity?: string;
3035
+ /** For inline sources: command key to execute for inline creation (e.g., 'Module.Entity:CreateInline') */
3036
+ inlineCreateCommand?: string;
3037
+ /** Optional: Filter/constraints for this source */
3038
+ filters?: AXDataSourceFilterOption;
3039
+ /** Optional: Custom search fields */
3040
+ searchFields?: string[];
3041
+ /** Display format template for results */
3042
+ displayFormat?: string;
3043
+ /** Value transformation (how to store this source) */
3044
+ valueTransform?: (item: any) => AXPMultiSourceRef;
3045
+ }
3046
+ /**
3047
+ * Complete source configuration (from provider)
3048
+ */
3049
+ interface AXPMultiSourceDefinition {
3050
+ /** Provider name */
3051
+ name: string;
3052
+ /** Display title */
3053
+ title: string;
3054
+ /** Sources array */
3055
+ sources: AXPMultiSourceItem[];
3056
+ /** Default search strategy */
3057
+ searchStrategy: 'unified' | 'tabs' | 'grouped';
3058
+ /** Default display format */
3059
+ defaultDisplayFormat?: string;
3060
+ /** Default multiple selection */
3061
+ defaultMultiple?: boolean;
3062
+ }
3063
+ /**
3064
+ * Widget options
3065
+ */
3066
+ interface AXPMultiSourceSelectorWidgetOptions {
3067
+ /** Provider name (required) */
3068
+ providerName: string;
3069
+ /** Override multiple selection (optional, uses provider default if not specified) */
3070
+ multiple?: boolean;
3071
+ /** Override display format (optional, uses provider default if not specified) */
3072
+ displayFormat?: string;
3073
+ /** Additional filters to apply to all sources */
3074
+ filters?: AXDataSourceFilterOption;
3075
+ /** Custom placeholder */
3076
+ placeholder?: string;
3077
+ /** Allow clear */
3078
+ allowClear?: boolean;
3079
+ }
3080
+
3081
+ /**
3082
+ * Injection token for multi-source definition providers
3083
+ */
3084
+ declare const AXP_MULTI_SOURCE_DEFINITION_PROVIDER: InjectionToken<AXPMultiSourceDefinitionProvider[]>;
3085
+ /**
3086
+ * Provider context for building definitions
3087
+ */
3088
+ declare class AXPMultiSourceDefinitionProviderContext {
3089
+ private definitions;
3090
+ addDefinition(definition: AXPMultiSourceDefinition): void;
3091
+ getDefinitions(): AXPMultiSourceDefinition[];
3092
+ findDefinition(name: string): AXPMultiSourceDefinition | undefined;
3093
+ }
3094
+ /**
3095
+ * Provider interface
3096
+ */
3097
+ interface AXPMultiSourceDefinitionProvider {
3098
+ provide(context: AXPMultiSourceDefinitionProviderContext): Promise<void> | void;
3099
+ }
3100
+ /**
3101
+ * Service for managing multi-source definitions
3102
+ */
3103
+ declare class AXPMultiSourceDefinitionProviderService {
3104
+ private readonly providers;
3105
+ private cache;
3106
+ private load;
3107
+ /**
3108
+ * Get definition by name
3109
+ */
3110
+ getDefinition(name: string): Promise<AXPMultiSourceDefinition>;
3111
+ /**
3112
+ * Reload definitions (clear cache)
3113
+ */
3114
+ reload(): Promise<void>;
3115
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMultiSourceDefinitionProviderService, never>;
3116
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPMultiSourceDefinitionProviderService>;
3117
+ }
3118
+
3119
+ declare const AXPMultiSourceSelectorWidget: AXPWidgetConfig;
3120
+
3121
+ /**
3122
+ * Search result item with source information
3123
+ */
3124
+ interface AXPMultiSourceSearchResultItem {
3125
+ source: AXPMultiSourceItem;
3126
+ item: any;
3127
+ }
3128
+ /**
3129
+ * Search result
3130
+ */
3131
+ interface AXPMultiSourceSearchResult {
3132
+ items: AXPMultiSourceSearchResultItem[];
3133
+ total: number;
3134
+ }
3135
+ declare class AXPMultiSourceFederatedSearchService {
3136
+ private readonly entityResolver;
3137
+ /**
3138
+ * Search across all enabled sources
3139
+ */
3140
+ search(definition: AXPMultiSourceDefinition, searchTerm: string, filters?: AXDataSourceFilterOption): Promise<AXPMultiSourceSearchResult>;
3141
+ /**
3142
+ * Search single source
3143
+ */
3144
+ searchSource(source: AXPMultiSourceItem, searchTerm: string, filters?: AXDataSourceFilterOption): Promise<{
3145
+ items: any[];
3146
+ total: number;
3147
+ }>;
3148
+ /**
3149
+ * Resolve entity from entity name string (e.g., 'LocationManagement.Location')
3150
+ */
3151
+ private resolveEntity;
3152
+ /**
3153
+ * Search entity using entity queries
3154
+ */
3155
+ private searchEntity;
3156
+ /**
3157
+ * Build search filters from search term
3158
+ */
3159
+ private buildSearchFilters;
3160
+ /**
3161
+ * Get default searchable fields from entity
3162
+ */
3163
+ private getDefaultSearchFields;
3164
+ /**
3165
+ * Merge multiple filters
3166
+ */
3167
+ private mergeFilters;
3168
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMultiSourceFederatedSearchService, never>;
3169
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPMultiSourceFederatedSearchService>;
3170
+ }
3171
+
3172
+ /**
3173
+ * Selector open configuration
3174
+ */
3175
+ interface AXPMultiSourceSelectorOpenConfig {
3176
+ definition: AXPMultiSourceDefinition;
3177
+ multiple: boolean;
3178
+ selectedValues?: AXPMultiSourceValue;
3179
+ filters?: AXDataSourceFilterOption;
3180
+ title?: string;
3181
+ }
3182
+ /**
3183
+ * Selector result
3184
+ */
3185
+ interface AXPMultiSourceSelectorResult {
3186
+ items: AXPMultiSourceRef[];
3187
+ }
3188
+ declare class AXPMultiSourceSelectorService {
3189
+ private readonly popupService;
3190
+ private readonly definitionService;
3191
+ /**
3192
+ * Open selector popup by provider name
3193
+ */
3194
+ openByProviderName(providerName: string, config: {
3195
+ multiple: boolean;
3196
+ selectedValues?: AXPMultiSourceValue;
3197
+ filters?: AXDataSourceFilterOption;
3198
+ title?: string;
3199
+ }): Promise<AXPMultiSourceSelectorResult | null>;
3200
+ /**
3201
+ * Open selector popup
3202
+ */
3203
+ open(config: AXPMultiSourceSelectorOpenConfig): Promise<AXPMultiSourceSelectorResult | null>;
3204
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMultiSourceSelectorService, never>;
3205
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPMultiSourceSelectorService>;
3206
+ }
3207
+
3208
+ /**
3209
+ * Multi-source selector popup component
3210
+ */
3211
+ declare class AXPMultiSourceSelectorComponent extends AXBasePageComponent {
3212
+ private readonly entityDataSelectorService;
3213
+ private readonly entityResolver;
3214
+ private readonly translationService;
3215
+ protected config: _angular_core.WritableSignal<AXPMultiSourceSelectorOpenConfig>;
3216
+ protected definition: _angular_core.Signal<AXPMultiSourceDefinition>;
3217
+ protected activeTabKey: _angular_core.WritableSignal<string | null>;
3218
+ protected activeSource: _angular_core.Signal<AXPMultiSourceItem | null>;
3219
+ protected selectedItems: _angular_core.WritableSignal<AXPMultiSourceRef[]>;
3220
+ protected readonly AXPMultiSourceType: typeof AXPMultiSourceType;
3221
+ protected ngOnInit(): void;
3222
+ protected handleTabClick(source: AXPMultiSourceItem): void;
3223
+ protected handleSelectFromSource(source: AXPMultiSourceItem): Promise<void>;
3224
+ protected handleCancel(): void;
3225
+ protected handleConfirm(): void;
3226
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMultiSourceSelectorComponent, never>;
3227
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPMultiSourceSelectorComponent, "axp-multi-source-selector", never, {}, {}, never, never, true, never>;
3228
+ }
3229
+
3230
+ declare class AXPMultiSourceSelectorWidgetEditComponent extends AXPValueWidgetComponent<any> {
3231
+ protected readonly popupService: AXPopupService;
3232
+ protected readonly definitionService: AXPMultiSourceDefinitionProviderService;
3233
+ protected readonly selectorService: AXPMultiSourceSelectorService;
3234
+ protected tagBox: _angular_core.Signal<AXTagBoxComponent | undefined>;
3235
+ protected providerName: _angular_core.Signal<string>;
3236
+ protected disabled: _angular_core.Signal<boolean>;
3237
+ protected multiple: _angular_core.Signal<boolean>;
3238
+ protected allowClear: _angular_core.Signal<boolean>;
3239
+ protected placeholderText: _angular_core.Signal<string>;
3240
+ protected searchTerm: _angular_core.WritableSignal<string | null>;
3241
+ protected selectedItems: _angular_core.WritableSignal<AXPMultiSourceRef[]>;
3242
+ protected isLoading: _angular_core.WritableSignal<boolean>;
3243
+ protected isOpen: _angular_core.WritableSignal<boolean>;
3244
+ protected definition: _angular_core.WritableSignal<AXPMultiSourceDefinition | null>;
3245
+ private efProvider;
3246
+ private efValue;
3247
+ protected handleOnClick(e: AXClickEvent): void;
3248
+ protected handleValueChange(e: AXValueChangedEvent): void;
3249
+ protected handleSearchInputChange(e: AXValueChangedEvent): void;
3250
+ protected handleOnBlur(e: AXFocusEvent): void;
3251
+ protected handleKeyUp(e: AXHtmlEvent): Promise<void>;
3252
+ protected handleClearClick(): void;
3253
+ private findByValue;
3254
+ private normalizeToRef;
3255
+ private showSelector;
3256
+ private setItems;
3257
+ refresh(): void;
3258
+ clear(): void;
3259
+ private clearInput;
3260
+ protected getTagLabel(item: AXPMultiSourceRef): string;
3261
+ private singleOrMultiple;
3262
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMultiSourceSelectorWidgetEditComponent, never>;
3263
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPMultiSourceSelectorWidgetEditComponent, "axp-multi-source-selector-widget-edit", never, {}, {}, never, never, true, never>;
3264
+ }
3265
+
3266
+ declare class AXPMultiSourceSelectorWidgetViewComponent extends AXPValueWidgetComponent<any> {
3267
+ protected readonly formatService: AXFormatService;
3268
+ protected readonly definitionService: AXPMultiSourceDefinitionProviderService;
3269
+ protected providerName: _angular_core.Signal<string>;
3270
+ protected multiple: _angular_core.Signal<boolean>;
3271
+ protected badgeClass: _angular_core.Signal<string>;
3272
+ protected displayFormat: _angular_core.Signal<string | undefined>;
3273
+ protected loading: _angular_core.WritableSignal<boolean>;
3274
+ private definition;
3275
+ protected displayItems: _angular_core.WritableSignal<{
3276
+ id: string;
3277
+ text: string;
3278
+ }[]>;
3279
+ private efProvider;
3280
+ private efDisplay;
3281
+ private extractDisplayItem;
3282
+ private getDisplayText;
3283
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMultiSourceSelectorWidgetViewComponent, never>;
3284
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPMultiSourceSelectorWidgetViewComponent, "axp-multi-source-selector-widget-view", never, {}, {}, never, never, true, never>;
3285
+ }
3286
+
3287
+ declare class AXPMultiSourceSelectorWidgetColumnComponent extends AXPColumnWidgetComponent<any> {
3288
+ private readonly formatService;
3289
+ private readonly definitionService;
3290
+ protected providerName: string;
3291
+ protected columnName: string;
3292
+ protected maxVisible: number;
3293
+ protected displayFormat: _angular_core.Signal<string | undefined>;
3294
+ private definition;
3295
+ constructor();
3296
+ protected displayItems: _angular_core.Signal<{
3297
+ id: string;
3298
+ text: string;
3299
+ }[]>;
3300
+ protected allItems: _angular_core.Signal<{
3301
+ id: string;
3302
+ text: string;
3303
+ }[]>;
3304
+ protected visibleItems: _angular_core.Signal<{
3305
+ id: string;
3306
+ text: string;
3307
+ }[]>;
3308
+ protected hasMoreItems: _angular_core.Signal<boolean>;
3309
+ protected remainingItemsCount: _angular_core.Signal<number>;
3310
+ private loadDefinition;
3311
+ private extractDisplayItem;
3312
+ private getDisplayText;
3313
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMultiSourceSelectorWidgetColumnComponent, never>;
3314
+ 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>;
3315
+ }
3316
+
3317
+ declare class AXPSelectorStructureWidgetColumnComponent extends AXPValueWidgetComponent {
3318
+ protected identityField: _angular_core.Signal<string>;
3319
+ protected textField: _angular_core.Signal<string>;
3320
+ protected valueField: _angular_core.Signal<string>;
3321
+ protected previewIcon: _angular_core.Signal<string>;
3322
+ protected cellText: _angular_core.Signal<string>;
3323
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPSelectorStructureWidgetColumnComponent, never>;
3324
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPSelectorStructureWidgetColumnComponent, "axp-selector-structure-widget-column", never, {}, {}, never, never, true, never>;
3325
+ }
3326
+
3327
+ type AXPSelectorStructureSelectorMode = 'select' | 'lookup';
3328
+ type AXPSelectorStructureStructureMode = 'schema' | 'freeform';
3329
+ type AXPSelectorStructureIdentityDisplay = 'readonly' | 'hidden';
3330
+ /** UI layout: standard = global multi-select + collapse rows; compactPanel = per-row select (address-style). */
3331
+ type AXPSelectorStructurePresentationMode = 'standard' | 'compactPanel';
3332
+ interface AXPSelectorStructureFieldDef {
3333
+ name: string;
3334
+ title: string;
3335
+ widgetType: string;
3336
+ options?: Record<string, unknown>;
3337
+ }
3338
+ declare const AXPSelectorStructureWidget: AXPWidgetConfig;
3339
+ interface AXPSelectorStructureWidgetDesignerOptions {
3340
+ selectorMode?: AXPSelectorStructureSelectorMode;
3341
+ structureMode?: AXPSelectorStructureStructureMode;
3342
+ presentation?: AXPSelectorStructurePresentationMode;
3343
+ previewIcon?: string;
3344
+ placeholder?: string;
3345
+ contextSiblingPath?: string;
3346
+ identityField?: string;
3347
+ identityDisplay?: AXPSelectorStructureIdentityDisplay;
3348
+ valueField?: string;
3349
+ textField?: string;
3350
+ dataSource?: unknown;
3351
+ multiple?: boolean;
3352
+ lookup?: {
3353
+ entity?: string;
3354
+ look?: 'select' | 'lookup';
3355
+ filter?: unknown;
3356
+ hasClearButton?: boolean;
3357
+ };
3358
+ structureFields?: AXPSelectorStructureFieldDef[];
3359
+ freeformPath?: string;
3360
+ }
3361
+ interface AXPSelectorStructureWidgetViewOptions extends AXPSelectorStructureWidgetDesignerOptions {
3362
+ }
3363
+ interface AXPSelectorStructureWidgetEditOptions extends AXPSelectorStructureWidgetDesignerOptions {
3364
+ }
3365
+ interface AXPSelectorStructureWidgetColumnOptions {
3366
+ identityField?: string;
3367
+ textField?: string;
3368
+ previewIcon?: string;
3369
+ }
3370
+ interface AXPSelectorStructureWidgetPrintOptions {
3371
+ }
3372
+ interface AXPSelectorStructureWidgetOptions {
3373
+ designer: AXPSelectorStructureWidgetDesignerOptions;
3374
+ view: AXPSelectorStructureWidgetViewOptions;
3375
+ edit: AXPSelectorStructureWidgetEditOptions;
3376
+ print: AXPSelectorStructureWidgetPrintOptions;
3377
+ column: AXPSelectorStructureWidgetColumnOptions;
3378
+ }
3379
+
3380
+ declare class AXPSelectorStructureWidgetEditComponent extends AXPValueWidgetComponent {
3381
+ #private;
3382
+ private readonly entityRegistry;
3383
+ protected selectorMode: _angular_core.Signal<"select" | "lookup">;
3384
+ protected structureMode: _angular_core.Signal<"schema" | "freeform">;
3385
+ protected contextSiblingPath: _angular_core.Signal<string>;
3386
+ protected identityField: _angular_core.Signal<string>;
3387
+ protected identityDisplay: _angular_core.Signal<"readonly" | "hidden">;
3388
+ protected valueField: _angular_core.Signal<string>;
3389
+ protected textField: _angular_core.Signal<string>;
3390
+ protected multiple: _angular_core.Signal<boolean>;
3391
+ protected freeformPath: _angular_core.Signal<string>;
3392
+ protected lookupEntityKey: _angular_core.Signal<string | undefined>;
3393
+ protected lookupHasClearButton: _angular_core.Signal<boolean>;
3394
+ protected lookupCustomFilter: _angular_core.Signal<AXDataSourceFilterOption | undefined>;
3395
+ protected disabled: _angular_core.Signal<boolean>;
3396
+ protected presentationMode: _angular_core.Signal<"standard" | "compactPanel">;
3397
+ /** Compact panel (address-style) applies only to sibling select mode; lookup falls back to standard layout. */
3398
+ protected useCompactLayout: _angular_core.Signal<boolean>;
3399
+ protected previewIcon: _angular_core.Signal<string>;
3400
+ protected placeholder: _angular_core.Signal<string>;
3401
+ protected compactSelectPlaceholder: _angular_core.Signal<string>;
3402
+ protected addCompactItemLabel: _angular_core.Signal<string>;
3403
+ protected clearRowTitle: _angular_core.Signal<string>;
3404
+ protected removeRowTitle: _angular_core.Signal<string>;
3405
+ protected resolvedSiblingPath(): string;
3406
+ /**
3407
+ * Items shown in the selector: sibling context array when path is set, otherwise optional static `dataSource` array.
3408
+ */
3409
+ protected contextItems: _angular_core.Signal<unknown[]>;
3410
+ protected contextSelectDataSource: _angular_core.Signal<AXDataSource<unknown>>;
3411
+ protected selectedSourceItems: _angular_core.WritableSignal<unknown[]>;
3412
+ protected compactRowDataSources: _angular_core.Signal<AXDataSource<unknown>[]>;
3413
+ protected compactRowSelectedItems: _angular_core.Signal<unknown[][]>;
3414
+ protected lookupEntityDef: _angular_core.WritableSignal<AXPEntity | null>;
3415
+ protected defaultLookupSorts: _angular_core.Signal<AXDataSourceSortOption[]>;
3416
+ protected lookupDataSource: _angular_core.Signal<AXDataSource<unknown> | null>;
3417
+ protected lookupTextField: _angular_core.Signal<string>;
3418
+ protected lookupSelectedItems: _angular_core.WritableSignal<unknown[]>;
3419
+ protected rows: _angular_core.Signal<Record<string, unknown>[]>;
3420
+ protected structureFields: _angular_core.Signal<AXPSelectorStructureFieldDef[]>;
3421
+ protected structureFieldNodes: _angular_core.Signal<{
3422
+ name: string;
3423
+ title: string;
3424
+ node: AXPWidgetNode;
3425
+ }[]>;
3426
+ protected identityLabel: _angular_core.Signal<string>;
3427
+ protected identityNode: _angular_core.Signal<AXPWidgetNode | null>;
3428
+ protected freeformHeading: _angular_core.Signal<string>;
3429
+ protected keyPlaceholder: _angular_core.Signal<string>;
3430
+ protected valuePlaceholder: _angular_core.Signal<string>;
3431
+ protected addPairLabel: _angular_core.Signal<string>;
3432
+ protected removePairTitle: _angular_core.Signal<string>;
3433
+ protected disabledHint: _angular_core.Signal<string>;
3434
+ protected trackRow(row: Record<string, unknown>): unknown;
3435
+ protected rowCaption(row: Record<string, unknown>): string;
3436
+ protected isDraftRow(row: Record<string, unknown>): boolean;
3437
+ protected isRowSelectLocked(row: Record<string, unknown>): boolean;
3438
+ /**
3439
+ * Items available for row `index`: all source items minus keys already chosen on other committed rows;
3440
+ * always includes the current row's selected item so the select can display it.
3441
+ */
3442
+ protected exclusiveItemsForRow(index: number): unknown[];
3443
+ private newRowUid;
3444
+ protected handleCompactSelectChange(index: number, e: AXValueChangedEvent): void;
3445
+ protected applyCompactRowFromItem(index: number, rawItem: unknown | undefined): void;
3446
+ protected clearCompactRow(index: number): void;
3447
+ protected removeCompactRow(index: number): void;
3448
+ protected addCompactRow(): void;
3449
+ protected handleSelectValueChange(e: AXValueChangedEvent): void;
3450
+ protected handleLookupValueChange(e: AXValueChangedEvent): void;
3451
+ protected applyRowsFromSourceItems(items: unknown[]): void;
3452
+ protected handleSchemaContextChange(rowKey: unknown, e: AXPContextChangeEvent): void;
3453
+ protected freeformEntries(row: Record<string, unknown>): {
3454
+ key: string;
3455
+ value: string;
3456
+ index: number;
3457
+ }[];
3458
+ private serializeFreeformValue;
3459
+ protected onFreeformKeyInput(row: Record<string, unknown>, entry: {
3460
+ key: string;
3461
+ value: string;
3462
+ index: number;
3463
+ }, nextKey: string): void;
3464
+ protected patchFreeformValue(row: Record<string, unknown>, key: string, raw: string): void;
3465
+ protected removeFreeformKey(row: Record<string, unknown>, key: string): void;
3466
+ protected addFreeformPair(row: Record<string, unknown>): void;
3467
+ private renameFreeformKey;
3468
+ private patchFreeformMap;
3469
+ private tryParseFreeformString;
3470
+ private mergeListFilter;
3471
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPSelectorStructureWidgetEditComponent, never>;
3472
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPSelectorStructureWidgetEditComponent, "axp-selector-structure-widget-edit", never, {}, {}, never, never, true, never>;
3473
+ }
3474
+
3475
+ declare class AXPSelectorStructureWidgetViewComponent extends AXPValueWidgetComponent {
3476
+ protected identityField: _angular_core.Signal<string>;
3477
+ protected textField: _angular_core.Signal<string>;
3478
+ protected valueField: _angular_core.Signal<string>;
3479
+ protected previewIcon: _angular_core.Signal<string>;
3480
+ protected summaries: _angular_core.Signal<string[]>;
3481
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPSelectorStructureWidgetViewComponent, never>;
3482
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPSelectorStructureWidgetViewComponent, "axp-selector-structure-widget-view", never, {}, {}, never, never, true, never>;
3483
+ }
3484
+
2154
3485
  declare const AXPEntityCreateEvent: {
2155
3486
  (payload: {
2156
3487
  entity: string;
@@ -2272,14 +3603,23 @@ declare class AXPShowDetailViewAction extends AXPWorkflowAction {
2272
3603
  }
2273
3604
  declare const AXPShowDetailsViewWorkflow: AXPWorkflow;
2274
3605
 
3606
+ /** Optional list filters passed into `show-list-view` (e.g. from `Entity:List` with `conditions`). */
3607
+ interface AXPShowListViewCondition {
3608
+ name?: string;
3609
+ field?: string;
3610
+ operator?: {
3611
+ type: string;
3612
+ };
3613
+ value?: unknown;
3614
+ }
2275
3615
  declare class AXPShowListViewAction extends AXPWorkflowAction {
2276
3616
  private navigation;
2277
3617
  private sessionService;
2278
- execute(context?: any): Promise<void>;
3618
+ execute(context: AXPWorkflowContext): Promise<void>;
2279
3619
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPShowListViewAction, never>;
2280
3620
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPShowListViewAction>;
2281
3621
  }
2282
3622
  declare const AXPShowListViewWorkflow: AXPWorkflow;
2283
3623
 
2284
- export { AXMEntityCrudService, AXMEntityCrudServiceImpl, AXPCategoryTreeService, AXPCreateEntityCommand, AXPCreateEntityWorkflow, AXPDataSeederService, AXPDeleteEntityWorkflow, AXPEntityApplyUpdatesAction, AXPEntityCategoryTreeSelectorComponent, AXPEntityCategoryWidget, AXPEntityCategoryWidgetColumnComponent, AXPEntityCategoryWidgetEditComponent, AXPEntityCategoryWidgetViewComponent, AXPEntityCommandTriggerViewModel, AXPEntityCreateEvent, AXPEntityCreatePopupAction, AXPEntityCreateSubmittedAction, AXPEntityCreateViewElementViewModel, AXPEntityCreateViewModelFactory, AXPEntityCreateViewSectionViewModel, AXPEntityDataProvider, AXPEntityDataProviderImpl, AXPEntityDataSelectorService, AXPEntityDefinitionRegistryService, AXPEntityDeletedEvent, AXPEntityDetailListViewModel, AXPEntityDetailPopoverComponent, AXPEntityDetailPopoverService, AXPEntityDetailViewModelFactory, AXPEntityDetailViewModelResolver, AXPEntityEventDispatcherService, AXPEntityEventsKeys, AXPEntityFormBuilderService, AXPEntityListTableService, AXPEntityListViewColumnViewModel, AXPEntityListViewModelFactory, AXPEntityListViewModelResolver, AXPEntityListWidget, AXPEntityListWidgetViewComponent, AXPEntityMasterCreateViewModel, AXPEntityMasterListViewModel, AXPEntityMasterListViewQueryViewModel, AXPEntityMasterSingleElementViewModel, AXPEntityMasterSingleViewGroupViewModel, AXPEntityMasterSingleViewModel, AXPEntityMasterUpdateElementViewModel, AXPEntityMasterUpdateViewModel, AXPEntityMasterUpdateViewModelFactory, AXPEntityMiddleware, AXPEntityModifyConfirmedAction, AXPEntityModifyEvent, AXPEntityModifySectionPopupAction, AXPEntityModule, AXPEntityPerformDeleteAction, AXPEntityResolver, AXPEntityService, AXPEntityStorageService, AXPEntityUpdateViewSectionViewModel, AXPGetEntityDetailsQuery, AXPLookupFilterWidget, AXPLookupFilterWidgetEditComponent, AXPLookupWidget, AXPLookupWidgetColumnComponent, AXPLookupWidgetEditComponent, AXPLookupWidgetViewComponent, AXPMiddlewareAbortError, AXPMiddlewareEntityStorageService, AXPModifyEntitySectionWorkflow, AXPOpenEntityDetailsCommand, AXPQuickEntityModifyPopupAction, AXPQuickModifyEntityWorkflow, AXPShowDetailViewAction, AXPShowDetailsViewWorkflow, AXPShowListViewAction, AXPShowListViewWorkflow, AXPTruncatedBreadcrumbComponent, AXPUpdateEntityCommand, AXPViewEntityDetailsCommand, 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, DEFAULT_COLUMN_WIDTHS, DEFAULT_PROPERTY_ORDER, DEFAULT_SECTION_ORDER, EntityBuilder, EntityDataAccessor, actionExists, cloneLayoutArrays, columnWidthMiddlewareFactory, columnWidthMiddlewareProvider, createColumnWidthMiddlewareProvider, createLayoutOrderingMiddlewareProvider, createModifierContext, detectEntityChanges, ensureLayoutPropertyView, ensureLayoutSection, ensureListActions, entityDetailsCreateActions, entityDetailsCrudActions, entityDetailsEditAction, entityDetailsNewEditAction, entityDetailsReferenceCondition, entityDetailsReferenceCreateActions, entityDetailsSimpleCondition, entityMasterBulkDeleteAction, entityMasterCreateAction, entityMasterCrudActions, entityMasterDeleteAction, entityMasterRecordActions, entityMasterViewAction, entityOverrideDetailsViewAction, eventDispatchMiddleware, isAXPMiddlewareAbortError, layoutOrderingMiddlewareFactory, layoutOrderingMiddlewareProvider };
2285
- export type { AXPAuditEvent, AXPAuditInfo, AXPDataSeeder, AXPEntityActionPlugin, AXPEntityCategoryWidgetOptions, AXPEntityChangeSet, AXPEntityConfigs, AXPEntityCreateDto, AXPEntityDataSelectorOptions, AXPEntityDataSelectorResult, AXPEntityDefinitionLoader, AXPEntityDefinitionPreloader, AXPEntityDeleteOptions, AXPEntityDetailDto, AXPEntityDetailPopoverOptions, AXPEntityLayoutLike, AXPEntityLayoutPropertyLike, AXPEntityLayoutSectionLike, AXPEntityListItemDto, AXPEntityMasterListViewSortPropViewModel, AXPEntityModel, AXPEntityModifier, AXPEntityModifierContext, AXPEntityModifierProvider, AXPEntityOp, AXPEntityOutputDto, AXPEntityPreloadEntity, AXPEntityStorageContext, AXPEntityStorageMiddleware, AXPEntityUpdateDto, AXPGetEntityDetailsQueryInput, AXPGetEntityDetailsQueryResult, AXPLookupWidgetLookType, AXPLookupWidgetOptions, AXPOpenEntityDetailsCommandInput, AXPRecordOwnershipInfo, AXPRecordStateInfo, CategoryQueryEvent, CategoryQueryFunction, CategoryQueryResult, CategoryTreeConfig, CategoryTreeNodeData, ColumnWidthConfig, SectionOrderConfig };
3624
+ export { AXMEntityCrudService, AXMEntityCrudServiceImpl, AXPCategoryTreeService, AXPCreateEntityCommand, AXPCreateEntityWorkflow, AXPDataSeederService, AXPDeleteEntityWorkflow, AXPEntitiesListDataSourceDefinition, AXPEntityApplyUpdatesAction, AXPEntityCategoryTreeSelectorComponent, AXPEntityCategoryWidget, AXPEntityCategoryWidgetColumnComponent, AXPEntityCategoryWidgetEditComponent, AXPEntityCategoryWidgetViewComponent, AXPEntityCommandTriggerViewModel, AXPEntityCreateEvent, AXPEntityCreatePopupAction, AXPEntityCreateSubmittedAction, AXPEntityCreateViewElementViewModel, AXPEntityCreateViewModelFactory, AXPEntityCreateViewSectionViewModel, AXPEntityDataProvider, AXPEntityDataProviderImpl, AXPEntityDataSelectorService, AXPEntityDefinitionProviderWidget, AXPEntityDefinitionProviderWidgetEditComponent, AXPEntityDefinitionRegistryService, AXPEntityDeletedEvent, AXPEntityDetailListViewModel, AXPEntityDetailPopoverComponent, AXPEntityDetailPopoverService, AXPEntityDetailViewModelFactory, AXPEntityDetailViewModelResolver, AXPEntityEventDispatcherService, AXPEntityEventsKeys, AXPEntityFormBuilderService, AXPEntityListPersistenceModeDefault, AXPEntityListTableService, AXPEntityListToolbarService, AXPEntityListViewColumnViewModel, AXPEntityListViewModelFactory, AXPEntityListViewModelResolver, AXPEntityListWidget, AXPEntityListWidgetViewComponent, AXPEntityMasterCreateViewModel, AXPEntityMasterListViewModel, AXPEntityMasterListViewQueryViewModel, AXPEntityMasterSingleElementViewModel, AXPEntityMasterSingleViewGroupViewModel, AXPEntityMasterSingleViewModel, AXPEntityMasterUpdateElementViewModel, AXPEntityMasterUpdateViewModel, AXPEntityMasterUpdateViewModelFactory, AXPEntityMiddleware, AXPEntityModifyConfirmedAction, AXPEntityModifyEvent, AXPEntityModifySectionPopupAction, AXPEntityModule, AXPEntityPerformDeleteAction, AXPEntityPreloadFiltersContainerComponent, AXPEntityPreloadFiltersViewModel, AXPEntityPreloadFiltersViewModelResolver, AXPEntityResolver, AXPEntityService, AXPEntityStorageService, AXPEntityUpdateViewSectionViewModel, 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, DEFAULT_COLUMN_ORDER, DEFAULT_PAIR_SPAN_RULES, DEFAULT_PROPERTY_ORDER, DEFAULT_SECTION_ORDER, ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY, EntityBuilder, EntityDataAccessor, actionExists, applyDataSourcePagingWithoutLoad, axpCreateEntityAiToolInputDefaults, axpCreateEntityCommandDefinition, canPersistEntityListState, cloneLayoutArrays, collectEntityQuickSearchFieldPaths, collectNestedCreateHiddenProperties, collectNestedFieldPathsFromEntityColumns, collectQuickSearchPathsFromSingleEntityDefinition, columnOrderingMiddleware, columnOrderingMiddlewareProvider, columnWidthMiddleware, columnWidthMiddlewareProvider, computeEntityAggregates, createColumnOrderingMiddlewareProvider, createLayoutOrderingMiddlewareProvider, createModifierContext, 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, getDataSourcePageIndex, getEntityListRowId, getMasterInterfacePropertySortKey, isAXPMiddlewareAbortError, isCategoryEntity, isCategoryFilter, layoutOrderingMiddlewareFactory, layoutOrderingMiddlewareProvider, mergeForeignKeyFieldIntoCreateActions, normalizeEntityListPersistenceMode, normalizeListPaging, provideEntity, resolveEntityPluginDetailPageOrder, restoreEntityListExpandedRows, runEntityQuery, searchResultDescriptionMiddleware, searchResultDescriptionMiddlewareProvider, shouldLoadEntityListStateFromStorage, shouldResetEntityListStateOnRouteEntry };
3625
+ export type { AXPAuditEvent, AXPCollectEntityQuickSearchPathsResolver, AXPDataSeeder, AXPEntityActionPlugin, AXPEntityAggregateMeasure, AXPEntityAggregateOptions, AXPEntityAggregateReducerType, AXPEntityAggregateRequest, AXPEntityAggregateResult, AXPEntityCategoryWidgetOptions, AXPEntityChangeSet, AXPEntityConfigs, AXPEntityCreateDto, AXPEntityDataSelectorOptions, AXPEntityDataSelectorResult, AXPEntityDefinitionLoader, AXPEntityDefinitionPreloader, AXPEntityDeleteOptions, AXPEntityDetailDto, AXPEntityDetailPopoverOptions, AXPEntityLayoutLike, AXPEntityLayoutPropertyLike, AXPEntityLayoutSectionLike, AXPEntityListEntry, AXPEntityListExpandRowRef, AXPEntityListInput, AXPEntityListItemDto, AXPEntityListPagingState, AXPEntityListPersistenceMode, AXPEntityListToolbarConvertOptions, AXPEntityMasterListViewSortPropViewModel, AXPEntityModel, AXPEntityModifier, AXPEntityModifierContext, AXPEntityModifierProvider, AXPEntityOutputDto, AXPEntityPreloadEntity, AXPEntityQueryAllOptions, AXPEntityQueryAllResult, AXPEntityStorageContext, AXPEntityStorageMiddleware, AXPEntityUpdateDto, AXPGetEntityDetailsQueryInput, AXPGetEntityDetailsQueryResult, AXPLookupColumnResolveOptions, AXPLookupColumnResolveStrategy, AXPLookupWidgetLookType, AXPLookupWidgetOptions, AXPMultiSourceDefinition, AXPMultiSourceDefinitionProvider, AXPMultiSourceItem, AXPMultiSourceRef, AXPMultiSourceSearchResult, AXPMultiSourceSearchResultItem, AXPMultiSourceSelectorOpenConfig, AXPMultiSourceSelectorResult, AXPMultiSourceSelectorWidgetOptions, AXPMultiSourceValue, AXPOpenEntityDetailsCommandInput, AXPRecordAuditInfo, AXPRecordOwnershipInfo, AXPRecordStateInfo, AXPRelatedColumnMetadata, AXPSelectorStructureFieldDef, AXPSelectorStructureIdentityDisplay, AXPSelectorStructurePresentationMode, AXPSelectorStructureSelectorMode, AXPSelectorStructureStructureMode, AXPSelectorStructureWidgetColumnOptions, AXPSelectorStructureWidgetDesignerOptions, AXPSelectorStructureWidgetEditOptions, AXPSelectorStructureWidgetOptions, AXPSelectorStructureWidgetPrintOptions, AXPSelectorStructureWidgetViewOptions, AXPShowListViewCondition, CategoryQueryEvent, CategoryQueryFunction, CategoryQueryResult, CategoryTreeConfig, CategoryTreeNodeData, EntityDetailPluginPageSlot, PairSpanRule, ResolveEntityPluginDetailPageOrderOptions, RunEntityQueryAdapters, SectionOrderConfig, SkipEntityComponentPageRef };