@acorex/platform 20.8.4 → 21.0.0-beta.0

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 (125) hide show
  1. package/fesm2022/acorex-platform-auth.mjs +121 -27
  2. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  3. package/fesm2022/{acorex-platform-common-common-settings.provider-41RhWqb4.mjs → acorex-platform-common-common-settings.provider-G9XcXXOG.mjs} +4 -4
  4. package/fesm2022/acorex-platform-common-common-settings.provider-G9XcXXOG.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-common.mjs +669 -268
  6. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-core.mjs +333 -140
  8. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-domain.mjs +557 -826
  10. package/fesm2022/acorex-platform-domain.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-layout-builder.mjs +539 -110
  12. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  13. package/fesm2022/{acorex-platform-layout-components-binding-expression-editor-popup.component-CSxCnzwU.mjs → acorex-platform-layout-components-binding-expression-editor-popup.component-CWV4XD36.mjs} +15 -15
  14. package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CWV4XD36.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-layout-components.mjs +3285 -1035
  16. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  17. package/fesm2022/acorex-platform-layout-designer.mjs +488 -284
  18. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-layout-entity.mjs +16484 -12485
  20. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-layout-views.mjs +410 -170
  22. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  23. package/fesm2022/acorex-platform-layout-widget-core.mjs +548 -474
  24. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  25. package/fesm2022/{acorex-platform-layout-widgets-button-widget-designer.component-CPBzE96V.mjs → acorex-platform-layout-widgets-button-widget-designer.component-fLjWiSFE.mjs} +11 -11
  26. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-fLjWiSFE.mjs.map +1 -0
  27. package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-Dtv6U3df.mjs → acorex-platform-layout-widgets-file-list-popup.component-3oRAKxTo.mjs} +22 -77
  28. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-3oRAKxTo.mjs.map +1 -0
  29. package/fesm2022/{acorex-platform-layout-widgets-image-preview.popup-QxJfswhK.mjs → acorex-platform-layout-widgets-image-preview.popup-CazpERbX.mjs} +8 -9
  30. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-CazpERbX.mjs.map +1 -0
  31. package/fesm2022/{acorex-platform-layout-widgets-page-widget-designer.component-CVdssZBD.mjs → acorex-platform-layout-widgets-page-widget-designer.component-BQ4G6aYf.mjs} +17 -17
  32. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-BQ4G6aYf.mjs.map +1 -0
  33. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-DWuWxUF_.mjs +116 -0
  34. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-DWuWxUF_.mjs.map +1 -0
  35. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-DVaZN9QN.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-fV94u3t2.mjs} +25 -19
  36. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-fV94u3t2.mjs.map +1 -0
  37. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-DPGHgXa6.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-DyuvQhgN.mjs} +9 -9
  38. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-DyuvQhgN.mjs.map +1 -0
  39. package/fesm2022/{acorex-platform-layout-widgets-text-block-widget-designer.component-CdiNW691.mjs → acorex-platform-layout-widgets-text-block-widget-designer.component-EJMMdpIs.mjs} +7 -7
  40. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-EJMMdpIs.mjs.map +1 -0
  41. package/fesm2022/acorex-platform-layout-widgets.mjs +6396 -4058
  42. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  43. package/fesm2022/acorex-platform-native.mjs +8 -7
  44. package/fesm2022/acorex-platform-native.mjs.map +1 -1
  45. package/fesm2022/acorex-platform-runtime.mjs +328 -166
  46. package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
  47. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-CkptOSO3.mjs +160 -0
  48. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-CkptOSO3.mjs.map +1 -0
  49. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-DXC2qtvK.mjs +120 -0
  50. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-DXC2qtvK.mjs.map +1 -0
  51. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-rGsMVAZj.mjs → acorex-platform-themes-default-entity-master-single-view.component-DYyunzKZ.mjs} +16 -23
  52. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-DYyunzKZ.mjs.map +1 -0
  53. package/fesm2022/acorex-platform-themes-default-error-401.component-C5lQECDP.mjs +31 -0
  54. package/fesm2022/acorex-platform-themes-default-error-401.component-C5lQECDP.mjs.map +1 -0
  55. package/fesm2022/acorex-platform-themes-default-error-404.component-D5wBXAB-.mjs +25 -0
  56. package/fesm2022/acorex-platform-themes-default-error-404.component-D5wBXAB-.mjs.map +1 -0
  57. package/fesm2022/acorex-platform-themes-default-error-offline.component-AhDiY3DI.mjs +19 -0
  58. package/fesm2022/acorex-platform-themes-default-error-offline.component-AhDiY3DI.mjs.map +1 -0
  59. package/fesm2022/acorex-platform-themes-default.mjs +1687 -69
  60. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  61. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-column.component-TJ9PWHMY.mjs → acorex-platform-themes-shared-icon-chooser-column.component-QL2-ZUVg.mjs} +8 -8
  62. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-QL2-ZUVg.mjs.map +1 -0
  63. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-BHcKkIx0.mjs → acorex-platform-themes-shared-icon-chooser-view.component-BXydqPt_.mjs} +8 -8
  64. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BXydqPt_.mjs.map +1 -0
  65. package/fesm2022/{acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs → acorex-platform-themes-shared-settings.provider-D13QB3Hr.mjs} +2 -2
  66. package/fesm2022/acorex-platform-themes-shared-settings.provider-D13QB3Hr.mjs.map +1 -0
  67. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-Cb9iY6k9.mjs +88 -0
  68. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-Cb9iY6k9.mjs.map +1 -0
  69. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-KP4-BND5.mjs +80 -0
  70. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-KP4-BND5.mjs.map +1 -0
  71. package/fesm2022/acorex-platform-themes-shared.mjs +572 -465
  72. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  73. package/fesm2022/acorex-platform-workflow.mjs +276 -98
  74. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  75. package/fesm2022/acorex-platform.mjs.map +1 -1
  76. package/package.json +34 -34
  77. package/{auth/index.d.ts → types/acorex-platform-auth.d.ts} +14 -2
  78. package/{common/index.d.ts → types/acorex-platform-common.d.ts} +261 -24
  79. package/{core/index.d.ts → types/acorex-platform-core.d.ts} +163 -42
  80. package/{domain/index.d.ts → types/acorex-platform-domain.d.ts} +744 -412
  81. package/{layout/builder/index.d.ts → types/acorex-platform-layout-builder.d.ts} +137 -38
  82. package/{layout/components/index.d.ts → types/acorex-platform-layout-components.d.ts} +808 -131
  83. package/{layout/designer/index.d.ts → types/acorex-platform-layout-designer.d.ts} +96 -18
  84. package/{layout/entity/index.d.ts → types/acorex-platform-layout-entity.d.ts} +695 -61
  85. package/{layout/views/index.d.ts → types/acorex-platform-layout-views.d.ts} +80 -47
  86. package/{layout/widget-core/index.d.ts → types/acorex-platform-layout-widget-core.d.ts} +274 -197
  87. package/{layout/widgets/index.d.ts → types/acorex-platform-layout-widgets.d.ts} +583 -104
  88. package/{native/index.d.ts → types/acorex-platform-native.d.ts} +0 -7
  89. package/types/acorex-platform-runtime.d.ts +565 -0
  90. package/{themes/default/index.d.ts → types/acorex-platform-themes-default.d.ts} +105 -4
  91. package/{themes/shared/index.d.ts → types/acorex-platform-themes-shared.d.ts} +14 -5
  92. package/{workflow/index.d.ts → types/acorex-platform-workflow.d.ts} +96 -81
  93. package/fesm2022/acorex-platform-common-common-settings.provider-41RhWqb4.mjs.map +0 -1
  94. package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CSxCnzwU.mjs.map +0 -1
  95. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-CPBzE96V.mjs.map +0 -1
  96. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-Dtv6U3df.mjs.map +0 -1
  97. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-QxJfswhK.mjs.map +0 -1
  98. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-CVdssZBD.mjs.map +0 -1
  99. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BCxE0RTB.mjs +0 -111
  100. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BCxE0RTB.mjs.map +0 -1
  101. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-DVaZN9QN.mjs.map +0 -1
  102. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-DPGHgXa6.mjs.map +0 -1
  103. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-CdiNW691.mjs.map +0 -1
  104. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-D4hU2SCE.mjs +0 -160
  105. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-D4hU2SCE.mjs.map +0 -1
  106. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-CLDoygoI.mjs +0 -1610
  107. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-CLDoygoI.mjs.map +0 -1
  108. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BVTklnzs.mjs +0 -120
  109. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BVTklnzs.mjs.map +0 -1
  110. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-rGsMVAZj.mjs.map +0 -1
  111. package/fesm2022/acorex-platform-themes-default-error-401.component-53VB-PS_.mjs +0 -31
  112. package/fesm2022/acorex-platform-themes-default-error-401.component-53VB-PS_.mjs.map +0 -1
  113. package/fesm2022/acorex-platform-themes-default-error-404.component-DVF9soT5.mjs +0 -25
  114. package/fesm2022/acorex-platform-themes-default-error-404.component-DVF9soT5.mjs.map +0 -1
  115. package/fesm2022/acorex-platform-themes-default-error-offline.component-CwNNHzZn.mjs +0 -19
  116. package/fesm2022/acorex-platform-themes-default-error-offline.component-CwNNHzZn.mjs.map +0 -1
  117. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-TJ9PWHMY.mjs.map +0 -1
  118. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BHcKkIx0.mjs.map +0 -1
  119. package/fesm2022/acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs.map +0 -1
  120. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-BUPs84MI.mjs +0 -65
  121. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-BUPs84MI.mjs.map +0 -1
  122. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-BotknoHn.mjs +0 -64
  123. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-BotknoHn.mjs.map +0 -1
  124. package/runtime/index.d.ts +0 -307
  125. /package/{index.d.ts → types/acorex-platform.d.ts} +0 -0
@@ -1,27 +1,29 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { Signal, InjectionToken, InputSignal, TemplateRef, ElementRef, OnDestroy, OnInit, QueryList, OnChanges, EventEmitter, WritableSignal } from '@angular/core';
3
- import { AXPActivityLog, AXPSystemActionType, AXPCategoryEntity, AXPColumnQuery, AXPContextData, AXPFilterDefinition, AXPFilterQuery, AXPSortDefinition, AXPSortQuery, AXPMetaData, AXPViewQuery, AXPActionMenuItem, AXPExecuteCommand, AXPExecuteCommandResult } from '@acorex/platform/core';
2
+ import { Signal, InjectionToken, InputSignal, TemplateRef, ElementRef, OnDestroy, OnInit, Type, QueryList, OnChanges, EventEmitter, WritableSignal } from '@angular/core';
3
+ import { AXPActivityLog, AXPSystemActionType, AXPCategoryEntity, AXPColumnQuery, AXPContextData, AXPFilterClause, AXPFilterDefinition, AXPFilterQuery, AXPContextChangeEvent, AXPSortDefinition, AXPSortQuery, AXPMetaData, AXPViewQuery, AXPMultiLanguageString, AXPActionMenuItem, AXPExecuteCommand, AXPExecuteCommandResult, containsHtmlMarkup } from '@acorex/platform/core';
4
4
  import { AXPMenuItem } from '@acorex/platform/common';
5
- import { AXValueChangedEvent, AXClickEvent, AXDataSource, AXDataSourceFilterOption, AXHtmlEvent, AXEvent, AXRange } from '@acorex/cdk/common';
6
- import { AXTreeViewLegacyComponent, AXTreeItemClickBaseEventLegacy } from '@acorex/components/tree-view-legacy';
7
- import { AXTranslationService } from '@acorex/core/translation';
5
+ import { AXValueChangedEvent, AXClickEvent, AXDataSource, AXDataSourceFilterOption, AXDataSourceOperator, AXFilterLogic, AXHtmlEvent, AXEvent, AXRange } from '@acorex/cdk/common';
6
+ import { AXTreeViewDataSource, AXTreeViewNodeClickEvent, AXTreeViewNodeToggleEvent, AXTreeViewNode, AXTreeViewDragBehavior, AXTreeViewDragArea, AXTreeViewComponent, AXTreeViewBeforeDropEvent, AXTreeViewDropEvent } from '@acorex/components/tree-view';
8
7
  import { AXPopoverComponent } from '@acorex/components/popover';
