@acorex-platform/framework-client 0.0.10 → 0.0.15

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 (119) hide show
  1. package/fesm2022/acorex-platform-framework-client-auth.mjs +285 -50
  2. package/fesm2022/acorex-platform-framework-client-auth.mjs.map +1 -1
  3. package/fesm2022/{acorex-platform-framework-client-common-common-settings.provider-CbzOYCnI.mjs → acorex-platform-framework-client-common-common-settings.provider-Euotv9l0.mjs} +55 -36
  4. package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-Euotv9l0.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-framework-client-common-settings-dialog.helper-DQNOCRL6.mjs +29 -0
  6. package/fesm2022/acorex-platform-framework-client-common-settings-dialog.helper-DQNOCRL6.mjs.map +1 -0
  7. package/fesm2022/acorex-platform-framework-client-common.mjs +1576 -408
  8. package/fesm2022/acorex-platform-framework-client-common.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-framework-client-core.mjs +561 -25
  10. package/fesm2022/acorex-platform-framework-client-core.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-framework-client-layout-builder.mjs +154 -42
  12. package/fesm2022/acorex-platform-framework-client-layout-builder.mjs.map +1 -1
  13. package/fesm2022/{acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CWVU3wXL.mjs → acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CjnQ9hAJ.mjs} +7 -7
  14. package/fesm2022/acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CjnQ9hAJ.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-fFen8w8M.mjs +77 -0
  16. package/fesm2022/acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-fFen8w8M.mjs.map +1 -0
  17. package/fesm2022/acorex-platform-framework-client-layout-components.mjs +2378 -1274
  18. package/fesm2022/acorex-platform-framework-client-layout-components.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs +92 -84
  20. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs.map +1 -1
  21. package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-CxBxxpmA.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-BzUM-JMC.mjs} +3 -3
  22. package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-CxBxxpmA.mjs.map → acorex-platform-framework-client-layout-entity-attachments-page.component-BzUM-JMC.mjs.map} +1 -1
  23. package/fesm2022/{acorex-platform-framework-client-layout-entity-file-list-popup.component-l0JAHKIH.mjs → acorex-platform-framework-client-layout-entity-file-list-popup.component-Ci_CTFtq.mjs} +6 -6
  24. package/fesm2022/acorex-platform-framework-client-layout-entity-file-list-popup.component-Ci_CTFtq.mjs.map +1 -0
  25. package/fesm2022/acorex-platform-framework-client-layout-entity-gallery-page.component-DmiB__JR.mjs +256 -0
  26. package/fesm2022/acorex-platform-framework-client-layout-entity-gallery-page.component-DmiB__JR.mjs.map +1 -0
  27. package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +17599 -17114
  28. package/fesm2022/acorex-platform-framework-client-layout-entity.mjs.map +1 -1
  29. package/fesm2022/acorex-platform-framework-client-layout-views.mjs +120 -70
  30. package/fesm2022/acorex-platform-framework-client-layout-views.mjs.map +1 -1
  31. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs +302 -263
  32. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs.map +1 -1
  33. package/fesm2022/{acorex-platform-framework-client-layout-widgets-button-widget-designer.component-CpkWwygb.mjs → acorex-platform-framework-client-layout-widgets-button-widget-designer.component-CIwpAXbL.mjs} +2 -2
  34. package/fesm2022/acorex-platform-framework-client-layout-widgets-button-widget-designer.component-CIwpAXbL.mjs.map +1 -0
  35. package/fesm2022/{acorex-platform-framework-client-layout-widgets-image-preview.popup-C_EPAvCU.mjs → acorex-platform-framework-client-layout-widgets-image-preview.popup-CazpERbX.mjs} +3 -3
  36. package/fesm2022/acorex-platform-framework-client-layout-widgets-image-preview.popup-CazpERbX.mjs.map +1 -0
  37. package/fesm2022/{acorex-platform-framework-client-layout-widgets-page-widget-designer.component-CmtTq2Mt.mjs → acorex-platform-framework-client-layout-widgets-page-widget-designer.component-DKkJi40s.mjs} +5 -5
  38. package/fesm2022/{acorex-platform-framework-client-layout-widgets-page-widget-designer.component-CmtTq2Mt.mjs.map → acorex-platform-framework-client-layout-widgets-page-widget-designer.component-DKkJi40s.mjs.map} +1 -1
  39. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DSx0E3NV.mjs → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DtYZfA79.mjs} +3 -3
  40. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DSx0E3NV.mjs.map → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DtYZfA79.mjs.map} +1 -1
  41. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-DdfcGV1C.mjs → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-nMUtxAyy.mjs} +10 -10
  42. package/fesm2022/acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-nMUtxAyy.mjs.map +1 -0
  43. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-CntopmDS.mjs → acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-DvUSZ4hJ.mjs} +5 -5
  44. package/fesm2022/acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-DvUSZ4hJ.mjs.map +1 -0
  45. package/fesm2022/acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-BihIfkZW.mjs +61 -0
  46. package/fesm2022/acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-BihIfkZW.mjs.map +1 -0
  47. package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +2218 -1504
  48. package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs.map +1 -1
  49. package/fesm2022/acorex-platform-framework-client-realtime.mjs +227 -0
  50. package/fesm2022/acorex-platform-framework-client-realtime.mjs.map +1 -0
  51. package/fesm2022/acorex-platform-framework-client-runtime.mjs +201 -13
  52. package/fesm2022/acorex-platform-framework-client-runtime.mjs.map +1 -1
  53. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-create-view.component-QIFX11dh.mjs +158 -0
  54. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-create-view.component-QIFX11dh.mjs.map +1 -0
  55. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-modify-view.component-BBdellyL.mjs +119 -0
  56. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-modify-view.component-BBdellyL.mjs.map +1 -0
  57. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-single-view.component-D1a7UI71.mjs → acorex-platform-framework-client-themes-default-entity-master-single-view.component-CIf1VWNW.mjs} +5 -6
  58. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-single-view.component-CIf1VWNW.mjs.map +1 -0
  59. package/fesm2022/acorex-platform-framework-client-themes-default-error-401.component-C_czT_JC.mjs +48 -0
  60. package/fesm2022/acorex-platform-framework-client-themes-default-error-401.component-C_czT_JC.mjs.map +1 -0
  61. package/fesm2022/acorex-platform-framework-client-themes-default-error-404.component-C2Wu0YtF.mjs +42 -0
  62. package/fesm2022/acorex-platform-framework-client-themes-default-error-404.component-C2Wu0YtF.mjs.map +1 -0
  63. package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-DRz-kVsT.mjs +19 -0
  64. package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-DRz-kVsT.mjs.map +1 -0
  65. package/fesm2022/acorex-platform-framework-client-themes-default.mjs +123 -96
  66. package/fesm2022/acorex-platform-framework-client-themes-default.mjs.map +1 -1
  67. package/fesm2022/{acorex-platform-framework-client-themes-shared-icon-chooser-column.component-CXSGiTCK.mjs → acorex-platform-framework-client-themes-shared-icon-chooser-column.component-Ci_oH7NE.mjs} +3 -3
  68. package/fesm2022/acorex-platform-framework-client-themes-shared-icon-chooser-column.component-Ci_oH7NE.mjs.map +1 -0
  69. package/fesm2022/{acorex-platform-framework-client-themes-shared-icon-chooser-view.component-BY5clQ1J.mjs → acorex-platform-framework-client-themes-shared-icon-chooser-view.component-Lb1G2Xz7.mjs} +3 -3
  70. package/fesm2022/acorex-platform-framework-client-themes-shared-icon-chooser-view.component-Lb1G2Xz7.mjs.map +1 -0
  71. package/fesm2022/{acorex-platform-framework-client-themes-shared-settings.provider-DEL2YOTP.mjs → acorex-platform-framework-client-themes-shared-settings.provider-D2XPkc71.mjs} +11 -2
  72. package/fesm2022/acorex-platform-framework-client-themes-shared-settings.provider-D2XPkc71.mjs.map +1 -0
  73. package/fesm2022/{acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-BXl8u4Yp.mjs → acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-D4ubvFYf.mjs} +7 -7
  74. package/fesm2022/acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-D4ubvFYf.mjs.map +1 -0
  75. package/fesm2022/{acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-i2sOOkVj.mjs → acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-Br8j_BF_.mjs} +7 -7
  76. package/fesm2022/acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-Br8j_BF_.mjs.map +1 -0
  77. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs +124 -112
  78. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs.map +1 -1
  79. package/fesm2022/acorex-platform-framework-client-workflow.mjs +26 -483
  80. package/fesm2022/acorex-platform-framework-client-workflow.mjs.map +1 -1
  81. package/package.json +14 -9
  82. package/types/acorex-platform-framework-client-auth.d.ts +76 -5
  83. package/types/acorex-platform-framework-client-common.d.ts +499 -129
  84. package/types/acorex-platform-framework-client-core.d.ts +291 -10
  85. package/types/acorex-platform-framework-client-layout-builder.d.ts +81 -31
  86. package/types/acorex-platform-framework-client-layout-components.d.ts +295 -41
  87. package/types/acorex-platform-framework-client-layout-entity.d.ts +1895 -1743
  88. package/types/acorex-platform-framework-client-layout-views.d.ts +8 -18
  89. package/types/acorex-platform-framework-client-layout-widget-core.d.ts +20 -35
  90. package/types/acorex-platform-framework-client-layout-widgets.d.ts +167 -33
  91. package/types/acorex-platform-framework-client-realtime.d.ts +100 -0
  92. package/types/acorex-platform-framework-client-runtime.d.ts +60 -2
  93. package/types/acorex-platform-framework-client-themes-default.d.ts +4 -48
  94. package/types/acorex-platform-framework-client-workflow.d.ts +16 -127
  95. package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-CbzOYCnI.mjs.map +0 -1
  96. package/fesm2022/acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CWVU3wXL.mjs.map +0 -1
  97. package/fesm2022/acorex-platform-framework-client-layout-entity-file-list-popup.component-l0JAHKIH.mjs.map +0 -1
  98. package/fesm2022/acorex-platform-framework-client-layout-widgets-button-widget-designer.component-CpkWwygb.mjs.map +0 -1
  99. package/fesm2022/acorex-platform-framework-client-layout-widgets-image-preview.popup-C_EPAvCU.mjs.map +0 -1
  100. package/fesm2022/acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-DdfcGV1C.mjs.map +0 -1
  101. package/fesm2022/acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-CntopmDS.mjs.map +0 -1
  102. package/fesm2022/acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-B5kSWxGk.mjs +0 -34
  103. package/fesm2022/acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-B5kSWxGk.mjs.map +0 -1
  104. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-create-view.component-DnTHwsDJ.mjs +0 -160
  105. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-create-view.component-DnTHwsDJ.mjs.map +0 -1
  106. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-modify-view.component-BpR9g6QS.mjs +0 -121
  107. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-modify-view.component-BpR9g6QS.mjs.map +0 -1
  108. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-single-view.component-D1a7UI71.mjs.map +0 -1
  109. package/fesm2022/acorex-platform-framework-client-themes-default-error-401.component-D--_MIar.mjs +0 -48
  110. package/fesm2022/acorex-platform-framework-client-themes-default-error-401.component-D--_MIar.mjs.map +0 -1
  111. package/fesm2022/acorex-platform-framework-client-themes-default-error-404.component-Byyqk8pH.mjs +0 -42
  112. package/fesm2022/acorex-platform-framework-client-themes-default-error-404.component-Byyqk8pH.mjs.map +0 -1
  113. package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-DR6G8gPC.mjs +0 -19
  114. package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-DR6G8gPC.mjs.map +0 -1
  115. package/fesm2022/acorex-platform-framework-client-themes-shared-icon-chooser-column.component-CXSGiTCK.mjs.map +0 -1
  116. package/fesm2022/acorex-platform-framework-client-themes-shared-icon-chooser-view.component-BY5clQ1J.mjs.map +0 -1
  117. package/fesm2022/acorex-platform-framework-client-themes-shared-settings.provider-DEL2YOTP.mjs.map +0 -1
  118. package/fesm2022/acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-BXl8u4Yp.mjs.map +0 -1
  119. package/fesm2022/acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-i2sOOkVj.mjs.map +0 -1
@@ -4,24 +4,22 @@ export * from '@acorex-platform/framework-shared/entity';
4
4
  export { collectNestedCreateHiddenProperties, entityDetailsCreateActions, entityDetailsCreateActionsDeferredParent, entityDetailsCrudActions, entityDetailsEditAction, entityDetailsNewEditAction, entityDetailsReferenceCondition, entityDetailsReferenceCreateActions, entityDetailsSimpleCondition, entityMasterBulkDeleteAction, entityMasterCreateAction, entityMasterCrudActions, entityMasterDeleteAction, entityMasterEditAction, entityMasterRecordActions, entityMasterViewAction, entityOverrideDetailsViewAction, mergeForeignKeyFieldIntoCreateActions } from '@acorex-platform/framework-shared/entity';
5
5
  import { AXPCommand, AXPQuery } from '@acorex-platform/framework-shared/runtime';
6
6
  import * as _acorex_platform_framework_shared_core from '@acorex-platform/framework-shared/core';
7
- import { AXPExecuteCommandResult, AXPMetaData, AXPWidgetNode, AXPGridLayoutOptions, AXPExpression, AXPMultiLanguageString, AXPBreadcrumbItem, AXPFilterQuery, AXPExecuteCommand, AXPFilterDefinition, AXPQueryRequest, AXPPagedListResult, AXPCategoryEntity, AXPEntityOp, AXPMiddlewareErrorResponse, AXPColumnQuery, AXPSortDefinition, AXPActionMenuItem, AXPFileListItem, AXPContextData, AXPContextChangeEvent } from '@acorex-platform/framework-shared/core';
7
+ import { AXPExecuteCommandResult, AXPFileListItem, AXPMultiLanguageString, AXPMetaData, AXPWidgetNode, AXPGridLayoutOptions, AXPExpression, AXPBreadcrumbItem, AXPFilterQuery, AXPExecuteCommand, AXPFilterDefinition, AXPQueryRequest, AXPPagedListResult, AXPCategoryEntity, AXPEntityOp, AXPMiddlewareErrorResponse, AXPColumnQuery, AXPSortDefinition, AXPActionMenuItem, AXPContextData, AXPContextChangeEvent } from '@acorex-platform/framework-shared/core';
8
8
  import * as _angular_core from '@angular/core';
9
- import { ElementRef, InjectionToken, Injector, Type, EnvironmentProviders, OnInit, ChangeDetectorRef, OnDestroy } from '@angular/core';
9
+ import { OnInit, OnDestroy, ElementRef, InjectionToken, Injector, Type, EnvironmentProviders, ChangeDetectorRef } from '@angular/core';
10
10
  import * as node_modules__acorex_platform_framework_shared_core_src_lib from 'node_modules/@acorex-platform/framework-shared/core/src/lib';
11
- import { AXPPreloadFiltersApplyEvent, AXPColumnItemListItem, AXPDataSelectorRowActionsHandler, AXPCategoryTreeDataSource, AXPDataSelectorAllowCreate } from '@acorex-platform/framework-client/layout/components';
11
+ import { AXPWidgetConfig, AXPWidgetColumnNode } from '@acorex-platform/framework-shared/widget-core';
12
+ import { AXPFileChooserContext, AXPPreloadFiltersApplyEvent, AXPColumnItemListItem, AXPDataSelectorRowActionsHandler, AXPCategoryTreeDataSource, AXPDataSelectorAllowCreate, AXPDataSelectorFooterPrefixAction } from '@acorex-platform/framework-client/layout/components';
12
13
  import { AXPPageLayoutBaseComponent } from '@acorex-platform/framework-client/layout/views';
13
- import { AXPDataSourceDefinitionProvider, AXPDataSourceDefinition, AXHighlightService, AXPDeviceService, AXPBroadcastEventService, AXPExpressionEvaluatorService, AXPContextEvalFactory, AXPContextStore } from '@acorex-platform/framework-client/core';
14
+ import { AXPDataSourceDefinitionProvider, AXPDataSourceDefinition, AXPHookService, AXHighlightService, AXPDeviceService, AXPBroadcastEventService, AXPExpressionEvaluatorService, AXPContextEvalFactory, AXPContextStore } from '@acorex-platform/framework-client/core';
14
15
  export { AXPEntityDefinitionCrudService, AXP_ENTITY_DEFINITION_CRUD_SERVICE } from '@acorex-platform/framework-client/domain';
15
- import { AXStyleColorType, AXDataSource, AXDataSourceFilterOption, AXDataSourceSortOption, AXValueChangedEvent, AXClickEvent, AXFocusEvent, AXHtmlEvent } from '@acorex/cdk/common';
16
- import { AXPWidgetColumnNode, AXPWidgetConfig } from '@acorex-platform/framework-shared/widget-core';
16
+ import { AXClickEvent, AXStyleColorType, AXDataSource, AXDataSourceFilterOption, AXDataSourceSortOption, AXValueChangedEvent, AXFocusEvent, AXHtmlEvent } from '@acorex/cdk/common';
17
17
  import * as i4 from '@acorex-platform/framework-client/layout/widget-core';
18
- import { AXPWidgetCoreService, AXPColumnWidgetComponent, AXPValueWidgetComponent, AXPWidgetRendererDirective, AXPWidgetCoreElementAPI } from '@acorex-platform/framework-client/layout/widget-core';
18
+ import { AXPColumnWidgetComponent, AXPValueWidgetComponent, AXPWidgetCoreElementAPI, AXPWidgetCoreService, AXPWidgetRendererDirective } from '@acorex-platform/framework-client/layout/widget-core';
19
19
  import * as i1 from '@angular/router';
20
- import { ResolveFn, RedirectCommand } from '@angular/router';
20
+ import { ParamMap, ResolveFn, RedirectCommand } from '@angular/router';
21
21
  import * as rxjs from 'rxjs';
22
22
  import { Subject } from 'rxjs';
23
- import * as i3 from '@acorex-platform/framework-client/workflow';
24
- import { AXPWorkflowService, AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext } from '@acorex-platform/framework-client/workflow';
25
23
  import * as i5 from '@acorex-platform/framework-client/layout/builder';
26
24
  import { IActionBuilder, AXPDialogRef, IFormFieldBuilder } from '@acorex-platform/framework-client/layout/builder';
27
25
  import { AXPSessionService } from '@acorex-platform/framework-client/auth';
@@ -32,10 +30,13 @@ import { AXBasePageComponent } from '@acorex/components/page';
32
30
  import { AXFormatService } from '@acorex/core/format';
33
31
  import { AXTagBoxComponent } from '@acorex/components/tag-box';
34
32
  import { AXPProviderSelectWidgetEditBase, AXPDataListWidgetComponentOptions } from '@acorex-platform/framework-client/layout/widgets';
35
- import { AXCFileUploaderCapabilities, AXPFileStorageService, AXCFileUploaderAction } from '@acorex-platform/framework-client/common';
33
+ import * as _acorex_platform_framework_client_workflow from '@acorex-platform/framework-client/workflow';
34
+ import { AXPWorkflowEventService } from '@acorex-platform/framework-client/workflow';
35
+ import { AXCFileUploaderCapabilities, AXPFileStorageService } from '@acorex-platform/framework-client/common';
36
+ export { commandMessageTextForError } from '@acorex-platform/framework-client/common';
36
37
  import * as _acorex_platform_framework_client_layout_entity from '@acorex-platform/framework-client/layout/entity';
37
38
  import { AXPopoverComponent } from '@acorex/components/popover';
38
- import { AXFileService } from '@acorex/core/file';
39
+ import { AXUploaderFileChangeEvent } from '@acorex/cdk/uploader';
39
40
  import * as _acorex_core_translation from '@acorex/core/translation';
40
41
  import { AXTranslationService } from '@acorex/core/translation';
41
42
 
@@ -120,740 +121,1391 @@ declare const axpCreateEntityCommandDefinition: {
120
121
  categories: node_modules__acorex_platform_framework_shared_core_src_lib.AXPDefinitionCategory[];
121
122
  };
122
123
 