9
8
  import { CdkDragDrop } from '@angular/cdk/drag-drop';
10
9
  import * as _acorex_platform_layout_widget_core from '@acorex/platform/layout/widget-core';
11
- import { AXPWidgetNode, AXPWidgetRendererDirective, AXPWidgetCoreContextChangeEvent, AXPWidgetProperty, AXPWidgetConfig } from '@acorex/platform/layout/widget-core';
10
+ import { AXPWidgetNode, AXPWidgetRendererDirective, AXPWidgetProperty, AXPWidgetConfig } from '@acorex/platform/layout/widget-core';
12
11
  import { AXDataTableComponent, AXDataTableRowDbClick, AXDataTableRowClick } from '@acorex/components/data-table';
13
12
  import { AXBasePageComponent } from '@acorex/components/page';
14
13
  import { AXDropListDroppedEvent } from '@acorex/cdk/drag-drop';
15
14
  import { AXTagBoxComponent } from '@acorex/components/tag-box';
16
15
  import { AXCalendarService } from '@acorex/core/date-time';
16
+ import * as _acorex_core_translation from '@acorex/core/translation';
17
+ import { AXTranslationService } from '@acorex/core/translation';
17
18
  import { AXFormComponent } from '@acorex/components/form';
18
- import { AXTreeViewNode, AXTreeViewDragBehavior, AXTreeViewDragArea, AXTreeViewComponent, AXTreeViewBeforeDropEvent, AXTreeViewDropEvent } from '@acorex/components/tree-view';
19
19
  import { AXTabStripChangedEvent, AXTabsComponent } from '@acorex/components/tabs';
20
+ import { AXValidationSummary } from '@acorex/core/validation';
20
21
  import { AXPopupSizeType, AXPopupService } from '@acorex/components/popup';
21
22
  import { Observable, Subject } from 'rxjs';
22
23
  import { AXSelectBoxComponent } from '@acorex/components/select-box';
23
24
  import { AXContextMenuOpeningEvent, AXContextMenuItemsClickEvent } from '@acorex/components/menu';
24
25
  import { AXSchedulerComponent, AXSchedulerView, AXSchedulerResource, AXSchedulerAppointment, AXSchedulerDateRange } from '@acorex/components/scheduler';
26
+ import * as _acorex_platform_layout_components from '@acorex/platform/layout/components';
25
27
 