123
- declare class AXPUpdateEntityCommand implements AXPCommand<any, any> {
124
- private readonly entityForm;
125
- private readonly settingsService;
126
- private readonly entityService;
127
- private readonly toastService;
128
- private readonly translationService;
129
- private readonly formatService;
130
- private readonly expressionEvaluator;
131
- private readonly contextEvalFactory;
132
- private readonly eventService;
133
- execute(input: any): Promise<AXPExecuteCommandResult<any>>;
134
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPUpdateEntityCommand, never>;
135
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPUpdateEntityCommand>;
124
+ interface AXPEntityDeleteOptions {
125
+ source: string;
126
+ ids: string[];
127
+ }
128
+ interface AXPEntityDeletePerformInput {
129
+ entity?: string;
130
+ data?: unknown;
131
+ entities?: AXPEntityDeleteOptions[];
132
+ meta?: unknown;
136
133
  }
137
134
 
138
- declare class AXPViewEntityDetailsCommand implements AXPCommand<any, any> {
139
- private readonly entityForm;
140
- private readonly entityService;
135
+ interface AXPDeleteEntityCommandInput {
136
+ entity?: string;
137
+ data?: unknown;
138
+ entities?: AXPEntityDeletePerformInput['entities'];
139
+ meta?: unknown;
140
+ options?: Record<string, unknown>;
141
+ __context__?: {
142
+ entity?: string;
143
+ data?: unknown;
144
+ entities?: AXPEntityDeletePerformInput['entities'];
145
+ meta?: unknown;
146
+ options?: Record<string, unknown>;
147
+ };
148
+ __metadata__?: unknown;
149
+ }
150
+ /**
151
+ * Confirms then deletes entity record(s). Replaces the former `delete-entity` workflow.
152
+ */
153
+ declare class AXPDeleteEntityCommand implements AXPCommand<AXPDeleteEntityCommandInput, AXPExecuteCommandResult> {
154
+ private readonly dialogService;
141
155
  private readonly translationService;
142
- private readonly expressionEvaluator;
143
- private readonly contextEvalFactory;
144
- execute(input: any): Promise<AXPExecuteCommandResult<any>>;
145
- private resolveDialogTitle;
146
- private loadRecordContext;
147
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPViewEntityDetailsCommand, never>;
148
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPViewEntityDetailsCommand>;
156
+ private readonly deletePerform;
157
+ execute(input?: AXPDeleteEntityCommandInput): Promise<AXPExecuteCommandResult>;
158
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDeleteEntityCommand, never>;
159
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPDeleteEntityCommand>;
149
160
  }
150
161
 
151
- interface AXPOpenEntityDetailsCommandInput {
152
- entity: string;
153
- data: {
154
- id: string;
162
+ /**
163
+ * Build-time only. Do not import from Angular modules.
164
+ */
165
+ declare const axpDeleteEntityCommandDefinition: {
166
+ key: string;
167
+ title: string;
168
+ description: string;
169
+ executionMode: "frontend";
170
+ inputs: {
171
+ name: string;
172
+ title: string;
173
+ description: string;
174
+ interface: {
175
+ name: string;
176
+ };
177
+ }[];
178
+ outcomes: {
179
+ mode: "static";
180
+ values: string[];
181
+ };
182
+ ai: {
183
+ tags: string[];
184
+ };
185
+ categories: node_modules__acorex_platform_framework_shared_core_src_lib.AXPDefinitionCategory[];
186
+ };
187
+
188
+ interface AXPOpenEntityListCondition {
189
+ name?: string;
190
+ field?: string;
191
+ operator?: {
192
+ type: string;
193
+ };
194
+ value?: unknown;
195
+ }
196
+ interface AXPOpenEntityListCommandInput {
197
+ entity?: string;
198
+ conditions?: AXPOpenEntityListCondition[];
199
+ __context__?: {
200
+ entity?: string;
201
+ conditions?: AXPOpenEntityListCondition[];
202
+ options?: {
203
+ conditions?: AXPOpenEntityListCondition[];
204
+ };
155
205
  };
156
206
  }
157
207
  /**
158
- * Generic command to open entity details view
159
- * Can be used by any entity to navigate to its detail page
208
+ * Navigates to an entity master list, optionally with filter query params.
209
+ * Replaces the former `show-list-view` workflow.
160
210
  */
161
- declare class AXPOpenEntityDetailsCommand implements AXPCommand<AXPOpenEntityDetailsCommandInput, AXPExecuteCommandResult> {
211
+ declare class AXPOpenEntityListCommand implements AXPCommand<AXPOpenEntityListCommandInput, AXPExecuteCommandResult> {
162
212
  private readonly router;
163
213
  private readonly sessionService;
164
- /**
165
- * Execute the command to navigate to entity details
166
- * @param input - Command input containing entity and data information
167
- */
168
- execute(input: AXPOpenEntityDetailsCommandInput): Promise<AXPExecuteCommandResult>;
169
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPOpenEntityDetailsCommand, never>;
170
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPOpenEntityDetailsCommand>;
214
+ execute(input?: AXPOpenEntityListCommandInput): Promise<AXPExecuteCommandResult>;
215
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPOpenEntityListCommand, never>;
216
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPOpenEntityListCommand>;
171
217
  }
172
218
 
173
- declare class AXPEntityDetailPopoverComponent {
174
- private readonly commandService;
175
- private readonly queryService;
176
- private readonly formatService;
177
- private readonly translation;
178
- private readonly expressionEvaluator;
179
- private readonly contextEvalFactory;
180
- private readonly changeDetectorRef;
181
- entity: _angular_core.InputSignal<string>;
182
- entityId: _angular_core.InputSignal<string | number>;
183
- textField: _angular_core.InputSignal<string>;
184
- valueField: _angular_core.InputSignal<string>;
185
- displayTitle: _angular_core.InputSignal<string>;
186
- item: _angular_core.InputSignal<AXPMetaData | undefined>;
187
- breadcrumb: _angular_core.InputSignal<string | null>;
188
- requestClose: _angular_core.InputSignal<(() => void) | undefined>;
189
- protected entityDetails: _angular_core.WritableSignal<any>;
190
- protected isLoadingDetails: _angular_core.WritableSignal<boolean>;
191
- private headerTitleVersion;
192
- /** Placeholder rows for the loading skeleton (matches typical property count). */
193
- protected readonly loadingSkeletonRows: readonly [1, 2, 3, 4, 5];
194
- protected readonly headerTitle: _angular_core.WritableSignal<string>;
195
- constructor();
219
+ /**
220
+ * Build-time only. Do not import from Angular modules.
221
+ */
222
+ declare const axpOpenEntityListCommandDefinition: {
223
+ key: string;
224
+ title: string;
225
+ description: string;
226
+ executionMode: "frontend";
227
+ inputs: {
228
+ name: string;
229
+ title: string;
230
+ description: string;
231
+ interface: {
232
+ name: string;
233
+ };
234
+ }[];
235
+ outcomes: {
236
+ mode: "static";
237
+ values: string[];
238
+ };
239
+ ai: {
240
+ tags: string[];
241
+ };
242
+ categories: node_modules__acorex_platform_framework_shared_core_src_lib.AXPDefinitionCategory[];
243
+ };
244
+
245
+ declare class AXPEditFileUploaderCommand implements AXPCommand<{
246
+ file: AXPFileListItem;
247
+ plugins?: {
248
+ name: string;
249
+ options?: unknown;
250
+ }[];
251
+ excludePlugins?: string[];
252
+ enableTitleDescription?: boolean;
253
+ isNewFile?: boolean;
254
+ }, AXPFileListItem> {
255
+ private readonly layoutBuilder;
256
+ private readonly translationService;
257
+ private readonly hooks;
258
+ execute(input: {
259
+ file: AXPFileListItem;
260
+ plugins?: {
261
+ name: string;
262
+ options?: unknown;
263
+ }[];
264
+ excludePlugins?: string[];
265
+ enableTitleDescription?: boolean;
266
+ isNewFile?: boolean;
267
+ }): Promise<AXPExecuteCommandResult<AXPFileListItem>>;
268
+ private showEditDialog;
196
269
  /**
197
- * Stable list of property widgets for the template. Must be a signal (computed), not a method:
198
- * calling a method from the template rebuilds nodes every CD cycle and can make the widget renderer loop.
270
+ * Build form fields from hook items (old format parameters)
199
271
  */
200
- protected readonly entityPropertiesWithWidgets: _angular_core.Signal<{
272
+ private buildFormFields;
273
+ /**
274
+ * Build groups/containers from hook groups (old format groups)
275
+ */
276
+ private buildGroups;
277
+ /**
278
+ * Apply widget configuration to field based on widget type
279
+ */
280
+ private applyWidget;
281
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEditFileUploaderCommand, never>;
282
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEditFileUploaderCommand>;
283
+ }
284
+
285
+ /** Visual layout for `axp-file-list`. */
286
+ type AXPFileListLook = 'rows' | 'links';
287
+
288
+ declare class AXPFileListComponent implements OnInit, OnDestroy {
289
+ private static readonly DOWNLOAD_DEBOUNCE_MS;
290
+ private fileTypeService;
291
+ private fileStorageService;
292
+ private commandExecutor;
293
+ private hooks;
294
+ isLoading: _angular_core.WritableSignal<boolean>;
295
+ private fileTypes;
296
+ onRemove: _angular_core.OutputEmitterRef<AXPFileListItem>;
297
+ onRevert: _angular_core.OutputEmitterRef<AXPFileListItem>;
298
+ onRename: _angular_core.OutputEmitterRef<AXPFileListItem>;
299
+ readonly: _angular_core.InputSignal<boolean>;
300
+ fileEditable: _angular_core.InputSignal<boolean>;
301
+ /** When true, edit dialog shows name, title and description fields. Default false. */
302
+ enableTitleDescription: _angular_core.InputSignal<boolean>;
303
+ multiple: _angular_core.InputSignal<boolean>;
304
+ /** `rows`: file-type icons and action buttons; `links`: compact paperclip links (download on click). */
305
+ look: _angular_core.InputSignal<AXPFileListLook>;
306
+ /** i18n key for links look label (template adds trailing colon). */
307
+ titleKey: _angular_core.InputSignal<string>;
308
+ /** When false, links look omits the label (e.g. popover body). */
309
+ showLabel: _angular_core.InputSignal<boolean>;
310
+ /** `inline`: label + divider; `menu`: compact list for popovers/panels. */
311
+ linksLayout: _angular_core.InputSignal<"inline" | "menu">;
312
+ files: _angular_core.InputSignal<AXPFileListItem[]>;
313
+ plugins: _angular_core.InputSignal<{
201
314
  name: string;
202
- title: string;
203
- node: AXPWidgetNode;
204
- }[]>;
205
- /** Loads entity details after the overlay panel is created. */
206
- loadDetails(): Promise<void>;
207
- protected navigateToDetails(): Promise<void>;
208
- private resolveHeaderTitle;
209
- private resolveLookupDisplayLabelAsync;
315
+ options?: unknown;
316
+ }[] | undefined>;
317
+ excludePlugins: _angular_core.InputSignal<string[] | undefined>;
318
+ capabilities: _angular_core.InputSignal<AXCFileUploaderCapabilities | undefined>;
210
319
  /**
211
- * Returns true if a value is meaningful for display (non-empty/non-null).
320
+ * All files should be displayed, even those with `deleted` status.
321
+ * The template will handle the visual differences based on the status.
212
322
  */
213
- private hasMeaningfulValue;
323
+ displayFiles: _angular_core.Signal<AXPFileListItem[]>;
324
+ private fileIdToActions;
325
+ private globalActions;
326
+ /** Suppress duplicate downloads from double-click (two click events). */
327
+ private readonly recentDownloadAtByKey;
328
+ private filesChangeEffect;
329
+ private getDefaultActions;
330
+ /** True when the widget is readonly or this file row is locked (`readOnly`). */
331
+ isItemInteractionLocked(file: AXPFileListItem): boolean;
332
+ actionsFor(file: AXPFileListItem, index: number): any[];
333
+ private loadActionsFor;
334
+ ngOnInit(): Promise<void>;
335
+ private loadGlobalActions;
336
+ private shouldSkipDuplicateDownload;
337
+ private downloadDedupeKey;
338
+ /** Ensures `source` is set for links look and legacy rows that only carry storage id on `id`. */
339
+ private resolveFileForDownload;
340
+ protected getFileInfo(fileName: string): {
341
+ icon: string;
342
+ type: string;
343
+ };
214
344
  /**
215
- * Calculates an importance score for a property based on its widget type,
216
- * whether it currently has a meaningful value, and metadata like title.
345
+ * Double-click on a file row (rows look) or link row triggers download.
217
346
  */
218
- private getPropertyImportanceScore;
347
+ protected handleFileRowActivate(event: Event, file: AXPFileListItem): void;
348
+ handleFileDownload(event: AXClickEvent | Event, file: AXPFileListItem): Promise<void>;
349
+ handleFileRemove(event: AXClickEvent, file: AXPFileListItem): Promise<void>;
219
350
  /**
220
- * Calculates a name-based importance score to prioritize common key fields
221
- * like title, description, status, and important dates.
222
- * Name priority MUST come before widget-type priority.
351
+ * Handle revert action – emit the file so parent components can update the status.
223
352
  */
224
- private getNameImportanceScore;
225
- private buildEntityPropertiesWithWidgets;
353
+ handleFileRevert(event: AXClickEvent, file: AXPFileListItem): void;
226
354
  /**
227
- * Resolves the data path for a property. For lookups with expose, returns the expanded path
228
- * when data has it (e.g. personTitle). Otherwise returns property name (e.g. personTitleId).
355
+ * Handle file edit action – open rename popup
229
356
  */
230
- private resolveDataPath;
231
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityDetailPopoverComponent, never>;
232
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityDetailPopoverComponent, "axp-entity-detail-popover", never, { "entity": { "alias": "entity"; "required": true; "isSignal": true; }; "entityId": { "alias": "entityId"; "required": true; "isSignal": true; }; "textField": { "alias": "textField"; "required": false; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "displayTitle": { "alias": "displayTitle"; "required": false; "isSignal": true; }; "item": { "alias": "item"; "required": false; "isSignal": true; }; "breadcrumb": { "alias": "breadcrumb"; "required": false; "isSignal": true; }; "requestClose": { "alias": "requestClose"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
233
- }
234
-
235
- interface AXPEntityDetailPopoverOptions {
236
- entity: string;
237
- id: string | number;
238
- item: AXPMetaData;
239
- textField?: string;
240
- valueField?: string;
241
- displayTitle?: string;
242
- breadcrumb?: string;
243
- }
244
- declare class AXPEntityDetailPopoverService {
245
- private readonly overlayService;
246
- private readonly platform;
247
- private readonly localeService;
248
- private readonly document;
249
- private readonly router;
250
- private overlayRef;
251
- private componentRef;
252
- private anchorElement;
253
- private outsideClickHandler;
254
- private keydownHandler;
255
- private routerSubscription;
256
- /**
257
- * Show entity detail popover anchored to the target element.
258
- */
259
- show(target: ElementRef | HTMLElement, options: AXPEntityDetailPopoverOptions): Promise<void>;
260
- /** Hide the active popover */
261
- hide(): void;
262
- /** Whether a popover is currently active */
263
- get isActive(): boolean;
264
- private resolveAnchorElement;
265
- /** Mirror popover placement for RTL so the panel aligns with the anchor's inline-start edge. */
266
- private resolveOverlayPlacement;
267
- private resolveOverlayOffsetX;
268
- private isRtlContext;
269
- private bindDismissHandlers;
270
- /** Ignore clicks on the anchor, overlay panel, or nested dropdown menus. */
271
- private isInsideInteractiveSurface;
272
- private removeDismissHandlers;
273
- private handleOverlayDisposed;
274
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityDetailPopoverService, never>;
275
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityDetailPopoverService>;
276
- }
277
-
278
- declare class AXPEntityPreloadFiltersContainerComponent extends AXPPageLayoutBaseComponent {
279
- private readonly route;
280
- private readonly entityService;
281
- private readonly filterOperatorMiddleware;
282
- protected readonly noMatchText: _angular_core.WritableSignal<string | null>;
283
- private vm;
284
- preloadFiltersDef: _angular_core.Signal<_acorex_platform_framework_shared_core.AXPFilterDefinition[]>;
285
- hasNoRequiredFilters: _angular_core.Signal<boolean>;
286
- protected getPageTitle(): string;
287
- protected getPageDescription(): string | null;
288
- onApply(event: AXPPreloadFiltersApplyEvent): Promise<void>;
289
- onShowAll(): Promise<void>;
290
- private buildPreloadFilterQueries;
291
- private buildListQueryFilter;
292
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityPreloadFiltersContainerComponent, never>;
293
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityPreloadFiltersContainerComponent, "axp-entity-preload-filters-container", never, {}, {}, never, never, true, never>;
357
+ handleFileEdit(event: any, file: AXPFileListItem): Promise<void>;
358
+ ngOnDestroy(): void;
359
+ runAction(action: any): Promise<void>;
360
+ protected getActionColor(action: any): string;
361
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPFileListComponent, never>;
362
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPFileListComponent, "axp-file-list", never, { "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "fileEditable": { "alias": "fileEditable"; "required": false; "isSignal": true; }; "enableTitleDescription": { "alias": "enableTitleDescription"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "look": { "alias": "look"; "required": false; "isSignal": true; }; "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; "linksLayout": { "alias": "linksLayout"; "required": false; "isSignal": true; }; "files": { "alias": "files"; "required": false; "isSignal": true; }; "plugins": { "alias": "plugins"; "required": false; "isSignal": true; }; "excludePlugins": { "alias": "excludePlugins"; "required": false; "isSignal": true; }; "capabilities": { "alias": "capabilities"; "required": false; "isSignal": true; }; }, { "onRemove": "onRemove"; "onRevert": "onRevert"; "onRename": "onRename"; }, never, never, true, never>;
294
363
  }
295
364
 
365
+ /** Stable fingerprint for one file row; ignores Blob binary content. */
366
+ declare function fingerprintAttachmentItem(item: unknown): string;
367
+ /** Order-independent fingerprint for attachment lists. */
368
+ declare function fingerprintAttachments(value: unknown): string;
369
+ /** True when lists represent the same attachments regardless of blob vs fileId shape. */
370
+ declare function attachmentsSemanticallyEqual(a: unknown, b: unknown): boolean;
371
+ /** Attachment rows that remain after a successful save (drops soft-deleted rows). */
372
+ declare function committedAttachments(value: unknown): AXPFileListItem[];
296
373
  /**
297
- * Data source definition provider that returns all entity names
298
- * from entity loaders' list() (const.ts in each module).
374
+ * Post-save attachment list: drops soft-deleted rows and promotes pending `attached` rows to `uploaded`
375
+ * so deferred-save pages get the same delete/revert behavior as after a full reload.
299
376
  */
300
- declare class AXPEntitiesListDataSourceDefinition implements AXPDataSourceDefinitionProvider {
301
- private readonly entityResolver;
302
- items(): Promise<AXPDataSourceDefinition[]>;
303
- }
377
+ declare function persistedAttachments(value: unknown): AXPFileListItem[];
304
378
 
379
+ interface AXPFileUploaderEntityFilesScope {
380
+ name: string;
381
+ id: string;
382
+ field: string;
383
+ }
384
+ declare function isFileListItem(value: unknown): value is AXPFileListItem;
385
+ /** Whether a list-row value represents one attachment (file item, id reference, or fileId source). */
386
+ declare function isAttachmentListEntry(value: unknown): boolean;
387
+ declare function attachmentFieldCount(fieldValue: unknown): number;
388
+ declare function normalizeEntityFieldToFileList(fieldValue: unknown): AXPFileListItem[];
389
+ /** Whether a stored value is a persisted file/document/reference token. */
390
+ declare function isAttachmentStorageRef(value: unknown): value is string;
391
+ /** True when the field has entries that cannot be shown without hydration (e.g. mixed `file:` refs + objects). */
392
+ declare function attachmentNeedsHydration(fieldValue: unknown): boolean;
305
393
  /**
306
- * Built-in entity detail tabs from plugins. Sidebar order (after related page-list / page-detail
307
- * tabs): meta-data-builder → attachments → documents → comments → dashboard → history.
394
+ * Resolves inline attachment field values to displayable file list items.
395
+ * Handles mixed arrays of `file:` refs and already-hydrated AXPFileListItem objects.
308
396
  */
309
- type EntityDetailPluginPageSlot = 'meta-data-builder' | 'attachments' | 'documents' | 'comments' | 'dashboard' | 'history';
310
- /** Identifies an `entity.pages` entry when skipping its order during recomputation. */
311
- interface SkipEntityComponentPageRef {
312
- componentKey: string;
313
- /** When set, only the page with this `field` is skipped (e.g. attachments / meta-data per field). */
314
- field?: string;
397
+ declare function hydrateAttachmentFieldToFileList(fieldValue: unknown, fileStorage: AXPFileStorageService): Promise<AXPFileListItem[]>;
398
+ /** Attachment field path from widget options or column path fallback. */
399
+ declare function resolveAttachmentFieldPath(options: Record<string, unknown>, fieldFallback?: string): string | undefined;
400
+ /** True when the list row includes the attachment field (even when empty). */
401
+ declare function isAttachmentFieldPresentOnRow(rowData: Record<string, unknown> | undefined, fieldPath: string | undefined): boolean;
402
+ declare function resolveFileUploaderEntityScope(options: Record<string, unknown>, rowData: Record<string, unknown> | undefined, fieldFallback?: string): AXPFileUploaderEntityFilesScope | undefined;
403
+
404
+ interface AXPFileUploaderLoadFilesInput extends AXPFileUploaderEntityFilesScope {
315
405
  }
316
- interface ResolveEntityPluginDetailPageOrderOptions {
317
- /** Component key of the page being added or updated (used to count sibling tabs in the same slot). */
318
- componentKey: string;
319
- /**
320
- * Ignore this page when counting siblings / recomputing (the page currently being updated).
321
- */
322
- skipPage?: SkipEntityComponentPageRef;
323
- /**
324
- * Field name for multi-page slots (`attachments`, `meta-data-builder`). Omit for single-tab slots.
325
- */
326
- field?: string;
327
- /** Gap between auto-assigned related tab orders. Default: 10. */
328
- relatedOrderStep?: number;
329
- /** Minimum start of the plugin zone (after related tabs). Default: 100_000. */
330
- pluginZoneFloor?: number;
406
+ interface AXPFileUploaderLoadFilesResult {
407
+ files: AXPFileListItem[];
408
+ /** Count including file-id references, not only hydrated AXPFileListItem rows. */
409
+ count: number;
410
+ }
411
+ declare class AXPFileUploaderLoadFilesQuery implements AXPQuery<AXPFileUploaderLoadFilesInput, AXPFileUploaderLoadFilesResult> {
412
+ private readonly injector;
413
+ fetch(input: AXPFileUploaderLoadFilesInput): Promise<AXPFileUploaderLoadFilesResult>;
414
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPFileUploaderLoadFilesQuery, never>;
415
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPFileUploaderLoadFilesQuery>;
331
416
  }
332
- /**
333
- * Resolves `layout.order` for a built-in plugin detail tab (`entity.pages`).
334
- *
335
- * 1. Assigns finite `layout.order` values to related `page-list` / `page-detail` rows that omit
336
- * `order` (the composer otherwise treats them as +Infinity).
337
- * 2. Places plugin tabs in a fixed relative order: meta-data-builder → attachments → documents →
338
- * comments → history, after all related tabs.
339
- */
340
- declare function resolveEntityPluginDetailPageOrder(input: {
341
- relatedEntities?: AXPRelatedEntity[];
342
- pages?: Array<AXPEntityPage & {
343
- field?: string;
344
- }>;
345
- }, slot: EntityDetailPluginPageSlot, options: ResolveEntityPluginDetailPageOrderOptions): number;
346
417
 
347
- interface AXPDataSeeder {
348
- seed(): Promise<void>;
418
+ interface AXPFileUploaderSaveFilesInput extends AXPFileUploaderEntityFilesScope {
419
+ files: AXPFileListItem[];
349
420
  }
350
- declare const AXP_DATA_SEEDER_TOKEN: InjectionToken<AXPDataSeeder[]>;
351
- declare class AXPDataSeederService {
352
- private loaders;
353
- seed(): Promise<void>;
354
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDataSeederService, never>;
355
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPDataSeederService>;
421
+ interface AXPFileUploaderSaveFilesResult {
422
+ entityData: Record<string, unknown>;
423
+ }
424
+ declare class AXPFileUploaderSaveFilesCommand implements AXPCommand<AXPFileUploaderSaveFilesInput, AXPFileUploaderSaveFilesResult> {
425
+ private readonly injector;
426
+ execute(input: AXPFileUploaderSaveFilesInput): Promise<AXPExecuteCommandResult<AXPFileUploaderSaveFilesResult>>;
356
427
  }
357
428
 
358
- declare class AXPEntityCommandTriggerViewModel {
359
- priority: 'primary' | 'secondary' | 'none';
360
- order: number;
361
- color: AXStyleColorType;
362
- icon: string;
363
- title: string;
364
- name: string;
365
- key?: string;
366
- separated: boolean;
367
- scope: AXPEntityCommandScope;
368
- disabled: boolean | string;
369
- hidden: boolean | string;
370
- options: any;
371
- metadata?: AXPMetaData;
372
- default?: boolean;
373
- shortcuts?: string[];
374
- items?: AXPEntityCommandTriggerViewModel[];
375
- isChild?: boolean;
376
- constructor(entity: AXPEntity, action: AXPEntityAction, isChild?: boolean);
377
- /** Stable trigger id for command lookup and list tracking when {@link AXPEntityAction.name} is omitted. */
378
- private static buildTriggerName;
429
+ /** Serializable upload action exposed via widget `api().getUploadActions()`. */
430
+ interface AXPFileUploaderUploadActionDescriptor {
431
+ plugin: string;
432
+ text?: string;
433
+ textKey?: string;
434
+ icon?: string;
379
435
  }
380
- declare class AXPEntityListViewColumnViewModel {
381
- readonly property: AXPEntityProperty;
382
- readonly column: AXPEntityTableColumn;
383
- constructor(property: AXPEntityProperty, column: AXPEntityTableColumn);
384
- name: string;
385
- title: string;
386
- visible: string | boolean;
387
- sortEnabled: boolean | undefined;
388
- width: '';
389
- node: _angular_core.Signal<AXPWidgetColumnNode>;
436
+ type AXPFileUploaderEditDialogMode = 'manual' | 'auto';
437
+ interface AXPFileUploaderEditDialogFieldOptions {
438
+ name?: boolean;
439
+ title?: boolean;
440
+ description?: boolean;
390
441
  }
391
- declare class AXPEntityListViewCardFieldViewModel {
392
- readonly property: AXPEntityProperty;
393
- readonly field: AXPCardField;
394
- constructor(property: AXPEntityProperty, field: AXPCardField);
395
- name: string;
396
- title: string;
397
- visible: string | boolean;
398
- layout: _acorex_platform_framework_shared_entity.AXPEntityPropertyLayoutConfig | undefined;
399
- display: string;
400
- isBadgeDisplay: boolean;
401
- badgeColor: string | undefined;
402
- isStatusWidget: boolean;
403
- node: _angular_core.Signal<AXPWidgetColumnNode>;
404
- /** Readonly column node for status fields shown as header badges. */
405
- headerBadgeNode: _angular_core.Signal<AXPWidgetColumnNode>;
442
+ interface AXPFileUploaderEditDialogOptions {
443
+ mode?: AXPFileUploaderEditDialogMode;
444
+ fields?: AXPFileUploaderEditDialogFieldOptions;
406
445
  }
446
+ declare function resolveFileUploaderEditDialog(options?: Record<string, unknown>): AXPFileUploaderEditDialogOptions | undefined;
447
+ declare function isFileUploaderEditDialogAuto(editDialog?: AXPFileUploaderEditDialogOptions): boolean;
448
+ declare function hasFileUploaderTitleOrDescriptionFields(editDialog?: AXPFileUploaderEditDialogOptions): boolean;
407
449
 
408
- declare class AXPEntityDetailListViewModel {
409
- private injector;
410
- private detailEntityConfig;
411
- private parent;
412
- private detailEntity;
413
- private formatService;
414
- private workflow;
415
- private filterOperatorMiddleware;
416
- private expressionEvaluator;
417
- private queryExecutor;
418
- private readonly settingsService;
419
- private readonly destroyed;
420
- private readonly showRowIndexColumnEnabled;
421
- private lastAppliedFilterKey;
422
- /** Whether the row index column is shown (user setting). */
423
- readonly showIndexColumn: _angular_core.Signal<boolean>;
424
- dataSource: AXDataSource<any>;
425
- parentKey: _angular_core.Signal<string | undefined>;
426
- constructor(injector: Injector, detailEntityConfig: AXPRelatedEntity, parent: {
427
- entity: AXPEntity;
428
- data: any;
429
- });
430
- private syncShowRowIndexColumnSetting;
431
- destroy(): void;
432
- initialize(): Promise<void>;
433
- selectedItems: _angular_core.WritableSignal<any[]>;
434
- hasSelectedItems: _angular_core.Signal<boolean>;
435
- clearSelection(): void;
436
- title: _angular_core.Signal<string>;
437
- hidden: _angular_core.Signal<Promise<boolean>>;
438
- inlineFiltersPlaceholders: _angular_core.Signal<string[]>;
439
- hasInlineFilters: _angular_core.Signal<boolean>;
440
- private allActions;
441
- selectedScopeActionsCount: _angular_core.Signal<number>;
442
- primaryActions: _angular_core.Signal<AXPEntityCommandTriggerViewModel[]>;
443
- secondaryActions: _angular_core.Signal<AXPEntityCommandTriggerViewModel[]>;
444
- primaryRowActions: _angular_core.Signal<AXPEntityCommandTriggerViewModel[]>;
445
- secondaryRowActions: _angular_core.Signal<AXPEntityCommandTriggerViewModel[]>;
446
- private inlineFilters;
447
- applyInlineFilter(value: string): void;
448
- applyFilterAndSort(): Promise<void>;
449
- columns: _angular_core.Signal<AXPEntityListViewColumnViewModel[]>;
450
- executeCommand(commandName: string, data?: any): Promise<void>;
451
- evaluateExpressions: (actionData: {
452
- [key: string]: string;
453
- } | string) => Promise<any>;
450
+ declare class AXPFileUploaderWidgetColumnComponent extends AXPColumnWidgetComponent<AXPFileListItem[]> {
451
+ private readonly queryExecutor;
452
+ private readonly entityResolver;
453
+ private readonly formatService;
454
+ private readonly translation;
455
+ private readonly debug;
456
+ protected readonly fileListTrigger: _angular_core.Signal<ElementRef<any> | undefined>;
457
+ protected readonly fileListPopover: _angular_core.Signal<AXPopoverComponent | undefined>;
458
+ protected readonly popoverFiles: _angular_core.WritableSignal<AXPFileListItem[]>;
459
+ protected readonly loadStatus: _angular_core.WritableSignal<"idle" | "loading" | "ready" | "error">;
460
+ protected readonly loadError: _angular_core.WritableSignal<string | null>;
461
+ protected readonly isPopoverOpen: _angular_core.WritableSignal<boolean>;
462
+ private readonly entityDef;
463
+ private popoverLoadRequestId;
464
+ private previousRowId;
465
+ protected readonly entityScope: _angular_core.Signal<_acorex_platform_framework_client_layout_entity.AXPFileUploaderEntityFilesScope | undefined>;
466
+ protected readonly attachmentFieldPath: _angular_core.Signal<string | undefined>;
467
+ protected readonly inlineFieldPresent: _angular_core.Signal<boolean>;
468
+ protected readonly fileCount: _angular_core.Signal<number>;
469
+ /** Clickable when count is unknown or zero — opens popover (lazy load or inline empty). */
470
+ protected readonly showAttachmentsLink: _angular_core.Signal<boolean>;
471
+ protected readonly popoverTitle: _angular_core.Signal<AXPMultiLanguageString>;
472
+ constructor();
473
+ protected openFileListPopover(): void;
474
+ protected onPopoverOpenChange(event: unknown): void;
475
+ private openPopoverFromRef;
476
+ private ensurePopoverFilesLoaded;
477
+ private coercePopoverOpenEvent;
478
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPFileUploaderWidgetColumnComponent, never>;
479
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPFileUploaderWidgetColumnComponent, "axp-file-uploader-widget-column", never, { "rawValue": { "alias": "rawValue"; "required": false; }; "rowData": { "alias": "rowData"; "required": false; }; }, {}, never, never, true, never>;
480
+ }
481
+
482
+ declare class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent<AXPFileListItem[] | undefined> {
483
+ private readonly hooks;
484
+ private readonly chooserService;
485
+ private readonly commandExecutor;
486
+ private readonly toastService;
487
+ private readonly translateService;
488
+ private readonly dirtyChangeSubject;
489
+ private readonly uploadActionsChangeSubject;
490
+ private readonly savedSnapshot;
491
+ private readonly baselineFingerprint;
492
+ private readonly baselinePendingReconcile;
493
+ private readonly isDirtySignal;
494
+ private skipDirtyEvaluation;
495
+ /** Status before soft-delete; used for restore when baseline was not synced (section layout). */
496
+ private readonly statusBeforeDelete;
497
+ private readonly autoBaselineSynced;
498
+ /** Sync baseline from context when not wired by a deferred-save page (section layout). */
499
+ private readonly baselineInitEffect;
500
+ protected multiple: _angular_core.Signal<boolean>;
501
+ private readonly acceptOverride;
502
+ protected accept: _angular_core.Signal<string>;
503
+ protected plugins: _angular_core.Signal<{
504
+ name: string;
505
+ options?: unknown;
506
+ }[]>;
507
+ protected excludePlugins: _angular_core.Signal<string[]>;
508
+ protected fileEditable: _angular_core.Signal<boolean>;
509
+ protected editDialog: _angular_core.Signal<_acorex_platform_framework_client_layout_entity.AXPFileUploaderEditDialogOptions | undefined>;
510
+ protected enableTitleDescription: _angular_core.Signal<boolean>;
511
+ /** When mode is `auto`, show the edit dialog after each file select. */
512
+ protected showEditDialogAfterSelect: _angular_core.Signal<boolean>;
513
+ protected readonly: _angular_core.Signal<boolean>;
514
+ protected showBorder: _angular_core.Signal<boolean>;
515
+ protected showAddItemButton: _angular_core.Signal<boolean>;
516
+ protected maxFileSize: _angular_core.Signal<number>;
517
+ protected isDragOver: _angular_core.WritableSignal<boolean>;
518
+ protected readonly isChoosing: _angular_core.WritableSignal<boolean>;
519
+ protected readonly chooserContext: _angular_core.Signal<AXPFileChooserContext>;
520
+ ngOnInit(): void;
521
+ setValue(value: AXPFileListItem[] | null | undefined): void;
522
+ /** Align dirty baseline with persisted attachments (call when record loads or after discard remount). */
523
+ syncBaseline(saved: AXPFileListItem[] | undefined): void;
524
+ /** Mark current list as saved; clears dirty and drops soft-deleted rows from the UI. */
525
+ markSaved(): void;
526
+ /** Revert widget value to last saved baseline. */
527
+ discardToBaseline(): void;
528
+ api(): AXPWidgetCoreElementAPI;
529
+ /** Current choose actions for host pages (device, drive, and other registered providers). */
530
+ getUploadActionDescriptors(): AXPFileUploaderUploadActionDescriptor[];
531
+ runUploadActionByPlugin(providerKey: string): Promise<void>;
532
+ private notifyUploadActionsChanged;
533
+ private evaluateDirty;
534
+ private setDirty;
535
+ protected onChooserItemsChanged(next: AXPFileListItem[]): Promise<void>;
536
+ private configureFromHooks;
454
537
  /**
455
- * Evaluate hidden/disabled expressions for primary actions and return the visible list.
538
+ * Process items returned from file chooser providers (device, drive, etc.).
456
539
  */
457
- getPrimaryActions(): Promise<AXPEntityCommandTriggerViewModel[]>;
540
+ private processChosenItems;
458
541
  /**
459
- * Evaluate hidden/disabled expressions for secondary actions and return the visible list.
542
+ * Process files from drag-drop.
543
+ * When showEditDialogAfterSelect is true, the edit dialog (with plugin hooks) is shown per file before adding; otherwise files are added and user can edit via Edit button.
460
544
  */
461
- getSecondaryActions(): Promise<AXPEntityCommandTriggerViewModel[]>;
545
+ private processFiles;
546
+ /**
547
+ * Show edit dialog per file and add only those submitted. Used when showEditDialogAfterSelect is true (both from zone and from dropdown actions).
548
+ */
549
+ private addFilesWithEditDialogAsync;
550
+ private fileFromListItem;
551
+ private validateListItemsForUpload;
552
+ private notifyRejectedFiles;
553
+ private filterFilesByAcceptAndMaxSize;
554
+ private isUnrestrictedAccept;
555
+ private fileMatchesAccept;
556
+ private matchesMimePattern;
557
+ private matchesCategoryByExtension;
558
+ protected files: _angular_core.Signal<AXPFileListItem[]>;
559
+ handleFileRemove(file: AXPFileListItem): void;
560
+ removeFile(file: AXPFileListItem): void;
561
+ /**
562
+ * Revert a deleted file back to its pre-delete status.
563
+ */
564
+ handleFileRevert(file: AXPFileListItem): void;
565
+ private resolveRestoredStatus;
566
+ /**
567
+ * Handle file rename action. Persists name/title/description to file storage immediately when edited
568
+ * so they are saved even if the entity payload does not carry these fields.
569
+ */
570
+ handleFileRename(file: AXPFileListItem): void;
571
+ clear(): void;
572
+ protected readonly capabilities: AXCFileUploaderCapabilities;
573
+ private addFilesWithValidation;
574
+ onFileChange(event: AXUploaderFileChangeEvent): void;
575
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPFileUploaderWidgetEditComponent, never>;
576
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPFileUploaderWidgetEditComponent, "axp-file-uploader-widget-edit", never, {}, {}, never, never, true, never>;
462
577
  }
463
578
 
464
- /**
465
- * Entity Event Dispatcher - A wrapper for entity-specific events
466
- * Handles pattern-based dispatching for entity operations with wildcard support
467
- */
468
- declare class AXPEntityEventDispatcherService {
469
- private readonly eventService;
470
- dispatchEntityEvent(operation: 'inserted' | 'updated' | 'deleted', entityName: string, data: any): Promise<void>;
471
- private getAllMatchingEventKeys;
472
- private findMatchingWildcardKeys;
473
- private matchesEntityPattern;
474
- private generateEventKeys;
475
- dispatchInserted(entityName: string, data: any): Promise<void>;
476
- dispatchUpdated(entityName: string, data: any): Promise<void>;
477
- dispatchDeleted(entityName: string, data: any): Promise<void>;
478
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityEventDispatcherService, never>;
479
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityEventDispatcherService>;
579
+ declare class AXPFileUploaderWidgetViewComponent extends AXPValueWidgetComponent<AXPFileListItem[]> {
580
+ protected files: _angular_core.Signal<AXPFileListItem[]>;
581
+ private get __class();
582
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPFileUploaderWidgetViewComponent, never>;
583
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPFileUploaderWidgetViewComponent, "axp-file-uploader-widget-view", never, {}, {}, never, never, true, never>;
480
584
  }
481
585
 
482
- /**
483
- * Sort key for entries in `interfaces.master.{create|update|single}.properties`.
484
- * Uses `layout.order` when set and finite; otherwise the property index in that list.
485
- */
486
- declare function getMasterInterfacePropertySortKey(interfaceRow: {
487
- layout?: AXPEntityPropertyLayoutConfig | undefined;
488
- } | undefined, indexInMasterInterfaceList: number): number;
586
+ declare const AXPFileUploaderWidget: AXPWidgetConfig;
587
+ interface AXPFileUploaderWidgetDesignerOptions {
588
+ multiple?: boolean;
589
+ accept?: string;
590
+ plugins?: {
591
+ name: string;
592
+ options?: unknown;
593
+ }[];
594
+ excludePlugins?: string[];
595
+ readonly?: boolean;
596
+ fileEditable?: boolean;
597
+ maxFileSize?: number;
598
+ enableTitleDescription?: boolean;
599
+ showEditDialogAfterSelect?: boolean;
600
+ showBorder?: boolean;
601
+ showAddItemButton?: boolean;
602
+ }
603
+ interface AXPFileUploaderWidgetViewOptions {
604
+ }
605
+ interface AXPFileUploaderWidgetEditOptions {
606
+ multiple?: boolean;
607
+ accept?: string;
608
+ plugins?: {
609
+ name: string;
610
+ options?: unknown;
611
+ }[];
612
+ excludePlugins?: string[];
613
+ readonly?: boolean;
614
+ fileEditable?: boolean;
615
+ maxFileSize?: number;
616
+ enableTitleDescription?: boolean;
617
+ showEditDialogAfterSelect?: boolean;
618
+ showBorder?: boolean;
619
+ showAddItemButton?: boolean;
620
+ }
621
+ interface AXPFileUploaderWidgetColumnOptions {
622
+ }
623
+ interface AXPFileUploaderWidgetPrintOptions {
624
+ }
625
+ interface AXPFileUploaderWidgetOptions {
626
+ designer: AXPFileUploaderWidgetDesignerOptions;
627
+ view: AXPFileUploaderWidgetViewOptions;
628
+ edit: AXPFileUploaderWidgetEditOptions;
629
+ print: AXPFileUploaderWidgetPrintOptions;
630
+ column: AXPFileUploaderWidgetColumnOptions;
631
+ }
632
+ declare module '@acorex-platform/framework-shared/widget-core' {
633
+ interface AXPWidgetTypesMap {
634
+ attachments: 'attachments';
635
+ }
636
+ }
489
637
 
490
- interface AXPEntityListExpandRowRef {
491
- data: Record<string, unknown>;
638
+ interface AXPFileUploaderShowFileListEntityContext extends AXPFileUploaderEntityFilesScope {
639
+ }
640
+ interface AXPFileUploaderShowFileListOptions {
641
+ /** When set, files are loaded and saved via FileUploader:LoadFiles / FileUploader:SaveFiles. */
642
+ entity?: AXPFileUploaderShowFileListEntityContext;
643
+ /** Direct files (e.g. grid column preview); skips load/save commands. */
644
+ files?: AXPFileListItem[];
645
+ readonly?: boolean;
646
+ multiple?: boolean;
647
+ accept?: string;
648
+ fileEditable?: boolean;
649
+ maxFileSize?: number;
650
+ showAddItemButton?: boolean;
651
+ plugins?: {
652
+ name: string;
653
+ options?: unknown;
654
+ }[];
655
+ editDialog?: AXPFileUploaderEditDialogOptions;
656
+ }
657
+ declare class AXPFileUploaderWidgetService {
658
+ private popupService;
659
+ private translate;
660
+ private commandExecutor;
661
+ private queryExecutor;
662
+ showFileList(options?: AXPFileUploaderShowFileListOptions): Promise<AXPFileListItem[] | undefined>;
663
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPFileUploaderWidgetService, never>;
664
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPFileUploaderWidgetService>;
665
+ }
666
+
667
+ interface AXPShowFileUploaderPopupCommandInput {
668
+ options?: {
669
+ key?: string;
670
+ readonly?: boolean | string;
671
+ readOnly?: boolean | string;
672
+ multiple?: boolean;
673
+ accept?: string;
674
+ maxFileSize?: number;
675
+ fileEditable?: boolean;
676
+ showAddItemButton?: boolean;
677
+ editDialog?: AXPFileUploaderEditDialogOptions;
678
+ plugins?: {
679
+ name: string;
680
+ options?: unknown;
681
+ }[];
682
+ entity?: {
683
+ name?: string;
684
+ id?: string;
685
+ field?: string;
686
+ };
687
+ entityName?: string;
688
+ id?: string;
689
+ };
690
+ entity?: string;
691
+ __context__?: {
692
+ entity?: string;
693
+ options?: AXPShowFileUploaderPopupCommandInput['options'];
694
+ };
695
+ __metadata__?: unknown;
492
696
  }
493
697
  /**
494
- * Resolves a stable row id from entity list row data.
495
- */
496
- declare function getEntityListRowId(data: Record<string, unknown>, key?: string): string;
497
- /**
498
- * Finds row data in a hierarchical grid tree (root rows and nested children).
698
+ * Opens the file uploader popup, saves files, then dispatches modify side-effects.
699
+ * Replaces the former `show-file-uploader-popup` workflow (popup + toast + modify confirmed).
499
700
  */
500
- declare function findEntityListRowDataInTree(items: unknown[], id: string, key: string): Record<string, unknown> | null;
701
+ declare class AXPShowFileUploaderPopupCommand implements AXPCommand<AXPShowFileUploaderPopupCommandInput, AXPExecuteCommandResult> {
702
+ private readonly fileUploaderWidgetService;
703
+ private readonly toastService;
704
+ private readonly translationService;
705
+ private readonly settingsService;
706
+ private readonly workflowEventService;
707
+ execute(input?: AXPShowFileUploaderPopupCommandInput): Promise<AXPExecuteCommandResult>;
708
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPShowFileUploaderPopupCommand, never>;
709
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPShowFileUploaderPopupCommand>;
710
+ }
711
+
501
712
  /**
502
- * Restores expanded rows after data load (parents before children).
713
+ * Build-time only. Do not import from Angular modules.
503
714
  */
504
- declare function restoreEntityListExpandedRows(options: {
505
- expandedRowIds: string[];
506
- rowKey: string;
507
- getDisplayedRows: () => unknown[];
508
- expandRow: (row: AXPEntityListExpandRowRef) => Promise<void>;
509
- }): Promise<void>;
715
+ declare const axpShowFileUploaderPopupCommandDefinition: {
716
+ key: string;
717
+ title: string;
718
+ description: string;
719
+ executionMode: "frontend";
720
+ inputs: {
721
+ name: string;
722
+ title: string;
723
+ description: string;
724
+ interface: {
725
+ name: string;
726
+ };
727
+ }[];
728
+ outcomes: {
729
+ mode: "static";
730
+ values: string[];
731
+ };
732
+ ai: {
733
+ tags: string[];
734
+ };
735
+ categories: node_modules__acorex_platform_framework_shared_core_src_lib.AXPDefinitionCategory[];
736
+ };
510
737
 
511
- interface AXPEntityListPagingState {
512
- take: number;
513
- skip: number;
738
+ declare class AXPUpdateEntityCommand implements AXPCommand<any, any> {
739
+ private readonly entityForm;
740
+ private readonly settingsService;
741
+ private readonly entityService;
742
+ private readonly toastService;
743
+ private readonly translationService;
744
+ private readonly formatService;
745
+ private readonly expressionEvaluator;
746
+ private readonly contextEvalFactory;
747
+ private readonly workflowEventService;
748
+ execute(input: any): Promise<AXPExecuteCommandResult<any>>;
749
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPUpdateEntityCommand, never>;
750
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPUpdateEntityCommand>;
514
751
  }
515
- /**
516
- * Applies take/skip to the data source without triggering {@link AXDataSource.load}.
517
- */
518
- declare function applyDataSourcePagingWithoutLoad(dataSource: AXDataSource, paging: AXPEntityListPagingState): void;
519
- declare function getDataSourcePageIndex(dataSource: AXDataSource): number;
520
- declare function normalizeListPaging(paging: Partial<AXPEntityListPagingState> | undefined, defaultTake: number): AXPEntityListPagingState;
521
-
522
- /** How entity list UI state (columns, filters, paging, etc.) is persisted for the user. */
523
- type AXPEntityListPersistenceMode = 'none' | 'persistent' | 'route';
524
- declare const AXPEntityListPersistenceModeDefault: AXPEntityListPersistenceMode;
525
- declare function normalizeEntityListPersistenceMode(value: unknown): AXPEntityListPersistenceMode;
526
- declare function canPersistEntityListState(mode: AXPEntityListPersistenceMode): boolean;
527
- /** `none` never reads list state from user settings. */
528
- declare function shouldLoadEntityListStateFromStorage(mode: AXPEntityListPersistenceMode): boolean;
529
- /** `route` clears stored list state when the route entity (module + name) changes. */
530
- declare function shouldResetEntityListStateOnRouteEntry(mode: AXPEntityListPersistenceMode): boolean;
531
- declare const ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY = "axp-entity-list-route-context";
532
752
 
533
- declare class AXPEntityCreateViewSectionViewModel {
534
- private entity;
535
- private section;
536
- constructor(entity: AXPEntity, section: AXPEntitySectionView);
537
- group: _acorex_platform_framework_shared_entity.AXPEntityPropertyGroup;
538
- name: _angular_core.WritableSignal<string>;
539
- title: _angular_core.Signal<string>;
540
- description: _angular_core.Signal<string | null | undefined>;
541
- layout: _angular_core.Signal<AXPGridLayoutOptions>;
542
- elements: _angular_core.Signal<AXPEntityCreateViewElementViewModel[]>;
543
- }
544
- declare class AXPEntityCreateViewElementViewModel {
545
- private entity;
546
- private section;
547
- private property;
548
- private createProp;
549
- constructor(entity: AXPEntity, section: AXPEntityCreateViewSectionViewModel, property: AXPEntityProperty, createProp: AXPEntityPropertyCreateView);
550
- name: _angular_core.WritableSignal<string>;
551
- title: _angular_core.WritableSignal<string>;
552
- description: _angular_core.WritableSignal<string | undefined>;
553
- editable: _angular_core.Signal<boolean>;
554
- isVisible: _angular_core.Signal<string | boolean>;
555
- isRequired: _angular_core.Signal<boolean>;
556
- layout: _angular_core.Signal<AXPEntityPropertyLayoutConfig>;
557
- node: _angular_core.Signal<AXPWidgetNode>;
558
- }
559
- declare class AXPEntityMasterCreateViewModel {
560
- private readonly injector;
561
- private readonly config;
562
- private readonly initialData;
563
- private readonly commandOptions;
564
- private entityDef;
565
- private workflow;
566
- private expressionEvaluator;
567
- builder: AXPWidgetCoreService;
568
- constructor(injector: Injector, config: AXPEntity, initialData: any | undefined, commandOptions: any);
569
- context: _angular_core.WritableSignal<any>;
570
- options: _angular_core.WritableSignal<any>;
571
- isInProgress: _angular_core.WritableSignal<boolean>;
572
- canCreateNewOne: _angular_core.WritableSignal<boolean>;
573
- redirect: _angular_core.WritableSignal<boolean>;
574
- sections: _angular_core.Signal<AXPEntityCreateViewSectionViewModel[]>;
575
- save(): Promise<any | void>;
576
- createNewOne(): Promise<void>;
577
- }
578
- declare class AXPEntityCreateViewModelFactory {
579
- private entityService;
580
- private layout;
581
- private injector;
582
- create(moduleName: string, entityName: string, initialData?: any, options?: {
583
- canCreateNewOne: boolean;
584
- redirect: boolean;
585
- }): Promise<AXPEntityMasterCreateViewModel>;
586
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityCreateViewModelFactory, never>;
587
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityCreateViewModelFactory>;
753
+ declare class AXPViewEntityDetailsCommand implements AXPCommand<any, any> {
754
+ private readonly entityForm;
755
+ private readonly entityService;
756
+ private readonly translationService;
757
+ private readonly expressionEvaluator;
758
+ private readonly contextEvalFactory;
759
+ execute(input: any): Promise<AXPExecuteCommandResult<any>>;
760
+ private resolveDialogTitle;
761
+ private loadRecordContext;
762
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPViewEntityDetailsCommand, never>;
763
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPViewEntityDetailsCommand>;
588
764
  }
589
765
 
590
- declare const ENTITY_MASTER_LIST_TRACE_NS = "entity-master-list";
591
- type EntityMasterListTraceArea = 'viewmodel' | 'list-view' | 'toolbar';
766
+ interface AXPOpenEntityDetailsCommandInput {
767
+ entity?: string;
768
+ data?: {
769
+ id: string;
770
+ };
771
+ __context__?: {
772
+ entity?: string;
773
+ data?: {
774
+ id: string;
775
+ };
776
+ };
777
+ }
592
778
  /**
593
- * Emits entity master list diagnostics when tenant Debug Mode is enabled.
779
+ * Generic command to open entity details view
780
+ * Can be used by any entity to navigate to its detail page
594
781
  */
595
- declare function traceEntityMasterList(area: EntityMasterListTraceArea, message: string, data?: Record<string, unknown> | (() => Record<string, unknown>)): void;
596
- declare function buildDataSourceTraceSnapshot(dataSource: AXDataSource, extras?: Record<string, unknown>): Record<string, unknown>;
597
-
598
- interface AXPEntityMasterListViewSortPropViewModel {
599
- name: string;
600
- title: string;
601
- dir?: string;
602
- }
603
- /** Built-in card list row action that toggles multi-select mode via {@link AXPEntityMasterListViewModel.selectedItems}. */
604
- declare const AXPEntityMasterListCardSelectActionName = "axp-entity-card:select";
605
- interface AXPEntityMasterListCardSecondaryActionItem {
606
- name: string;
607
- title: string;
608
- icon?: string;
609
- color?: string;
610
- disabled?: boolean | string;
611
- divided?: boolean;
612
- isCardSelect?: boolean;
613
- }
614
- declare class AXPEntityMasterListViewQueryViewModel {
615
- private entity;
616
- private section;
617
- private view;
618
- constructor(entity: AXPEntity, section: AXPEntityMasterListViewModel, view: AXPQueryView);
619
- name: string;
620
- title: string;
621
- sorts: _acorex_platform_framework_shared_entity.AXPQuerySort[];
622
- columns: string[];
623
- conditions: _acorex_platform_framework_shared_entity.AXPQueryFilter[];
624
- indexCol: boolean | undefined;
625
- pageSize: number | undefined;
782
+ declare class AXPOpenEntityDetailsCommand implements AXPCommand<AXPOpenEntityDetailsCommandInput, AXPExecuteCommandResult> {
783
+ private readonly router;
784
+ private readonly sessionService;
785
+ /**
786
+ * Execute the command to navigate to entity details
787
+ * @param input - Command input containing entity and data information
788
+ */
789
+ execute(input?: AXPOpenEntityDetailsCommandInput): Promise<AXPExecuteCommandResult>;
790
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPOpenEntityDetailsCommand, never>;
791
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPOpenEntityDetailsCommand>;
626
792
  }
627
- declare class AXPEntityMasterListViewModel {
628
- private injector;
629
- private config;
630
- readonly entityDef: AXPEntity;
631
- private readonly _viewDef;
793
+
794
+ declare class AXPEntityDetailPopoverComponent {
795
+ private readonly commandService;
796
+ private readonly queryService;
632
797
  private readonly formatService;
633
- private readonly session;
634
- private readonly workflow;
635
- private readonly settings;
636
- private readonly widgetResolver;
798
+ private readonly translation;
637
799
  private readonly expressionEvaluator;
638
800
  private readonly contextEvalFactory;
639
- private readonly translation;
640
- private readonly commandService;
641
- private readonly eventService;
642
- private readonly queryExecutor;
643
- private readonly filterOperatorMiddleware;
644
- private readonly entityDefinitionRegistry;
645
- private settingEntityKey;
646
- private readonly destroyed;
647
- private lastAppliedSortKey;
648
- private lastAppliedFilterKey;
649
- private hasQueryParamsFilters;
650
- private initialListSettingsApplied;
651
- /** Persisted expanded row ids for hierarchical lists (per view). */
652
- private readonly expandedRowIds;
653
- /** When true, row expand/collapse is not written to user settings (restore in progress). */
654
- skipExpandedRowPersistence: boolean;
655
- /** Resolved take/skip for the current view (null until loaded from settings). */
656
- private readonly resolvedListPaging;
657
- /** When true, pager changes are not persisted (programmatic UI sync). */
658
- skipListPagingPersistence: boolean;
659
- private listPersistenceMode;
660
- events$: Subject<{
661
- action: string;
662
- meta?: any;
663
- }>;
664
- views: _angular_core.Signal<AXPEntityMasterListViewQueryViewModel[]>;
665
- view: _angular_core.WritableSignal<AXPEntityMasterListViewQueryViewModel>;
666
- private readonly showRowIndexColumnEnabled;
801
+ private readonly changeDetectorRef;
802
+ entity: _angular_core.InputSignal<string>;
803
+ entityId: _angular_core.InputSignal<string | number>;
804
+ textField: _angular_core.InputSignal<string>;
805
+ valueField: _angular_core.InputSignal<string>;
806
+ displayTitle: _angular_core.InputSignal<string>;
807
+ item: _angular_core.InputSignal<AXPMetaData | undefined>;
808
+ breadcrumb: _angular_core.InputSignal<string | null>;
809
+ requestClose: _angular_core.InputSignal<(() => void) | undefined>;
810
+ protected entityDetails: _angular_core.WritableSignal<any>;
811
+ protected isLoadingDetails: _angular_core.WritableSignal<boolean>;
812
+ private headerTitleVersion;
813
+ /** Placeholder rows for the loading skeleton (matches typical property count). */
814
+ protected readonly loadingSkeletonRows: readonly [1, 2, 3, 4, 5];
815
+ protected readonly headerTitle: _angular_core.WritableSignal<string>;
816
+ constructor();
667
817
  /**
668
- * Row index column: if the list view defines `indexCol` (true/false), that overrides the user setting;
669
- * if `indexCol` is omitted, visibility follows {@link AXPCommonSettings.ShowRowIndexColumn}.
818
+ * Stable list of property widgets for the template. Must be a signal (computed), not a method:
819
+ * calling a method from the template rebuilds nodes every CD cycle and can make the widget renderer loop.
670
820
  */
671
- showIndexColumn: _angular_core.Signal<boolean>;
672
- /** Layouts enabled via `interfaces.master.list.layouts.*.enabled`. */
673
- enabledListLayouts: _angular_core.Signal<AXPEntityMasterListLayoutType[]>;
674
- /** True when the user can switch between multiple enabled layouts. */
675
- canSwitchListLayout: _angular_core.Signal<boolean>;
676
- /** Active list layout for the current view. */
677
- activeListLayout: _angular_core.WritableSignal<AXPEntityMasterListLayoutType>;
678
- tableLayout: _angular_core.Signal<{
679
- enabled?: boolean;
680
- columns: AXPEntityTableColumn[];
681
- cssClass?: {
682
- row?: AXPExpression;
683
- cell?: AXPExpression;
684
- };
685
- } | undefined>;
686
- cardLayout: _angular_core.Signal<{
687
- enabled?: boolean;
688
- header: {
689
- title?: string;
690
- description?: string;
691
- icon?: string;
692
- };
693
- fields: AXPCardField[];
694
- } | undefined>;
695
- /** Global expanded state for all card bodies in card layout. */
696
- cardContentExpanded: _angular_core.WritableSignal<boolean>;
697
- /** Current presentation mode (table, compact cards, or expanded cards). */
698
- listDisplayMode: _angular_core.Signal<AXPEntityMasterListDisplayMode>;
699
- /**
700
- * Sets global card body visibility for card layout.
701
- */
702
- setCardContentExpanded(expanded: boolean): void;
703
- /**
704
- * Switches table vs compact/expanded card presentation.
705
- */
706
- setListDisplayMode(mode: AXPEntityMasterListDisplayMode): void;
707
- /** Enabled layouts with display metadata for the title layout switcher. */
708
- availableListLayouts: _angular_core.Signal<AXPEntityMasterListLayoutOption[]>;
709
- /** Active layout option (for title icon and switcher selection state). */
710
- currentListLayout: _angular_core.Signal<AXPEntityMasterListLayoutOption | null>;
711
- private static readonly LAYOUT_META;
712
- /**
713
- * Switches to the given layout when it is enabled.
714
- * Persists the choice at entity list level (shared across all views).
715
- */
716
- setListLayout(layout: AXPEntityMasterListLayoutType): void;
717
- /**
718
- * Cycles to the next enabled layout (table → card → table …).
719
- * No-op when only one layout is enabled.
720
- */
721
- switchListLayout(): AXPEntityMasterListLayoutType;
722
- private resolveActiveListLayout;
723
- private applyListLayoutFromSettings;
724
- private createLogicExpressionScope;
725
- private createDisplayExpressionScope;
726
- private resolveCommandNameExpression;
727
- private resolveTitleExpression;
728
- /**
729
- * Resolves a card header value (title, description, icon) from a property path, expression, or literal.
730
- * Supports multiple `{{ ... }}` segments in one string (e.g. `{{context.eval("a")}} - {{context.eval("b")}}`).
731
- * Multi-language maps (e.g. `{ "en-US": "...", "fa-IR": "..." }`) are returned as-is for the translate pipe.
732
- */
733
- resolveCardHeaderValue(value: string | undefined, rowData: unknown): Promise<AXPMultiLanguageString>;
734
- /**
735
- * Keeps i18n payloads intact for `translate`; coerces only plain scalars to string.
736
- */
737
- private normalizeCardHeaderDisplayValue;
738
- /**
739
- * Resolves badge color for a card header field (semantic token or expression per row).
740
- */
741
- resolveCardBadgeColor(field: AXPEntityListViewCardFieldViewModel, rowData: unknown): Promise<AXStyleColorType>;
742
- private resolveCardBadgeColorValue;
743
- /**
744
- * Resolves table row CSS classes from `layouts.table.cssClass.row` for the given row.
745
- */
746
- resolveTableRowCssClass(rowData: unknown): Promise<string | undefined>;
747
- /**
748
- * Resolves table cell CSS classes from `layouts.table.cssClass.cell` for the given row and column.
749
- */
750
- resolveTableCellCssClass(rowData: unknown, columnName: string): Promise<string | undefined>;
751
- private createTableCssClassExpressionScope;
752
- private resolveTableCssClassValue;
753
- private normalizeTableCssClassValue;
754
- private resolveTriggerName;
755
- setView(viewName?: string | null): Promise<void>;
756
- dataSource: AXDataSource<any>;
757
- constructor(injector: Injector, config: AXPEntity);
758
- private syncShowRowIndexColumnSetting;
759
- /**
760
- * Applies {@link AXPCommonSettings.EntityListPersistenceMode} for this list instance.
761
- * Call once when the list view model is created (before loading list UI state).
762
- */
763
- initializeListPersistence(): Promise<void>;
764
- getListPersistenceMode(): Promise<AXPEntityListPersistenceMode>;
765
- shouldLoadPersistedListState(): Promise<boolean>;
766
- shouldPersistListState(): Promise<boolean>;
767
- private clearEntityListSettings;
768
- applySettings(): Promise<void>;
769
- ensureListPagingResolved(): Promise<void>;
770
- getResolvedListPaging(): AXPEntityListPagingState;
771
- applyPagingToDataSourceWithoutLoad(): void;
772
- saveListPaging(take: number, skip: number): void;
773
- resetListPagingSkip(): void;
774
- private loadListPagingFromViewSettings;
775
- getExpandedRowIds(): string[];
776
- /**
777
- * Updates persisted expanded row ids when the user expands or collapses a tree row.
778
- */
779
- updateExpandedRowId(rowId: string, expanded: boolean): void;
780
- handleRowExpandChange(rowData: Record<string, unknown>): void;
781
- saveSettings(changesType: 'columnSizes' | 'columnOrders' | 'view' | 'pageSize' | 'listPaging' | 'filters' | 'sorts' | 'expandedRows' | 'listLayout' | 'cardContentExpanded', data?: unknown): Promise<void>;
782
- selectedItems: _angular_core.WritableSignal<any[]>;
783
- /**
784
- * Selected category from the category sidebar (left panel).
785
- * Used to set default category when creating new entities via command.
786
- * Structure: { id: string; title: string } or null when "All Items" is selected.
787
- */
788
- selectedCategory: _angular_core.WritableSignal<{
789
- id: string;
821
+ protected readonly entityPropertiesWithWidgets: _angular_core.Signal<{
822
+ name: string;
790
823
  title: string;
791
- } | null>;
792
- parentKey: _angular_core.Signal<string | undefined>;
793
- hasSelectedItems: _angular_core.Signal<boolean>;
794
- clearSelection(): void;
824
+ node: AXPWidgetNode;
825
+ }[]>;
826
+ /** Loads entity details after the overlay panel is created. */
827
+ loadDetails(): Promise<void>;
828
+ protected navigateToDetails(): Promise<void>;
829
+ private resolveHeaderTitle;
830
+ private resolveLookupDisplayLabelAsync;
795
831
  /**
796
- * Sets the selected category from the category sidebar.
797
- * Call with null to clear (e.g. when "All Items" is selected).
832
+ * Returns true if a value is meaningful for display (non-empty/non-null).
798
833
  */
799
- setSelectedCategory(category: {
800
- id: string;
801
- title: string;
802
- } | null): void;
803
- title: _angular_core.Signal<string>;
804
- description: _angular_core.Signal<string | null>;
805
- filterDefinitions: _angular_core.WritableSignal<AXPEntityListFilterDefinition[]>;
806
- inlineFiltersPlaceholders: _angular_core.Signal<string[]>;
807
- hasInlineFilters: _angular_core.Signal<boolean>;
808
- /** Text for data-table cell highlighting (set only after filters are applied). */
809
- inlineFilterHighlightText: _angular_core.WritableSignal<string>;
810
- beardcrumbs: _angular_core.Signal<AXPBreadcrumbItem[]>;
811
- private allActions;
812
- /** Keeps the first action when list definitions repeat the same trigger name. */
813
- private dedupeActionsByName;
814
- /** Flattened actions including children for execute lookup */
815
- private flattenedActions;
816
- getPrimaryActions(): Promise<AXPEntityCommandTriggerViewModel[]>;
817
- getSecondaryActions(): Promise<AXPEntityCommandTriggerViewModel[]>;
818
- selectedScopeActionsCount: _angular_core.Signal<number>;
819
- primaryRowActions: _angular_core.Signal<AXPEntityCommandTriggerViewModel[]>;
820
- secondaryRowActions(rowData: any): Promise<AXPEntityCommandTriggerViewModel[]>;
834
+ private hasMeaningfulValue;
821
835
  /**
822
- * Secondary actions for card layout rows, with the built-in Select action last (divider above it).
836
+ * Calculates an importance score for a property based on its widget type,
837
+ * whether it currently has a meaningful value, and metadata like title.
823
838
  */
824
- cardSecondaryRowActions(rowData: unknown): Promise<AXPEntityMasterListCardSecondaryActionItem[]>;
825
- filterQueries: _angular_core.WritableSignal<AXPFilterQuery[]>;
826
- private static readonly URL_FILTER_OPERATOR_TYPES;
827
- get properties(): AXPEntityProperty[];
839
+ private getPropertyImportanceScore;
828
840
  /**
829
- * Canonical JSON for the `filters` query param (sorted by field), or null when there are no active value filters.
841
+ * Calculates a name-based importance score to prioritize common key fields
842
+ * like title, description, status, and important dates.
843
+ * Name priority MUST come before widget-type priority.
830
844
  */
831
- filtersQueryParamCanonical(queries: AXPFilterQuery[]): string | null;
845
+ private getNameImportanceScore;
846
+ private buildEntityPropertiesWithWidgets;
832
847
  /**
833
- * Parse a `filters` query string to the same canonical form used by {@link filtersQueryParamCanonical}.
848
+ * Resolves the data path for a property. For lookups with expose, returns the expanded path
849
+ * when data has it (e.g. personTitle). Otherwise returns property name (e.g. personTitleId).
834
850
  */
835
- static parseQueryParamFiltersToCanonical(filtersJson: string | null): string | null;
836
- private toUrlFilterPayloadItems;
837
- private static coerceFilterOperatorFromUrl;
851
+ private resolveDataPath;
852
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityDetailPopoverComponent, never>;
853
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityDetailPopoverComponent, "axp-entity-detail-popover", never, { "entity": { "alias": "entity"; "required": true; "isSignal": true; }; "entityId": { "alias": "entityId"; "required": true; "isSignal": true; }; "textField": { "alias": "textField"; "required": false; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "displayTitle": { "alias": "displayTitle"; "required": false; "isSignal": true; }; "item": { "alias": "item"; "required": false; "isSignal": true; }; "breadcrumb": { "alias": "breadcrumb"; "required": false; "isSignal": true; }; "requestClose": { "alias": "requestClose"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
854
+ }
855
+
856
+ interface AXPEntityDetailPopoverOptions {
857
+ entity: string;
858
+ id: string | number;
859
+ item: AXPMetaData;
860
+ textField?: string;
861
+ valueField?: string;
862
+ displayTitle?: string;
863
+ breadcrumb?: string;
864
+ }
865
+ declare class AXPEntityDetailPopoverService {
866
+ private readonly overlayService;
867
+ private readonly platform;
868
+ private readonly localeService;
869
+ private readonly document;
870
+ private readonly router;
871
+ private overlayRef;
872
+ private componentRef;
873
+ private anchorElement;
874
+ private outsideClickHandler;
875
+ private keydownHandler;
876
+ private routerSubscription;
838
877
  /**
839
- * Apply filters from query params
878
+ * Show entity detail popover anchored to the target element.
840
879
  */
841
- applyFiltersFromQueryParams(filtersJson: string | null): boolean;
880
+ show(target: ElementRef | HTMLElement, options: AXPEntityDetailPopoverOptions): Promise<void>;
881
+ /** Hide the active popover */
882
+ hide(): void;
883
+ /** Whether a popover is currently active */
884
+ get isActive(): boolean;
885
+ private resolveAnchorElement;
886
+ /** Mirror popover placement for RTL so the panel aligns with the anchor's inline-start edge. */
887
+ private resolveOverlayPlacement;
888
+ private resolveOverlayOffsetX;
889
+ private isRtlContext;
890
+ private bindDismissHandlers;
891
+ /** Ignore clicks on the anchor, overlay panel, or nested dropdown menus. */
892
+ private isInsideInteractiveSurface;
893
+ private removeDismissHandlers;
894
+ private handleOverlayDisposed;
895
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityDetailPopoverService, never>;
896
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityDetailPopoverService>;
897
+ }
898
+
899
+ declare class AXPEntityPreloadFiltersContainerComponent extends AXPPageLayoutBaseComponent {
900
+ private readonly route;
901
+ private readonly entityService;
902
+ private readonly filterOperatorMiddleware;
903
+ protected readonly noMatchText: _angular_core.WritableSignal<string | null>;
904
+ private vm;
905
+ preloadFiltersDef: _angular_core.Signal<_acorex_platform_framework_shared_core.AXPFilterDefinition[]>;
906
+ hasNoRequiredFilters: _angular_core.Signal<boolean>;
907
+ protected getPageTitle(): string;
908
+ protected getPageDescription(): string | null;
909
+ onApply(event: AXPPreloadFiltersApplyEvent): Promise<void>;
910
+ onShowAll(): Promise<void>;
911
+ private buildPreloadFilterQueries;
912
+ private buildListQueryFilter;
913
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityPreloadFiltersContainerComponent, never>;
914
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityPreloadFiltersContainerComponent, "axp-entity-preload-filters-container", never, {}, {}, never, never, true, never>;
915
+ }
916
+
917
+ /**
918
+ * Data source definition provider that returns all entity names
919
+ * from entity loaders' list() (const.ts in each module).
920
+ */
921
+ declare class AXPEntitiesListDataSourceDefinition implements AXPDataSourceDefinitionProvider {
922
+ private readonly entityResolver;
923
+ items(): Promise<AXPDataSourceDefinition[]>;
924
+ }
925
+
926
+ /**
927
+ * Built-in entity detail tabs from plugins. Sidebar order (after related page-list / page-detail
928
+ * tabs): meta-data-builder → attachments → gallery → documents → comments → dashboard → history.
929
+ */
930
+ type EntityDetailPluginPageSlot = 'meta-data-builder' | 'attachments' | 'gallery' | 'documents' | 'comments' | 'dashboard' | 'history';
931
+ /** Identifies an `entity.pages` entry when skipping its order during recomputation. */
932
+ interface SkipEntityComponentPageRef {
933
+ componentKey: string;
934
+ /** When set, only the page with this `field` is skipped (e.g. attachments / meta-data per field). */
935
+ field?: string;
936
+ }
937
+ interface ResolveEntityPluginDetailPageOrderOptions {
938
+ /** Component key of the page being added or updated (used to count sibling tabs in the same slot). */
939
+ componentKey: string;
842
940
  /**
843
- * Loads host and merge-detail related sortable field definitions (async registry resolution).
941
+ * Ignore this page when counting siblings / recomputing (the page currently being updated).
844
942
  */
845
- loadSortableFields(): Promise<void>;
943
+ skipPage?: SkipEntityComponentPageRef;
846
944
  /**
847
- * Loads host and merge-detail related filter definitions (async registry resolution).
945
+ * Field name for multi-page slots (`attachments`, `meta-data-builder`). Omit for single-tab slots.
848
946
  */
849
- loadFilterDefinitions(): Promise<void>;
850
- get filtersDef(): AXPEntityListFilterDefinition[];
851
- get preloadFiltersDef(): AXPEntityListFilterDefinition[];
852
- applyViewFilters(): Promise<void>;
853
- resetFilters(): void;
854
- applyFilterAndSort(): Promise<void>;
855
- private updateAppliedInlineFilterHighlightText;
856
- private resolveMergeDetailProperty;
947
+ field?: string;
948
+ /** Gap between auto-assigned related tab orders. Default: 10. */
949
+ relatedOrderStep?: number;
950
+ /** Minimum start of the plugin zone (after related tabs). Default: 100_000. */
951
+ pluginZoneFloor?: number;
952
+ }
953
+ /**
954
+ * Resolves `layout.order` for a built-in plugin detail tab (`entity.pages`).
955
+ *
956
+ * 1. Assigns finite `layout.order` values to related `page-list` / `page-detail` rows that omit
957
+ * `order` (the composer otherwise treats them as +Infinity).
958
+ * 2. Places plugin tabs in a fixed relative order: meta-data-builder → attachments → documents →
959
+ * comments → history, after all related tabs.
960
+ */
961
+ declare function resolveEntityPluginDetailPageOrder(input: {
962
+ relatedEntities?: AXPRelatedEntity[];
963
+ pages?: Array<AXPEntityPage & {
964
+ field?: string;
965
+ }>;
966
+ }, slot: EntityDetailPluginPageSlot, options: ResolveEntityPluginDetailPageOrderOptions): number;
967
+
968
+ interface AXPDataSeeder {
969
+ seed(): Promise<void>;
970
+ }
971
+ declare const AXP_DATA_SEEDER_TOKEN: InjectionToken<AXPDataSeeder[]>;
972
+ declare class AXPDataSeederService {
973
+ private loaders;
974
+ seed(): Promise<void>;
975
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDataSeederService, never>;
976
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPDataSeederService>;
977
+ }
978
+
979
+ declare class AXPEntityCommandTriggerViewModel {
980
+ priority: 'primary' | 'secondary' | 'none';
981
+ order: number;
982
+ color: AXStyleColorType;
983
+ icon: string;
984
+ title: string;
985
+ name: string;
986
+ key?: string;
987
+ separated: boolean;
988
+ scope: AXPEntityCommandScope;
989
+ disabled: boolean | string;
990
+ hidden: boolean | string;
991
+ options: any;
992
+ metadata?: AXPMetaData;
993
+ default?: boolean;
994
+ shortcuts?: string[];
995
+ items?: AXPEntityCommandTriggerViewModel[];
996
+ isChild?: boolean;
997
+ constructor(entity: AXPEntity, action: AXPEntityAction, isChild?: boolean);
998
+ /** Stable trigger id for command lookup and list tracking when {@link AXPEntityAction.name} is omitted. */
999
+ private static buildTriggerName;
1000
+ }
1001
+ declare class AXPEntityListViewColumnViewModel {
1002
+ readonly property: AXPEntityProperty;
1003
+ readonly column: AXPEntityTableColumn;
1004
+ constructor(property: AXPEntityProperty, column: AXPEntityTableColumn);
1005
+ name: string;
1006
+ title: string;
1007
+ visible: string | boolean;
1008
+ sortEnabled: boolean | undefined;
1009
+ width: string | undefined;
1010
+ node: _angular_core.Signal<AXPWidgetColumnNode>;
1011
+ }
1012
+ declare class AXPEntityListViewCardFieldViewModel {
1013
+ readonly property: AXPEntityProperty;
1014
+ readonly field: AXPCardField;
1015
+ constructor(property: AXPEntityProperty, field: AXPCardField);
1016
+ name: string;
1017
+ title: string;
1018
+ visible: string | boolean;
1019
+ layout: _acorex_platform_framework_shared_entity.AXPEntityPropertyLayoutConfig | undefined;
1020
+ display: string;
1021
+ isBadgeDisplay: boolean;
1022
+ badgeColor: string | undefined;
1023
+ isStatusWidget: boolean;
1024
+ node: _angular_core.Signal<AXPWidgetColumnNode>;
1025
+ /** Readonly column node for status fields shown as header badges. */
1026
+ headerBadgeNode: _angular_core.Signal<AXPWidgetColumnNode>;
1027
+ }
1028
+
1029
+ declare class AXPEntityDetailListViewModel {
1030
+ private injector;
1031
+ private detailEntityConfig;
1032
+ private parent;
1033
+ private detailEntity;
1034
+ private formatService;
1035
+ private commandService;
1036
+ private filterOperatorMiddleware;
1037
+ private expressionEvaluator;
1038
+ private queryExecutor;
1039
+ private readonly settingsService;
1040
+ private readonly destroyed;
1041
+ private readonly showRowIndexColumnEnabled;
1042
+ private lastAppliedFilterKey;
1043
+ /** Whether the row index column is shown (user setting). */
1044
+ readonly showIndexColumn: _angular_core.Signal<boolean>;
1045
+ dataSource: AXDataSource<any>;
1046
+ parentKey: _angular_core.Signal<string | undefined>;
1047
+ constructor(injector: Injector, detailEntityConfig: AXPRelatedEntity, parent: {
1048
+ entity: AXPEntity;
1049
+ data: any;
1050
+ });
1051
+ private syncShowRowIndexColumnSetting;
1052
+ destroy(): void;
1053
+ initialize(): Promise<void>;
1054
+ selectedItems: _angular_core.WritableSignal<any[]>;
1055
+ hasSelectedItems: _angular_core.Signal<boolean>;
1056
+ clearSelection(): void;
1057
+ title: _angular_core.Signal<string>;
1058
+ hidden: _angular_core.Signal<Promise<boolean>>;
1059
+ inlineFiltersPlaceholders: _angular_core.Signal<string[]>;
1060
+ hasInlineFilters: _angular_core.Signal<boolean>;
1061
+ private allActions;
1062
+ selectedScopeActionsCount: _angular_core.Signal<number>;
1063
+ primaryActions: _angular_core.Signal<AXPEntityCommandTriggerViewModel[]>;
1064
+ secondaryActions: _angular_core.Signal<AXPEntityCommandTriggerViewModel[]>;
1065
+ primaryRowActions: _angular_core.Signal<AXPEntityCommandTriggerViewModel[]>;
1066
+ secondaryRowActions: _angular_core.Signal<AXPEntityCommandTriggerViewModel[]>;
1067
+ private inlineFilters;
1068
+ applyInlineFilter(value: string): void;
1069
+ applyFilterAndSort(): Promise<void>;
1070
+ columns: _angular_core.Signal<AXPEntityListViewColumnViewModel[]>;
1071
+ executeCommand(commandName: string, data?: any): Promise<void>;
1072
+ evaluateExpressions: (actionData: {
1073
+ [key: string]: string;
1074
+ } | string) => Promise<any>;
1075
+ /**
1076
+ * Evaluate hidden/disabled expressions for primary actions and return the visible list.
1077
+ */
1078
+ getPrimaryActions(): Promise<AXPEntityCommandTriggerViewModel[]>;
1079
+ /**
1080
+ * Evaluate hidden/disabled expressions for secondary actions and return the visible list.
1081
+ */
1082
+ getSecondaryActions(): Promise<AXPEntityCommandTriggerViewModel[]>;
1083
+ }
1084
+
1085
+ /**
1086
+ * Entity Event Dispatcher - A wrapper for entity-specific events
1087
+ * Handles pattern-based dispatching for entity operations with wildcard support
1088
+ */
1089
+ declare class AXPEntityEventDispatcherService {
1090
+ private readonly eventService;
1091
+ dispatchEntityEvent(operation: 'inserted' | 'updated' | 'deleted', entityName: string, data: any): Promise<void>;
1092
+ private getAllMatchingEventKeys;
1093
+ private findMatchingWildcardKeys;
1094
+ private matchesEntityPattern;
1095
+ private generateEventKeys;
1096
+ dispatchInserted(entityName: string, data: any): Promise<void>;
1097
+ dispatchUpdated(entityName: string, data: any): Promise<void>;
1098
+ dispatchDeleted(entityName: string, data: any): Promise<void>;
1099
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityEventDispatcherService, never>;
1100
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityEventDispatcherService>;
1101
+ }
1102
+
1103
+ /**
1104
+ * Sort key for entries in `interfaces.master.{create|update|single}.properties`.
1105
+ * Uses `layout.order` when set and finite; otherwise the property index in that list.
1106
+ */
1107
+ declare function getMasterInterfacePropertySortKey(interfaceRow: {
1108
+ layout?: AXPEntityPropertyLayoutConfig | undefined;
1109
+ } | undefined, indexInMasterInterfaceList: number): number;
1110
+
1111
+ declare const AXPEntityLifecycleHookKeys: {
1112
+ readonly ListOpened: "entity.list.opened";
1113
+ readonly ListCriteriaApplied: "entity.list.criteria-applied";
1114
+ readonly DetailOpened: "entity.detail.opened";
1115
+ readonly FormSubmitted: "entity.form.submitted";
1116
+ readonly FormValidationFailed: "entity.form.validation-failed";
1117
+ };
1118
+ declare function fireEntityLifecycleHook(hooks: AXPHookService, key: string, payload: Record<string, unknown>): void;
1119
+
1120
+ interface AXPEntityListExpandRowRef {
1121
+ data: Record<string, unknown>;
1122
+ }
1123
+ /**
1124
+ * Resolves a stable row id from entity list row data.
1125
+ */
1126
+ declare function getEntityListRowId(data: Record<string, unknown>, key?: string): string;
1127
+ /**
1128
+ * Finds row data in a hierarchical grid tree (root rows and nested children).
1129
+ */
1130
+ declare function findEntityListRowDataInTree(items: unknown[], id: string, key: string): Record<string, unknown> | null;
1131
+ /**
1132
+ * Restores expanded rows after data load (parents before children).
1133
+ */
1134
+ declare function restoreEntityListExpandedRows(options: {
1135
+ expandedRowIds: string[];
1136
+ rowKey: string;
1137
+ getDisplayedRows: () => unknown[];
1138
+ expandRow: (row: AXPEntityListExpandRowRef) => Promise<void>;
1139
+ }): Promise<void>;
1140
+
1141
+ interface AXPEntityListPagingState {
1142
+ take: number;
1143
+ skip: number;
1144
+ }
1145
+ /**
1146
+ * Applies take/skip to the data source without triggering {@link AXDataSource.load}.
1147
+ */
1148
+ declare function applyDataSourcePagingWithoutLoad(dataSource: AXDataSource, paging: AXPEntityListPagingState): void;
1149
+ declare function getDataSourcePageIndex(dataSource: AXDataSource): number;
1150
+ declare function normalizeListPaging(paging: Partial<AXPEntityListPagingState> | undefined, defaultTake: number): AXPEntityListPagingState;
1151
+
1152
+ /** How entity list UI state (columns, filters, paging, etc.) is persisted for the user. */
1153
+ type AXPEntityListPersistenceMode = 'none' | 'persistent' | 'route';
1154
+ declare const AXPEntityListPersistenceModeDefault: AXPEntityListPersistenceMode;
1155
+ declare function normalizeEntityListPersistenceMode(value: unknown): AXPEntityListPersistenceMode;
1156
+ declare function canPersistEntityListState(mode: AXPEntityListPersistenceMode): boolean;
1157
+ /** `none` never reads list state from user settings. */
1158
+ declare function shouldLoadEntityListStateFromStorage(mode: AXPEntityListPersistenceMode): boolean;
1159
+ /** `route` clears stored list state when the route entity (module + name) changes. */
1160
+ declare function shouldResetEntityListStateOnRouteEntry(mode: AXPEntityListPersistenceMode): boolean;
1161
+ declare const ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY = "axp-entity-list-route-context";
1162
+
1163
+ declare class AXPEntityCreateViewSectionViewModel {
1164
+ private entity;
1165
+ private section;
1166
+ constructor(entity: AXPEntity, section: AXPEntitySectionView);
1167
+ group: _acorex_platform_framework_shared_entity.AXPEntityPropertyGroup;
1168
+ name: _angular_core.WritableSignal<string>;
1169
+ title: _angular_core.Signal<string>;
1170
+ description: _angular_core.Signal<string | null | undefined>;
1171
+ layout: _angular_core.Signal<AXPGridLayoutOptions>;
1172
+ elements: _angular_core.Signal<AXPEntityCreateViewElementViewModel[]>;
1173
+ }
1174
+ declare class AXPEntityCreateViewElementViewModel {
1175
+ private entity;
1176
+ private section;
1177
+ private property;
1178
+ private createProp;
1179
+ constructor(entity: AXPEntity, section: AXPEntityCreateViewSectionViewModel, property: AXPEntityProperty, createProp: AXPEntityPropertyCreateView);
1180
+ name: _angular_core.WritableSignal<string>;
1181
+ title: _angular_core.WritableSignal<string>;
1182
+ description: _angular_core.WritableSignal<string | undefined>;
1183
+ editable: _angular_core.Signal<boolean>;
1184
+ isVisible: _angular_core.Signal<string | boolean>;
1185
+ isRequired: _angular_core.Signal<boolean>;
1186
+ layout: _angular_core.Signal<AXPEntityPropertyLayoutConfig>;
1187
+ node: _angular_core.Signal<AXPWidgetNode>;
1188
+ }
1189
+ declare class AXPEntityMasterCreateViewModel {
1190
+ private readonly injector;
1191
+ private readonly config;
1192
+ private readonly initialData;
1193
+ private readonly commandOptions;
1194
+ private entityDef;
1195
+ private commandService;
1196
+ private expressionEvaluator;
1197
+ builder: AXPWidgetCoreService;
1198
+ constructor(injector: Injector, config: AXPEntity, initialData: any | undefined, commandOptions: any);
1199
+ context: _angular_core.WritableSignal<any>;
1200
+ options: _angular_core.WritableSignal<any>;
1201
+ isInProgress: _angular_core.WritableSignal<boolean>;
1202
+ canCreateNewOne: _angular_core.WritableSignal<boolean>;
1203
+ redirect: _angular_core.WritableSignal<boolean>;
1204
+ sections: _angular_core.Signal<AXPEntityCreateViewSectionViewModel[]>;
1205
+ save(): Promise<any | void>;
1206
+ createNewOne(): Promise<void>;
1207
+ }
1208
+ declare class AXPEntityCreateViewModelFactory {
1209
+ private entityService;
1210
+ private layout;
1211
+ private injector;
1212
+ create(moduleName: string, entityName: string, initialData?: any, options?: {
1213
+ canCreateNewOne: boolean;
1214
+ redirect: boolean;
1215
+ }): Promise<AXPEntityMasterCreateViewModel>;
1216
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityCreateViewModelFactory, never>;
1217
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityCreateViewModelFactory>;
1218
+ }
1219
+
1220
+ declare const ENTITY_MASTER_LIST_TRACE_NS = "entity-master-list";
1221
+ type EntityMasterListTraceArea = 'viewmodel' | 'list-view' | 'toolbar';
1222
+ /**
1223
+ * Emits entity master list diagnostics when tenant Debug Mode is enabled.
1224
+ */
1225
+ declare function traceEntityMasterList(area: EntityMasterListTraceArea, message: string, data?: Record<string, unknown> | (() => Record<string, unknown>)): void;
1226
+ declare function buildDataSourceTraceSnapshot(dataSource: AXDataSource, extras?: Record<string, unknown>): Record<string, unknown>;
1227
+
1228
+ interface AXPEntityMasterListViewSortPropViewModel {
1229
+ name: string;
1230
+ title: string;
1231
+ dir?: string;
1232
+ }
1233
+ /** Built-in card list row action that toggles multi-select mode via {@link AXPEntityMasterListViewModel.selectedItems}. */
1234
+ declare const AXPEntityMasterListCardSelectActionName = "axp-entity-card:select";
1235
+ interface AXPEntityMasterListCardSecondaryActionItem {
1236
+ name: string;
1237
+ title: string;
1238
+ icon?: string;
1239
+ color?: string;
1240
+ disabled?: boolean | string;
1241
+ divided?: boolean;
1242
+ isCardSelect?: boolean;
1243
+ }
1244
+ declare class AXPEntityMasterListViewQueryViewModel {
1245
+ private entity;
1246
+ private section;
1247
+ private view;
1248
+ constructor(entity: AXPEntity, section: AXPEntityMasterListViewModel, view: AXPQueryView);
1249
+ name: string;
1250
+ title: string;
1251
+ sorts: _acorex_platform_framework_shared_entity.AXPQuerySort[];
1252
+ columns: string[];
1253
+ conditions: _acorex_platform_framework_shared_entity.AXPQueryFilter[];
1254
+ indexCol: boolean | undefined;
1255
+ pageSize: number | undefined;
1256
+ visible: string | boolean | undefined;
1257
+ }
1258
+ declare class AXPEntityMasterListViewModel {
1259
+ private injector;
1260
+ private config;
1261
+ readonly entityDef: AXPEntity;
1262
+ private readonly _viewDef;
1263
+ private readonly formatService;
1264
+ private readonly session;
1265
+ private readonly workflowEventService;
1266
+ private readonly settings;
1267
+ private readonly widgetResolver;
1268
+ private readonly expressionEvaluator;
1269
+ private readonly contextEvalFactory;
1270
+ private readonly translation;
1271
+ private readonly commandService;
1272
+ private readonly eventService;
1273
+ private readonly queryExecutor;
1274
+ private readonly filterOperatorMiddleware;
1275
+ private readonly entityDefinitionRegistry;
1276
+ private settingEntityKey;
1277
+ private readonly destroyed;
1278
+ private lastAppliedSortKey;
1279
+ private lastAppliedFilterKey;
1280
+ private hasQueryParamsFilters;
1281
+ private routeQueryContextKey;
1282
+ private initialListSettingsApplied;
1283
+ /** Persisted expanded row ids for hierarchical lists (per view). */
1284
+ private readonly expandedRowIds;
1285
+ /** When true, row expand/collapse is not written to user settings (restore in progress). */
1286
+ skipExpandedRowPersistence: boolean;
1287
+ /** Resolved take/skip for the current view (null until loaded from settings). */
1288
+ private readonly resolvedListPaging;
1289
+ /** When true, pager changes are not persisted (programmatic UI sync). */
1290
+ skipListPagingPersistence: boolean;
1291
+ private listPersistenceMode;
1292
+ events$: Subject<{
1293
+ action: string;
1294
+ meta?: any;
1295
+ }>;
1296
+ private readonly allViews;
1297
+ private readonly visibleViews;
1298
+ views: _angular_core.Signal<AXPEntityMasterListViewQueryViewModel[]>;
1299
+ view: _angular_core.WritableSignal<AXPEntityMasterListViewQueryViewModel>;
1300
+ private readonly showRowIndexColumnEnabled;
1301
+ /**
1302
+ * Row index column: if the list view defines `indexCol` (true/false), that overrides the user setting;
1303
+ * if `indexCol` is omitted, visibility follows {@link AXPCommonSettings.ShowRowIndexColumn}.
1304
+ */
1305
+ showIndexColumn: _angular_core.Signal<boolean>;
1306
+ /** Layouts enabled via `interfaces.master.list.layouts.*.enabled`. */
1307
+ enabledListLayouts: _angular_core.Signal<AXPEntityMasterListLayoutType[]>;
1308
+ /** True when the user can switch between multiple enabled layouts. */
1309
+ canSwitchListLayout: _angular_core.Signal<boolean>;
1310
+ /** Active list layout for the current view. */
1311
+ activeListLayout: _angular_core.WritableSignal<AXPEntityMasterListLayoutType>;
1312
+ tableLayout: _angular_core.Signal<{
1313
+ enabled?: boolean;
1314
+ columns: AXPEntityTableColumn[];
1315
+ cssClass?: {
1316
+ row?: AXPExpression;
1317
+ cell?: AXPExpression;
1318
+ };
1319
+ } | undefined>;
1320
+ cardLayout: _angular_core.Signal<{
1321
+ enabled?: boolean;
1322
+ header: {
1323
+ title?: string;
1324
+ description?: string;
1325
+ icon?: string;
1326
+ };
1327
+ fields: AXPCardField[];
1328
+ } | undefined>;
1329
+ /** Global expanded state for all card bodies in card layout. */
1330
+ cardContentExpanded: _angular_core.WritableSignal<boolean>;
1331
+ /** Current presentation mode (table, compact cards, or expanded cards). */
1332
+ listDisplayMode: _angular_core.Signal<AXPEntityMasterListDisplayMode>;
1333
+ /**
1334
+ * Sets global card body visibility for card layout.
1335
+ */
1336
+ setCardContentExpanded(expanded: boolean): void;
1337
+ /**
1338
+ * Switches table vs compact/expanded card presentation.
1339
+ */
1340
+ setListDisplayMode(mode: AXPEntityMasterListDisplayMode): void;
1341
+ /** Enabled layouts with display metadata for the title layout switcher. */
1342
+ availableListLayouts: _angular_core.Signal<AXPEntityMasterListLayoutOption[]>;
1343
+ /** Active layout option (for title icon and switcher selection state). */
1344
+ currentListLayout: _angular_core.Signal<AXPEntityMasterListLayoutOption | null>;
1345
+ private static readonly LAYOUT_META;
1346
+ /**
1347
+ * Switches to the given layout when it is enabled.
1348
+ * Persists the choice at entity list level (shared across all views).
1349
+ */
1350
+ setListLayout(layout: AXPEntityMasterListLayoutType): void;
1351
+ /**
1352
+ * Cycles to the next enabled layout (table → card → table …).
1353
+ * No-op when only one layout is enabled.
1354
+ */
1355
+ switchListLayout(): AXPEntityMasterListLayoutType;
1356
+ private resolveActiveListLayout;
1357
+ private applyListLayoutFromSettings;
1358
+ private createLogicExpressionScope;
1359
+ private createDisplayExpressionScope;
1360
+ /**
1361
+ * Evaluates each view's `visible` expression and updates the filtered view list.
1362
+ */
1363
+ refreshVisibleViews(): Promise<void>;
1364
+ private resolveCommandNameExpression;
1365
+ private resolveTitleExpression;
1366
+ /**
1367
+ * Resolves a card header value (title, description, icon) from a property path, expression, or literal.
1368
+ * Supports multiple `{{ ... }}` segments in one string (e.g. `{{context.eval("a")}} - {{context.eval("b")}}`).
1369
+ * Multi-language maps (e.g. `{ "en-US": "...", "fa-IR": "..." }`) are returned as-is for the translate pipe.
1370
+ */
1371
+ resolveCardHeaderValue(value: string | undefined, rowData: unknown): Promise<AXPMultiLanguageString>;
1372
+ /**
1373
+ * Keeps i18n payloads intact for `translate`; coerces only plain scalars to string.
1374
+ */
1375
+ private normalizeCardHeaderDisplayValue;
1376
+ /**
1377
+ * Resolves badge color for a card header field (semantic token or expression per row).
1378
+ */
1379
+ resolveCardBadgeColor(field: AXPEntityListViewCardFieldViewModel, rowData: unknown): Promise<AXStyleColorType>;
1380
+ private resolveCardBadgeColorValue;
1381
+ /**
1382
+ * Resolves table row CSS classes from `layouts.table.cssClass.row` for the given row.
1383
+ */
1384
+ resolveTableRowCssClass(rowData: unknown): Promise<string | undefined>;
1385
+ /**
1386
+ * Resolves table cell CSS classes from `layouts.table.cssClass.cell` for the given row and column.
1387
+ */
1388
+ resolveTableCellCssClass(rowData: unknown, columnName: string): Promise<string | undefined>;
1389
+ private createTableCssClassExpressionScope;
1390
+ private resolveTableCssClassValue;
1391
+ private normalizeTableCssClassValue;
1392
+ private resolveTriggerName;
1393
+ setView(viewName?: string | null): Promise<void>;
1394
+ dataSource: AXDataSource<any>;
1395
+ constructor(injector: Injector, config: AXPEntity);
1396
+ private syncShowRowIndexColumnSetting;
1397
+ /**
1398
+ * Applies {@link AXPCommonSettings.EntityListPersistenceMode} for this list instance.
1399
+ * Call once when the list view model is created (before loading list UI state).
1400
+ */
1401
+ initializeListPersistence(): Promise<void>;
1402
+ getListPersistenceMode(): Promise<AXPEntityListPersistenceMode>;
1403
+ shouldLoadPersistedListState(): Promise<boolean>;
1404
+ shouldPersistListState(): Promise<boolean>;
1405
+ private clearEntityListSettings;
1406
+ applySettings(): Promise<void>;
1407
+ ensureListPagingResolved(): Promise<void>;
1408
+ getResolvedListPaging(): AXPEntityListPagingState;
1409
+ applyPagingToDataSourceWithoutLoad(): void;
1410
+ saveListPaging(take: number, skip: number): void;
1411
+ resetListPagingSkip(): void;
1412
+ private loadListPagingFromViewSettings;
1413
+ getExpandedRowIds(): string[];
1414
+ /**
1415
+ * Updates persisted expanded row ids when the user expands or collapses a tree row.
1416
+ */
1417
+ updateExpandedRowId(rowId: string, expanded: boolean): void;
1418
+ handleRowExpandChange(rowData: Record<string, unknown>): void;
1419
+ saveSettings(changesType: 'columnSizes' | 'columnOrders' | 'view' | 'pageSize' | 'listPaging' | 'filters' | 'sorts' | 'expandedRows' | 'listLayout' | 'cardContentExpanded', data?: unknown): Promise<void>;
1420
+ selectedItems: _angular_core.WritableSignal<any[]>;
1421
+ /**
1422
+ * Selected category from the category sidebar (left panel).
1423
+ * Used to set default category when creating new entities via command.
1424
+ * Structure: { id: string; title: string } or null when "All Items" is selected.
1425
+ */
1426
+ selectedCategory: _angular_core.WritableSignal<{
1427
+ id: string;
1428
+ title: string;
1429
+ } | null>;
1430
+ parentKey: _angular_core.Signal<string | undefined>;
1431
+ hasSelectedItems: _angular_core.Signal<boolean>;
1432
+ clearSelection(): void;
1433
+ /**
1434
+ * Sets the selected category from the category sidebar.
1435
+ * Call with null to clear (e.g. when "All Items" is selected).
1436
+ */
1437
+ setSelectedCategory(category: {
1438
+ id: string;
1439
+ title: string;
1440
+ } | null): void;
1441
+ title: _angular_core.Signal<string>;
1442
+ description: _angular_core.Signal<string | null>;
1443
+ filterDefinitions: _angular_core.WritableSignal<AXPEntityListFilterDefinition[]>;
1444
+ inlineFiltersPlaceholders: _angular_core.Signal<string[]>;
1445
+ hasInlineFilters: _angular_core.Signal<boolean>;
1446
+ /** Text for data-table cell highlighting (set only after filters are applied). */
1447
+ inlineFilterHighlightText: _angular_core.WritableSignal<string>;
1448
+ beardcrumbs: _angular_core.Signal<AXPBreadcrumbItem[]>;
1449
+ private allActions;
1450
+ /** Keeps the first action when list definitions repeat the same trigger name. */
1451
+ private dedupeActionsByName;
1452
+ /** Flattened actions including children for execute lookup */
1453
+ private flattenedActions;
1454
+ getPrimaryActions(): Promise<AXPEntityCommandTriggerViewModel[]>;
1455
+ getSecondaryActions(): Promise<AXPEntityCommandTriggerViewModel[]>;
1456
+ selectedScopeActionsCount: _angular_core.Signal<number>;
1457
+ primaryRowActions: _angular_core.Signal<AXPEntityCommandTriggerViewModel[]>;
1458
+ secondaryRowActions(rowData: any): Promise<AXPEntityCommandTriggerViewModel[]>;
1459
+ /**
1460
+ * Secondary actions for card layout rows, with the built-in Select action last (divider above it).
1461
+ */
1462
+ cardSecondaryRowActions(rowData: unknown): Promise<AXPEntityMasterListCardSecondaryActionItem[]>;
1463
+ filterQueries: _angular_core.WritableSignal<AXPFilterQuery[]>;
1464
+ private static readonly URL_FILTER_OPERATOR_TYPES;
1465
+ get properties(): AXPEntityProperty[];
1466
+ /**
1467
+ * Canonical JSON for the `filters` query param (sorted by field), or null when there are no active value filters.
1468
+ */
1469
+ filtersQueryParamCanonical(queries: AXPFilterQuery[]): string | null;
1470
+ /**
1471
+ * Parse a `filters` query string to the same canonical form used by {@link filtersQueryParamCanonical}.
1472
+ */
1473
+ static parseQueryParamFiltersToCanonical(filtersJson: string | null): string | null;
1474
+ private toUrlFilterPayloadItems;
1475
+ private static coerceFilterOperatorFromUrl;
1476
+ /**
1477
+ * Apply filters from query params
1478
+ */
1479
+ applyFiltersFromQueryParams(filtersJson: string | null): boolean;
1480
+ /**
1481
+ * Records the current route query context after initial resolver / view init so the first
1482
+ * subscription emission does not re-sync unnecessarily.
1483
+ */
1484
+ markRouteQueryContextSynced(queryParamMap: ParamMap): void;
1485
+ /**
1486
+ * Reacts to any route query param change while the list route is reused (`reuse: queryParamsChange`).
1487
+ * Handles known keys (`view`, `filters`) and re-evaluates view visibility for expression-driven params.
1488
+ */
1489
+ syncFromRouteQueryParams(queryParamMap: ParamMap): Promise<{
1490
+ reloadList: boolean;
1491
+ }>;
1492
+ private buildRouteQueryContextKey;
1493
+ private syncFiltersFromRouteQueryParam;
1494
+ /**
1495
+ * Loads host and merge-detail related sortable field definitions (async registry resolution).
1496
+ */
1497
+ loadSortableFields(): Promise<void>;
1498
+ /**
1499
+ * Loads host and merge-detail related filter definitions (async registry resolution).
1500
+ */
1501
+ loadFilterDefinitions(): Promise<void>;
1502
+ get filtersDef(): AXPEntityListFilterDefinition[];
1503
+ get preloadFiltersDef(): AXPEntityListFilterDefinition[];
1504
+ applyViewFilters(): Promise<void>;
1505
+ resetFilters(): void;
1506
+ applyFilterAndSort(): Promise<void>;
1507
+ private updateAppliedInlineFilterHighlightText;
1508
+ private resolveMergeDetailProperty;
857
1509
  private allAvailableColumns;
858
1510
  visibleColumnCount: () => number;
859
1511
  columns: _angular_core.WritableSignal<AXPEntityListViewColumnViewModel[]>;
@@ -910,7 +1562,7 @@ declare class AXPEntityMasterListViewModel {
910
1562
  executeCommand(commandName: string, data?: any): Promise<void>;
911
1563
  /**
912
1564
  * Merges default category from selected category in sidebar when executing create command.
913
- * For Entity:Create and create-entity, if entity has category plugin and a category is selected,
1565
+ * For Entity:Create, if entity has category plugin and a category is selected,
914
1566
  * pre-fills categoryIds and categories for the create form.
915
1567
  */
916
1568
  private mergeDefaultCategoryForCreate;
@@ -969,7 +1621,7 @@ declare class AXPEntityMasterSingleViewModel {
969
1621
  private readonly _viewDef;
970
1622
  private readonly session;
971
1623
  private readonly formatService;
972
- private readonly workflow;
1624
+ private readonly workflowEventService;
973
1625
  private readonly commandService;
974
1626
  private readonly destroyed;
975
1627
  private translateService;
@@ -1000,6 +1652,7 @@ declare class AXPEntityDetailViewModelFactory {
1000
1652
  private entityService;
1001
1653
  private layout;
1002
1654
  private injector;
1655
+ private queryExecutor;
1003
1656
  create(moduleName: string, entityName: string, id: string): Promise<AXPEntityMasterSingleViewModel>;
1004
1657
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityDetailViewModelFactory, never>;
1005
1658
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityDetailViewModelFactory>;
@@ -1036,7 +1689,6 @@ declare class AXPEntityMasterUpdateViewModel {
1036
1689
  private entityData;
1037
1690
  private props;
1038
1691
  private entityDef;
1039
- private workflow;
1040
1692
  private sessionService;
1041
1693
  private get moduleName();
1042
1694
  private get entityName();
@@ -1516,9 +2168,16 @@ declare class AXPAttachmentsPluginModule {
1516
2168
  static ɵinj: _angular_core.ɵɵInjectorDeclaration<AXPAttachmentsPluginModule>;
1517
2169
  }
1518
2170
 
2171
+ declare class AXPGalleryPluginModule {
2172
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPGalleryPluginModule, never>;
2173
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AXPGalleryPluginModule, never, never, never>;
2174
+ static ɵinj: _angular_core.ɵɵInjectorDeclaration<AXPGalleryPluginModule>;
2175
+ }
2176
+
1519
2177
  declare class AXPEntityModule {
2178
+ constructor();
1520
2179
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityModule, never>;
1521
- static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AXPEntityModule, never, [typeof i1.RouterModule, typeof AXPAttachmentsPluginModule, typeof i3.AXPWorkflowModule, typeof i4.AXPWidgetCoreModule, typeof i5.LayoutBuilderModule], never>;
2180
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AXPEntityModule, never, [typeof i1.RouterModule, typeof AXPAttachmentsPluginModule, typeof AXPGalleryPluginModule, typeof i4.AXPWidgetCoreModule, typeof i5.LayoutBuilderModule], never>;
1522
2181
  static ɵinj: _angular_core.ɵɵInjectorDeclaration<AXPEntityModule>;
1523
2182
  }
1524
2183
 
@@ -1526,10 +2185,6 @@ declare class AXPEntityModule {
1526
2185
  * Maps storage middleware failures to a command result the details view can surface.
1527
2186
  */
1528
2187
  declare function mapEntityStorageErrorToCommandResult(error: unknown, fallback?: string): AXPExecuteCommandResult;
1529
- /**
1530
- * Best-effort plain string for thrown {@link Error} messages from command results (no i18n lookup).
1531
- */
1532
- declare function commandMessageTextForError(value: AXPMultiLanguageString | undefined | null): string;
1533
2188
  /**
1534
2189
  * Data accessor for entity operations.
1535
2190
  * Provides methods to query and execute commands with smart resolution:
@@ -1702,6 +2357,41 @@ type AttachmentsPluginOptions = {
1702
2357
  */
1703
2358
  declare const attachmentsPlugin: AXPEntityActionPlugin;
1704
2359
 
2360
+ /** How to show gallery in entity single view: as a section (default) or as a separate page. */
2361
+ type GalleryDisplayMode = 'section' | 'page';
2362
+ /** Component key used when display is 'page'. Register a page component with this key via AXP_PAGE_COMPONENT_PROVIDER. */
2363
+ declare const GALLERY_PAGE_COMPONENT_KEY = "entity-gallery-page";
2364
+ type GalleryPluginOptions = {
2365
+ /** Property name to hold the gallery file list. Default 'gallery' */
2366
+ field?: string;
2367
+ /** Where to show gallery: section (inline) or page (separate tab). Default 'section' */
2368
+ display?: GalleryDisplayMode;
2369
+ /** Icon for the gallery page (when display is 'page'). Default 'fa-light fa-images' */
2370
+ icon?: string;
2371
+ /** Title override for gallery section/page. Default '@platform-layout-widgets:widgets.gallery.title' */
2372
+ title?: string;
2373
+ /** Gallery widget option: show thumbnails. Default true */
2374
+ thumbnail?: boolean;
2375
+ /** Gallery widget option: show header. Default true */
2376
+ header?: boolean;
2377
+ /** Gallery widget option: show file info. Default true */
2378
+ fileInfo?: boolean;
2379
+ /** Gallery widget option: show fullscreen button. Default true */
2380
+ fullScreenButton?: boolean;
2381
+ /** Gallery widget option: allow upload. Default true */
2382
+ allowUpload?: boolean;
2383
+ /** Gallery widget option: accepted upload MIME types. Default ['image/*'] */
2384
+ allowUploadTypes?: string[];
2385
+ /** File chooser providers to exclude (e.g. ['drive']) */
2386
+ excludeProviders?: string[];
2387
+ };
2388
+ /**
2389
+ * Gallery plugin.
2390
+ * - When display is 'section' (default), adds a section to the single layout with the gallery widget.
2391
+ * - When display is 'page', adds a page to entity.pages with GALLERY_PAGE_COMPONENT_KEY.
2392
+ */
2393
+ declare const galleryPlugin: AXPEntityActionPlugin;
2394
+
1705
2395
  interface AXPEntityStorageContext<TKey = any, TDetailDto extends AXPEntityDetailDto<TKey> = any, TListItemDto extends AXPEntityListItemDto<TKey> = any, TCreateDto extends AXPEntityCreateDto = any, TUpdateDto extends AXPEntityUpdateDto<TKey> = any> {
1706
2396
  op: AXPEntityOp;
1707
2397
  entityName: string;
@@ -1826,14 +2516,16 @@ declare const layoutOrderingMiddlewareProvider: AXPEntityModifierProvider;
1826
2516
  /**
1827
2517
  * Provides synchronous access to the ApplyLayoutOrdering setting.
1828
2518
  * Used by layout ordering middleware to avoid async in the modifier and prevent startup deadlocks.
1829
- * Value is updated on onLoaded/onChanged; first read can trigger a one-time background get (no await).
2519
+ * Reads from the settings in-memory cache when available; refreshes entity definitions when the value changes.
1830
2520
  */
1831
2521
  declare class AXPLayoutOrderingConfigService {
1832
2522
  private readonly settingsService;
2523
+ private readonly entityRegistry;
1833
2524
  private readonly _applyOrdering;
1834
- private syncScheduled;
2525
+ private asyncWarmupScheduled;
1835
2526
  constructor();
1836
2527
  getApplyOrdering(): boolean;
2528
+ private handleSettingsEvent;
1837
2529
  private syncFromSettings;
1838
2530
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLayoutOrderingConfigService, never>;
1839
2531
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPLayoutOrderingConfigService>;
@@ -2199,1045 +2891,634 @@ declare class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent
2199
2891
  */
2200
2892
  private runInitialExpandAndSync;
2201
2893
  /**
2202
- * Handles search input value changes - Uses server-side search for efficiency and reliability
2203
- */
2204
- handleSearchChange(event: AXValueChangedEvent<string>): Promise<void>;
2205
- /**
2206
- * Collects all parent IDs for the given search results
2207
- * Handles both nested 'parent' object and 'parentId' field in search results
2208
- * Recursively fetches parent nodes to build the full parent chain
2209
- */
2210
- private collectParentIds;
2211
- /**
2212
- * Collects children IDs for matching search results recursively
2213
- * Adds all descendants (children, grandchildren, etc.) to relevantNodeIds so they appear in the filtered tree
2214
- */
2215
- private collectChildrenIds;
2216
- /**
2217
- * Recursively collects all descendant IDs for a given node
2218
- */
2219
- private collectChildrenRecursively;
2220
- /**
2221
- * Fetches a single item by ID. Uses category tree service so byKey is used when available
2222
- * (returns full item with parent/parentId for building ancestor chains).
2223
- */
2224
- private fetchItemById;
2225
- /**
2226
- * Sorts parent IDs by their depth (root first, leaves last)
2227
- * Optimized to use cached data and batch fetch missing items
2228
- */
2229
- private sortParentsByDepth;
2230
- /**
2231
- * Updates translated messages for search results
2232
- */
2233
- private updateTranslatedMessages;
2234
- /**
2235
- * Resets search state and restores tree to original expanded state
2236
- */
2237
- private resetSearch;
2238
- /**
2239
- * Restores multiple-mode leaf selection after search reset.
2240
- */
2241
- private restoreMultipleSelectionAfterReload;
2242
- protected onNodeSelect(event: AXTreeViewNodeSelectEvent): Promise<void>;
2243
- /** Datasource callback for tree-view component. */
2244
- protected datasource: (id?: string) => Promise<AXTreeViewNode[]>;
2245
- protected onConfirm(): Promise<void>;
2246
- protected onCancel(): Promise<void>;
2247
- /**
2248
- * Clears all selected items
2249
- */
2250
- protected onClearAll(): void;
2251
- /**
2252
- * Checks if a node matches the current search term
2253
- */
2254
- protected isMatchingNode(nodeId: string): boolean;
2255
- /**
2256
- * Checks if a node is currently selected
2257
- */
2258
- protected isNodeSelected(nodeId: string | number | undefined): boolean;
2259
- /**
2260
- * Expands parent nodes, collects all LEAF descendants, and selects them visually.
2261
- * If the parent itself is a leaf (no children), it will be added.
2262
- * When prefetchedChildren is provided, avoids an extra datasource(parentId) call.
2263
- */
2264
- private selectAllLeafDescendants;
2265
- /**
2266
- * Removes all LEAF descendants from selectedNodeIds.
2267
- * For 'all' node: clears everything and uses tree's deselectAll().
2268
- * For other nodes: tree handles visual state via user click.
2269
- */
2270
- private deselectAllLeafDescendants;
2271
- /**
2272
- * Recursively expands parent nodes and collects LEAF node IDs.
2273
- * When treeComponent is provided, expands each parent node before loading children.
2274
- * When prefetchedChildren is provided, uses it instead of calling datasource(parentId) (one less API call).
2275
- * Fetches each node's children at most once by passing grandchildren when recursing.
2276
- */
2277
- private collectLeafNodes;
2278
- /**
2279
- * Checks if a node has children
2280
- */
2281
- private nodeHasChildren;
2282
- /**
2283
- * Checks if a node is a leaf (has no children)
2284
- */
2285
- private isLeafNodeCheck;
2286
- /**
2287
- * Caches node data from a tree node
2288
- */
2289
- private cacheNodeFromTreeNode;
2290
- /**
2291
- * Builds complete ancestor chains for all selected node IDs.
2292
- * Returns a Map where key is the selected node ID and value is array of ancestor IDs from root to parent.
2293
- * Batch-fetches missing node and ancestor data in parallel to minimize API calls.
2294
- */
2295
- private buildAncestorChains;
2296
- /**
2297
- * Expands ancestor nodes in order from root to leaf.
2298
- * This ensures parent nodes are loaded into the tree before selecting children.
2299
- */
2300
- private expandAncestorNodesInOrder;
2301
- /** Waits until the node is expanded (tree has loaded children). Polls so deep paths load. */
2302
- private waitForNodeExpanded;
2303
- /**
2304
- * Updates parent node states (selected/indeterminate) based on children selection.
2305
- * Called after leaf nodes are selected to properly show parent states.
2306
- * Works bottom-up from deepest parents to root, tracking states in a Map.
2307
- */
2308
- private updateParentStatesAfterSelection;
2309
- /**
2310
- * Loads node data for IDs that are selected but not yet in the cache.
2311
- * This is critical for pre-selected values in collapsed branches.
2312
- * Fetches all missing IDs in parallel to minimize API calls and latency.
2313
- */
2314
- private loadMissingNodeData;
2315
- /**
2316
- * For each selected id, if cached item has no parent (e.g. batch query returned minimal fields),
2317
- * re-fetch by id so we have parent/parentId for building ancestor chains.
2318
- * Fetches all needing refresh in parallel.
2319
- */
2320
- private ensureParentDataInCache;
2321
- /**
2322
- * Resolves parent ID from node data: supports nested `parent` object or flat parentId/parentKey.
2323
- */
2324
- private getParentIdFromNodeData;
2325
- /**
2326
- * Marks a node and its children as disabled if the node ID matches the excluded ID.
2327
- */
2328
- private markNodeAsDisabled;
2329
- /**
2330
- * Processes root node: marks excluded nodes as disabled.
2331
- */
2332
- private processRootNode;
2333
- /**
2334
- * Processes child nodes: marks excluded as disabled
2335
- */
2336
- private processChildNodes;
2337
- /**
2338
- * Caches node data from items array
2339
- */
2340
- private cacheNodeData;
2341
- /**
2342
- * Caches node data from tree nodes
2343
- */
2344
- private cacheNodeDataFromNodes;
2345
- /**
2346
- * Calculate the full path from root to the selected node.
2347
- * Returns an array of strings like ["Operations", "IT Operations"] for node "IT Operations" under parent "Operations".
2348
- * Uses tree-view's getNodePath() API when available, otherwise falls back to manual calculation.
2349
- */
2350
- private calculateNodePath;
2351
- /**
2352
- * Manual path calculation fallback
2353
- */
2354
- private calculateNodePathManually;
2355
- /**
2356
- * Get the display title for a node.
2357
- */
2358
- private getNodeTitle;
2359
- private getSelectedItems;
2360
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityCategoryTreeSelectorComponent, never>;
2361
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityCategoryTreeSelectorComponent, "axp-entity-category-tree-selector", never, {}, {}, never, never, true, never>;
2362
- }
2363
-
2364
- declare class AXPEntityCategoryWidgetColumnComponent extends AXPColumnWidgetComponent<any> {
2365
- protected readonly entityDetailPopoverService: AXPEntityDetailPopoverService;
2366
- protected readonly formatService: AXFormatService;
2367
- protected readonly entityResolver: AXPEntityDefinitionRegistryService;
2368
- private readonly categoryBatchResolver;
2369
- private readonly rawValueSignal;
2370
- set rawValueInput(value: any);
2371
- protected entity: _angular_core.Signal<string>;
2372
- protected valueField: _angular_core.Signal<string>;
2373
- protected textField: _angular_core.Signal<string>;
2374
- protected columnName: _angular_core.Signal<string>;
2375
- protected defaultTextField: _angular_core.Signal<string>;
2376
- protected displayField: _angular_core.Signal<string>;
2377
- protected host: ElementRef<any>;
2378
- private entityDef;
2379
- protected displayItems: _angular_core.WritableSignal<any[]>;
2380
- protected selectedItemIndex: _angular_core.WritableSignal<number>;
2381
- private efEntity;
2382
- private efDisplay;
2383
- protected visibleItems: _angular_core.Signal<any[]>;
2384
- protected columnItems: _angular_core.Signal<AXPColumnItemListItem[]>;
2385
- protected showItemDetail(item: any, index: number, anchor?: HTMLElement): Promise<void>;
2386
- protected handleItemClick(listItem: AXPColumnItemListItem): void;
2387
- protected getItemPath(item: any): string[];
2388
- protected hasParent(item: any): boolean;
2389
- protected getItemText(item: any): string;
2390
- protected joinPath(path: string[]): string;
2391
- protected getItemId(item: any): string;
2392
- protected getBreadcrumbPath(item: any): string;
2393
- private resolveItemsWithPaths;
2394
- /**
2395
- * Build path from categories array when record has full chain (id, parentId, title).
2396
- * Used when middleware enriches categories on create/update.
2894
+ * Handles search input value changes - Uses server-side search for efficiency and reliability
2397
2895
  */
2398
- private buildItemWithPathFromChain;
2399
- private extractItemWithPath;
2896
+ handleSearchChange(event: AXValueChangedEvent<string>): Promise<void>;
2400
2897
  /**
2401
- * Calculate the full path from root to the item.
2402
- * Returns an array of strings like ["C", "B"] for item B under parent C.
2898
+ * Collects all parent IDs for the given search results
2899
+ * Handles both nested 'parent' object and 'parentId' field in search results
2900
+ * Recursively fetches parent nodes to build the full parent chain
2403
2901
  */
2404
- private calculateItemPath;
2405
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityCategoryWidgetColumnComponent, never>;
2406
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityCategoryWidgetColumnComponent, "axp-entity-category-widget-column", never, { "rawValue": { "alias": "rawValue"; "required": false; }; "rowData": { "alias": "rowData"; "required": false; }; "rawValueInput": { "alias": "rawValue"; "required": false; }; }, {}, never, never, true, never>;
2407
- }
2408
-
2409
- interface AXPEntityCategoryWidgetOptions {
2410
- disabled?: boolean | AXPExpression;
2411
- readonly?: boolean | AXPExpression;
2412
- placeholder?: string;
2413
- entity?: string;
2414
- multiple?: boolean;
2415
- textField?: string;
2416
- valueField?: string;
2417
- parentKey?: string;
2418
- expose?: Array<{
2419
- source: string;
2420
- target: string;
2421
- }>;
2422
- allowClear?: boolean;
2423
- look?: 'select' | 'lookup';
2424
- maxVisible?: number;
2425
- characterLimit?: number | 'auto';
2426
- sectionLimit?: number | 'auto';
2427
- }
2428
-
2429
- declare class AXPEntityCategoryWidgetEditComponent extends AXPValueWidgetComponent<any, AXPEntityCategoryWidgetOptions> {
2430
- #private;
2431
- protected readonly entityResolver: AXPEntityDefinitionRegistryService;
2432
- protected readonly popupService: AXPopupService;
2433
- private readonly translateService;
2434
- protected readonly cdr: ChangeDetectorRef;
2435
- protected entity: _angular_core.Signal<string>;
2436
- protected multiple: _angular_core.Signal<boolean>;
2437
- protected disabled: _angular_core.Signal<boolean>;
2438
- protected textField: _angular_core.Signal<string>;
2439
- protected valueField: _angular_core.Signal<string>;
2440
- protected expose: _angular_core.Signal<{
2441
- source: string;
2442
- target: string;
2443
- }[] | undefined>;
2444
- protected allowClear: _angular_core.Signal<boolean>;
2445
- protected characterLimit: _angular_core.Signal<number | "auto">;
2446
- protected sectionLimit: _angular_core.Signal<number | "auto">;
2447
- protected defaultTextField: _angular_core.Signal<string>;
2448
- protected displayField: _angular_core.Signal<string>;
2449
- protected searchPlaceholderText: _angular_core.WritableSignal<string>;
2450
- protected selectedItems: _angular_core.WritableSignal<any[]>;
2451
- protected isLoading: _angular_core.WritableSignal<boolean>;
2452
- protected isOpen: _angular_core.WritableSignal<boolean>;
2453
- protected tagBox: _angular_core.Signal<AXTagBoxComponent | undefined>;
2454
- protected searchTerm: _angular_core.WritableSignal<string | null>;
2455
- private entityDef;
2902
+ private collectParentIds;
2456
2903
  /**
2457
- * Flag to prevent the value effect from running during internal updates.
2458
- * This prevents circular dependency when setItems() calls setValue().
2904
+ * Collects children IDs for matching search results recursively
2905
+ * Adds all descendants (children, grandchildren, etc.) to relevantNodeIds so they appear in the filtered tree
2459
2906
  */
2460
- private isInternalUpdate;
2461
- protected handleAddClick(e: AXClickEvent): void;
2462
- protected handleValueChange(e: AXValueChangedEvent): void;
2463
- protected handleOnBlur(e: AXFocusEvent): void;
2464
- protected handleKeyUp(e: AXHtmlEvent): Promise<void>;
2465
- protected handleClearClick(): void;
2466
- protected handleRemoveItem(event: Event, index: number): Promise<void>;
2467
- clearInput(): void;
2468
- private showTreeSelector;
2469
- clear(): void;
2470
- private findByValue;
2471
- private setItems;
2472
- private singleOrMultiple;
2473
- private normalizePopupSelectedIds;
2474
- protected getItemLabel(item: any): string;
2907
+ private collectChildrenIds;
2475
2908
  /**
2476
- * Get item path as array for breadcrumb component (raw MLS or string per segment).
2909
+ * Recursively collects all descendant IDs for a given node
2477
2910
  */
2478
- protected getItemPath(item: any): AXPMultiLanguageString[];
2911
+ private collectChildrenRecursively;
2479
2912
  /**
2480
- * Join path array with separator.
2481
- * Override this method to customize the separator (e.g., " > ", " -> ", " / ")
2913
+ * Fetches a single item by ID. Uses category tree service so byKey is used when available
2914
+ * (returns full item with parent/parentId for building ancestor chains).
2482
2915
  */
2483
- protected joinPath(path: unknown[]): string;
2484
- protected getItemId(item: any): string;
2916
+ private fetchItemById;
2485
2917
  /**
2486
- * Calculate the full path from root to the item.
2487
- * Returns an array of strings like ["C", "B"] for item B under parent C.
2918
+ * Sorts parent IDs by their depth (root first, leaves last)
2919
+ * Optimized to use cached data and batch fetch missing items
2488
2920
  */
2489
- private calculateItemPath;
2490
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityCategoryWidgetEditComponent, never>;
2491
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityCategoryWidgetEditComponent, "axp-entity-category-widget-edit", never, {}, {}, never, never, true, never>;
2492
- }
2493
-
2494
- declare class AXPEntityCategoryWidgetViewComponent extends AXPValueWidgetComponent<any> {
2495
- protected readonly entityResolver: AXPEntityDefinitionRegistryService;
2496
- protected entity: _angular_core.Signal<string>;
2497
- protected multiple: _angular_core.Signal<boolean>;
2498
- protected valueField: _angular_core.Signal<string>;
2499
- protected textField: _angular_core.Signal<string>;
2500
- protected badgeClass: _angular_core.Signal<string>;
2501
- protected displayField: _angular_core.Signal<string>;
2502
- protected loading: _angular_core.WritableSignal<boolean>;
2503
- private entityDef;
2504
- protected displayItems: _angular_core.WritableSignal<{
2505
- id: string;
2506
- titleRaw: AXPMultiLanguageString | null | undefined;
2507
- }[]>;
2508
- private efEntity;
2509
- private efDisplay;
2510
- private extractItem;
2511
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityCategoryWidgetViewComponent, never>;
2512
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityCategoryWidgetViewComponent, "axp-entity-category-widget-view", never, {}, {}, never, never, true, never>;
2513
- }
2514
-
2515
- declare const AXPEntityCategoryWidget: AXPWidgetConfig;
2516
-
2517
- declare class AXPTruncatedBreadcrumbComponent implements OnDestroy {
2518
- private readonly mlsResolver;
2519
- /** Plain string or locale map per segment; truncation uses resolved text (see {@link resolvedSectionTexts}). */
2520
- sections: _angular_core.InputSignal<readonly (AXPMultiLanguageString | null | undefined)[]>;
2521
- characterLimit: _angular_core.InputSignal<number | "auto">;
2522
- sectionLimit: _angular_core.InputSignal<number | "auto">;
2523
- separatorIcon: _angular_core.InputSignal<string>;
2524
- ellipsisIcon: _angular_core.InputSignal<string>;
2525
- eyeIcon: _angular_core.InputSignal<string>;
2526
- protected container: _angular_core.Signal<ElementRef<HTMLDivElement> | undefined>;
2527
- protected isExpanded: _angular_core.WritableSignal<boolean>;
2528
- private containerWidth;
2529
- private resizeObserver;
2530
- /** Resolved display strings for length / ellipsis (same rules as the pipe). */
2531
- protected resolvedSectionTexts: _angular_core.Signal<string[]>;
2532
- protected effectiveCharacterLimit: _angular_core.Signal<number>;
2533
- protected effectiveSectionLimit: _angular_core.Signal<number>;
2534
- protected hasTruncatedText: _angular_core.Signal<boolean>;
2535
- protected hasHiddenSections: _angular_core.Signal<boolean>;
2921
+ private sortParentsByDepth;
2536
2922
  /**
2537
- * canToggle: If this is false, NO Eye Icon and NO Click events will exist.
2923
+ * Updates translated messages for search results
2538
2924
  */
2539
- protected canToggle: _angular_core.Signal<boolean>;
2540
- protected allSectionsTruncated: _angular_core.Signal<{
2541
- text: string;
2542
- original: string;
2543
- }[]>;
2544
- protected displayedSections: _angular_core.Signal<{
2545
- text: string;
2546
- original: string;
2547
- }[]>;
2548
- protected lastSection: _angular_core.Signal<{
2549
- text: string;
2550
- original: string;
2551
- }>;
2552
- protected fullPath: _angular_core.Signal<string>;
2553
- constructor();
2554
- ngOnDestroy(): void;
2555
- protected handleSeparatorClick(event: Event): void;
2556
- protected handleEllipsisClick(event: Event): void;
2557
- protected handleCollapseClick(event: Event): void;
2558
- private initializeResizeObserver;
2559
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTruncatedBreadcrumbComponent, never>;
2560
- 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>;
2561
- }
2562
-
2563
- declare const AXPEntityDefinitionProviderWidget: AXPWidgetConfig;
2564
- declare module '@acorex-platform/framework-shared/widget-core' {
2565
- interface AXPWidgetTypesMap {
2566
- entityDefinitionProvider: 'entity-definition-provider-editor';
2567
- }
2568
- }
2569
-
2570
- declare class AXPEntityDefinitionProviderWidgetEditComponent extends AXPProviderSelectWidgetEditBase {
2571
- private readonly entityRegistry;
2925
+ private updateTranslatedMessages;
2572
2926
  /**
2573
- * Last applied module filter (from context) to avoid redundant reloads.
2927
+ * Resets search state and restores tree to original expanded state
2574
2928
  */
2575
- private readonly lastModuleFilterKey;
2929
+ private resetSearch;
2576
2930
  /**
2577
- * Reloads entity options when `filterModuleField` changes in form context (not only via `widget.refresh()`).
2931
+ * Restores multiple-mode leaf selection after search reset.
2578
2932
  */
2579
- private readonly reloadWhenModuleContextChanges;
2933
+ private restoreMultipleSelectionAfterReload;
2934
+ protected onNodeSelect(event: AXTreeViewNodeSelectEvent): Promise<void>;
2935
+ /** Datasource callback for tree-view component. */
2936
+ protected datasource: (id?: string) => Promise<AXTreeViewNode[]>;
2937
+ protected onConfirm(): Promise<void>;
2938
+ protected onCancel(): Promise<void>;
2580
2939
  /**
2581
- * Options:
2582
- * - `filterModuleField`: sibling context field name (e.g. `entityListModule`); when set, only entities in that module are listed.
2583
- * - `valueFormat`: `fullKey` (`module.name`, default) or `entityName` (short name only, for menus that store `entityListRef.entity`).
2940
+ * Clears all selected items
2584
2941
  */
2585
- protected loadDataSourceRows(): Promise<Array<{
2586
- value: string;
2587
- title: string;
2588
- }>>;
2589
- refresh(): void;
2942
+ protected onClearAll(): void;
2590
2943
  /**
2591
- * Reads sibling field from context store data (same shape as `lodash/get` paths).
2944
+ * Checks if a node matches the current search term
2592
2945
  */
2593
- private readModuleFromContext;
2946
+ protected isMatchingNode(nodeId: string): boolean;
2594
2947
  /**
2595
- * Resolves a sibling field path relative to the current widget's parent path.
2948
+ * Checks if a node is currently selected
2596
2949
  */
2597
- private resolveSiblingContextPath;
2598
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityDefinitionProviderWidgetEditComponent, never>;
2599
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityDefinitionProviderWidgetEditComponent, "axp-entity-definition-provider-widget-edit", never, {}, {}, never, never, true, never>;
2600
- }
2601
-
2602
- declare class AXPEntityListTableService {
2603
- private readonly workflow;
2604
- private readonly commandService;
2605
- private readonly expressionEvaluator;
2606
- private readonly settings;
2950
+ protected isNodeSelected(nodeId: string | number | undefined): boolean;
2607
2951
  /**
2608
- * Convert Entity to List Widget Options
2952
+ * Expands parent nodes, collects all LEAF descendants, and selects them visually.
2953
+ * If the parent itself is a leaf (no children), it will be added.
2954
+ * When prefetchedChildren is provided, avoids an extra datasource(parentId) call.
2609
2955
  */
2610
- convertEntityToListOptions(entity: AXPEntity, options: any, allActions: AXPEntityCommandTriggerViewModel[]): Promise<AXPDataListWidgetComponentOptions>;
2956
+ private selectAllLeafDescendants;
2611
2957
  /**
2612
- * Create DataSource for Entity
2958
+ * Removes all LEAF descendants from selectedNodeIds.
2959
+ * For 'all' node: clears everything and uses tree's deselectAll().
2960
+ * For other nodes: tree handles visual state via user click.
2613
2961
  */
2614
- private createDataSource;
2962
+ private deselectAllLeafDescendants;
2615
2963
  /**
2616
- * Convert Properties to Columns
2964
+ * Recursively expands parent nodes and collects LEAF node IDs.
2965
+ * When treeComponent is provided, expands each parent node before loading children.
2966
+ * When prefetchedChildren is provided, uses it instead of calling datasource(parentId) (one less API call).
2967
+ * Fetches each node's children at most once by passing grandchildren when recursing.
2617
2968
  */
2618
- private createColumnsFromProperties;
2969
+ private collectLeafNodes;
2619
2970
  /**
2620
- * Map EntityTableColumn to ListWidgetColumn
2971
+ * Checks if a node has children
2621
2972
  */
2622
- private mapEntityColumnToWidgetColumn;
2973
+ private nodeHasChildren;
2623
2974
  /**
2624
- * Convert Entity Actions to Row Commands
2975
+ * Checks if a node is a leaf (has no children)
2625
2976
  */
2626
- private createRowCommands;
2977
+ private isLeafNodeCheck;
2627
2978
  /**
2628
- * Wraps string values with AXP_ROW_EXPR_PREFIX so widget-renderer does not
2629
- * evaluate them (it only treats {{ ... }} as expressions). Data-list will
2630
- * unwrap and evaluate per row with row data. Only used for secondary commands.
2979
+ * Caches node data from a tree node
2980
+ */
2981
+ private cacheNodeFromTreeNode;
2982
+ /**
2983
+ * Builds complete ancestor chains for all selected node IDs.
2984
+ * Returns a Map where key is the selected node ID and value is array of ancestor IDs from root to parent.
2985
+ * Batch-fetches missing node and ancestor data in parallel to minimize API calls.
2631
2986
  */
2632
- private wrapRowExpr;
2987
+ private buildAncestorChains;
2633
2988
  /**
2634
- * Check if entity has Selected Scope Actions
2989
+ * Expands ancestor nodes in order from root to leaf.
2990
+ * This ensures parent nodes are loaded into the tree before selecting children.
2635
2991
  */
2636
- private hasSelectedScopeActions;
2637
- private evaluateExpressions;
2992
+ private expandAncestorNodesInOrder;
2993
+ /** Waits until the node is expanded (tree has loaded children). Polls so deep paths load. */
2994
+ private waitForNodeExpanded;
2638
2995
  /**
2639
- * Handle execution of a row command (shared by double-click and command handlers)
2996
+ * Updates parent node states (selected/indeterminate) based on children selection.
2997
+ * Called after leaf nodes are selected to properly show parent states.
2998
+ * Works bottom-up from deepest parents to root, tracking states in a Map.
2640
2999
  */
2641
- private handleRowCommand;
3000
+ private updateParentStatesAfterSelection;
2642
3001
  /**
2643
- * When a related entity list declares `excludeProperties`, row commands bypass the details page
2644
- * `execute()` merge — apply the same exclusions for embedded create/update commands.
3002
+ * Loads node data for IDs that are selected but not yet in the cache.
3003
+ * This is critical for pre-selected values in collapsed branches.
3004
+ * Fetches all missing IDs in parallel to minimize API calls and latency.
2645
3005
  */
2646
- private mergeRelatedListFormOptions;
3006
+ private loadMissingNodeData;
2647
3007
  /**
2648
- * Create default events
3008
+ * For each selected id, if cached item has no parent (e.g. batch query returned minimal fields),
3009
+ * re-fetch by id so we have parent/parentId for building ancestor chains.
3010
+ * Fetches all needing refresh in parallel.
2649
3011
  */
2650
- private createDefaultEvents;
2651
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityListTableService, never>;
2652
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityListTableService>;
2653
- }
2654
-
2655
- interface AXPEntityListToolbarConvertOptions {
2656
- excludeColumns?: string[];
2657
- includeColumns?: string[];
2658
- /** Related list: evaluated `AXPEntityTableColumn[]` from `AXPRelatedEntity.columns` */
2659
- relatedTableColumns?: AXPEntityTableColumn[];
2660
- customFilterDefinitions?: Partial<AXPEntityListFilterDefinition>[];
2661
- }
2662
- declare class AXPEntityListToolbarService {
2663
- private readonly widgetResolver;
2664
- private readonly entityRegistry;
3012
+ private ensureParentDataInCache;
2665
3013
  /**
2666
- * Convert Entity to Toolbar Options
3014
+ * Resolves parent ID from node data: supports nested `parent` object or flat parentId/parentKey.
2667
3015
  */
2668
- convertEntityToolbarOptions(entity: AXPEntity, options: AXPEntityListToolbarConvertOptions | undefined): Promise<{
2669
- filterDefinitions: AXPEntityListFilterDefinition[];
2670
- columnDefinitions: AXPColumnQuery[];
2671
- sortDefinitions: AXPSortDefinition[];
2672
- }>;
3016
+ private getParentIdFromNodeData;
2673
3017
  /**
2674
- * Merges custom filter definitions into the entity-derived list by `field`.
2675
- * Matching fields: custom properties are applied on top of the base definition.
2676
- * Non-matching custom entries are appended.
3018
+ * Marks a node and its children as disabled if the node ID matches the excluded ID.
2677
3019
  */
2678
- private mergeFilterDefinitions;
2679
- private filterFieldKey;
2680
- private mergeFilterDefinition;
3020
+ private markNodeAsDisabled;
2681
3021
  /**
2682
- * Create Filter Definitions for Toolbar
3022
+ * Processes root node: marks excluded nodes as disabled.
2683
3023
  */
2684
- private createFilterDefinitions;
3024
+ private processRootNode;
2685
3025
  /**
2686
- * Create Column Definitions for Toolbar.
2687
- * Includes both entity.properties and enriched columns (e.g. person.firstName with showAs).
3026
+ * Processes child nodes: marks excluded as disabled
2688
3027
  */
2689
- private createColumnDefinitions;
3028
+ private processChildNodes;
2690
3029
  /**
2691
- * Create Sort Definitions for Toolbar.
2692
- * Includes host properties and merge-detail related fields with sort enabled.
3030
+ * Caches node data from items array
2693
3031
  */
2694
- private createSortDefinitions;
2695
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityListToolbarService, never>;
2696
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityListToolbarService>;
2697
- }
2698
-
2699
- declare class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
2700
- #private;
2701
- protected entityService: AXPEntityDefinitionRegistryService;
2702
- protected workflow: AXPWorkflowService;
2703
- protected entityListTableService: AXPEntityListTableService;
2704
- protected entityListToolbarService: AXPEntityListToolbarService;
2705
- protected deviceService: AXPDeviceService;
2706
- protected commandService: AXPCommandService;
2707
- protected eventService: AXPBroadcastEventService;
2708
- private readonly expressionEvaluator;
2709
- private readonly route;
2710
- protected isMounted: _angular_core.WritableSignal<boolean>;
2711
- readonly entity: _angular_core.WritableSignal<AXPEntity | null>;
2712
- protected listNode: _angular_core.WritableSignal<AXPWidgetNode | null>;
2713
- protected list: _angular_core.Signal<AXPWidgetRendererDirective | undefined>;
2714
- protected allWidgets: _angular_core.Signal<readonly AXPWidgetRendererDirective[]>;
2715
- protected listWidget: _angular_core.WritableSignal<AXPWidgetRendererDirective | undefined>;
2716
- protected toolbarWidget: _angular_core.Signal<AXPWidgetRendererDirective | undefined>;
2717
- protected selectedItems: _angular_core.WritableSignal<any[]>;
2718
- protected toolbarNode: _angular_core.WritableSignal<AXPWidgetNode | null>;
2719
- protected destroyed: Subject<void>;
2720
- protected entitySource: _angular_core.Signal<any>;
2721
- protected excludeColumns: _angular_core.Signal<string[]>;
2722
- protected includeColumns: _angular_core.Signal<string[]>;
2723
- protected relatedTableColumns: _angular_core.Signal<AXPEntityTableColumn[] | undefined>;
2724
- protected customFilterDefinitions: _angular_core.Signal<Partial<AXPFilterDefinition>[] | undefined>;
2725
- protected externalActions: _angular_core.Signal<AXPEntityAction[]>;
2726
- protected maxHeight: _angular_core.Signal<string>;
2727
- protected showEntityActions: _angular_core.Signal<any>;
2728
- protected showToolbar: _angular_core.Signal<any>;
2729
- protected allActions: _angular_core.Signal<AXPEntityCommandTriggerViewModel[]>;
2730
- protected primaryActions: _angular_core.Signal<AXPActionMenuItem[]>;
2731
- protected handleUnselectAll(): void;
2732
- protected secondaryActions: _angular_core.Signal<AXPActionMenuItem[]>;
2733
- protected handleActionClick(item: AXPActionMenuItem): void;
2734
- protected handleSecondaryActionClick(item: AXPActionMenuItem): void;
2735
- protected execute(commandName: string, _data: unknown): Promise<void>;
3032
+ private cacheNodeData;
2736
3033
  /**
2737
- * Resolves toolbar commands including nested dropdown (`items`) actions.
3034
+ * Caches node data from tree nodes
2738
3035
  */
2739
- private findToolbarAction;
2740
- private evaluateToolbarExpressions;
3036
+ private cacheNodeDataFromNodes;
2741
3037
  /**
2742
- * Parses the `filters` query param (same shape as standalone entity list routes).
3038
+ * Calculate the full path from root to the selected node.
3039
+ * Returns an array of strings like ["Operations", "IT Operations"] for node "IT Operations" under parent "Operations".
3040
+ * Uses tree-view's getNodePath() API when available, otherwise falls back to manual calculation.
2743
3041
  */
2744
- private parseFiltersFromRoute;
3042
+ private calculateNodePath;
2745
3043
  /**
2746
- * Route `filters` apply only when the active details `page` matches this list's entity
2747
- * (e.g. WorkOrder filters must not affect FailureRegister on the same asset layout).
3044
+ * Manual path calculation fallback
2748
3045
  */
2749
- private shouldApplyRouteFilters;
3046
+ private calculateNodePathManually;
2750
3047
  /**
2751
- * Merges route filters into related-entity toolbar filters (route wins per field).
3048
+ * Get the display title for a node.
2752
3049
  */
2753
- private mergeToolbarFilters;
2754
- private getMergedToolbarFilters;
3050
+ private getNodeTitle;
3051
+ private getSelectedItems;
3052
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityCategoryTreeSelectorComponent, never>;
3053
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityCategoryTreeSelectorComponent, "axp-entity-category-tree-selector", never, {}, {}, never, never, true, never>;
3054
+ }
3055
+
3056
+ declare class AXPEntityCategoryWidgetColumnComponent extends AXPColumnWidgetComponent<any> {
3057
+ protected readonly entityDetailPopoverService: AXPEntityDetailPopoverService;
3058
+ protected readonly formatService: AXFormatService;
3059
+ protected readonly entityResolver: AXPEntityDefinitionRegistryService;
3060
+ private readonly categoryBatchResolver;
3061
+ private readonly rawValueSignal;
3062
+ set rawValueInput(value: any);
3063
+ protected entity: _angular_core.Signal<string>;
3064
+ protected valueField: _angular_core.Signal<string>;
3065
+ protected textField: _angular_core.Signal<string>;
3066
+ protected columnName: _angular_core.Signal<string>;
3067
+ protected defaultTextField: _angular_core.Signal<string>;
3068
+ protected displayField: _angular_core.Signal<string>;
3069
+ protected host: ElementRef<any>;
3070
+ private entityDef;
3071
+ protected displayItems: _angular_core.WritableSignal<any[]>;
3072
+ protected selectedItemIndex: _angular_core.WritableSignal<number>;
3073
+ private efEntity;
3074
+ private efDisplay;
3075
+ protected visibleItems: _angular_core.Signal<any[]>;
3076
+ protected columnItems: _angular_core.Signal<AXPColumnItemListItem[]>;
3077
+ protected showItemDetail(item: any, index: number, anchor?: HTMLElement): Promise<void>;
3078
+ protected handleItemClick(listItem: AXPColumnItemListItem): void;
3079
+ protected getItemPath(item: any): string[];
3080
+ protected hasParent(item: any): boolean;
3081
+ protected getItemText(item: any): string;
3082
+ protected joinPath(path: string[]): string;
3083
+ protected getItemId(item: any): string;
3084
+ protected getBreadcrumbPath(item: any): string;
3085
+ private resolveItemsWithPaths;
2755
3086
  /**
2756
- * Applies merged route + parent-scope filters to the widget value and data source.
3087
+ * Build path from categories array when record has full chain (id, parentId, title).
3088
+ * Used when middleware enriches categories on create/update.
2757
3089
  */
2758
- private applyMergedRouteFiltersToList;
2759
- /** Syncs toolbar filters to context and AXDataSource (retries until data-list is mounted). */
2760
- private reapplyScopedFiltersToDataSource;
3090
+ private buildItemWithPathFromChain;
3091
+ private extractItemWithPath;
2761
3092
  /**
2762
- * Entity lists use `fetchDataMode: 'manual'`; after scoped filters reach the data source,
2763
- * the grid must be refreshed once (initial #effect may run before the data-list is ready).
3093
+ * Calculate the full path from root to the item.
3094
+ * Returns an array of strings like ["C", "B"] for item B under parent C.
2764
3095
  */
2765
- private triggerInitialLoadIfNeeded;
3096
+ private calculateItemPath;
3097
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityCategoryWidgetColumnComponent, never>;
3098
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityCategoryWidgetColumnComponent, "axp-entity-category-widget-column", never, { "rawValue": { "alias": "rawValue"; "required": false; }; "rowData": { "alias": "rowData"; "required": false; }; "rawValueInput": { "alias": "rawValue"; "required": false; }; }, {}, never, never, true, never>;
3099
+ }
3100
+
3101
+ interface AXPEntityCategoryWidgetOptions {
3102
+ disabled?: boolean | AXPExpression;
3103
+ readonly?: boolean | AXPExpression;
3104
+ placeholder?: string;
3105
+ entity?: string;
3106
+ multiple?: boolean;
3107
+ textField?: string;
3108
+ valueField?: string;
3109
+ parentKey?: string;
3110
+ expose?: Array<{
3111
+ source: string;
3112
+ target: string;
3113
+ }>;
3114
+ allowClear?: boolean;
3115
+ look?: 'select' | 'lookup';
3116
+ maxVisible?: number;
3117
+ characterLimit?: number | 'auto';
3118
+ sectionLimit?: number | 'auto';
3119
+ }
3120
+
3121
+ declare class AXPEntityCategoryWidgetEditComponent extends AXPValueWidgetComponent<any, AXPEntityCategoryWidgetOptions> {
3122
+ #private;
3123
+ protected readonly entityResolver: AXPEntityDefinitionRegistryService;
3124
+ protected readonly popupService: AXPopupService;
3125
+ private readonly translateService;
3126
+ protected readonly cdr: ChangeDetectorRef;
3127
+ protected entity: _angular_core.Signal<string>;
3128
+ protected multiple: _angular_core.Signal<boolean>;
3129
+ protected disabled: _angular_core.Signal<boolean>;
3130
+ protected textField: _angular_core.Signal<string>;
3131
+ protected valueField: _angular_core.Signal<string>;
3132
+ protected expose: _angular_core.Signal<{
3133
+ source: string;
3134
+ target: string;
3135
+ }[] | undefined>;
3136
+ protected allowClear: _angular_core.Signal<boolean>;
3137
+ protected characterLimit: _angular_core.Signal<number | "auto">;
3138
+ protected sectionLimit: _angular_core.Signal<number | "auto">;
3139
+ protected defaultTextField: _angular_core.Signal<string>;
3140
+ protected displayField: _angular_core.Signal<string>;
3141
+ protected searchPlaceholderText: _angular_core.WritableSignal<string>;
3142
+ protected selectedItems: _angular_core.WritableSignal<any[]>;
3143
+ protected isLoading: _angular_core.WritableSignal<boolean>;
3144
+ protected isOpen: _angular_core.WritableSignal<boolean>;
3145
+ protected tagBox: _angular_core.Signal<AXTagBoxComponent | undefined>;
3146
+ protected searchTerm: _angular_core.WritableSignal<string | null>;
3147
+ private entityDef;
2766
3148
  /**
2767
- * Re-evaluates related-entity list filters from the live dialog form context (e.g. after create saves the main row id).
3149
+ * Flag to prevent the value effect from running during internal updates.
3150
+ * This prevents circular dependency when setItems() calls setValue().
2768
3151
  */
2769
- private applyRelatedFiltersFromContext;
3152
+ private isInternalUpdate;
3153
+ protected handleAddClick(e: AXClickEvent): void;
3154
+ protected handleValueChange(e: AXValueChangedEvent): void;
3155
+ protected handleOnBlur(e: AXFocusEvent): void;
3156
+ protected handleKeyUp(e: AXHtmlEvent): Promise<void>;
3157
+ protected handleClearClick(): void;
3158
+ protected handleRemoveItem(event: Event, index: number): Promise<void>;
3159
+ clearInput(): void;
3160
+ private showTreeSelector;
3161
+ clear(): void;
3162
+ private findByValue;
3163
+ private setItems;
3164
+ private singleOrMultiple;
3165
+ private normalizePopupSelectedIds;
3166
+ protected getItemLabel(item: any): string;
2770
3167
  /**
2771
- * Pushes current toolbar filters to the embedded list data source when both exist.
2772
- * Returns false while data-list is still mounting (see deferred listNode.set in ngOnInit).
3168
+ * Get item path as array for breadcrumb component (raw MLS or string per segment).
2773
3169
  */
2774
- private pushToolbarFiltersToDataSource;
3170
+ protected getItemPath(item: any): AXPMultiLanguageString[];
2775
3171
  /**
2776
- * Pushes toolbar filters once the embedded data-list exposes its data source
2777
- * (listNode is created via deferred setTimeout in ngOnInit).
3172
+ * Join path array with separator.
3173
+ * Override this method to customize the separator (e.g., " > ", " -> ", " / ")
2778
3174
  */
2779
- private ensureToolbarFiltersOnDataSource;
3175
+ protected joinPath(path: unknown[]): string;
3176
+ protected getItemId(item: any): string;
2780
3177
  /**
2781
- * Writes toolbar filters from specs and pushes them onto the data source so refresh/reload keeps the parent scope.
3178
+ * Calculate the full path from root to the item.
3179
+ * Returns an array of strings like ["C", "B"] for item B under parent C.
2782
3180
  */
2783
- private applyRelatedFiltersFromContextAndDatasource;
3181
+ private calculateItemPath;
3182
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityCategoryWidgetEditComponent, never>;
3183
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityCategoryWidgetEditComponent, "axp-entity-category-widget-edit", never, {}, {}, never, never, true, never>;
3184
+ }
3185
+
3186
+ declare class AXPEntityCategoryWidgetViewComponent extends AXPValueWidgetComponent<any> {
3187
+ protected readonly entityResolver: AXPEntityDefinitionRegistryService;
3188
+ protected entity: _angular_core.Signal<string>;
3189
+ protected multiple: _angular_core.Signal<boolean>;
3190
+ protected valueField: _angular_core.Signal<string>;
3191
+ protected textField: _angular_core.Signal<string>;
3192
+ protected badgeClass: _angular_core.Signal<string>;
3193
+ protected displayField: _angular_core.Signal<string>;
3194
+ protected loading: _angular_core.WritableSignal<boolean>;
3195
+ private entityDef;
3196
+ protected displayItems: _angular_core.WritableSignal<{
3197
+ id: string;
3198
+ titleRaw: AXPMultiLanguageString | null | undefined;
3199
+ }[]>;
3200
+ private efEntity;
3201
+ private efDisplay;
3202
+ private extractItem;
3203
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityCategoryWidgetViewComponent, never>;
3204
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityCategoryWidgetViewComponent, "axp-entity-category-widget-view", never, {}, {}, never, never, true, never>;
3205
+ }
3206
+
3207
+ declare const AXPEntityCategoryWidget: AXPWidgetConfig;
3208
+
3209
+ declare class AXPTruncatedBreadcrumbComponent implements OnDestroy {
3210
+ private readonly mlsResolver;
3211
+ /** Plain string or locale map per segment; truncation uses resolved text (see {@link resolvedSectionTexts}). */
3212
+ sections: _angular_core.InputSignal<readonly (AXPMultiLanguageString | null | undefined)[]>;
3213
+ characterLimit: _angular_core.InputSignal<number | "auto">;
3214
+ sectionLimit: _angular_core.InputSignal<number | "auto">;
3215
+ separatorIcon: _angular_core.InputSignal<string>;
3216
+ ellipsisIcon: _angular_core.InputSignal<string>;
3217
+ eyeIcon: _angular_core.InputSignal<string>;
3218
+ protected container: _angular_core.Signal<ElementRef<HTMLDivElement> | undefined>;
3219
+ protected isExpanded: _angular_core.WritableSignal<boolean>;
3220
+ private containerWidth;
3221
+ private resizeObserver;
3222
+ /** Resolved display strings for length / ellipsis (same rules as the pipe). */
3223
+ protected resolvedSectionTexts: _angular_core.Signal<string[]>;
3224
+ protected effectiveCharacterLimit: _angular_core.Signal<number>;
3225
+ protected effectiveSectionLimit: _angular_core.Signal<number>;
3226
+ protected hasTruncatedText: _angular_core.Signal<boolean>;
3227
+ protected hasHiddenSections: _angular_core.Signal<boolean>;
2784
3228
  /**
2785
- * Refreshes the embedded data list (toolbar / workflow). In wizard mode, `refresh` is patched to re-apply scoped filters first.
3229
+ * canToggle: If this is false, NO Eye Icon and NO Click events will exist.
2786
3230
  */
2787
- private refreshGridWithParentScopedFilters;
2788
- protected queries: undefined;
3231
+ protected canToggle: _angular_core.Signal<boolean>;
3232
+ protected allSectionsTruncated: _angular_core.Signal<{
3233
+ text: string;
3234
+ original: string;
3235
+ }[]>;
3236
+ protected displayedSections: _angular_core.Signal<{
3237
+ text: string;
3238
+ original: string;
3239
+ }[]>;
3240
+ protected lastSection: _angular_core.Signal<{
3241
+ text: string;
3242
+ original: string;
3243
+ }>;
3244
+ protected fullPath: _angular_core.Signal<string>;
3245
+ constructor();
3246
+ ngOnDestroy(): void;
3247
+ protected handleSeparatorClick(event: Event): void;
3248
+ protected handleEllipsisClick(event: Event): void;
3249
+ protected handleCollapseClick(event: Event): void;
3250
+ private initializeResizeObserver;
3251
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTruncatedBreadcrumbComponent, never>;
3252
+ 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>;
3253
+ }
3254
+
3255
+ declare const AXPEntityDefinitionProviderWidget: AXPWidgetConfig;
3256
+ declare module '@acorex-platform/framework-shared/widget-core' {
3257
+ interface AXPWidgetTypesMap {
3258
+ entityDefinitionProvider: 'entity-definition-provider-editor';
3259
+ }
3260
+ }
3261
+
3262
+ declare class AXPEntityDefinitionProviderWidgetEditComponent extends AXPProviderSelectWidgetEditBase {
3263
+ private readonly entityRegistry;
2789
3264
  /**
2790
- * Validates that all required dependencies are available
3265
+ * Last applied module filter (from context) to avoid redundant reloads.
2791
3266
  */
2792
- private hasRequiredDependencies;
3267
+ private readonly lastModuleFilterKey;
2793
3268
  /**
2794
- * Handles all query-related changes (filters, sorts, columns)
3269
+ * Reloads entity options when `filterModuleField` changes in form context (not only via `widget.refresh()`).
2795
3270
  */
2796
- private handleQueryChanges;
3271
+ private readonly reloadWhenModuleContextChanges;
2797
3272
  /**
2798
- * Analyzes what has changed between current and previous queries
3273
+ * Options:
3274
+ * - `filterModuleField`: sibling context field name (e.g. `entityListModule`); when set, only entities in that module are listed.
3275
+ * - `valueFormat`: `fullKey` (`module.name`, default) or `entityName` (short name only, for menus that store `entityListRef.entity`).
2799
3276
  */
2800
- private analyzeChanges;
3277
+ protected loadDataSourceRows(): Promise<Array<{
3278
+ value: string;
3279
+ title: string;
3280
+ }>>;
3281
+ refresh(): void;
2801
3282
  /**
2802
- * Maps toolbar sort queries ({ name, dir }) to AXDataSource sort options ({ field, dir }).
3283
+ * Reads sibling field from context store data (same shape as `lodash/get` paths).
2803
3284
  */
2804
- private toDataSourceSortOptions;
3285
+ private readModuleFromContext;
2805
3286
  /**
2806
- * Applies filter and sort changes to the data source
3287
+ * Resolves a sibling field path relative to the current widget's parent path.
2807
3288
  */
2808
- private applyDataSourceChanges;
3289
+ private resolveSiblingContextPath;
3290
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityDefinitionProviderWidgetEditComponent, never>;
3291
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityDefinitionProviderWidgetEditComponent, "axp-entity-definition-provider-widget-edit", never, {}, {}, never, never, true, never>;
3292
+ }
3293
+
3294
+ declare class AXPEntityListTableService {
3295
+ private readonly commandService;
3296
+ private readonly expressionEvaluator;
3297
+ private readonly settings;
3298
+ private readonly columnWidthService;
2809
3299
  /**
2810
- * Handles list refresh logic based on changes and mount status.
2811
- * Initial fetch is owned by {@link triggerInitialLoadIfNeeded} (manual fetchDataMode).
3300
+ * Convert Entity to List Widget Options
2812
3301
  */
2813
- private handleListRefresh;
3302
+ convertEntityToListOptions(entity: AXPEntity, options: any, allActions: AXPEntityCommandTriggerViewModel[]): Promise<AXPDataListWidgetComponentOptions>;
2814
3303
  /**
2815
- * Handles column-related changes
2816
- * TODO: Implement column change logic
3304
+ * Create DataSource for Entity
2817
3305
  */
2818
- private handleColumnChanges;
2819
- protected context: {};
2820
- protected previousQueries: any;
2821
- ngOnInit(): Promise<void>;
2822
- ngAfterViewInit(): Promise<void>;
2823
- ngOnDestroy(): void;
2824
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityListWidgetViewComponent, never>;
2825
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityListWidgetViewComponent, "ng-component", never, {}, {}, never, never, true, never>;
2826
- }
2827
-
2828
- declare const AXPEntityListWidget: AXPWidgetConfig;
2829
-
2830
- declare class AXPEditFileUploaderCommand implements AXPCommand<{
2831
- file: AXPFileListItem;
2832
- plugins?: {
2833
- name: string;
2834
- options?: unknown;
2835
- }[];
2836
- excludePlugins?: string[];
2837
- enableTitleDescription?: boolean;
2838
- isNewFile?: boolean;
2839
- }, AXPFileListItem> {
2840
- private readonly layoutBuilder;
2841
- private readonly translationService;
2842
- private readonly hooks;
2843
- execute(input: {
2844
- file: AXPFileListItem;
2845
- plugins?: {
2846
- name: string;
2847
- options?: unknown;
2848
- }[];
2849
- excludePlugins?: string[];
2850
- enableTitleDescription?: boolean;
2851
- isNewFile?: boolean;
2852
- }): Promise<AXPExecuteCommandResult<AXPFileListItem>>;
2853
- private showEditDialog;
3306
+ private createDataSource;
2854
3307
  /**
2855
- * Build form fields from hook items (old format parameters)
3308
+ * Convert Properties to Columns
2856
3309
  */
2857
- private buildFormFields;
3310
+ private createColumnsFromProperties;
2858
3311
  /**
2859
- * Build groups/containers from hook groups (old format groups)
3312
+ * Map EntityTableColumn to ListWidgetColumn
2860
3313
  */
2861
- private buildGroups;
3314
+ private mapEntityColumnToWidgetColumn;
2862
3315
  /**
2863
- * Apply widget configuration to field based on widget type
3316
+ * Convert Entity Actions to Row Commands
2864
3317
  */
2865
- private applyWidget;
2866
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEditFileUploaderCommand, never>;
2867
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEditFileUploaderCommand>;
2868
- }
2869
-
2870
- /** Visual layout for `axp-file-list`. */
2871
- type AXPFileListLook = 'rows' | 'links';
2872
-
2873
- declare class AXPFileListComponent implements OnInit, OnDestroy {
2874
- private static readonly DOWNLOAD_DEBOUNCE_MS;
2875
- private fileTypeService;
2876
- private fileStorageService;
2877
- private commandExecutor;
2878
- private hooks;
2879
- isLoading: _angular_core.WritableSignal<boolean>;
2880
- private fileTypes;
2881
- onRemove: _angular_core.OutputEmitterRef<AXPFileListItem>;
2882
- onRevert: _angular_core.OutputEmitterRef<AXPFileListItem>;
2883
- onRename: _angular_core.OutputEmitterRef<AXPFileListItem>;
2884
- readonly: _angular_core.InputSignal<boolean>;
2885
- fileEditable: _angular_core.InputSignal<boolean>;
2886
- /** When true, edit dialog shows name, title and description fields. Default false. */
2887
- enableTitleDescription: _angular_core.InputSignal<boolean>;
2888
- multiple: _angular_core.InputSignal<boolean>;
2889
- /** `rows`: file-type icons and action buttons; `links`: compact paperclip links (download on click). */
2890
- look: _angular_core.InputSignal<AXPFileListLook>;
2891
- /** i18n key for links look label (template adds trailing colon). */
2892
- titleKey: _angular_core.InputSignal<string>;
2893
- /** When false, links look omits the label (e.g. popover body). */
2894
- showLabel: _angular_core.InputSignal<boolean>;
2895
- /** `inline`: label + divider; `menu`: compact list for popovers/panels. */
2896
- linksLayout: _angular_core.InputSignal<"menu" | "inline">;
2897
- files: _angular_core.InputSignal<AXPFileListItem[]>;
2898
- plugins: _angular_core.InputSignal<{
2899
- name: string;
2900
- options?: unknown;
2901
- }[] | undefined>;
2902
- excludePlugins: _angular_core.InputSignal<string[] | undefined>;
2903
- capabilities: _angular_core.InputSignal<AXCFileUploaderCapabilities | undefined>;
3318
+ private createRowCommands;
2904
3319
  /**
2905
- * All files should be displayed, even those with `deleted` status.
2906
- * The template will handle the visual differences based on the status.
3320
+ * Wraps string values with AXP_ROW_EXPR_PREFIX so widget-renderer does not
3321
+ * evaluate them (it only treats {{ ... }} as expressions). Data-list will
3322
+ * unwrap and evaluate per row with row data. Only used for secondary commands.
2907
3323
  */
2908
- displayFiles: _angular_core.Signal<AXPFileListItem[]>;
2909
- private fileIdToActions;
2910
- private globalActions;
2911
- /** Suppress duplicate downloads from double-click (two click events). */
2912
- private readonly recentDownloadAtByKey;
2913
- private filesChangeEffect;
2914
- private getDefaultActions;
2915
- /** True when the widget is readonly or this file row is locked (`readOnly`). */
2916
- isItemInteractionLocked(file: AXPFileListItem): boolean;
2917
- actionsFor(file: AXPFileListItem, index: number): any[];
2918
- private loadActionsFor;
2919
- ngOnInit(): Promise<void>;
2920
- private loadGlobalActions;
2921
- private shouldSkipDuplicateDownload;
2922
- private downloadDedupeKey;
2923
- /** Ensures `source` is set for links look and legacy rows that only carry storage id on `id`. */
2924
- private resolveFileForDownload;
2925
- protected getFileInfo(fileName: string): {
2926
- icon: string;
2927
- type: string;
2928
- };
3324
+ private wrapRowExpr;
3325
+ /**
3326
+ * Check if entity has Selected Scope Actions
3327
+ */
3328
+ private hasSelectedScopeActions;
3329
+ private evaluateExpressions;
2929
3330
  /**
2930
- * Double-click on a file row (rows look) or link row triggers download.
3331
+ * Handle execution of a row command (shared by double-click and command handlers)
2931
3332
  */
2932
- protected handleFileRowActivate(event: Event, file: AXPFileListItem): void;
2933
- handleFileDownload(event: AXClickEvent | Event, file: AXPFileListItem): Promise<void>;
2934
- handleFileRemove(event: AXClickEvent, file: AXPFileListItem): Promise<void>;
3333
+ private handleRowCommand;
2935
3334
  /**
2936
- * Handle revert action – emit the file so parent components can update the status.
3335
+ * When a related entity list declares `excludeProperties`, row commands bypass the details page
3336
+ * `execute()` merge — apply the same exclusions for embedded create/update commands.
2937
3337
  */
2938
- handleFileRevert(event: AXClickEvent, file: AXPFileListItem): void;
3338
+ private mergeRelatedListFormOptions;
2939
3339
  /**
2940
- * Handle file edit action – open rename popup
3340
+ * Create default events
2941
3341
  */
2942
- handleFileEdit(event: any, file: AXPFileListItem): Promise<void>;
2943
- ngOnDestroy(): void;
2944
- runAction(action: any): Promise<void>;
2945
- protected getActionColor(action: any): string;
2946
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPFileListComponent, never>;
2947
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPFileListComponent, "axp-file-list", never, { "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "fileEditable": { "alias": "fileEditable"; "required": false; "isSignal": true; }; "enableTitleDescription": { "alias": "enableTitleDescription"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "look": { "alias": "look"; "required": false; "isSignal": true; }; "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; "linksLayout": { "alias": "linksLayout"; "required": false; "isSignal": true; }; "files": { "alias": "files"; "required": false; "isSignal": true; }; "plugins": { "alias": "plugins"; "required": false; "isSignal": true; }; "excludePlugins": { "alias": "excludePlugins"; "required": false; "isSignal": true; }; "capabilities": { "alias": "capabilities"; "required": false; "isSignal": true; }; }, { "onRemove": "onRemove"; "onRevert": "onRevert"; "onRename": "onRename"; }, never, never, true, never>;
2948
- }
2949
-
2950
- /** Stable fingerprint for one file row; ignores Blob binary content. */
2951
- declare function fingerprintAttachmentItem(item: unknown): string;
2952
- /** Order-independent fingerprint for attachment lists. */
2953
- declare function fingerprintAttachments(value: unknown): string;
2954
- /** True when lists represent the same attachments regardless of blob vs fileId shape. */
2955
- declare function attachmentsSemanticallyEqual(a: unknown, b: unknown): boolean;
2956
- /** Attachment rows that remain after a successful save (drops soft-deleted rows). */
2957
- declare function committedAttachments(value: unknown): AXPFileListItem[];
2958
- /**
2959
- * Post-save attachment list: drops soft-deleted rows and promotes pending `attached` rows to `uploaded`
2960
- * so deferred-save pages get the same delete/revert behavior as after a full reload.
2961
- */
2962
- declare function persistedAttachments(value: unknown): AXPFileListItem[];
2963
-
2964
- interface AXPFileUploaderEntityFilesScope {
2965
- name: string;
2966
- id: string;
2967
- field: string;
2968
- }
2969
- declare function isFileListItem(value: unknown): value is AXPFileListItem;
2970
- /** Whether a list-row value represents one attachment (file item, id reference, or fileId source). */
2971
- declare function isAttachmentListEntry(value: unknown): boolean;
2972
- declare function attachmentFieldCount(fieldValue: unknown): number;
2973
- declare function normalizeEntityFieldToFileList(fieldValue: unknown): AXPFileListItem[];
2974
- /** Whether a stored value is a persisted file/document/reference token. */
2975
- declare function isAttachmentStorageRef(value: unknown): value is string;
2976
- /** True when the field has entries that cannot be shown without hydration (e.g. mixed `file:` refs + objects). */
2977
- declare function attachmentNeedsHydration(fieldValue: unknown): boolean;
2978
- /**
2979
- * Resolves inline attachment field values to displayable file list items.
2980
- * Handles mixed arrays of `file:` refs and already-hydrated AXPFileListItem objects.
2981
- */
2982
- declare function hydrateAttachmentFieldToFileList(fieldValue: unknown, fileStorage: AXPFileStorageService): Promise<AXPFileListItem[]>;
2983
- /** Attachment field path from widget options or column path fallback. */
2984
- declare function resolveAttachmentFieldPath(options: Record<string, unknown>, fieldFallback?: string): string | undefined;
2985
- /** True when the list row includes the attachment field (even when empty). */
2986
- declare function isAttachmentFieldPresentOnRow(rowData: Record<string, unknown> | undefined, fieldPath: string | undefined): boolean;
2987
- declare function resolveFileUploaderEntityScope(options: Record<string, unknown>, rowData: Record<string, unknown> | undefined, fieldFallback?: string): AXPFileUploaderEntityFilesScope | undefined;
2988
-
2989
- interface AXPFileUploaderLoadFilesInput extends AXPFileUploaderEntityFilesScope {
2990
- }
2991
- interface AXPFileUploaderLoadFilesResult {
2992
- files: AXPFileListItem[];
2993
- /** Count including file-id references, not only hydrated AXPFileListItem rows. */
2994
- count: number;
2995
- }
2996
- declare class AXPFileUploaderLoadFilesQuery implements AXPQuery<AXPFileUploaderLoadFilesInput, AXPFileUploaderLoadFilesResult> {
2997
- private readonly injector;
2998
- fetch(input: AXPFileUploaderLoadFilesInput): Promise<AXPFileUploaderLoadFilesResult>;
2999
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPFileUploaderLoadFilesQuery, never>;
3000
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPFileUploaderLoadFilesQuery>;
3001
- }
3002
-
3003
- interface AXPFileUploaderSaveFilesInput extends AXPFileUploaderEntityFilesScope {
3004
- files: AXPFileListItem[];
3005
- }
3006
- interface AXPFileUploaderSaveFilesResult {
3007
- entityData: Record<string, unknown>;
3008
- }
3009
- declare class AXPFileUploaderSaveFilesCommand implements AXPCommand<AXPFileUploaderSaveFilesInput, AXPFileUploaderSaveFilesResult> {
3010
- private readonly injector;
3011
- execute(input: AXPFileUploaderSaveFilesInput): Promise<AXPExecuteCommandResult<AXPFileUploaderSaveFilesResult>>;
3342
+ private createDefaultEvents;
3343
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityListTableService, never>;
3344
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityListTableService>;
3012
3345
  }
3013
3346
 
3014
- /** Serializable upload action exposed via widget `api().getUploadActions()`. */
3015
- interface AXPFileUploaderUploadActionDescriptor {
3016
- plugin: string;
3017
- text?: string;
3018
- textKey?: string;
3019
- icon?: string;
3020
- }
3021
- type AXPFileUploaderEditDialogMode = 'manual' | 'auto';
3022
- interface AXPFileUploaderEditDialogFieldOptions {
3023
- name?: boolean;
3024
- title?: boolean;
3025
- description?: boolean;
3026
- }
3027
- interface AXPFileUploaderEditDialogOptions {
3028
- mode?: AXPFileUploaderEditDialogMode;
3029
- fields?: AXPFileUploaderEditDialogFieldOptions;
3347
+ interface AXPEntityListToolbarConvertOptions {
3348
+ excludeColumns?: string[];
3349
+ includeColumns?: string[];
3350
+ /** Related list: evaluated `AXPEntityTableColumn[]` from `AXPRelatedEntity.columns` */
3351
+ relatedTableColumns?: AXPEntityTableColumn[];
3352
+ customFilterDefinitions?: Partial<AXPEntityListFilterDefinition>[];
3030
3353
  }
3031
- declare function resolveFileUploaderEditDialog(options?: Record<string, unknown>): AXPFileUploaderEditDialogOptions | undefined;
3032
- declare function isFileUploaderEditDialogAuto(editDialog?: AXPFileUploaderEditDialogOptions): boolean;
3033
- declare function hasFileUploaderTitleOrDescriptionFields(editDialog?: AXPFileUploaderEditDialogOptions): boolean;
3034
-
3035
- declare class AXPFileUploaderWidgetColumnComponent extends AXPColumnWidgetComponent<AXPFileListItem[]> {
3036
- private readonly queryExecutor;
3037
- private readonly entityResolver;
3038
- private readonly formatService;
3039
- private readonly translation;
3040
- private readonly debug;
3041
- protected readonly fileListTrigger: _angular_core.Signal<ElementRef<any> | undefined>;
3042
- protected readonly fileListPopover: _angular_core.Signal<AXPopoverComponent | undefined>;
3043
- protected readonly popoverFiles: _angular_core.WritableSignal<AXPFileListItem[]>;
3044
- protected readonly loadStatus: _angular_core.WritableSignal<"error" | "idle" | "loading" | "ready">;
3045
- protected readonly loadError: _angular_core.WritableSignal<string | null>;
3046
- protected readonly isPopoverOpen: _angular_core.WritableSignal<boolean>;
3047
- private readonly entityDef;
3048
- private popoverLoadRequestId;
3049
- private previousRowId;
3050
- protected readonly entityScope: _angular_core.Signal<_acorex_platform_framework_client_layout_entity.AXPFileUploaderEntityFilesScope | undefined>;
3051
- protected readonly attachmentFieldPath: _angular_core.Signal<string | undefined>;
3052
- protected readonly inlineFieldPresent: _angular_core.Signal<boolean>;
3053
- protected readonly fileCount: _angular_core.Signal<number>;
3054
- /** Clickable when count is unknown or zero — opens popover (lazy load or inline empty). */
3055
- protected readonly showAttachmentsLink: _angular_core.Signal<boolean>;
3056
- protected readonly popoverTitle: _angular_core.Signal<AXPMultiLanguageString>;
3057
- constructor();
3058
- protected openFileListPopover(): void;
3059
- protected onPopoverOpenChange(event: unknown): void;
3060
- private openPopoverFromRef;
3061
- private ensurePopoverFilesLoaded;
3062
- private coercePopoverOpenEvent;
3063
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPFileUploaderWidgetColumnComponent, never>;
3064
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPFileUploaderWidgetColumnComponent, "axp-file-uploader-widget-column", never, { "rawValue": { "alias": "rawValue"; "required": false; }; "rowData": { "alias": "rowData"; "required": false; }; }, {}, never, never, true, never>;
3354
+ declare class AXPEntityListToolbarService {
3355
+ private readonly widgetResolver;
3356
+ private readonly entityRegistry;
3357
+ /**
3358
+ * Convert Entity to Toolbar Options
3359
+ */
3360
+ convertEntityToolbarOptions(entity: AXPEntity, options: AXPEntityListToolbarConvertOptions | undefined): Promise<{
3361
+ filterDefinitions: AXPEntityListFilterDefinition[];
3362
+ columnDefinitions: AXPColumnQuery[];
3363
+ sortDefinitions: AXPSortDefinition[];
3364
+ }>;
3365
+ /**
3366
+ * Merges custom filter definitions into the entity-derived list by `field`.
3367
+ * Matching fields: custom properties are applied on top of the base definition.
3368
+ * Non-matching custom entries are appended.
3369
+ */
3370
+ private mergeFilterDefinitions;
3371
+ private filterFieldKey;
3372
+ private mergeFilterDefinition;
3373
+ /**
3374
+ * Create Filter Definitions for Toolbar
3375
+ */
3376
+ private createFilterDefinitions;
3377
+ /**
3378
+ * Create Column Definitions for Toolbar.
3379
+ * Includes both entity.properties and enriched columns (e.g. person.firstName with showAs).
3380
+ */
3381
+ private createColumnDefinitions;
3382
+ /**
3383
+ * Create Sort Definitions for Toolbar.
3384
+ * Includes host properties and merge-detail related fields with sort enabled.
3385
+ */
3386
+ private createSortDefinitions;
3387
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityListToolbarService, never>;
3388
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityListToolbarService>;
3065
3389
  }
3066
3390
 
3067
- declare class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent<AXPFileListItem[] | undefined> {
3068
- protected readonly fileService: AXFileService;
3069
- private readonly hooks;
3070
- private readonly fileActionsService;
3071
- private readonly commandExecutor;
3072
- private readonly dirtyChangeSubject;
3073
- private readonly uploadActionsChangeSubject;
3074
- private readonly savedSnapshot;
3075
- private readonly baselineFingerprint;
3076
- private readonly baselinePendingReconcile;
3077
- private readonly isDirtySignal;
3078
- private skipDirtyEvaluation;
3079
- /** Status before soft-delete; used for restore when baseline was not synced (section layout). */
3080
- private readonly statusBeforeDelete;
3081
- private readonly autoBaselineSynced;
3082
- /** Sync baseline from context when not wired by a deferred-save page (section layout). */
3083
- private readonly baselineInitEffect;
3084
- protected multiple: _angular_core.Signal<boolean>;
3085
- private readonly acceptOverride;
3086
- protected accept: _angular_core.Signal<string>;
3087
- protected plugins: _angular_core.Signal<{
3088
- name: string;
3089
- options?: unknown;
3090
- }[]>;
3091
- protected pluginNames: _angular_core.Signal<string[]>;
3092
- protected excludePlugins: _angular_core.Signal<string[]>;
3093
- protected fileEditable: _angular_core.Signal<boolean>;
3094
- protected editDialog: _angular_core.Signal<_acorex_platform_framework_client_layout_entity.AXPFileUploaderEditDialogOptions | undefined>;
3095
- protected enableTitleDescription: _angular_core.Signal<boolean>;
3096
- /** When mode is `auto`, show the edit dialog after each file select. */
3097
- protected showEditDialogAfterSelect: _angular_core.Signal<boolean>;
3098
- protected readonly: _angular_core.Signal<boolean>;
3099
- protected showBorder: _angular_core.Signal<boolean>;
3100
- protected showAddItemButton: _angular_core.Signal<boolean>;
3101
- protected maxFileSize: _angular_core.Signal<number>;
3102
- protected isDragOver: _angular_core.WritableSignal<boolean>;
3103
- private readonly innerActions;
3104
- protected readonly fileActions: _angular_core.Signal<AXCFileUploaderAction[]>;
3105
- ngOnInit(): void;
3106
- setValue(value: AXPFileListItem[] | null | undefined): void;
3107
- /** Align dirty baseline with persisted attachments (call when record loads or after discard remount). */
3108
- syncBaseline(saved: AXPFileListItem[] | undefined): void;
3109
- /** Mark current list as saved; clears dirty and drops soft-deleted rows from the UI. */
3110
- markSaved(): void;
3111
- /** Revert widget value to last saved baseline. */
3112
- discardToBaseline(): void;
3113
- api(): AXPWidgetCoreElementAPI;
3114
- /** Current upload actions for host pages (always read via api; list may change after plugins load). */
3115
- getUploadActionDescriptors(): AXPFileUploaderUploadActionDescriptor[];
3116
- runUploadActionByPlugin(plugin: string): Promise<void>;
3117
- private notifyUploadActionsChanged;
3118
- private evaluateDirty;
3119
- private setDirty;
3120
- private loadActions;
3121
- private configureFromHooks;
3391
+ declare class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
3392
+ #private;
3393
+ protected entityService: AXPEntityDefinitionRegistryService;
3394
+ protected workflowEventService: AXPWorkflowEventService;
3395
+ protected entityListTableService: AXPEntityListTableService;
3396
+ protected entityListToolbarService: AXPEntityListToolbarService;
3397
+ protected deviceService: AXPDeviceService;
3398
+ protected commandService: AXPCommandService;
3399
+ protected eventService: AXPBroadcastEventService;
3400
+ private readonly expressionEvaluator;
3401
+ private readonly columnWidthService;
3402
+ private readonly route;
3403
+ protected isMounted: _angular_core.WritableSignal<boolean>;
3404
+ readonly entity: _angular_core.WritableSignal<AXPEntity | null>;
3405
+ protected listNode: _angular_core.WritableSignal<AXPWidgetNode | null>;
3406
+ protected list: _angular_core.Signal<AXPWidgetRendererDirective | undefined>;
3407
+ protected allWidgets: _angular_core.Signal<readonly AXPWidgetRendererDirective[]>;
3408
+ protected listWidget: _angular_core.WritableSignal<AXPWidgetRendererDirective | undefined>;
3409
+ protected toolbarWidget: _angular_core.Signal<AXPWidgetRendererDirective | undefined>;
3410
+ protected selectedItems: _angular_core.WritableSignal<any[]>;
3411
+ protected toolbarNode: _angular_core.WritableSignal<AXPWidgetNode | null>;
3412
+ protected destroyed: Subject<void>;
3413
+ protected entitySource: _angular_core.Signal<any>;
3414
+ protected excludeColumns: _angular_core.Signal<string[]>;
3415
+ protected includeColumns: _angular_core.Signal<string[]>;
3416
+ protected relatedTableColumns: _angular_core.Signal<AXPEntityTableColumn[] | undefined>;
3417
+ protected customFilterDefinitions: _angular_core.Signal<Partial<AXPFilterDefinition>[] | undefined>;
3418
+ protected externalActions: _angular_core.Signal<AXPEntityAction[]>;
3419
+ protected maxHeight: _angular_core.Signal<string>;
3420
+ protected showEntityActions: _angular_core.Signal<any>;
3421
+ protected showToolbar: _angular_core.Signal<any>;
3422
+ protected allActions: _angular_core.Signal<AXPEntityCommandTriggerViewModel[]>;
3423
+ protected primaryActions: _angular_core.Signal<AXPActionMenuItem[]>;
3424
+ protected handleUnselectAll(): void;
3425
+ protected secondaryActions: _angular_core.Signal<AXPActionMenuItem[]>;
3426
+ protected handleActionClick(item: AXPActionMenuItem): void;
3427
+ protected handleSecondaryActionClick(item: AXPActionMenuItem): void;
3428
+ protected execute(commandName: string, _data: unknown): Promise<void>;
3122
3429
  /**
3123
- * Process files from various sources (file picker, drag-drop, etc.)
3124
- * When showEditDialogAfterSelect is true, the edit dialog (with plugin hooks) is shown per file before adding; otherwise files are added and user can edit via Edit button.
3430
+ * Resolves toolbar commands including nested dropdown (`items`) actions.
3125
3431
  */
3126
- private processFiles;
3432
+ private findToolbarAction;
3433
+ private evaluateToolbarExpressions;
3127
3434
  /**
3128
- * Show edit dialog per file and add only those submitted. Used when showEditDialogAfterSelect is true (both from zone and from dropdown actions).
3435
+ * Parses the `filters` query param (same shape as standalone entity list routes).
3129
3436
  */
3130
- private addFilesWithEditDialogAsync;
3131
- protected files: _angular_core.Signal<AXPFileListItem[]>;
3132
- handleFileRemove(file: AXPFileListItem): void;
3133
- removeFile(file: AXPFileListItem): void;
3437
+ private parseFiltersFromRoute;
3134
3438
  /**
3135
- * Revert a deleted file back to its pre-delete status.
3439
+ * Route `filters` apply only when the active details `page` matches this list's entity
3440
+ * (e.g. WorkOrder filters must not affect FailureRegister on the same asset layout).
3136
3441
  */
3137
- handleFileRevert(file: AXPFileListItem): void;
3138
- private resolveRestoredStatus;
3442
+ private shouldApplyRouteFilters;
3139
3443
  /**
3140
- * Handle file rename action. Persists name/title/description to file storage immediately when edited
3141
- * so they are saved even if the entity payload does not carry these fields.
3444
+ * Merges route filters into related-entity toolbar filters (route wins per field).
3142
3445
  */
3143
- handleFileRename(file: AXPFileListItem): void;
3144
- clear(): void;
3145
- protected readonly capabilities: AXCFileUploaderCapabilities;
3146
- onFileChange(event: {
3147
- event: Event;
3148
- files: File[];
3149
- }): void;
3150
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPFileUploaderWidgetEditComponent, never>;
3151
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPFileUploaderWidgetEditComponent, "axp-file-uploader-widget-edit", never, {}, {}, never, never, true, never>;
3152
- }
3153
-
3154
- declare class AXPFileUploaderWidgetViewComponent extends AXPValueWidgetComponent<AXPFileListItem[]> {
3155
- protected files: _angular_core.Signal<AXPFileListItem[]>;
3156
- private get __class();
3157
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPFileUploaderWidgetViewComponent, never>;
3158
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPFileUploaderWidgetViewComponent, "axp-file-uploader-widget-view", never, {}, {}, never, never, true, never>;
3159
- }
3160
-
3161
- declare const AXPFileUploaderWidget: AXPWidgetConfig;
3162
- interface AXPFileUploaderWidgetDesignerOptions {
3163
- multiple?: boolean;
3164
- accept?: string;
3165
- plugins?: {
3166
- name: string;
3167
- options?: unknown;
3168
- }[];
3169
- excludePlugins?: string[];
3170
- readonly?: boolean;
3171
- fileEditable?: boolean;
3172
- maxFileSize?: number;
3173
- enableTitleDescription?: boolean;
3174
- showEditDialogAfterSelect?: boolean;
3175
- showBorder?: boolean;
3176
- showAddItemButton?: boolean;
3177
- }
3178
- interface AXPFileUploaderWidgetViewOptions {
3179
- }
3180
- interface AXPFileUploaderWidgetEditOptions {
3181
- multiple?: boolean;
3182
- accept?: string;
3183
- plugins?: {
3184
- name: string;
3185
- options?: unknown;
3186
- }[];
3187
- excludePlugins?: string[];
3188
- readonly?: boolean;
3189
- fileEditable?: boolean;
3190
- maxFileSize?: number;
3191
- enableTitleDescription?: boolean;
3192
- showEditDialogAfterSelect?: boolean;
3193
- showBorder?: boolean;
3194
- showAddItemButton?: boolean;
3195
- }
3196
- interface AXPFileUploaderWidgetColumnOptions {
3197
- }
3198
- interface AXPFileUploaderWidgetPrintOptions {
3199
- }
3200
- interface AXPFileUploaderWidgetOptions {
3201
- designer: AXPFileUploaderWidgetDesignerOptions;
3202
- view: AXPFileUploaderWidgetViewOptions;
3203
- edit: AXPFileUploaderWidgetEditOptions;
3204
- print: AXPFileUploaderWidgetPrintOptions;
3205
- column: AXPFileUploaderWidgetColumnOptions;
3206
- }
3207
- declare module '@acorex-platform/framework-shared/widget-core' {
3208
- interface AXPWidgetTypesMap {
3209
- attachments: 'attachments';
3210
- }
3446
+ private mergeToolbarFilters;
3447
+ private getMergedToolbarFilters;
3448
+ /**
3449
+ * Applies merged route + parent-scope filters to the widget value and data source.
3450
+ */
3451
+ private applyMergedRouteFiltersToList;
3452
+ /** Syncs toolbar filters to context and AXDataSource (retries until data-list is mounted). */
3453
+ private reapplyScopedFiltersToDataSource;
3454
+ /**
3455
+ * Entity lists use `fetchDataMode: 'manual'`; after scoped filters reach the data source,
3456
+ * the grid must be refreshed once (initial #effect may run before the data-list is ready).
3457
+ */
3458
+ private triggerInitialLoadIfNeeded;
3459
+ /**
3460
+ * Re-evaluates related-entity list filters from the live dialog form context (e.g. after create saves the main row id).
3461
+ */
3462
+ private applyRelatedFiltersFromContext;
3463
+ /**
3464
+ * Pushes current toolbar filters to the embedded list data source when both exist.
3465
+ * Returns false while data-list is still mounting (see deferred listNode.set in ngOnInit).
3466
+ */
3467
+ private pushToolbarFiltersToDataSource;
3468
+ /**
3469
+ * Pushes toolbar filters once the embedded data-list exposes its data source
3470
+ * (listNode is created via deferred setTimeout in ngOnInit).
3471
+ */
3472
+ private ensureToolbarFiltersOnDataSource;
3473
+ /**
3474
+ * Writes toolbar filters from specs and pushes them onto the data source so refresh/reload keeps the parent scope.
3475
+ */
3476
+ private applyRelatedFiltersFromContextAndDatasource;
3477
+ /**
3478
+ * Refreshes the embedded data list (toolbar / commands). In wizard mode, `refresh` is patched to re-apply scoped filters first.
3479
+ */
3480
+ private refreshGridWithParentScopedFilters;
3481
+ protected queries: undefined;
3482
+ /**
3483
+ * Validates that all required dependencies are available
3484
+ */
3485
+ private hasRequiredDependencies;
3486
+ /**
3487
+ * Handles all query-related changes (filters, sorts, columns)
3488
+ */
3489
+ private handleQueryChanges;
3490
+ /**
3491
+ * Analyzes what has changed between current and previous queries
3492
+ */
3493
+ private analyzeChanges;
3494
+ /**
3495
+ * Maps toolbar sort queries ({ name, dir }) to AXDataSource sort options ({ field, dir }).
3496
+ */
3497
+ private toDataSourceSortOptions;
3498
+ /**
3499
+ * Applies filter and sort changes to the data source
3500
+ */
3501
+ private applyDataSourceChanges;
3502
+ /**
3503
+ * Handles list refresh logic based on changes and mount status.
3504
+ * Initial fetch is owned by {@link triggerInitialLoadIfNeeded} (manual fetchDataMode).
3505
+ */
3506
+ private handleListRefresh;
3507
+ /**
3508
+ * Handles column-related changes
3509
+ * TODO: Implement column change logic
3510
+ */
3511
+ private handleColumnChanges;
3512
+ protected context: {};
3513
+ protected previousQueries: any;
3514
+ ngOnInit(): Promise<void>;
3515
+ ngAfterViewInit(): Promise<void>;
3516
+ ngOnDestroy(): void;
3517
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityListWidgetViewComponent, never>;
3518
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityListWidgetViewComponent, "ng-component", never, {}, {}, never, never, true, never>;
3211
3519
  }
3212
3520
 
3213
- interface AXPFileUploaderShowFileListEntityContext extends AXPFileUploaderEntityFilesScope {
3214
- }
3215
- interface AXPFileUploaderShowFileListOptions {
3216
- /** When set, files are loaded and saved via FileUploader:LoadFiles / FileUploader:SaveFiles. */
3217
- entity?: AXPFileUploaderShowFileListEntityContext;
3218
- /** Direct files (e.g. grid column preview); skips load/save commands. */
3219
- files?: AXPFileListItem[];
3220
- readonly?: boolean;
3221
- multiple?: boolean;
3222
- accept?: string;
3223
- fileEditable?: boolean;
3224
- maxFileSize?: number;
3225
- showAddItemButton?: boolean;
3226
- plugins?: {
3227
- name: string;
3228
- options?: unknown;
3229
- }[];
3230
- editDialog?: AXPFileUploaderEditDialogOptions;
3231
- }
3232
- declare class AXPFileUploaderWidgetService {
3233
- private popupService;
3234
- private translate;
3235
- private commandExecutor;
3236
- private queryExecutor;
3237
- showFileList(options?: AXPFileUploaderShowFileListOptions): Promise<AXPFileListItem[] | undefined>;
3238
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPFileUploaderWidgetService, never>;
3239
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPFileUploaderWidgetService>;
3240
- }
3521
+ declare const AXPEntityListWidget: AXPWidgetConfig;
3241
3522
 
3242
3523
  /**
3243
3524
  * Resolves the display template for a lookup item.
@@ -3312,7 +3593,6 @@ interface AXPEntityDataSelectorRowActionsConfig {
3312
3593
  }
3313
3594
  declare class AXPEntityDataSelectorRowActionsService {
3314
3595
  private readonly expressionEvaluator;
3315
- private readonly workflow;
3316
3596
  private readonly commandService;
3317
3597
  /**
3318
3598
  * Build a row-actions handler for {@link AXPDataSelectorComponent} from entity list actions.
@@ -3393,6 +3673,8 @@ interface AXPEntityDataSelectorOpenOptions {
3393
3673
  contextStore?: AXPLookupCreateContextStore;
3394
3674
  /** Entity list row actions to expose in the selector grid (matched by command name). */
3395
3675
  rowActions?: AXPEntityDataSelectorRowActionsConfig;
3676
+ /** Optional action in the data selector footer prefix (e.g. sync from remote provider). */
3677
+ footerPrefixAction?: AXPDataSelectorFooterPrefixAction;
3396
3678
  }
3397
3679
  /**
3398
3680
  * @deprecated Use {@link AXPEntityDataSelectorOpenOptions}. Will be removed in a future release.
@@ -3426,6 +3708,8 @@ interface AXPEntityDataSelectorOptions {
3426
3708
  };
3427
3709
  showCategoryFilter?: boolean;
3428
3710
  rowActions?: AXPEntityDataSelectorRowActionsConfig;
3711
+ /** Optional action in the data selector footer prefix (e.g. sync from remote provider). */
3712
+ footerPrefixAction?: AXPDataSelectorFooterPrefixAction;
3429
3713
  }
3430
3714
  type AXPEntityDataSelectorOpenInput = AXPEntityDataSelectorOpenOptions | AXPEntityDataSelectorOptions;
3431
3715
  interface AXPEntityDataSelectorResult {
@@ -3576,7 +3860,7 @@ declare class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent<any>
3576
3860
  protected look: _angular_core.Signal<AXPLookupWidgetLookType>;
3577
3861
  protected displayField: _angular_core.Signal<string>;
3578
3862
  protected resolvedCreate: _angular_core.Signal<_acorex_platform_framework_shared_entity.ResolvedLookupCreateOptions>;
3579
- protected selectorRowActions: _angular_core.Signal<AXPLookupSelectorRowActionsConfig | undefined>;
3863
+ protected rowActions: _angular_core.Signal<AXPLookupSelectorRowActionsConfig | undefined>;
3580
3864
  protected valueField: _angular_core.Signal<string>;
3581
3865
  protected displayFormat: _angular_core.Signal<string | undefined>;
3582
3866
  protected conditions?: AXPQueryFilter[];
@@ -3649,7 +3933,7 @@ declare class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent<an
3649
3933
  protected isMorePopoverOpen: _angular_core.WritableSignal<boolean>;
3650
3934
  protected selectedItemIndex: _angular_core.WritableSignal<number>;
3651
3935
  protected resolvedPopoverItems: _angular_core.WritableSignal<any[]>;
3652
- protected resolveStatus: _angular_core.WritableSignal<"error" | "idle" | "loading" | "ready">;
3936
+ protected resolveStatus: _angular_core.WritableSignal<"idle" | "loading" | "ready" | "error">;
3653
3937
  protected resolveError: _angular_core.WritableSignal<string | null>;
3654
3938
  protected summaryLabel: _angular_core.WritableSignal<string>;
3655
3939
  protected popoverHeader: _angular_core.WritableSignal<string>;
@@ -4224,151 +4508,19 @@ declare class AXPSelectorStructureWidgetViewComponent extends AXPValueWidgetComp
4224
4508
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPSelectorStructureWidgetViewComponent, "axp-selector-structure-widget-view", never, {}, {}, never, never, true, never>;
4225
4509
  }
4226
4510
 
4227
- declare const AXPEntityCreateEvent: {
4228
- (payload: {
4229
- entity: string;
4230
- meta?: any;
4231
- }): {
4232
- type: string;
4233
- payload: {
4234
- entity: string;
4235
- meta?: any;
4236
- };
4237
- };
4238
- type: string;
4239
- };
4240
- declare class AXPEntityCreatePopupAction extends AXPWorkflowAction {
4241
- private entityRegistery;
4242
- private popupService;
4243
- private platform;
4244
- private factory;
4245
- private config;
4246
- private translateService;
4247
- private settingsService;
4248
- execute(context: AXPWorkflowContext): Promise<void>;
4249
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityCreatePopupAction, never>;
4250
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityCreatePopupAction>;
4251
- }
4252
- declare class AXPEntityCreateSubmittedAction extends AXPWorkflowAction {
4253
- execute(context: AXPWorkflowContext): Promise<void>;
4254
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityCreateSubmittedAction, never>;
4255
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityCreateSubmittedAction>;
4256
- }
4257
- declare const AXPCreateEntityWorkflow: AXPWorkflow;
4258
-
4259
- declare const AXPEntityDeletedEvent: {
4260
- (payload: {
4261
- entity: string;
4262
- ids: string[];
4263
- meta?: any;
4264
- }): {
4265
- type: string;
4266
- payload: {
4267
- entity: string;
4268
- ids: string[];
4269
- meta?: any;
4270
- };
4271
- };
4272
- type: string;
4273
- };
4274
- interface AXPEntityDeleteOptions {
4275
- source: string;
4511
+ declare const AXPEntityCreateEvent: _acorex_platform_framework_client_workflow.AXPWorkflowEventCreator<{
4512
+ entity: string;
4513
+ meta?: unknown;
4514
+ }>;
4515
+ declare const AXPEntityModifyEvent: _acorex_platform_framework_client_workflow.AXPWorkflowEventCreator<{
4516
+ entity: string;
4517
+ values: Record<string, unknown>;
4518
+ }>;
4519
+ declare const AXPEntityDeletedEvent: _acorex_platform_framework_client_workflow.AXPWorkflowEventCreator<{
4520
+ entity: string;
4276
4521
  ids: string[];
4277
- }
4278
- declare class AXPEntityPerformDeleteAction extends AXPWorkflowAction {
4279
- private entityRegistery;
4280
- private dialogService;
4281
- private loadingDialog;
4282
- private translationService;
4283
- private settingsService;
4284
- execute(context: AXPWorkflowContext): Promise<void>;
4285
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityPerformDeleteAction, never>;
4286
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityPerformDeleteAction>;
4287
- }
4288
- declare const AXPDeleteEntityWorkflow: AXPWorkflow;
4289
-
4290
- declare class AXPQuickEntityModifyPopupAction extends AXPWorkflowAction {
4291
- private popupService;
4292
- private platform;
4293
- private translateService;
4294
- private formatService;
4295
- private expressionEvaluator;
4296
- private contextEvalFactory;
4297
- private entityRegistery;
4298
- private config;
4299
- private factory;
4300
- execute(context: AXPWorkflowContext): Promise<void>;
4301
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPQuickEntityModifyPopupAction, never>;
4302
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPQuickEntityModifyPopupAction>;
4303
- }
4304
- declare const AXPQuickModifyEntityWorkflow: AXPWorkflow;
4305
- declare class AXPEntityApplyUpdatesAction extends AXPWorkflowAction {
4306
- private entityRegistery;
4307
- execute(context: AXPWorkflowContext): Promise<void>;
4308
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityApplyUpdatesAction, never>;
4309
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityApplyUpdatesAction>;
4310
- }
4311
-
4312
- declare const AXPEntityModifyEvent: {
4313
- (payload: {
4314
- entity: string;
4315
- values: any;
4316
- }): {
4317
- type: string;
4318
- payload: {
4319
- entity: string;
4320
- values: any;
4321
- };
4322
- };
4323
- type: string;
4324
- };
4325
- declare class AXPEntityModifySectionPopupAction extends AXPWorkflowAction {
4326
- private popupService;
4327
- private platform;
4328
- private translateService;
4329
- private formatService;
4330
- private expressionEvaluator;
4331
- private contextEvalFactory;
4332
- private entityRegistery;
4333
- private config;
4334
- private factory;
4335
- execute(context: AXPWorkflowContext): Promise<void>;
4336
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityModifySectionPopupAction, never>;
4337
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityModifySectionPopupAction>;
4338
- }
4339
- declare class AXPEntityModifyConfirmedAction extends AXPWorkflowAction {
4340
- execute(context: AXPWorkflowContext): Promise<void>;
4341
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityModifyConfirmedAction, never>;
4342
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityModifyConfirmedAction>;
4343
- }
4344
- declare const AXPModifyEntitySectionWorkflow: AXPWorkflow;
4345
-
4346
- declare class AXPShowDetailViewAction extends AXPWorkflowAction {
4347
- private navigation;
4348
- private sessionService;
4349
- execute(context: AXPWorkflowContext): Promise<void>;
4350
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPShowDetailViewAction, never>;
4351
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPShowDetailViewAction>;
4352
- }
4353
- declare const AXPShowDetailsViewWorkflow: AXPWorkflow;
4354
-
4355
- /** Optional list filters passed into `show-list-view` (e.g. from `Entity:List` with `conditions`). */
4356
- interface AXPShowListViewCondition {
4357
- name?: string;
4358
- field?: string;
4359
- operator?: {
4360
- type: string;
4361
- };
4362
- value?: unknown;
4363
- }
4364
- declare class AXPShowListViewAction extends AXPWorkflowAction {
4365
- private navigation;
4366
- private sessionService;
4367
- execute(context: AXPWorkflowContext): Promise<void>;
4368
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPShowListViewAction, never>;
4369
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPShowListViewAction>;
4370
- }
4371
- declare const AXPShowListViewWorkflow: AXPWorkflow;
4522
+ meta?: unknown;
4523
+ }>;
4372
4524
 
4373
- export { ATTACHMENTS_PAGE_COMPONENT_KEY, AXMEntityCrudService, AXMEntityCrudServiceImpl, AXPCategoryTreeService, AXPCreateEntityCommand, AXPCreateEntityWorkflow, AXPDataSeederService, AXPDeleteEntityWorkflow, AXPEditFileUploaderCommand, AXPEntitiesListDataSourceDefinition, AXPEntityApplyUpdatesAction, AXPEntityCategoryTreeSelectorComponent, AXPEntityCategoryWidget, AXPEntityCategoryWidgetColumnComponent, AXPEntityCategoryWidgetEditComponent, AXPEntityCategoryWidgetViewComponent, AXPEntityCommandTriggerViewModel, AXPEntityCreateEvent, AXPEntityCreatePopupAction, AXPEntityCreateSubmittedAction, AXPEntityCreateViewElementViewModel, AXPEntityCreateViewModelFactory, AXPEntityCreateViewSectionViewModel, AXPEntityDataProvider, AXPEntityDataProviderImpl, AXPEntityDataSelectorRowActionsService, AXPEntityDataSelectorService, AXPEntityDefinitionProviderWidget, AXPEntityDefinitionProviderWidgetEditComponent, AXPEntityDefinitionRegistryService, AXPEntityDeletedEvent, AXPEntityDetailListViewModel, AXPEntityDetailPopoverComponent, AXPEntityDetailPopoverService, AXPEntityDetailViewModelFactory, AXPEntityDetailViewModelResolver, AXPEntityEventDispatcherService, AXPEntityFormBuilderService, AXPEntityListPersistenceModeDefault, AXPEntityListTableService, AXPEntityListToolbarService, AXPEntityListViewCardFieldViewModel, AXPEntityListViewColumnViewModel, AXPEntityListViewModelFactory, AXPEntityListViewModelResolver, AXPEntityListWidget, AXPEntityListWidgetViewComponent, AXPEntityMasterCreateViewModel, AXPEntityMasterListCardSelectActionName, AXPEntityMasterListViewModel, AXPEntityMasterListViewQueryViewModel, AXPEntityMasterSingleElementViewModel, AXPEntityMasterSingleViewGroupViewModel, AXPEntityMasterSingleViewModel, AXPEntityMasterUpdateElementViewModel, AXPEntityMasterUpdateViewModel, AXPEntityMasterUpdateViewModelFactory, AXPEntityMiddleware, AXPEntityModifyConfirmedAction, AXPEntityModifyEvent, AXPEntityModifySectionPopupAction, AXPEntityModule, AXPEntityPerformDeleteAction, AXPEntityPreloadFiltersContainerComponent, AXPEntityPreloadFiltersViewModel, AXPEntityPreloadFiltersViewModelResolver, AXPEntityResolver, AXPEntityService, AXPEntityStorageService, AXPEntityUpdateViewSectionViewModel, AXPFileListComponent, AXPFileUploaderLoadFilesQuery, AXPFileUploaderSaveFilesCommand, AXPFileUploaderWidget, AXPFileUploaderWidgetColumnComponent, AXPFileUploaderWidgetEditComponent, AXPFileUploaderWidgetService, AXPFileUploaderWidgetViewComponent, AXPGetEntityDetailsQuery, AXPLayoutOrderingConfigService, AXPLookupWidget, AXPLookupWidgetColumnComponent, AXPLookupWidgetEditComponent, AXPLookupWidgetViewComponent, AXPMiddlewareAbortError, AXPMiddlewareEntityStorageService, AXPModifyEntitySectionWorkflow, AXPMultiSourceDefinitionProviderContext, AXPMultiSourceDefinitionProviderService, AXPMultiSourceFederatedSearchService, AXPMultiSourceSelectorComponent, AXPMultiSourceSelectorService, AXPMultiSourceSelectorWidget, AXPMultiSourceSelectorWidgetColumnComponent, AXPMultiSourceSelectorWidgetEditComponent, AXPMultiSourceSelectorWidgetViewComponent, AXPMultiSourceType, AXPOpenEntityDetailsCommand, AXPQuickEntityModifyPopupAction, AXPQuickModifyEntityWorkflow, AXPRelatedColumnEnrichmentService, AXPRelatedColumnMetadataResolver, AXPSelectorStructureWidget, AXPSelectorStructureWidgetColumnComponent, AXPSelectorStructureWidgetEditComponent, AXPSelectorStructureWidgetViewComponent, AXPShowDetailViewAction, AXPShowDetailsViewWorkflow, AXPShowListViewAction, AXPShowListViewWorkflow, AXPTruncatedBreadcrumbComponent, AXPUpdateEntityCommand, AXPViewEntityDetailsCommand, AXP_APPEARANCE_SECTION_ORDER, AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY, AXP_CLASSIFICATION_SECTION_ORDER, 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, ENTITY_MASTER_LIST_TRACE_NS, EntityBuilder, EntityDataAccessor, actionExists, applyDataSourcePagingWithoutLoad, attachmentFieldCount, attachmentNeedsHydration, attachmentsPlugin, attachmentsSemanticallyEqual, axpCreateEntityAiToolInputDefaults, axpCreateEntityCommandDefinition, buildDataSourceTraceSnapshot, canPersistEntityListState, cloneLayoutArrays, columnOrderingMiddleware, columnOrderingMiddlewareProvider, columnWidthMiddleware, columnWidthMiddlewareProvider, commandMessageTextForError, committedAttachments, computeEntityAggregates, createColumnOrderingMiddlewareProvider, createLayoutOrderingMiddlewareProvider, createModifierContext, defaultCardLayoutMiddleware, defaultCardLayoutMiddlewareProvider, defaultMultiLanguageMiddleware, defaultMultiLanguageMiddlewareProvider, detectEntityChanges, ensureLayoutPropertyView, ensureLayoutSection, ensureListActions, eventDispatchMiddleware, filterSortEntityRows, findEntityListRowDataInTree, fingerprintAttachmentItem, fingerprintAttachments, formatLookupItemDisplay, formatLookupItemDisplayAsync, getDataSourcePageIndex, getEntityListRowId, getMasterInterfacePropertySortKey, hasFileUploaderTitleOrDescriptionFields, hydrateAttachmentFieldToFileList, isAXPMiddlewareAbortError, isAttachmentFieldPresentOnRow, isAttachmentListEntry, isAttachmentStorageRef, isCategoryEntity, isCategoryFilter, isFileListItem, isFileUploaderEditDialogAuto, isLegacyEntityDataSelectorOptions, layoutOrderingMiddlewareFactory, layoutOrderingMiddlewareProvider, mapEntityStorageErrorToCommandResult, mapLegacyEntityDataSelectorOptions, normalizeEntityDataSelectorOptions, normalizeEntityFieldToFileList, normalizeEntityListPersistenceMode, normalizeListPaging, persistedAttachments, provideEntity, resolveAttachmentFieldPath, resolveEntityPluginDetailPageOrder, resolveFileUploaderEditDialog, resolveFileUploaderEntityScope, resolveLookupDisplayField, resolveLookupDisplayTemplate, resolveLookupEntityKey, restoreEntityListExpandedRows, runEntityQuery, searchResultDescriptionMiddleware, searchResultDescriptionMiddlewareProvider, shouldLoadEntityListStateFromStorage, shouldResetEntityListStateOnRouteEntry, traceEntityMasterList };
4374
- export type { AXPDataSeeder, AXPEntityActionPlugin, AXPEntityCategoryWidgetOptions, AXPEntityChangeSet, AXPEntityConfigs, AXPEntityDataSelectorCategoryFilterOptions, AXPEntityDataSelectorCategoryOptions, AXPEntityDataSelectorCreateOptions, AXPEntityDataSelectorFilterOptions, AXPEntityDataSelectorGridOptions, AXPEntityDataSelectorOpenInput, AXPEntityDataSelectorOpenOptions, AXPEntityDataSelectorOptions, AXPEntityDataSelectorResult, AXPEntityDataSelectorRowActionsConfig, AXPEntityDataSelectorSearchOptions, AXPEntityDataSelectorSelectionOptions, AXPEntityDataSelectorSortOptions, AXPEntityDefinitionLoader, AXPEntityDefinitionPreloader, AXPEntityDeleteOptions, AXPEntityDetailPopoverOptions, AXPEntityLayoutLike, AXPEntityLayoutPropertyLike, AXPEntityLayoutSectionLike, AXPEntityListEntry, AXPEntityListExpandRowRef, AXPEntityListInput, AXPEntityListPagingState, AXPEntityListPersistenceMode, AXPEntityListToolbarConvertOptions, AXPEntityMasterListCardLayout, AXPEntityMasterListCardSecondaryActionItem, AXPEntityMasterListViewSortPropViewModel, AXPEntityModifier, AXPEntityModifierContext, AXPEntityModifierProvider, AXPEntityPreloadEntity, AXPEntityStorageContext, AXPEntityStorageMiddleware, AXPFileListLook, AXPFileUploaderEditDialogFieldOptions, AXPFileUploaderEditDialogMode, AXPFileUploaderEditDialogOptions, AXPFileUploaderEntityFilesScope, AXPFileUploaderLoadFilesInput, AXPFileUploaderLoadFilesResult, AXPFileUploaderSaveFilesInput, AXPFileUploaderSaveFilesResult, AXPFileUploaderShowFileListEntityContext, AXPFileUploaderShowFileListOptions, AXPFileUploaderUploadActionDescriptor, AXPFileUploaderWidgetColumnOptions, AXPFileUploaderWidgetDesignerOptions, AXPFileUploaderWidgetEditOptions, AXPFileUploaderWidgetOptions, AXPFileUploaderWidgetPrintOptions, AXPFileUploaderWidgetViewOptions, AXPGetEntityDetailsQueryInput, AXPGetEntityDetailsQueryResult, AXPLookupDisplayEvalDeps, AXPMultiSourceDefinition, AXPMultiSourceDefinitionProvider, AXPMultiSourceItem, AXPMultiSourceRef, AXPMultiSourceSearchResult, AXPMultiSourceSearchResultItem, AXPMultiSourceSelectorOpenConfig, AXPMultiSourceSelectorResult, AXPMultiSourceSelectorWidgetOptions, AXPMultiSourceValue, AXPOpenEntityDetailsCommandInput, AXPRelatedColumnMetadata, AXPSelectorStructureFieldDef, AXPSelectorStructureIdentityDisplay, AXPSelectorStructurePresentationMode, AXPSelectorStructureSelectorMode, AXPSelectorStructureStructureMode, AXPSelectorStructureWidgetColumnOptions, AXPSelectorStructureWidgetDesignerOptions, AXPSelectorStructureWidgetEditOptions, AXPSelectorStructureWidgetOptions, AXPSelectorStructureWidgetPrintOptions, AXPSelectorStructureWidgetViewOptions, AXPShowListViewCondition, AttachmentsDisplayMode, AttachmentsPluginOptions, CategoryQueryEvent, CategoryQueryFunction, CategoryQueryResult, CategoryTreeConfig, CategoryTreeNodeData, EntityDetailPluginPageSlot, EntityMasterListTraceArea, PairSpanRule, ResolveEntityPluginDetailPageOrderOptions, RunEntityQueryAdapters, SectionOrderConfig, SkipEntityComponentPageRef };
4525
+ export { ATTACHMENTS_PAGE_COMPONENT_KEY, AXMEntityCrudService, AXMEntityCrudServiceImpl, AXPCategoryTreeService, AXPCreateEntityCommand, AXPDataSeederService, AXPDeleteEntityCommand, AXPEditFileUploaderCommand, AXPEntitiesListDataSourceDefinition, AXPEntityCategoryTreeSelectorComponent, AXPEntityCategoryWidget, AXPEntityCategoryWidgetColumnComponent, AXPEntityCategoryWidgetEditComponent, AXPEntityCategoryWidgetViewComponent, AXPEntityCommandTriggerViewModel, AXPEntityCreateEvent, AXPEntityCreateViewElementViewModel, AXPEntityCreateViewModelFactory, AXPEntityCreateViewSectionViewModel, AXPEntityDataProvider, AXPEntityDataProviderImpl, AXPEntityDataSelectorRowActionsService, AXPEntityDataSelectorService, AXPEntityDefinitionProviderWidget, AXPEntityDefinitionProviderWidgetEditComponent, AXPEntityDefinitionRegistryService, AXPEntityDeletedEvent, AXPEntityDetailListViewModel, AXPEntityDetailPopoverComponent, AXPEntityDetailPopoverService, AXPEntityDetailViewModelFactory, AXPEntityDetailViewModelResolver, AXPEntityEventDispatcherService, AXPEntityFormBuilderService, AXPEntityLifecycleHookKeys, AXPEntityListPersistenceModeDefault, AXPEntityListTableService, AXPEntityListToolbarService, AXPEntityListViewCardFieldViewModel, AXPEntityListViewColumnViewModel, AXPEntityListViewModelFactory, AXPEntityListViewModelResolver, AXPEntityListWidget, AXPEntityListWidgetViewComponent, AXPEntityMasterCreateViewModel, AXPEntityMasterListCardSelectActionName, AXPEntityMasterListViewModel, AXPEntityMasterListViewQueryViewModel, AXPEntityMasterSingleElementViewModel, AXPEntityMasterSingleViewGroupViewModel, AXPEntityMasterSingleViewModel, AXPEntityMasterUpdateElementViewModel, AXPEntityMasterUpdateViewModel, AXPEntityMasterUpdateViewModelFactory, AXPEntityMiddleware, AXPEntityModifyEvent, AXPEntityModule, AXPEntityPreloadFiltersContainerComponent, AXPEntityPreloadFiltersViewModel, AXPEntityPreloadFiltersViewModelResolver, AXPEntityResolver, AXPEntityService, AXPEntityStorageService, AXPEntityUpdateViewSectionViewModel, AXPFileListComponent, AXPFileUploaderLoadFilesQuery, AXPFileUploaderSaveFilesCommand, AXPFileUploaderWidget, AXPFileUploaderWidgetColumnComponent, AXPFileUploaderWidgetEditComponent, AXPFileUploaderWidgetService, AXPFileUploaderWidgetViewComponent, AXPGetEntityDetailsQuery, AXPLayoutOrderingConfigService, AXPLookupWidget, AXPLookupWidgetColumnComponent, AXPLookupWidgetEditComponent, AXPLookupWidgetViewComponent, AXPMiddlewareAbortError, AXPMiddlewareEntityStorageService, AXPMultiSourceDefinitionProviderContext, AXPMultiSourceDefinitionProviderService, AXPMultiSourceFederatedSearchService, AXPMultiSourceSelectorComponent, AXPMultiSourceSelectorService, AXPMultiSourceSelectorWidget, AXPMultiSourceSelectorWidgetColumnComponent, AXPMultiSourceSelectorWidgetEditComponent, AXPMultiSourceSelectorWidgetViewComponent, AXPMultiSourceType, AXPOpenEntityDetailsCommand, AXPOpenEntityListCommand, AXPRelatedColumnEnrichmentService, AXPRelatedColumnMetadataResolver, AXPSelectorStructureWidget, AXPSelectorStructureWidgetColumnComponent, AXPSelectorStructureWidgetEditComponent, AXPSelectorStructureWidgetViewComponent, AXPShowFileUploaderPopupCommand, AXPTruncatedBreadcrumbComponent, AXPUpdateEntityCommand, AXPViewEntityDetailsCommand, AXP_APPEARANCE_SECTION_ORDER, AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY, AXP_CLASSIFICATION_SECTION_ORDER, 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, ENTITY_MASTER_LIST_TRACE_NS, EntityBuilder, EntityDataAccessor, GALLERY_PAGE_COMPONENT_KEY, actionExists, applyDataSourcePagingWithoutLoad, attachmentFieldCount, attachmentNeedsHydration, attachmentsPlugin, attachmentsSemanticallyEqual, axpCreateEntityAiToolInputDefaults, axpCreateEntityCommandDefinition, axpDeleteEntityCommandDefinition, axpOpenEntityListCommandDefinition, axpShowFileUploaderPopupCommandDefinition, buildDataSourceTraceSnapshot, canPersistEntityListState, cloneLayoutArrays, columnOrderingMiddleware, columnOrderingMiddlewareProvider, columnWidthMiddleware, columnWidthMiddlewareProvider, committedAttachments, computeEntityAggregates, createColumnOrderingMiddlewareProvider, createLayoutOrderingMiddlewareProvider, createModifierContext, defaultCardLayoutMiddleware, defaultCardLayoutMiddlewareProvider, defaultMultiLanguageMiddleware, defaultMultiLanguageMiddlewareProvider, detectEntityChanges, ensureLayoutPropertyView, ensureLayoutSection, ensureListActions, eventDispatchMiddleware, filterSortEntityRows, findEntityListRowDataInTree, fingerprintAttachmentItem, fingerprintAttachments, fireEntityLifecycleHook, formatLookupItemDisplay, formatLookupItemDisplayAsync, galleryPlugin, getDataSourcePageIndex, getEntityListRowId, getMasterInterfacePropertySortKey, hasFileUploaderTitleOrDescriptionFields, hydrateAttachmentFieldToFileList, isAXPMiddlewareAbortError, isAttachmentFieldPresentOnRow, isAttachmentListEntry, isAttachmentStorageRef, isCategoryEntity, isCategoryFilter, isFileListItem, isFileUploaderEditDialogAuto, isLegacyEntityDataSelectorOptions, layoutOrderingMiddlewareFactory, layoutOrderingMiddlewareProvider, mapEntityStorageErrorToCommandResult, mapLegacyEntityDataSelectorOptions, normalizeEntityDataSelectorOptions, normalizeEntityFieldToFileList, normalizeEntityListPersistenceMode, normalizeListPaging, persistedAttachments, provideEntity, resolveAttachmentFieldPath, resolveEntityPluginDetailPageOrder, resolveFileUploaderEditDialog, resolveFileUploaderEntityScope, resolveLookupDisplayField, resolveLookupDisplayTemplate, resolveLookupEntityKey, restoreEntityListExpandedRows, runEntityQuery, searchResultDescriptionMiddleware, searchResultDescriptionMiddlewareProvider, shouldLoadEntityListStateFromStorage, shouldResetEntityListStateOnRouteEntry, traceEntityMasterList };
4526
+ export type { AXPDataSeeder, AXPDeleteEntityCommandInput, AXPEntityActionPlugin, AXPEntityCategoryWidgetOptions, AXPEntityChangeSet, AXPEntityConfigs, AXPEntityDataSelectorCategoryFilterOptions, AXPEntityDataSelectorCategoryOptions, AXPEntityDataSelectorCreateOptions, AXPEntityDataSelectorFilterOptions, AXPEntityDataSelectorGridOptions, AXPEntityDataSelectorOpenInput, AXPEntityDataSelectorOpenOptions, AXPEntityDataSelectorOptions, AXPEntityDataSelectorResult, AXPEntityDataSelectorRowActionsConfig, AXPEntityDataSelectorSearchOptions, AXPEntityDataSelectorSelectionOptions, AXPEntityDataSelectorSortOptions, AXPEntityDefinitionLoader, AXPEntityDefinitionPreloader, AXPEntityDetailPopoverOptions, AXPEntityLayoutLike, AXPEntityLayoutPropertyLike, AXPEntityLayoutSectionLike, AXPEntityListEntry, AXPEntityListExpandRowRef, AXPEntityListInput, AXPEntityListPagingState, AXPEntityListPersistenceMode, AXPEntityListToolbarConvertOptions, AXPEntityMasterListCardLayout, AXPEntityMasterListCardSecondaryActionItem, AXPEntityMasterListViewSortPropViewModel, AXPEntityModifier, AXPEntityModifierContext, AXPEntityModifierProvider, AXPEntityPreloadEntity, AXPEntityStorageContext, AXPEntityStorageMiddleware, AXPFileListLook, AXPFileUploaderEditDialogFieldOptions, AXPFileUploaderEditDialogMode, AXPFileUploaderEditDialogOptions, AXPFileUploaderEntityFilesScope, AXPFileUploaderLoadFilesInput, AXPFileUploaderLoadFilesResult, AXPFileUploaderSaveFilesInput, AXPFileUploaderSaveFilesResult, AXPFileUploaderShowFileListEntityContext, AXPFileUploaderShowFileListOptions, AXPFileUploaderUploadActionDescriptor, AXPFileUploaderWidgetColumnOptions, AXPFileUploaderWidgetDesignerOptions, AXPFileUploaderWidgetEditOptions, AXPFileUploaderWidgetOptions, AXPFileUploaderWidgetPrintOptions, AXPFileUploaderWidgetViewOptions, AXPGetEntityDetailsQueryInput, AXPGetEntityDetailsQueryResult, AXPLookupDisplayEvalDeps, AXPMultiSourceDefinition, AXPMultiSourceDefinitionProvider, AXPMultiSourceItem, AXPMultiSourceRef, AXPMultiSourceSearchResult, AXPMultiSourceSearchResultItem, AXPMultiSourceSelectorOpenConfig, AXPMultiSourceSelectorResult, AXPMultiSourceSelectorWidgetOptions, AXPMultiSourceValue, AXPOpenEntityDetailsCommandInput, AXPOpenEntityListCommandInput, AXPOpenEntityListCondition, AXPRelatedColumnMetadata, AXPSelectorStructureFieldDef, AXPSelectorStructureIdentityDisplay, AXPSelectorStructurePresentationMode, AXPSelectorStructureSelectorMode, AXPSelectorStructureStructureMode, AXPSelectorStructureWidgetColumnOptions, AXPSelectorStructureWidgetDesignerOptions, AXPSelectorStructureWidgetEditOptions, AXPSelectorStructureWidgetOptions, AXPSelectorStructureWidgetPrintOptions, AXPSelectorStructureWidgetViewOptions, AXPShowFileUploaderPopupCommandInput, AttachmentsDisplayMode, AttachmentsPluginOptions, CategoryQueryEvent, CategoryQueryFunction, CategoryQueryResult, CategoryTreeConfig, CategoryTreeNodeData, EntityDetailPluginPageSlot, EntityMasterListTraceArea, GalleryDisplayMode, GalleryPluginOptions, PairSpanRule, ResolveEntityPluginDetailPageOrderOptions, RunEntityQueryAdapters, SectionOrderConfig, SkipEntityComponentPageRef };