26
28
  declare class AXPActivityLogComponent {
27
29
  private readonly translateService;
@@ -252,7 +254,8 @@ interface AXPCategoryTreeDataSource {
252
254
  }
253
255
 
254
256
  declare class AXPCategoryTreeComponent {
255
- protected readonly translationService: AXTranslationService;
257
+ /** i18n key for the synthetic root row; resolved in the template with the translate pipe. */
258
+ protected readonly categoryTreeRootTitleI18nKey = "@general:terms.interface.selection.all-items";
256
259
  dataSource: _angular_core.InputSignal<AXPCategoryTreeDataSource>;
257
260
  config: _angular_core.InputSignal<AXPCategoryTreeConfig>;
258
261
  actions: _angular_core.InputSignal<AXPCategoryTreeActions>;
@@ -264,7 +267,6 @@ declare class AXPCategoryTreeComponent {
264
267
  nodeDelete: _angular_core.OutputEmitterRef<AXPCategoryEntity<string>>;
265
268
  searchChange: _angular_core.OutputEmitterRef<string>;
266
269
  collapseChange: _angular_core.OutputEmitterRef<AXPCategoryEntity<string>>;
267
- tree: _angular_core.Signal<AXTreeViewLegacyComponent | undefined>;
268
270
  isLoading: _angular_core.WritableSignal<boolean>;
269
271
  searchValue: _angular_core.WritableSignal<string>;
270
272
  private loadingTimeoutId;
@@ -276,8 +278,9 @@ declare class AXPCategoryTreeComponent {
276
278
  loadRootNodes(): Promise<void>;
277
279
  loadChildNodes(parentId: string): Promise<void>;
278
280
  searchNodes(searchValue: string): Promise<void>;
279
- handleNodeClick(event: AXTreeItemClickBaseEventLegacy): Promise<void>;
280
- handleCollapseChanged(event: AXTreeItemClickBaseEventLegacy): Promise<void>;
281
+ protected onTreeDatasourceChange(value: AXTreeViewDataSource): void;
282
+ handleNodeClick(event: AXTreeViewNodeClickEvent): Promise<void>;
283
+ handleNodeToggle(event: AXTreeViewNodeToggleEvent): Promise<void>;
281
284
  handleSearchChange(event: AXValueChangedEvent): Promise<void>;
282
285
  handleCreateRootClick(event: AXClickEvent): Promise<void>;
283
286
  handleCreateChildClick(node: AXPCategoryTreeNode, event: AXClickEvent): Promise<void>;
@@ -433,6 +436,7 @@ declare class AXPCompareViewComponent implements OnInit, OnDestroy {
433
436
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPCompareViewComponent, "axp-compare-view", never, { "inputs": { "alias": "inputs"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
434
437
  }
435
438
 
439
+ type AXPDataSelectorAllowCreate = 'none' | 'full' | 'quick';
436
440
  interface AXPDataSelectorColumn {
437
441
  name: string;
438
442
  title: string;
@@ -455,7 +459,8 @@ interface AXPDataSelectorConfig {
455
459
  }[];
456
460
  initialSearchTerm?: string;
457
461
  parentField?: string;
458
- allowCreate?: boolean;
462
+ allowCreate?: AXPDataSelectorAllowCreate;
463
+ onCreate?: (mode: 'full' | 'quick') => Promise<any | null>;
459
464
  filters?: AXDataSourceFilterOption;
460
465
  selectedItemIds?: string[] | number[];
461
466
  categoryFilter?: {
@@ -511,7 +516,7 @@ declare class AXPDataSelectorComponent extends AXBasePageComponent {
511
516
  protected handleRowClick(e: AXDataTableRowClick): void;
512
517
  protected handleSelectedRowsChange(rows: unknown[]): Promise<void>;
513
518
  protected handleChangeSearchValue(e: AXValueChangedEvent): void;
514
- protected handleCreateNewClick(): Promise<void>;
519
+ protected handleCreateNewClick(mode: 'full' | 'quick'): Promise<void>;
515
520
  protected handleCloseClick(): void;
516
521
  protected handleSelectClick(): void;
517
522
  protected handleExpandRow(row: any): Promise<void>;
@@ -560,6 +565,102 @@ declare class AXPDataSelectorService {
560
565
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPDataSelectorService>;
561
566
  }
562
567
 
568
+ /**
569
+ * Definition for a page component that can be registered and loaded dynamically
570
+ */
571
+ interface AXPPageComponentDefinition {
572
+ /**
573
+ * Unique key to identify the component
574
+ */
575
+ key: string;
576
+ /**
577
+ * Loader function that returns the component type (supports lazy loading)
578
+ */
579
+ loader: () => Type<any> | Promise<Type<any>>;
580
+ }
581
+ /**
582
+ * Provider interface for registering page components
583
+ * Similar to AXPDataSourceDefinitionProvider pattern
584
+ */
585
+ interface AXPPageComponentProvider {
586
+ /**
587
+ * Returns all component definitions provided by this provider
588
+ */
589
+ components(): Promise<AXPPageComponentDefinition[]>;
590
+ }
591
+
592
+ /**
593
+ * Service for managing page components from multiple providers
594
+ * Similar to AXPDataSourceDefinitionProviderService pattern
595
+ *
596
+ * @example
597
+ * ```typescript
598
+ * // In a module providers array:
599
+ * {
600
+ * provide: AXP_PAGE_COMPONENT_PROVIDER,
601
+ * useClass: MyPageComponentProvider,
602
+ * multi: true,
603
+ * }
604
+ *
605
+ * // Example provider implementation:
606
+ * export class MyPageComponentProvider implements AXPPageComponentProvider {
607
+ * async components(): Promise<AXPPageComponentDefinition[]> {
608
+ * return [
609
+ * {
610
+ * key: 'my-custom-page',
611
+ * loader: () => import('./my-page.component').then(m => m.MyPageComponent),
612
+ * },
613
+ * ];
614
+ * }
615
+ * }
616
+ *
617
+ * // Later, get the component loader:
618
+ * const loader = await pageComponentService.find('my-custom-page');
619
+ * if (loader) {
620
+ * const ComponentType = await loader();
621
+ * // Use ComponentType
622
+ * }
623
+ * ```
624
+ */
625
+ declare class AXPPageComponentRegistryService {
626
+ private providers;
627
+ /**
628
+ * Get all component definitions from all providers
629
+ */
630
+ components(): Promise<AXPPageComponentDefinition[]>;
631
+ /**
632
+ * Find a component loader by key
633
+ */
634
+ find(key: string): Promise<(() => Type<any> | Promise<Type<any>>) | undefined>;
635
+ /**
636
+ * Check if a component exists by key
637
+ */
638
+ exists(key: string): Promise<boolean>;
639
+ /**
640
+ * Get all registered component keys
641
+ */
642
+ getAll(): Promise<string[]>;
643
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPPageComponentRegistryService, never>;
644
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPPageComponentRegistryService>;
645
+ }
646
+
647
+ /**
648
+ * Injection token for page component providers
649
+ * Use with multi: true to register multiple providers
650
+ *
651
+ * @example
652
+ * ```typescript
653
+ * providers: [
654
+ * {
655
+ * provide: AXP_PAGE_COMPONENT_PROVIDER,
656
+ * useClass: MyPageComponentProvider,
657
+ * multi: true,
658
+ * }
659
+ * ]
660
+ * ```
661
+ */
662
+ declare const AXP_PAGE_COMPONENT_PROVIDER: InjectionToken<AXPPageComponentProvider[]>;
663
+
563
664
  interface AXPDragDropListItem {
564
665
  id: string;
565
666
  content: string;
@@ -595,12 +696,202 @@ declare class AXPDragDropListComponent {
595
696
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDragDropListComponent, "axp-drag-drop-list", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "listId": { "alias": "listId"; "required": false; "isSignal": true; }; "dropListGroup": { "alias": "dropListGroup"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "disable": { "alias": "disable"; "required": false; "isSignal": true; }; }, { "items": "itemsChange"; "itemClick": "itemClick"; "dropListDropped": "dropListDropped"; }, never, never, true, never>;
596
697
  }
597
698
 
699
+ /**
700
+ * Shared types for expression builders (expression-builder, sort-builder, group-builder, etc.)
701
+ */
702
+ /** Unique identifier for expression nodes */
703
+ type AXPExpressionNodeId = string;
704
+ /** Logical operator type (AND, OR, etc.) */
705
+ type AXPExpressionLogicType = 'and' | 'or' | 'not';
706
+ /** Operation type (add, multiply, equal, etc.) */
707
+ type AXPExpressionOperationType = string;
708
+ /** Value source type (literal, field, parameter, etc.) */
709
+ type AXPExpressionValueSourceType = 'literal' | 'field' | 'parameter';
710
+ /** Field definition for value selectors */
711
+ interface AXPExpressionFieldDefinition {
712
+ id: string;
713
+ title: string;
714
+ dataType?: string;
715
+ path?: string;
716
+ /** Optional: for nested/related fields */
717
+ children?: AXPExpressionFieldDefinition[];
718
+ }
719
+ /** Value operand in an expression */
720
+ interface AXPExpressionValueOperand {
721
+ sourceType: AXPExpressionValueSourceType;
722
+ /** For field: field id; for literal: the value; for parameter: param key */
723
+ value?: unknown;
724
+ fieldId?: string;
725
+ }
726
+ /** Single operation node (leftOperand operator rightOperand) */
727
+ interface AXPExpressionOperationNode {
728
+ id: AXPExpressionNodeId;
729
+ type: 'operation';
730
+ operator: AXPExpressionOperationType;
731
+ leftOperand: AXPExpressionValueOperand;
732
+ rightOperand: AXPExpressionValueOperand;
733
+ order?: number;
734
+ }
735
+ /** Group of operations with logical connective */
736
+ interface AXPExpressionGroupNode {
737
+ id: AXPExpressionNodeId;
738
+ type: 'group';
739
+ logic: AXPExpressionLogicType;
740
+ children: AXPExpressionNode[];
741
+ order?: number;
742
+ }
743
+ /** Union of expression node types */
744
+ type AXPExpressionNode = AXPExpressionOperationNode | AXPExpressionGroupNode;
745
+ /** Root expression tree */
746
+ interface AXPExpressionTree {
747
+ id: AXPExpressionNodeId;
748
+ logic: AXPExpressionLogicType;
749
+ children: AXPExpressionNode[];
750
+ }
751
+
752
+ /**
753
+ * Field definitions for expression builders.
754
+ * Used by expression-builder, sort-builder, group-builder for value/field selection.
755
+ */
756
+
757
+ /** Registry of available field definitions per context */
758
+ declare const AXPExpressionFieldDefinitions: Record<string, AXPExpressionFieldDefinition[]>;
759
+ /** Add field definitions for a given context */
760
+ declare function registerFieldDefinitions(context: string, fields: AXPExpressionFieldDefinition[]): void;
761
+ /** Get field definitions for a context */
762
+ declare function getFieldDefinitions(context: string): AXPExpressionFieldDefinition[];
763
+
764
+ /**
765
+ * Logic operator definitions (AND, OR, NOT) for expression groups.
766
+ */
767
+
768
+ interface AXPExpressionLogicDefinition {
769
+ value: AXPExpressionLogicType;
770
+ text: string;
771
+ /** Optional icon/key for UI */
772
+ icon?: string;
773
+ }
774
+ declare const AXP_EXPRESSION_LOGIC_DEFINITIONS: AXPExpressionLogicDefinition[];
775
+ declare function getLogicDefinition(logic: AXPExpressionLogicType): AXPExpressionLogicDefinition | undefined;
776
+
777
+ /**
778
+ * Operation definitions (arithmetic, comparison, logical) for expression builder.
779
+ */
780
+
781
+ interface AXPExpressionOperationDefinition {
782
+ value: AXPExpressionOperationType;
783
+ text: string;
784
+ /** Optional icon/symbol for UI */
785
+ symbol?: string;
786
+ /** Category for grouping in UI */
787
+ category?: 'arithmetic' | 'comparison' | 'logical' | 'string';
788
+ }
789
+ declare const AXP_EXPRESSION_OPERATION_DEFINITIONS: AXPExpressionOperationDefinition[];
790
+ declare function getOperationDefinition(operation: AXPExpressionOperationType): AXPExpressionOperationDefinition | undefined;
791
+
792
+ /**
793
+ * Selected field data emitted when condition changes
794
+ */
795
+ type ConditionBuilderSelectedField = {
796
+ id: string;
797
+ field: string;
798
+ operator: AXDataSourceOperator['type'];
799
+ value: unknown;
800
+ isParametric?: boolean;
801
+ };
802
+ declare class AXPConditionBuilderConditionComponent implements OnInit {
803
+ item: _angular_core.InputSignal<AXPFilterClause>;
804
+ filterDefinitions: _angular_core.InputSignal<AXPFilterDefinition[]>;
805
+ onResolveWidget: _angular_core.InputSignal<((fieldId: string) => string) | undefined>;
806
+ showFillByUser: _angular_core.InputSignal<boolean>;
807
+ itemChange: _angular_core.OutputEmitterRef<ConditionBuilderSelectedField>;
808
+ removeItem: _angular_core.OutputEmitterRef<string>;
809
+ protected selectedField: _angular_core.WritableSignal<ConditionBuilderSelectedField | null>;
810
+ protected filterNode: _angular_core.WritableSignal<AXPWidgetNode>;
811
+ protected context: _angular_core.WritableSignal<Record<string, unknown>>;
812
+ protected readonly availableFields: _angular_core.Signal<{
813
+ value: string | undefined;
814
+ text: string;
815
+ definition: AXPFilterDefinition;
816
+ }[]>;
817
+ protected readonly currentFilterDefinition: _angular_core.Signal<AXPFilterDefinition | undefined>;
818
+ protected readonly selectedFieldValue: _angular_core.Signal<string>;
819
+ ngOnInit(): void;
820
+ constructor();
821
+ private updateFilterWidgetNode;
822
+ private updateContext;
823
+ onFieldChange(event: AXValueChangedEvent): void;
824
+ onContextChange(event: {
825
+ data?: {
826
+ filter?: {
827
+ value?: unknown;
828
+ operation?: {
829
+ type?: string;
830
+ };
831
+ };
832
+ };
833
+ }): void;
834
+ onFillByUserChange(checked: boolean): void;
835
+ onRemoveClick(): void;
836
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPConditionBuilderConditionComponent, never>;
837
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPConditionBuilderConditionComponent, "axp-condition-builder-condition", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; "filterDefinitions": { "alias": "filterDefinitions"; "required": false; "isSignal": true; }; "onResolveWidget": { "alias": "onResolveWidget"; "required": false; "isSignal": true; }; "showFillByUser": { "alias": "showFillByUser"; "required": false; "isSignal": true; }; }, { "itemChange": "itemChange"; "removeItem": "removeItem"; }, never, never, true, never>;
838
+ }
839
+
840
+ /**
841
+ * Generic condition builder component.
842
+ * Builds AXPFilterClause (logic/filters, field/operator/value) for use in outcome rules,
843
+ * outcome actions, query builders, etc.
844
+ *
845
+ * Same structure as axp-where-builder: groups, AND/OR logic, add condition/group, drag-drop, move/remove.
846
+ */
847
+ declare class AXPConditionBuilderComponent {
848
+ private readonly widgetRegistry;
849
+ private readonly elementRef;
850
+ private readonly destroyRef;
851
+ private readonly platformId;
852
+ private readonly isBrowser;
853
+ value: _angular_core.InputSignal<AXPFilterClause>;
854
+ filterDefinitions: _angular_core.InputSignal<AXPFilterDefinition[]>;
855
+ /** When true, show "Fill by user" checkbox on each condition (e.g. for query parameters) */
856
+ showFillByUser: _angular_core.InputSignal<boolean>;
857
+ valueChange: _angular_core.OutputEmitterRef<AXPFilterClause>;
858
+ protected queryData: _angular_core.WritableSignal<AXPFilterClause>;
859
+ protected readonly logicalOperatorsItems: {
860
+ value: AXFilterLogic;
861
+ text: string;
862
+ }[];
863
+ protected getLogicDisplayText(logic: AXFilterLogic | undefined): string;
864
+ private connectorLayoutRafId;
865
+ private connectorResizeObserver;
866
+ private initConnectorAutoLayout;
867
+ private scheduleConnectorLayoutUpdate;
868
+ private updateConnectorCssVars;
869
+ constructor();
870
+ private generateId;
871
+ private updateValue;
872
+ private normalizeOrder;
873
+ protected getSortedFilters(filters: AXPFilterClause[]): AXPFilterClause[];
874
+ private findGroupById;
875
+ protected getFilterDefinition(fieldId: string): AXPFilterDefinition | undefined;
876
+ resolveDefaultFilterWidget(fieldId: string): string;
877
+ addConditionToGroup(groupId: string): void;
878
+ addGroupToGroup(parentGroupId: string): void;
879
+ removeItem(id: string): void;
880
+ updateCondition(condition: ConditionBuilderSelectedField): void;
881
+ updateGroupLogicalOperator(groupId: string, operator: AXFilterLogic): void;
882
+ reorderGroupItemsEvent(groupId: string, event: AXDropListDroppedEvent): void;
883
+ reorderGroupItems(groupId: string, previousIndex: number, currentIndex: number): void;
884
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPConditionBuilderComponent, never>;
885
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPConditionBuilderComponent, "axp-condition-builder", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "filterDefinitions": { "alias": "filterDefinitions"; "required": false; "isSignal": true; }; "showFillByUser": { "alias": "showFillByUser"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
886
+ }
887
+
598
888
  declare class AXPQueryFiltersComponent {
599
889
  #private;
600
890
  protected translate: AXTranslationService;
601
891
  protected calendarService: AXCalendarService;
602
892
  private filterOperatorMiddleware;
603
893
  private settingsService;
894
+ private readonly expressionEvaluator;
604
895
  filtersDefinitions: _angular_core.InputSignal<AXPFilterDefinition[]>;
605
896
  initialFilters: _angular_core.InputSignal<AXPFilterQuery[]>;
606
897
  onFiltersChanged: _angular_core.OutputEmitterRef<AXPFilterQuery[]>;
@@ -616,6 +907,11 @@ declare class AXPQueryFiltersComponent {
616
907
  protected asyncTags: _angular_core.WritableSignal<any[]>;
617
908
  protected popover: _angular_core.Signal<AXPopoverComponent | undefined>;
618
909
  inputValue: _angular_core.WritableSignal<string>;
910
+ protected readonly disabledByField: _angular_core.WritableSignal<Record<string, boolean>>;
911
+ /** Emits when a filter context entry changes (aligned with `widget-renderer` `events.context`). */
912
+ private readonly filterContextPath$;
913
+ private filterContextPathSnapshotReady;
914
+ private previousFilterContextSnapshot;
619
915
  inlineFilters: () => AXPFilterDefinition[];
620
916
  protected getDisplayValue: (filter: AXPFilterDefinition, val: any) => Promise<any>;
621
917
  protected convertIfISOStringDate: (val: string) => string;
@@ -625,7 +921,7 @@ declare class AXPQueryFiltersComponent {
625
921
  ngOnInit(): void;
626
922
  handleSelectField(field: AXPFilterDefinition): void;
627
923
  handleFieldKeyDown(e: KeyboardEvent, field: AXPFilterDefinition): void;
628
- onContextChanged(e: AXPWidgetCoreContextChangeEvent): void;
924
+ onContextChanged(e: AXPContextChangeEvent): void;
629
925
  handleApplyFilter(): void;
630
926
  handleButtonKeyDown(e: Event): void;
631
927
  handleKeyDown(e: AXHtmlEvent<KeyboardEvent>): void;
@@ -640,6 +936,13 @@ declare class AXPQueryFiltersComponent {
640
936
  handlePopoverClosed(e: AXEvent): void;
641
937
  protected onPopoverOpened(e: AXEvent): void;
642
938
  protected deactivateAllListItems(): void;
939
+ protected isFilterDisabled(definition: AXPFilterDefinition): boolean;
940
+ private createExpressionScope;
941
+ private isObservableLike;
942
+ private buildFilterTriggerScope;
943
+ private getFilterEventScope;
944
+ private getFilterWidgetScopeForDefinition;
945
+ private removeFilterFieldByName;
643
946
  protected handleKeyboardEvent(event: KeyboardEvent): Promise<void>;
644
947
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPQueryFiltersComponent, never>;
645
948
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPQueryFiltersComponent, "axp-query-filters", never, { "filtersDefinitions": { "alias": "filtersDefinitions"; "required": false; "isSignal": true; }; "initialFilters": { "alias": "initialFilters"; "required": false; "isSignal": true; }; }, { "onFiltersChanged": "onFiltersChanged"; }, never, never, true, never>;
@@ -672,7 +975,7 @@ declare class AXPPreloadFiltersComponent {
672
975
  /**
673
976
  * On context changed
674
977
  */
675
- onContextChanged(event: AXPWidgetCoreContextChangeEvent): void;
978
+ onContextChanged(event: AXPContextChangeEvent): void;
676
979
  /**
677
980
  * Handle apply filters
678
981
  */
@@ -1107,8 +1410,20 @@ interface AXPPropertyViewerChangedEvent {
1107
1410
  values: any;
1108
1411
  mode: 'init' | 'update';
1109
1412
  }
1413
+ /** Payload when the property viewer popup closes after Apply. */
1414
+ type AXPPropertyViewerResult = AXPPropertyViewerChangedEvent;
1415
+ /**
1416
+ * Dialog-style ref passed to property viewer `onAction` (same shape as the layout dialog `AXPDialogRef`).
1417
+ */
1418
+ interface AXPPropertyViewerActionRef {
1419
+ close(): void;
1420
+ context(): any;
1421
+ action(): string | undefined;
1422
+ setLoading(loading: boolean): void;
1423
+ }
1110
1424
 
1111
1425
  declare class AXPPropertyViewerComponent {
1426
+ private readonly defaultMultiLanguageConfig;
1112
1427
  /**
1113
1428
  * List of tabs that should be rendered inside the property viewer.
1114
1429
  */
@@ -1117,6 +1432,11 @@ declare class AXPPropertyViewerComponent {
1117
1432
  * Determines rendering mode.
1118
1433
  */
1119
1434
  mode: _angular_core.InputSignal<"simple" | "advanced">;
1435
+ /**
1436
+ * When a property uses binding expressions, controls how the expression is edited:
1437
+ * `inline` — code editor in the panel (default); `popup` — button that opens the dialog editor.
1438
+ */
1439
+ bindingExpressionEditorMode: _angular_core.InputSignal<"inline" | "popup">;
1120
1440
  /**
1121
1441
  * Emits when property context changes.
1122
1442
  */
@@ -1130,9 +1450,15 @@ declare class AXPPropertyViewerComponent {
1130
1450
  * Updated when user toggles the ax-switch; otherwise derived from isExpression(valueAtPath).
1131
1451
  */
1132
1452
  protected expressionModeState: WritableSignal<Record<string, boolean>>;
1453
+ /**
1454
+ * Evaluated visibility for properties whose {@link AXPWidgetProperty.visible} is a `{{ }}` expression.
1455
+ * Keys match {@link AXPPropertyViewerComponent.propertyVisibilityKey}.
1456
+ */
1457
+ private propertyVisibility;
1133
1458
  protected groupCollapsedStates: Map<string, boolean>;
1134
1459
  private readonly expressionEvaluator;
1135
1460
  private readonly popupService;
1461
+ private readonly form;
1136
1462
  constructor();
1137
1463
  /**
1138
1464
  * Replaces the current context with the provided value and emits an init event.
@@ -1142,10 +1468,24 @@ declare class AXPPropertyViewerComponent {
1142
1468
  * Merges the provided value into the current context and emits an update event.
1143
1469
  */
1144
1470
  update(value: any): void;
1471
+ /**
1472
+ * Runs registered validation rules on fields inside this viewer (requires {@link AXFormModule} host).
1473
+ */
1474
+ validate(): Promise<AXValidationSummary>;
1475
+ /**
1476
+ * Stable key for visibility map entries (avoids collisions when the same `name` appears twice).
1477
+ */
1478
+ protected propertyVisibilityKey(prop: AXPWidgetProperty): string;
1479
+ /**
1480
+ * Whether a property row should render. Booleans are static; `{{ }}` strings are evaluated against
1481
+ * {@link context} with `context.eval(path)` like {@link AXPWidgetRendererDirective.updateVisibility}.
1482
+ */
1483
+ protected isPropertyVisible(prop: AXPWidgetProperty): boolean;
1484
+ private recomputePropertyVisibility;
1145
1485
  /**
1146
1486
  * Handles context changes produced by rendered widgets.
1147
1487
  */
1148
- protected handleContextChange(event: AXPWidgetCoreContextChangeEvent): void;
1488
+ protected handleContextChange(event: AXPContextChangeEvent): void;
1149
1489
  /**
1150
1490
  * Handles tab selection changes.
1151
1491
  */
@@ -1160,7 +1500,8 @@ declare class AXPPropertyViewerComponent {
1160
1500
  protected getExpressionPath(prop: AXPWidgetProperty): string;
1161
1501
  /**
1162
1502
  * True when the property is in "expression" mode: show only the expression editor button, not the widget.
1163
- * Uses expressionModeState when set; otherwise derives from isExpression(valueAtPath).
1503
+ * Uses expressionModeState when set; otherwise derives from template `{{ }}` expressions and, when
1504
+ * {@link AXPWidgetProperty.binding} is enabled, bare scripts persisted without wrappers.
1164
1505
  */
1165
1506
  protected isExpressionMode(prop: AXPWidgetProperty): boolean;
1166
1507
  /**
@@ -1173,55 +1514,156 @@ declare class AXPPropertyViewerComponent {
1173
1514
  * Updates the expression/value toggle state for a binding-enabled property.
1174
1515
  * When switching to value: resets the value at path to a type-appropriate default so the
1175
1516
  * widget renderer does not receive the expression string (e.g. checkbox gets false, not a string).
1176
- * When switching to expression: sets the value at path to '{{ }}' so the popup opens with
1177
- * a clean expression placeholder instead of the previous literal (e.g. true/false).
1517
+ * When switching to expression: sets the value at path to an empty string so the editor starts
1518
+ * blank instead of keeping the previous literal (e.g. true/false).
1178
1519
  */
1179
1520
  protected setExpressionMode(prop: AXPWidgetProperty, useExpression: boolean): void;
1521
+ /**
1522
+ * Current binding expression string at the property path (for inline editor ngModel).
1523
+ */
1524
+ protected getBindingExpressionValue(prop: AXPWidgetProperty): string;
1525
+ /**
1526
+ * Persists inline code editor changes into context.
1527
+ */
1528
+ protected setBindingExpressionValue(prop: AXPWidgetProperty, value: string): void;
1180
1529
  /**
1181
1530
  * Opens the binding/expression code editor for a property with binding.enabled.
1182
1531
  * Ensures the value passed to the popup is always a string to avoid code-editor crashes.
1183
1532
  */
1184
1533
  protected openBindingEditor(prop: AXPWidgetProperty): Promise<void>;
1185
1534
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPPropertyViewerComponent, never>;
1186
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPPropertyViewerComponent, "axp-property-viewer", never, { "tabsInput": { "alias": "tabsInput"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, { "onChanged": "onChanged"; }, never, never, true, never>;
1535
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPPropertyViewerComponent, "axp-property-viewer", never, { "tabsInput": { "alias": "tabsInput"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "bindingExpressionEditorMode": { "alias": "bindingExpressionEditorMode"; "required": false; "isSignal": true; }; }, { "onChanged": "onChanged"; }, never, never, true, never>;
1187
1536
  }
1188
1537
 
1538
+ /**
1539
+ * Whether a binding-enabled property should show expression UI (toggle to code + open editor)
1540
+ * instead of the literal widget.
1541
+ *
1542
+ * - Values already wrapped in `{{ ... }}` are expressions (see `AXPExpressionEvaluatorService.isExpression`).
1543
+ * - Persisted domain data often stores **bare** scripts; for `dataType: 'boolean'` (typical toggle + binding),
1544
+ * any non-empty string that is not a boolean literal is treated as an expression.
1545
+ * - For `number`, strings that are not plain numeric literals are treated as expressions.
1546
+ * - For other types, `isLikelyBareBindingScript` reduces false positives for plain text.
1547
+ */
1548
+ declare function isPropertyBindingExpressionFormValue(property: AXPWidgetProperty, value: unknown, isTemplateExpression: (s: string) => boolean): boolean;
1549
+
1189
1550
  declare class AXPPropertyViewerPopupComponent extends AXBasePageComponent {
1551
+ private readonly toastService;
1552
+ private readonly translationService;
1190
1553
  tabs: _angular_core.InputSignal<AXPPropertyViewerTab[]>;
1191
1554
  mode: _angular_core.InputSignal<"simple" | "advanced">;
1192
1555
  context: _angular_core.InputSignal<any>;
1556
+ /**
1557
+ * Optional hook from `data.onApply`. Throw or reject to keep the popup open.
1558
+ * Return a value (not `undefined`) to use as the `close()` payload; otherwise `{ values, mode }` is used.
1559
+ */
1560
+ onApply?: (result: AXPPropertyViewerResult) => void | Promise<unknown>;
1193
1561
  protected readonly propertyViewer: _angular_core.Signal<AXPPropertyViewerComponent | undefined>;
1194
- protected readonly currentValues: _angular_core.WritableSignal<any>;
1562
+ protected readonly currentValues: _angular_core.WritableSignal<Record<string, unknown>>;
1563
+ protected readonly isApplying: _angular_core.WritableSignal<boolean>;
1195
1564
  protected currentMode: 'init' | 'update';
1196
1565
  constructor();
1197
1566
  protected handlePropertyChanged(event: AXPPropertyViewerChangedEvent): void;
1198
1567
  protected handleCloseClick(): void;
1199
- protected handleApplyClick(): void;
1568
+ protected handleApplyClick(): Promise<void>;
1569
+ private showValidationErrorToast;
1200
1570
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPPropertyViewerPopupComponent, never>;
1201
1571
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPPropertyViewerPopupComponent, "axp-property-viewer-popup", never, { "tabs": { "alias": "tabs"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "context": { "alias": "context"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1202
1572
  }
1203
1573
 
1574
+ interface IAXPPropertyViewerRoot {
1575
+ dialog<T = unknown>(delegate: (container: IAXPPropertyViewerDialogBuilder<T>) => void): IAXPPropertyViewerDialogBuilder<T>;
1576
+ }
1577
+ interface IAXPPropertyViewerDialogBuilder<T = unknown> {
1578
+ setTitle(title: string): IAXPPropertyViewerDialogBuilder<T>;
1579
+ setSize(size: AXPopupSizeType): IAXPPropertyViewerDialogBuilder<T>;
1580
+ setCloseButton(closeButton: boolean): IAXPPropertyViewerDialogBuilder<T>;
1581
+ setContext(context: any): IAXPPropertyViewerDialogBuilder<T>;
1582
+ setTabs(tabs: AXPPropertyViewerTab[]): IAXPPropertyViewerDialogBuilder<T>;
1583
+ setMode(mode: 'simple' | 'advanced'): IAXPPropertyViewerDialogBuilder<T>;
1584
+ /**
1585
+ * Runs on Save. Throw or reject to keep the popup open (same idea as layout dialog `onAction`).
1586
+ * Return a value to resolve `show()`; omit return (or return void) to resolve with `{ values, mode }`.
1587
+ */
1588
+ onAction(handler: (dialogRef: AXPPropertyViewerActionRef) => T | Promise<T> | void | Promise<void>): IAXPPropertyViewerDialogBuilder<T>;
1589
+ show(): Promise<T | AXPPropertyViewerResult | null>;
1590
+ }
1204
1591
  interface AXPPropertyViewerConfig {
1205
1592
  title: string;
1206
1593
  tabs: AXPPropertyViewerTab[];
1207
1594
  context?: any;
1208
1595
  mode?: 'simple' | 'advanced';
1209
- size?: 'sm' | 'md' | 'lg' | 'full';
1210
- }
1211
- interface AXPPropertyViewerResult {
1212
- values: any;
1213
- mode: 'init' | 'update';
1596
+ size?: AXPopupSizeType;
1597
+ /**
1598
+ * When set, runs before close on Save. Throw or reject to keep the popup open.
1599
+ */
1600
+ onApply?: (result: AXPPropertyViewerResult) => void | Promise<void>;
1214
1601
  }
1215
1602
  declare class AXPPropertyViewerService {
1216
1603
  private readonly popupService;
1604
+ private readonly defaultMultiLanguageConfig;
1605
+ /**
1606
+ * Same entry shape as `layoutBuilder.create()` — use `.dialog((d) => { ... }).show()`.
1607
+ */
1608
+ create(): IAXPPropertyViewerRoot;
1217
1609
  /**
1218
- * Open property viewer popup with predefined tabs and context.
1610
+ * Opens the property viewer popup in one call (delegates to {@link #create} `.dialog().show()`).
1219
1611
  */
1220
1612
  open(config: AXPPropertyViewerConfig): Promise<AXPPropertyViewerResult | null>;
1221
1613
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPPropertyViewerService, never>;
1222
1614
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPPropertyViewerService>;
1223
1615
  }
1224
1616
 
1617
+ /**
1618
+ * Copies {@link AXPWidgetProperty.validations} onto `schema.interface.options` so the property
1619
+ * viewer binds a stable widget node.
1620
+ */
1621
+ declare function withValidationsOnEditorNode(prop: AXPWidgetProperty): AXPWidgetProperty;
1622
+ declare function preparePropertyForViewer(prop: AXPWidgetProperty, applyDefaultMultiLanguage: boolean): AXPWidgetProperty;
1623
+ /**
1624
+ * Deep-clone-safe: mutates cloned tab trees only when caller passes a fresh clone.
1625
+ * Applies the same widget-property pipeline as {@link AXPPropertyViewerComponent}.
1626
+ */
1627
+ declare function preparePropertyViewerTabs(tabs: AXPPropertyViewerTab[], applyDefaultMultiLanguage: boolean): AXPPropertyViewerTab[];
1628
+ /**
1629
+ * Builds a single "General" tab for {@link AXPPropertyViewerService} from {@link AXPWidgetProperty} rows
1630
+ * (schema shape is shared with widget metadata; the edited payload is arbitrary context, not an {@link AXPWidgetNode}).
1631
+ */
1632
+ declare function buildPropertyViewerTabsFromProperties(properties: AXPWidgetProperty[]): AXPPropertyViewerTab[];
1633
+ /**
1634
+ * Initial {@link AXPPropertyViewerService#setContext} value: property default paths merged with the current saved values.
1635
+ */
1636
+ declare function buildPropertyViewerInitialContextFromProperties(properties: AXPWidgetProperty[], existing: Record<string, unknown>): Record<string, unknown>;
1637
+
1638
+ /**
1639
+ * Presentational layout for indexed rows: optional drag-and-drop, remove controls,
1640
+ * empty state, and add action. Row body is provided via {@link rowTemplate}.
1641
+ */
1642
+ declare class AXPRepeaterRowsLayoutComponent {
1643
+ count: _angular_core.InputSignal<number>;
1644
+ disabled: _angular_core.InputSignal<boolean>;
1645
+ hasControls: _angular_core.InputSignal<boolean>;
1646
+ allowReorder: _angular_core.InputSignal<boolean>;
1647
+ rowTemplate: _angular_core.InputSignal<TemplateRef<{
1648
+ index: number;
1649
+ }>>;
1650
+ /** i18n keys (e.g. `@general:...`) for labels; override per usage. */
1651
+ addItemLabelKey: _angular_core.InputSignal<string>;
1652
+ emptyTitleKey: _angular_core.InputSignal<string>;
1653
+ emptyDescriptionKey: _angular_core.InputSignal<string>;
1654
+ addFirstItemLabelKey: _angular_core.InputSignal<string>;
1655
+ addClick: _angular_core.OutputEmitterRef<void>;
1656
+ removeClick: _angular_core.OutputEmitterRef<number>;
1657
+ drop: _angular_core.OutputEmitterRef<AXDropListDroppedEvent>;
1658
+ protected readonly rowIndices: _angular_core.Signal<number[]>;
1659
+ protected readonly rowRowClass: _angular_core.Signal<string>;
1660
+ protected onDrop(e: AXDropListDroppedEvent): void;
1661
+ protected onAddClick(): void;
1662
+ protected onRemoveClick(index: number): void;
1663
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPRepeaterRowsLayoutComponent, never>;
1664
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPRepeaterRowsLayoutComponent, "axp-repeater-rows-layout", never, { "count": { "alias": "count"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "hasControls": { "alias": "hasControls"; "required": false; "isSignal": true; }; "allowReorder": { "alias": "allowReorder"; "required": false; "isSignal": true; }; "rowTemplate": { "alias": "rowTemplate"; "required": true; "isSignal": true; }; "addItemLabelKey": { "alias": "addItemLabelKey"; "required": false; "isSignal": true; }; "emptyTitleKey": { "alias": "emptyTitleKey"; "required": false; "isSignal": true; }; "emptyDescriptionKey": { "alias": "emptyDescriptionKey"; "required": false; "isSignal": true; }; "addFirstItemLabelKey": { "alias": "addFirstItemLabelKey"; "required": false; "isSignal": true; }; }, { "addClick": "addClick"; "removeClick": "removeClick"; "drop": "drop"; }, never, never, true, never>;
1665
+ }
1666
+
1225
1667
  declare class AXPQuerySortsComponent {
1226
1668
  sortDefinitions: _angular_core.ModelSignal<AXPSortDefinition[]>;
1227
1669
  sortQueries: _angular_core.WritableSignal<AXPSortQuery[]>;
@@ -1243,7 +1685,7 @@ interface AXPSpreadsheetItem {
1243
1685
  title: string;
1244
1686
  description?: string;
1245
1687
  /**
1246
- * Optional CSS class for cell styling (e.g., 'ax-bg-success-lightest ax-text-success' for green)
1688
+ * Optional CSS class for cell styling (e.g., 'bg-success-lightest text-success' for green)
1247
1689
  * Used when this item is used as a cell value to color-code the cell
1248
1690
  * Allows proper control of both background and text colors
1249
1691
  */
@@ -1525,12 +1967,12 @@ declare class AXPSpreadsheetComponent {
1525
1967
  * Handle cell value change from widget
1526
1968
  * The widget sets the value at path like rows[index].column.path
1527
1969
  */
1528
- protected handleCellValueChange(rowIndex: number, columnName: string, event: AXPWidgetCoreContextChangeEvent): void;
1970
+ protected handleCellValueChange(rowIndex: number, columnName: string, event: AXPContextChangeEvent): void;
1529
1971
  /**
1530
1972
  * Handle spreadsheet context change from widgets-container
1531
1973
  * This is called when any widget in the spreadsheet changes
1532
1974
  */
1533
- protected handleSpreadsheetContextChange(event: AXPWidgetCoreContextChangeEvent): void;
1975
+ protected handleSpreadsheetContextChange(event: AXPContextChangeEvent): void;
1534
1976
  /**
1535
1977
  * Handle blur event to stop editing (when user clicks away from cell)
1536
1978
  */
@@ -1577,9 +2019,9 @@ declare class AXPStateMessageComponent {
1577
2019
  icon: _angular_core.InputSignal<string>;
1578
2020
  title: _angular_core.InputSignal<string>;
1579
2021
  description: _angular_core.InputSignal<string>;
1580
- variant: _angular_core.InputSignal<"default" | "compact" | "minimal">;
2022
+ look: _angular_core.InputSignal<"default" | "compact" | "minimal">;
1581
2023
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPStateMessageComponent, never>;
1582
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPStateMessageComponent, "axp-state-message", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, {}, never, ["[slot=actions]"], true, never>;
2024
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPStateMessageComponent, "axp-state-message", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "look": { "alias": "look"; "required": false; "isSignal": true; }; }, {}, never, ["[slot=actions]"], true, never>;
1583
2025
  }
1584
2026
 
1585
2027
  declare class AXPStopwatchComponent implements OnDestroy {
@@ -1728,7 +2170,7 @@ declare class AXPTemplateViewerComponent extends AXBasePageComponent {
1728
2170
  protected readonly currentPage: _angular_core.Signal<AXPWidgetNode>;
1729
2171
  protected ngOnInit(): Promise<void>;
1730
2172
  private loadTemplate;
1731
- protected handleContextChanged(e: AXPWidgetCoreContextChangeEvent): void;
2173
+ protected handleContextChanged(e: AXPContextChangeEvent): void;
1732
2174
  protected handleSubmit(form: AXFormComponent): Promise<void>;
1733
2175
  protected handleCancel(): void;
1734
2176
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTemplateViewerComponent, never>;
@@ -1753,6 +2195,37 @@ declare class AXPTemplateViewerService {
1753
2195
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPTemplateViewerService>;
1754
2196
  }
1755
2197
 
2198
+ /**
2199
+ * Generic avatar renderer with image and initials fallback.
2200
+ */
2201
+ declare class AXPAvatarComponent {
2202
+ /** Avatar size in pixels. */
2203
+ readonly size: _angular_core.InputSignal<number>;
2204
+ /** Optional image source for the avatar. */
2205
+ readonly src: _angular_core.InputSignal<string | undefined>;
2206
+ /** Display name used for title and initials fallback. */
2207
+ readonly fullName: _angular_core.InputSignal<string | undefined>;
2208
+ /** Optional override for fallback text shown when image is not available. */
2209
+ readonly fallbackText: _angular_core.InputSignal<string | undefined>;
2210
+ /** Forces placeholder mode and '?' fallback. */
2211
+ readonly placeholder: _angular_core.InputSignal<boolean>;
2212
+ protected readonly isAvatarLoaded: _angular_core.WritableSignal<boolean>;
2213
+ protected readonly normalizedName: _angular_core.Signal<string>;
2214
+ protected readonly resolvedSrc: _angular_core.Signal<string>;
2215
+ protected readonly hasAvatar: _angular_core.Signal<boolean>;
2216
+ protected readonly isLoading: _angular_core.Signal<boolean>;
2217
+ protected readonly avatarText: _angular_core.Signal<string>;
2218
+ protected readonly avatarColor: _angular_core.Signal<string>;
2219
+ protected readonly title: _angular_core.Signal<string>;
2220
+ protected onImageError(event: AXHtmlEvent<ErrorEvent>): void;
2221
+ protected onImageLoad(event: AXHtmlEvent<Event>): void;
2222
+ private computeInitials;
2223
+ private hashString;
2224
+ private pickColor;
2225
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPAvatarComponent, never>;
2226
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPAvatarComponent, "axp-avatar", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "src": { "alias": "src"; "required": false; "isSignal": true; }; "fullName": { "alias": "fullName"; "required": false; "isSignal": true; }; "fallbackText": { "alias": "fallbackText"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2227
+ }
2228
+
1756
2229
  type AXPUserAvatarSize = 'small' | 'medium' | 'large';
1757
2230
  type AXPUserAvatarStatus = 'online' | 'offline';
1758
2231
  type AXPUserAvatarData = {
@@ -1821,13 +2294,6 @@ declare class AXPUserAvatarComponent implements OnInit, OnDestroy {
1821
2294
  lastName: _angular_core.Signal<string>;
1822
2295
  title: _angular_core.Signal<string>;
1823
2296
  isOnline: _angular_core.Signal<boolean>;
1824
- avatarText: _angular_core.Signal<string>;
1825
- avatarColor: _angular_core.Signal<string>;
1826
- protected hasAvatar: _angular_core.Signal<boolean>;
1827
- protected isAvatarLoaded: _angular_core.WritableSignal<boolean>;
1828
- protected isLoading: _angular_core.Signal<boolean>;
1829
- protected onImageError(event: AXHtmlEvent<ErrorEvent>): void;
1830
- protected onImageLoad(event: AXHtmlEvent<Event>): void;
1831
2297
  ngOnInit(): void;
1832
2298
  ngOnDestroy(): void;
1833
2299
  private loadUserData;
@@ -1836,12 +2302,6 @@ declare class AXPUserAvatarComponent implements OnInit, OnDestroy {
1836
2302
  * This is a placeholder - implement based on your actual requirements
1837
2303
  */
1838
2304
  private generateAvatarSrc;
1839
- /**
1840
- * Get initials from first and last name
1841
- */
1842
- private getInitials;
1843
- private hashString;
1844
- private pickColor;
1845
2305
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPUserAvatarComponent, never>;
1846
2306
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPUserAvatarComponent, "axp-user-avatar", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "userId": { "alias": "userId"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1847
2307
  }
@@ -1862,99 +2322,90 @@ declare class AXPQueryViewsComponent {
1862
2322
  }
1863
2323
 
1864
2324
  /**
1865
- * Compact widget field configurator component
1866
- * Designed to be embedded in entity definition forms for configuring widget properties
2325
+ * One selectable entry for {@link AXPItemConfiguratorComponent}.
2326
+ * Parents map external data into this shape. {@link propertyDefinitions} drive {@link AXPPropertyViewerService} tabs.
1867
2327
  */
1868
- declare class AXPWidgetFieldConfiguratorComponent {
1869
- /**
1870
- * Widget node configuration (two-way binding)
1871
- */
1872
- widget: _angular_core.ModelSignal<AXPWidgetNode>;
1873
- /**
1874
- * Label for the widget selector
1875
- */
2328
+ interface ItemConfiguratorListItem {
2329
+ id: string;
2330
+ /** Shown in the list and in the configure dialog title; plain string, i18n key, or locale map. */
2331
+ title: AXPMultiLanguageString;
2332
+ icon?: string;
2333
+ description?: AXPMultiLanguageString;
2334
+ propertyDefinitions?: AXPWidgetProperty[];
2335
+ }
2336
+ interface ItemConfiguratorSelectRow {
2337
+ value: string;
2338
+ text: string;
2339
+ icon?: string;
2340
+ description?: string;
2341
+ }
2342
+ /**
2343
+ * Select an item from a list and edit its settings via {@link AXPPropertyViewerService}.
2344
+ * Bound state: {@link selectedItemId} and {@link values} (context returned from the viewer). Not tied to {@link AXPWidgetNode}.
2345
+ */
2346
+ declare class AXPItemConfiguratorComponent {
2347
+ /** Selected list entry id ({@link ItemConfiguratorListItem.id}). */
2348
+ selectedItemId: _angular_core.ModelSignal<string>;
2349
+ /** Values edited in the property viewer (merged from dialog result). */
2350
+ values: _angular_core.ModelSignal<Record<string, unknown>>;
1876
2351
  label: _angular_core.InputSignal<string>;
1877
- /**
1878
- * Field name (technical identifier, used for form field path)
1879
- */
1880
- fieldName: _angular_core.InputSignal<string>;
1881
- /**
1882
- * Field title (display name, used in UI labels and titles)
1883
- */
1884
- fieldTitle: _angular_core.InputSignal<string>;
1885
- /**
1886
- * Readonly mode
1887
- */
1888
2352
  readonly: _angular_core.InputSignal<boolean>;
1889
- private readonly widgetRegistry;
1890
- private readonly widgetPropertyViewerService;
2353
+ items: _angular_core.InputSignal<ItemConfiguratorListItem[]>;
2354
+ headerActions: _angular_core.InputSignal<AXPActionMenuItem[]>;
2355
+ private readonly propertyViewerService;
1891
2356
  private readonly translationService;
1892
- private readonly formBuilderService;
1893
- /**
1894
- * Currently selected widget type
1895
- */
1896
- protected selectedWidgetType: _angular_core.WritableSignal<string>;
1897
- /**
1898
- * Whether the component is in edit mode (showing select box)
1899
- */
2357
+ private readonly workflow;
2358
+ private readonly commandExecutor;
1900
2359
  protected isEditMode: _angular_core.WritableSignal<boolean>;
1901
- /**
1902
- * Available widgets filtered by FormElement group
1903
- */
1904
- protected availableWidgets: _angular_core.Signal<{
1905
- value: string;
1906
- text: string;
1907
- icon: string | undefined;
1908
- description: string | undefined;
1909
- }[]>;
1910
- /**
1911
- * Current widget configuration details
1912
- */
1913
- protected currentWidgetConfig: _angular_core.Signal<{
2360
+ protected availableItems: _angular_core.Signal<ItemConfiguratorSelectRow[]>;
2361
+ protected selectedListItem: _angular_core.Signal<ItemConfiguratorListItem | null>;
2362
+ protected resolvedPropertyDefinitions: _angular_core.Signal<AXPWidgetProperty[]>;
2363
+ protected currentItemConfig: _angular_core.Signal<{
1914
2364
  title: string;
1915
- description: string | undefined;
2365
+ description: _acorex_core_translation.AXMultiLanguageString | undefined;
1916
2366
  icon: string | undefined;
1917
- hasProperties: boolean | undefined;
2367
+ hasProperties: boolean;
1918
2368
  } | null>;
1919
- /**
1920
- * Whether configure button should be enabled
1921
- */
1922
2369
  protected canConfigure: _angular_core.Signal<boolean>;
1923
- /**
1924
- * Whether widget has been configured (has options)
1925
- */
1926
2370
  protected isConfigured: _angular_core.Signal<boolean>;
1927
- /**
1928
- * Whether preview button should be enabled
1929
- */
1930
- protected canPreview: _angular_core.Signal<boolean>;
1931
- /**
1932
- * Reference to the widget type select box (used to open dropdown when entering edit mode)
1933
- */
1934
- protected widgetSelectBox: _angular_core.Signal<AXSelectBoxComponent | undefined>;
1935
- /**
1936
- * Enter edit mode (show select box)
1937
- */
2371
+ protected visibleHeaderActions: _angular_core.Signal<AXPActionMenuItem[]>;
2372
+ protected itemSelectBox: _angular_core.Signal<AXSelectBoxComponent | undefined>;
1938
2373
  protected enterEditMode(): void;
1939
- /**
1940
- * Exit edit mode when dropdown is closed (return to view mode)
1941
- */
1942
2374
  protected exitEditMode(): void;
1943
2375
  constructor();
2376
+ protected onSelectionChange(event: {
2377
+ value?: string | null;
2378
+ }): Promise<void>;
2379
+ protected openConfigureDialog(): Promise<void>;
2380
+ protected onHeaderActionClick(action: AXPActionMenuItem): void;
2381
+ protected isHeaderActionDisabled(action: AXPActionMenuItem): boolean;
2382
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPItemConfiguratorComponent, never>;
2383
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPItemConfiguratorComponent, "axp-item-configurator", never, { "selectedItemId": { "alias": "selectedItemId"; "required": false; "isSignal": true; }; "values": { "alias": "values"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "headerActions": { "alias": "headerActions"; "required": false; "isSignal": true; }; }, { "selectedItemId": "selectedItemIdChange"; "values": "valuesChange"; }, never, never, true, never>;
2384
+ }
2385
+
2386
+ /**
2387
+ * Widget field configurator for entity forms: composes {@link AXPItemConfiguratorComponent} with
2388
+ * {@link AXPWidgetRegistryService} list items and widget preview.
2389
+ */
2390
+ declare class AXPWidgetFieldConfiguratorComponent {
2391
+ widget: _angular_core.ModelSignal<AXPWidgetNode>;
2392
+ label: _angular_core.InputSignal<string>;
2393
+ fieldName: _angular_core.InputSignal<string>;
2394
+ fieldTitle: _angular_core.InputSignal<_acorex_core_translation.AXMultiLanguageString>;
2395
+ readonly: _angular_core.InputSignal<boolean>;
2396
+ private readonly widgetRegistry;
2397
+ private readonly translation;
2398
+ protected selectedItemIdModel: _angular_core.ModelSignal<string>;
2399
+ protected valuesModel: _angular_core.ModelSignal<Record<string, unknown>>;
1944
2400
  /**
1945
- * Handle widget type change
1946
- */
1947
- protected onWidgetTypeChange(event: any): Promise<void>;
1948
- /**
1949
- * Open widget property viewer
1950
- */
1951
- protected openPropertyViewer(): Promise<void>;
1952
- /**
1953
- * Open widget preview with actual rendered widget
2401
+ * List entries from {@link AXPWidgetRegistryService} (form editors), with
2402
+ * {@link ItemConfiguratorListItem.propertyDefinitions} from each registered config.
1954
2403
  */
1955
- protected openPreview(): Promise<void>;
2404
+ protected configuratorItems: _angular_core.Signal<ItemConfiguratorListItem[]>;
2405
+ protected previewHeaderActions: _angular_core.Signal<AXPActionMenuItem[]>;
2406
+ constructor();
1956
2407
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetFieldConfiguratorComponent, never>;
1957
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPWidgetFieldConfiguratorComponent, "axp-widget-field-configurator", never, { "widget": { "alias": "widget"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "fieldName": { "alias": "fieldName"; "required": false; "isSignal": true; }; "fieldTitle": { "alias": "fieldTitle"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; }, { "widget": "widgetChange"; }, never, never, true, never>;
2408
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPWidgetFieldConfiguratorComponent, "axp-widget-field-configurator", never, { "widget": { "alias": "widget"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "fieldName": { "alias": "fieldName"; "required": false; "isSignal": true; }; "fieldTitle": { "alias": "fieldTitle"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "selectedItemIdModel": { "alias": "selectedItemIdModel"; "required": false; "isSignal": true; }; "valuesModel": { "alias": "valuesModel"; "required": false; "isSignal": true; }; }, { "widget": "widgetChange"; "selectedItemIdModel": "selectedItemIdModelChange"; "valuesModel": "valuesModelChange"; }, never, never, true, never>;
1958
2409
  }
1959
2410
 
1960
2411
  /**
@@ -1962,9 +2413,9 @@ declare class AXPWidgetFieldConfiguratorComponent {
1962
2413
  */
1963
2414
  interface AXPWidgetItemData {
1964
2415
  /** Display title of the widget */
1965
- title: string;
2416
+ title: AXPMultiLanguageString;
1966
2417
  /** Description text for the widget */
1967
- description?: string;
2418
+ description?: AXPMultiLanguageString;
1968
2419
  /** Icon class (e.g., FontAwesome classes) */
1969
2420
  icon?: string;
1970
2421
  /** Whether the widget is pinned/favorited */
@@ -1989,6 +2440,10 @@ interface AXPWidgetItemClickEvent<T = unknown> {
1989
2440
  * Can be used across different modules for consistent widget display and interaction.
1990
2441
  */
1991
2442
  declare class AXPWidgetItemComponent {
2443
+ protected readonly i18n: {
2444
+ readonly pin: "@general:widgets.widget-item.pin";
2445
+ readonly unpin: "@general:widgets.widget-item.unpin";
2446
+ };
1992
2447
  /** The widget data to display */
1993
2448
  widget: _angular_core.InputSignal<AXPWidgetItemData>;
1994
2449
  /** Whether this widget is currently selected */
@@ -2074,6 +2529,7 @@ interface AXPWidgetPropertyViewerConfig {
2074
2529
  title: string;
2075
2530
  widget: AXPWidgetNode;
2076
2531
  mode?: 'simple' | 'advanced';
2532
+ onApply?: (result: AXPWidgetPropertyViewerResult) => void | Promise<void>;
2077
2533
  /**
2078
2534
  * Property names to exclude from the viewer.
2079
2535
  */
@@ -2104,19 +2560,46 @@ interface AXPWidgetPropertyViewerConfig {
2104
2560
  };
2105
2561
  };
2106
2562
  }
2563
+ /** Emitted when the dialog applies; `values` is the updated viewer context (merge into {@link AXPWidgetNode} as needed). */
2107
2564
  interface AXPWidgetPropertyViewerResult {
2108
2565
  values: any;
2109
2566
  mode: 'init' | 'update';
2110
2567
  }
2568
+ interface IAXPWidgetPropertyViewerRoot {
2569
+ dialog(delegate: (container: IAXPWidgetPropertyViewerDialogBuilder) => void): IAXPWidgetPropertyViewerDialogBuilder;
2570
+ }
2571
+ interface IAXPWidgetPropertyViewerDialogBuilder {
2572
+ setTitle(title: string): IAXPWidgetPropertyViewerDialogBuilder;
2573
+ /**
2574
+ * Initial widget state shown in the viewer (type, options, name/path, …). Call before {@link show}.
2575
+ */
2576
+ setWidget(widget: AXPWidgetNode): IAXPWidgetPropertyViewerDialogBuilder;
2577
+ setMode(mode: 'simple' | 'advanced'): IAXPWidgetPropertyViewerDialogBuilder;
2578
+ setExclude(exclude: string[]): IAXPWidgetPropertyViewerDialogBuilder;
2579
+ setCustom(custom: AXPWidgetPropertyViewerConfig['custom']): IAXPWidgetPropertyViewerDialogBuilder;
2580
+ /**
2581
+ * When set to a non-empty array, builds tabs from these properties and skips registry lookup for {@link setWidget}'s type.
2582
+ * Omit or clear to resolve widget config from {@link AXPWidgetRegistryService} as usual.
2583
+ */
2584
+ setPropertyDefinitions(properties: AXPWidgetProperty[] | null): IAXPWidgetPropertyViewerDialogBuilder;
2585
+ onAction(handler: (dialogRef: AXPPropertyViewerActionRef) => void | Promise<void> | unknown | Promise<unknown>): IAXPWidgetPropertyViewerDialogBuilder;
2586
+ /**
2587
+ * Applies edits and returns updated context; merge {@link AXPWidgetPropertyViewerResult.values} into your widget node
2588
+ * (typically `options` and any top-level fields the viewer exposes).
2589
+ */
2590
+ show(): Promise<AXPWidgetPropertyViewerResult | null>;
2591
+ }
2111
2592
  declare class AXPWidgetPropertyViewerService {
2112
2593
  private readonly widgetRegistryService;
2113
2594
  private readonly propertyViewerService;
2114
2595
  /**
2115
- * Open widget property viewer popup
2596
+ * Same shape as `AXPPropertyViewerService.create()` — use `.dialog((d) => { ... }).show()`.
2597
+ */
2598
+ create(): IAXPWidgetPropertyViewerRoot;
2599
+ /**
2600
+ * One-shot open (delegates to {@link #create} `.dialog().show()`).
2116
2601
  */
2117
2602
  open(config: AXPWidgetPropertyViewerConfig): Promise<AXPWidgetPropertyViewerResult | null>;
2118
- private buildTabs;
2119
- private buildInitialContext;
2120
2603
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetPropertyViewerService, never>;
2121
2604
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPWidgetPropertyViewerService>;
2122
2605
  }
@@ -2134,6 +2617,7 @@ declare class AXPResourceAppointmentComponent implements OnInit {
2134
2617
  providerName: _angular_core.InputSignal<string | undefined>;
2135
2618
  private readonly resourceAppointmentService;
2136
2619
  private readonly formatService;
2620
+ private readonly translateService;
2137
2621
  private readonly contextMenu;
2138
2622
  protected readonly schedulerRef: _angular_core.Signal<AXSchedulerComponent | undefined>;
2139
2623
  protected readonly isReady: _angular_core.WritableSignal<boolean>;
@@ -2246,5 +2730,198 @@ declare class AXPResourceAppointmentService {
2246
2730
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPResourceAppointmentService>;
2247
2731
  }
2248
2732
 
2249
- export { AXPActivityLogComponent, AXPCategoryTreeComponent, AXPColorPalettePickerComponent, AXPColumnItemListComponent, AXPCompareViewComponent, AXPDataSelectorComponent, AXPDataSelectorService, AXPDragDropListComponent, AXPImageEditorPopupComponent, AXPImageEditorService, AXPLogoComponent, AXPMenuBadgeHelper, AXPMenuCustomizerComponent, AXPMenuCustomizerService, AXPPreloadFiltersComponent, AXPPropertyViewerComponent, AXPPropertyViewerPopupComponent, AXPPropertyViewerService, AXPQueryColumnsComponent, AXPQueryFiltersComponent, AXPQuerySortsComponent, AXPQueryViewsComponent, AXPResourceAppointmentBoardProvider, AXPResourceAppointmentComponent, AXPResourceAppointmentService, AXPSpreadsheetComponent, AXPStateMessageComponent, AXPStopwatchComponent, AXPTableColumnsEditorComponent, AXPTableColumnsEditorPopupComponent, AXPTableColumnsEditorService, AXPTableDataEditorComponent, AXPTableDataEditorPopupComponent, AXPTableDataEditorService, AXPTaskBadgeDirective, AXPTaskBadgeProvider, AXPTaskBadgeService, AXPTemplateViewerComponent, AXPTemplateViewerService, AXPThemeLayoutActionsComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutContainerComponent, AXPThemeLayoutEndSideComponent, AXPThemeLayoutFooterComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutListComponent, AXPThemeLayoutListItemComponent, AXPThemeLayoutListItemsGroupComponent, AXPThemeLayoutPageHeaderComponent, AXPThemeLayoutPagePrimaryActionsComponent, AXPThemeLayoutPageSecondaryActionsComponent, AXPThemeLayoutSectionComponent, AXPThemeLayoutStartSideComponent, AXPThemeLayoutToolbarComponent, AXPUserAvatarComponent, AXPUserAvatarService, AXPWidgetFieldConfiguratorComponent, AXPWidgetItemComponent, AXPWidgetPropertyViewerComponent, AXPWidgetPropertyViewerPopupComponent, AXPWidgetPropertyViewerService, AXP_MENU_CUSTOMIZER_SERVICE, AXP_RESOURCE_APPOINTMENT_PROVIDER, AXP_TASK_BADGE_PROVIDERS, AXP_USER_AVATAR_PROVIDER, buildTableColumnsEditorLayout };
2250
- export type { AXPCategoryTreeActions, AXPCategoryTreeConfig, AXPCategoryTreeDataSource, AXPCategoryTreeEvents, AXPCategoryTreeNode, AXPColumnItemListItem, AXPCompareViewField, AXPCompareViewInputs, AXPCompareViewMode, AXPCompareViewObject, AXPDataSelectorColumn, AXPDataSelectorConfig, AXPDragDropListConfig, AXPDragDropListDropEvent, AXPDragDropListItem, AXPImageEditorOpenOptions, AXPMenuCustomizerAction, AXPMenuCustomizerItem, AXPMenuCustomizerItemType, AXPMenuCustomizerNodeData, AXPMenuCustomizerNodeMetadata, AXPMenuCustomizerState, AXPPreloadFiltersApplyEvent, AXPPropertyViewerChangedEvent, AXPPropertyViewerConfig, AXPPropertyViewerGroup, AXPPropertyViewerResult, AXPPropertyViewerTab, AXPResourceAppointmentActionMenuItem, AXPResourceAppointmentBoardFilter, AXPResourceAppointmentItem, AXPResourceAppointmentResource, AXPResourceAppointmentStatus, AXPSpreadsheetCellChangeEvent, AXPSpreadsheetCellValue, AXPSpreadsheetColumn, AXPSpreadsheetConfig, AXPSpreadsheetData, AXPSpreadsheetItem, AXPSpreadsheetRowChangeEvent, AXPSpreadsheetRowMode, AXPTableColumnDefinition, AXPTableColumnsEditorOpenOptions, AXPTableDataEditorOpenOptions, AXPTemplateViewerConfig, AXPTemplateViewerResult, AXPUserAvatarData, AXPUserAvatarProvider, AXPUserAvatarSize, AXPUserAvatarStatus, AXPWidgetItemClickEvent, AXPWidgetItemData, AXPWidgetPropertiesChangedEvent, AXPWidgetPropertyInjection, AXPWidgetPropertyViewerConfig, AXPWidgetPropertyViewerResult, StateMode };
2733
+ /**
2734
+ * Host-owned item row. Required keys are stable; additional keys are persisted by the host mapper.
2735
+ */
2736
+ interface AXPBuilderItem {
2737
+ id: string;
2738
+ order: number;
2739
+ [key: string]: unknown;
2740
+ }
2741
+ /**
2742
+ * Host-owned section. Items live under `items` (not nested host-specific names).
2743
+ */
2744
+ interface AXPBuilderSection {
2745
+ id: string;
2746
+ order: number;
2747
+ items: AXPBuilderItem[];
2748
+ [key: string]: unknown;
2749
+ }
2750
+ interface AXPBuilderValue {
2751
+ sections: AXPBuilderSection[];
2752
+ }
2753
+ type AXPBuilderBadgeVariant = 'neutral' | 'accent' | 'warning' | 'danger' | 'success';
2754
+ interface AXPBuilderBadge {
2755
+ /** Translation key (e.g. `@general:...`) or plain text. */
2756
+ text: string;
2757
+ variant?: AXPBuilderBadgeVariant;
2758
+ }
2759
+ type AXPBuilderItemIconTone = 'default' | 'easy' | 'medium' | 'hard';
2760
+ /**
2761
+ * View model for one item row (icons, labels, badges). Built by {@link AXPBuilderDefinition.mapItemToView}.
2762
+ */
2763
+ interface AXPBuilderItemViewModel {
2764
+ icon: string;
2765
+ iconTone?: AXPBuilderItemIconTone;
2766
+ title: string;
2767
+ name?: string;
2768
+ description?: string;
2769
+ badges: AXPBuilderBadge[];
2770
+ }
2771
+ interface AXPBuilderTexts {
2772
+ addSection: string;
2773
+ addItem: string;
2774
+ emptySectionsTitle: string;
2775
+ emptySectionsDescription: string;
2776
+ emptyItemsTitle: string;
2777
+ emptyItemsDescription: string;
2778
+ /** Shown when {@link AXPBuilderDefinition.isDefaultSection} is true */
2779
+ defaultSectionBadge?: string;
2780
+ }
2781
+ /**
2782
+ * Declarative configuration for {@link AXPSectionItemsBuilderComponent}.
2783
+ * Prompts return domain slices; the builder assigns `id` / `order` / `items` where needed.
2784
+ */
2785
+ interface AXPBuilderDefinition {
2786
+ texts: AXPBuilderTexts;
2787
+ mapItemToView: (item: AXPBuilderItem, section: AXPBuilderSection) => AXPBuilderItemViewModel;
2788
+ /** When true, renders section technical `name` next to the title (parentheses). */
2789
+ showSectionTechnicalName?: boolean;
2790
+ isDefaultSection?(section: AXPBuilderSection): boolean;
2791
+ /** Minimum number of sections (default 1). */
2792
+ minSectionCount?: number;
2793
+ promptAddSection?(value: AXPBuilderValue): Promise<Record<string, unknown> | null>;
2794
+ promptEditSection?(section: AXPBuilderSection, value: AXPBuilderValue): Promise<Record<string, unknown> | null>;
2795
+ promptAddItems?(sectionId: string, value: AXPBuilderValue): Promise<AXPBuilderItem[] | null>;
2796
+ promptEditItem?(item: AXPBuilderItem, sectionId: string, value: AXPBuilderValue): Promise<AXPBuilderItem | null>;
2797
+ confirmRemoveSection?(section: AXPBuilderSection): Promise<boolean>;
2798
+ confirmRemoveItem?(item: AXPBuilderItem, sectionId: string): Promise<boolean>;
2799
+ }
2800
+
2801
+ declare class AXPSectionItemsBuilderComponent {
2802
+ /** Used in template to branch between escaped text and sanitized HTML. */
2803
+ protected readonly containsHtmlMarkup: typeof containsHtmlMarkup;
2804
+ readonly value: _angular_core.InputSignal<AXPBuilderValue>;
2805
+ readonly definition: _angular_core.InputSignal<AXPBuilderDefinition>;
2806
+ readonly readonlyMode: _angular_core.InputSignal<boolean>;
2807
+ readonly valueChange: _angular_core.OutputEmitterRef<AXPBuilderValue>;
2808
+ private readonly vm;
2809
+ protected readonly sectionsModel: _angular_core.Signal<AXPBuilderValue>;
2810
+ protected readonly sectionRows: _angular_core.Signal<{
2811
+ section: AXPBuilderSection;
2812
+ itemRows: {
2813
+ item: AXPBuilderItem;
2814
+ view: _acorex_platform_layout_components.AXPBuilderItemViewModel;
2815
+ }[];
2816
+ }[]>;
2817
+ protected readonly itemDropListIds: _angular_core.Signal<string[]>;
2818
+ protected readonly canRemoveSection: _angular_core.Signal<boolean>;
2819
+ constructor();
2820
+ /**
2821
+ * Opens add-section flow (same as primary "Add section" control). For page commands / ViewChild.
2822
+ */
2823
+ addSection(): Promise<void>;
2824
+ protected onAddSectionClick(): Promise<void>;
2825
+ protected onEditSection(section: AXPBuilderSection): Promise<void>;
2826
+ protected onRemoveSection(section: AXPBuilderSection): Promise<void>;
2827
+ protected onAddItems(section: AXPBuilderSection): Promise<void>;
2828
+ protected onEditItem(item: AXPBuilderItem, sectionId: string): Promise<void>;
2829
+ protected onRemoveItem(item: AXPBuilderItem, sectionId: string): Promise<void>;
2830
+ protected onSectionDrop(event: CdkDragDrop<AXPBuilderSection[]>): void;
2831
+ protected onItemDrop(event: CdkDragDrop<AXPBuilderItem[]>, targetSectionId: string): void;
2832
+ protected sectionItemsListId(sectionId: string): string;
2833
+ protected parseSectionIdFromDropListId(listId: string): string | null;
2834
+ protected isDefaultSection(section: AXPBuilderSection): boolean;
2835
+ protected isTranslationKey(text: string): boolean;
2836
+ /** Tooltip for rich HTML rows: plain text, no tags. */
2837
+ protected tooltipPlainTextForHtml(html: string): string;
2838
+ /**
2839
+ * Prefer raw section fields for display so {@link AXPMultiLanguageString} maps are not
2840
+ * lost when {@link AXPBuilderDefinition#mapItemToView} stringifies them on items.
2841
+ */
2842
+ protected sectionTitleValue(section: AXPBuilderSection): AXPMultiLanguageString | string;
2843
+ protected sectionNameValue(section: AXPBuilderSection): AXPMultiLanguageString | string | undefined;
2844
+ protected sectionDescriptionValue(section: AXPBuilderSection): AXPMultiLanguageString | string | undefined;
2845
+ /**
2846
+ * Resolves item title/name/description for display: use raw item values when present
2847
+ * (including ML maps); fall back to {@link AXPBuilderItemViewModel} only when needed.
2848
+ */
2849
+ protected itemMultilingualField(item: AXPBuilderItem, field: 'title' | 'name' | 'description', viewFallback?: string | null): AXPMultiLanguageString | string;
2850
+ private commit;
2851
+ private normalizeValue;
2852
+ private reindexSections;
2853
+ private reindexItems;
2854
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPSectionItemsBuilderComponent, never>;
2855
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPSectionItemsBuilderComponent, "axp-section-items-builder", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "definition": { "alias": "definition"; "required": true; "isSignal": true; }; "readonlyMode": { "alias": "readonly"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
2856
+ }
2857
+
2858
+ /**
2859
+ * Host configuration for {@link AXPStandardSectionItemsBuilderComponent}.
2860
+ * Section add/edit UI (identity, content, visibility) and delete prompts are standardized;
2861
+ * item flows stay host-specific.
2862
+ */
2863
+ interface AXPStandardSectionItemsBuilderConfig {
2864
+ mapItemToView: AXPBuilderDefinition['mapItemToView'];
2865
+ /** When set, used instead of the built-in section add dialog. */
2866
+ promptAddSection?: AXPBuilderDefinition['promptAddSection'];
2867
+ /** When set, used instead of the built-in section edit dialog. */
2868
+ promptEditSection?: AXPBuilderDefinition['promptEditSection'];
2869
+ promptAddItems?: AXPBuilderDefinition['promptAddItems'];
2870
+ promptEditItem?: AXPBuilderDefinition['promptEditItem'];
2871
+ /** Merged over built-in empty-state / action labels */
2872
+ texts?: Partial<AXPBuilderTexts>;
2873
+ showSectionTechnicalName?: boolean;
2874
+ isDefaultSection?: AXPBuilderDefinition['isDefaultSection'];
2875
+ minSectionCount?: number;
2876
+ /**
2877
+ * Property viewer tabs for section add/edit.
2878
+ * Default: {@link STANDARD_SECTION_ITEMS_SECTION_TABS}.
2879
+ */
2880
+ sectionEditTabs?: AXPPropertyViewerTab[];
2881
+ /** Override default delete-section confirmation. */
2882
+ confirmRemoveSection?: AXPBuilderDefinition['confirmRemoveSection'];
2883
+ /** Override default delete-item confirmation. */
2884
+ confirmRemoveItem?: AXPBuilderDefinition['confirmRemoveItem'];
2885
+ }
2886
+ /** Context shape bound to the default section property viewer (paths match keys). */
2887
+ interface AXPStandardSectionFormContext {
2888
+ /** Unique technical name (section `name` in the builder model). */
2889
+ name?: string;
2890
+ tags?: unknown;
2891
+ title?: string | AXPMultiLanguageString;
2892
+ description?: string | AXPMultiLanguageString;
2893
+ isVisible?: boolean;
2894
+ }
2895
+
2896
+ /**
2897
+ * Default section editor: Identity (name, tags), Content (title, description), Visibility.
2898
+ */
2899
+ declare const STANDARD_SECTION_ITEMS_SECTION_TABS: AXPPropertyViewerTab[];
2900
+
2901
+ declare class AXPStandardSectionItemsBuilderComponent {
2902
+ readonly value: _angular_core.InputSignal<AXPBuilderValue>;
2903
+ readonly config: _angular_core.InputSignal<AXPStandardSectionItemsBuilderConfig>;
2904
+ readonly readonlyMode: _angular_core.InputSignal<boolean>;
2905
+ readonly valueChange: _angular_core.OutputEmitterRef<AXPBuilderValue>;
2906
+ private readonly inner;
2907
+ private readonly dialogService;
2908
+ private readonly translationService;
2909
+ private readonly propertyViewerService;
2910
+ protected readonly mergedDefinition: _angular_core.Signal<AXPBuilderDefinition>;
2911
+ /** Same entry as page commands / toolbar: open standardized add-section dialog. */
2912
+ addSection(): Promise<void>;
2913
+ private isDuplicateSectionName;
2914
+ /**
2915
+ * `AXPBuilderSection` uses `[key: string]: unknown`; cast to form-bound type without resolving ML.
2916
+ */
2917
+ private sectionFieldForForm;
2918
+ private buildSectionContext;
2919
+ private openSectionDialog;
2920
+ private defaultConfirmRemoveSection;
2921
+ private defaultConfirmRemoveItem;
2922
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPStandardSectionItemsBuilderComponent, never>;
2923
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPStandardSectionItemsBuilderComponent, "axp-standard-section-items-builder", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "config": { "alias": "config"; "required": true; "isSignal": true; }; "readonlyMode": { "alias": "readonly"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
2924
+ }
2925
+
2926
+ export { AXPActivityLogComponent, AXPAvatarComponent, AXPCategoryTreeComponent, AXPColorPalettePickerComponent, AXPColumnItemListComponent, AXPCompareViewComponent, AXPConditionBuilderComponent, AXPConditionBuilderConditionComponent, AXPDataSelectorComponent, AXPDataSelectorService, AXPDragDropListComponent, AXPExpressionFieldDefinitions, AXPImageEditorPopupComponent, AXPImageEditorService, AXPItemConfiguratorComponent, AXPLogoComponent, AXPMenuBadgeHelper, AXPMenuCustomizerComponent, AXPMenuCustomizerService, AXPPageComponentRegistryService, AXPPreloadFiltersComponent, AXPPropertyViewerComponent, AXPPropertyViewerPopupComponent, AXPPropertyViewerService, AXPQueryColumnsComponent, AXPQueryFiltersComponent, AXPQuerySortsComponent, AXPQueryViewsComponent, AXPRepeaterRowsLayoutComponent, AXPResourceAppointmentBoardProvider, AXPResourceAppointmentComponent, AXPResourceAppointmentService, AXPSectionItemsBuilderComponent, AXPSpreadsheetComponent, AXPStandardSectionItemsBuilderComponent, AXPStateMessageComponent, AXPStopwatchComponent, AXPTableColumnsEditorComponent, AXPTableColumnsEditorPopupComponent, AXPTableColumnsEditorService, AXPTableDataEditorComponent, AXPTableDataEditorPopupComponent, AXPTableDataEditorService, AXPTaskBadgeDirective, AXPTaskBadgeProvider, AXPTaskBadgeService, AXPTemplateViewerComponent, AXPTemplateViewerService, AXPThemeLayoutActionsComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutContainerComponent, AXPThemeLayoutEndSideComponent, AXPThemeLayoutFooterComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutListComponent, AXPThemeLayoutListItemComponent, AXPThemeLayoutListItemsGroupComponent, AXPThemeLayoutPageHeaderComponent, AXPThemeLayoutPagePrimaryActionsComponent, AXPThemeLayoutPageSecondaryActionsComponent, AXPThemeLayoutSectionComponent, AXPThemeLayoutStartSideComponent, AXPThemeLayoutToolbarComponent, AXPUserAvatarComponent, AXPUserAvatarService, AXPWidgetFieldConfiguratorComponent, AXPWidgetItemComponent, AXPWidgetPropertyViewerComponent, AXPWidgetPropertyViewerPopupComponent, AXPWidgetPropertyViewerService, AXP_EXPRESSION_LOGIC_DEFINITIONS, AXP_EXPRESSION_OPERATION_DEFINITIONS, AXP_MENU_CUSTOMIZER_SERVICE, AXP_PAGE_COMPONENT_PROVIDER, AXP_RESOURCE_APPOINTMENT_PROVIDER, AXP_TASK_BADGE_PROVIDERS, AXP_USER_AVATAR_PROVIDER, STANDARD_SECTION_ITEMS_SECTION_TABS, buildPropertyViewerInitialContextFromProperties, buildPropertyViewerTabsFromProperties, buildTableColumnsEditorLayout, getFieldDefinitions, getLogicDefinition, getOperationDefinition, isPropertyBindingExpressionFormValue, preparePropertyForViewer, preparePropertyViewerTabs, registerFieldDefinitions, withValidationsOnEditorNode };
2927
+ export type { AXPBuilderBadge, AXPBuilderBadgeVariant, AXPBuilderDefinition, AXPBuilderItem, AXPBuilderItemIconTone, AXPBuilderItemViewModel, AXPBuilderSection, AXPBuilderTexts, AXPBuilderValue, AXPCategoryTreeActions, AXPCategoryTreeConfig, AXPCategoryTreeDataSource, AXPCategoryTreeEvents, AXPCategoryTreeNode, AXPColumnItemListItem, AXPCompareViewField, AXPCompareViewInputs, AXPCompareViewMode, AXPCompareViewObject, AXPDataSelectorAllowCreate, AXPDataSelectorColumn, AXPDataSelectorConfig, AXPDragDropListConfig, AXPDragDropListDropEvent, AXPDragDropListItem, AXPExpressionFieldDefinition, AXPExpressionGroupNode, AXPExpressionLogicDefinition, AXPExpressionLogicType, AXPExpressionNode, AXPExpressionNodeId, AXPExpressionOperationDefinition, AXPExpressionOperationNode, AXPExpressionOperationType, AXPExpressionTree, AXPExpressionValueOperand, AXPExpressionValueSourceType, AXPImageEditorOpenOptions, AXPMenuCustomizerAction, AXPMenuCustomizerItem, AXPMenuCustomizerItemType, AXPMenuCustomizerNodeData, AXPMenuCustomizerNodeMetadata, AXPMenuCustomizerState, AXPPageComponentDefinition, AXPPageComponentProvider, AXPPreloadFiltersApplyEvent, AXPPropertyViewerActionRef, AXPPropertyViewerChangedEvent, AXPPropertyViewerConfig, AXPPropertyViewerGroup, AXPPropertyViewerResult, AXPPropertyViewerTab, AXPResourceAppointmentActionMenuItem, AXPResourceAppointmentBoardFilter, AXPResourceAppointmentItem, AXPResourceAppointmentResource, AXPResourceAppointmentStatus, AXPSpreadsheetCellChangeEvent, AXPSpreadsheetCellValue, AXPSpreadsheetColumn, AXPSpreadsheetConfig, AXPSpreadsheetData, AXPSpreadsheetItem, AXPSpreadsheetRowChangeEvent, AXPSpreadsheetRowMode, AXPStandardSectionFormContext, AXPStandardSectionItemsBuilderConfig, AXPTableColumnDefinition, AXPTableColumnsEditorOpenOptions, AXPTableDataEditorOpenOptions, AXPTemplateViewerConfig, AXPTemplateViewerResult, AXPUserAvatarData, AXPUserAvatarProvider, AXPUserAvatarSize, AXPUserAvatarStatus, AXPWidgetItemClickEvent, AXPWidgetItemData, AXPWidgetPropertiesChangedEvent, AXPWidgetPropertyInjection, AXPWidgetPropertyViewerConfig, AXPWidgetPropertyViewerResult, ConditionBuilderSelectedField, IAXPPropertyViewerDialogBuilder, IAXPPropertyViewerRoot, IAXPWidgetPropertyViewerDialogBuilder, IAXPWidgetPropertyViewerRoot, ItemConfiguratorListItem, StateMode };