@acorex/platform 20.3.0-next.2 → 20.3.0-next.20

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 (131) hide show
  1. package/common/index.d.ts +403 -374
  2. package/core/index.d.ts +563 -46
  3. package/fesm2022/acorex-platform-auth.mjs +19 -19
  4. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  5. package/fesm2022/acorex-platform-common.mjs +124 -224
  6. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-core.mjs +644 -110
  8. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-domain.mjs +16 -16
  10. package/fesm2022/acorex-platform-domain.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-layout-builder.mjs +1927 -1951
  12. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  13. package/fesm2022/acorex-platform-layout-components.mjs +3897 -435
  14. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  15. package/fesm2022/acorex-platform-layout-designer.mjs +96 -89
  16. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  17. package/fesm2022/acorex-platform-layout-entity-create-entity.command-BXExgI3W.mjs +52 -0
  18. package/fesm2022/acorex-platform-layout-entity-create-entity.command-BXExgI3W.mjs.map +1 -0
  19. package/fesm2022/acorex-platform-layout-entity.mjs +1763 -1233
  20. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-layout-views.mjs +43 -33
  22. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  23. package/fesm2022/acorex-platform-layout-widget-core.mjs +2756 -0
  24. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -0
  25. package/fesm2022/{acorex-platform-widgets-button-widget-designer.component-C2Qn1YAW.mjs → acorex-platform-layout-widgets-button-widget-designer.component-BzsfTNs2.mjs} +6 -6
  26. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-BzsfTNs2.mjs.map +1 -0
  27. package/fesm2022/{acorex-platform-widgets-extra-properties-schema-widget-edit.component-D9mf08rU.mjs → acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-Dvk76-2W.mjs} +5 -5
  28. package/fesm2022/acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-Dvk76-2W.mjs.map +1 -0
  29. package/fesm2022/{acorex-platform-widgets-extra-properties-schema-widget-view.component-D6GQ-eyr.mjs → acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-BYLaipWi.mjs} +5 -5
  30. package/fesm2022/acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-BYLaipWi.mjs.map +1 -0
  31. package/fesm2022/{acorex-platform-widgets-extra-properties-values-widget-edit.component-DVbIdVZ6.mjs → acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-DcSllNik.mjs} +5 -5
  32. package/fesm2022/acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-DcSllNik.mjs.map +1 -0
  33. package/fesm2022/{acorex-platform-widgets-extra-properties-values-widget-view.component-D-aM64Hu.mjs → acorex-platform-layout-widgets-extra-properties-values-widget-view.component-BT-U4BiA.mjs} +5 -5
  34. package/fesm2022/acorex-platform-layout-widgets-extra-properties-values-widget-view.component-BT-U4BiA.mjs.map +1 -0
  35. package/fesm2022/{acorex-platform-widgets-extra-properties-widget-edit.component-em2-aU8E.mjs → acorex-platform-layout-widgets-extra-properties-widget-edit.component-Il7jnRBg.mjs} +5 -5
  36. package/fesm2022/acorex-platform-layout-widgets-extra-properties-widget-edit.component-Il7jnRBg.mjs.map +1 -0
  37. package/fesm2022/{acorex-platform-widgets-extra-properties-widget-view.component-BeuIofdr.mjs → acorex-platform-layout-widgets-extra-properties-widget-view.component-CBEPu7Fl.mjs} +5 -5
  38. package/fesm2022/acorex-platform-layout-widgets-extra-properties-widget-view.component-CBEPu7Fl.mjs.map +1 -0
  39. package/fesm2022/{acorex-platform-widgets-file-list-popup.component-rW2RD35f.mjs → acorex-platform-layout-widgets-file-list-popup.component-BPzn8lr3.mjs} +10 -10
  40. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-BPzn8lr3.mjs.map +1 -0
  41. package/fesm2022/{acorex-platform-widgets-page-widget-designer.component-DNvnQ4Mc.mjs → acorex-platform-layout-widgets-page-widget-designer.component-C_JrGoXy.mjs} +8 -8
  42. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-C_JrGoXy.mjs.map +1 -0
  43. package/fesm2022/{acorex-platform-widgets-tabular-data-edit-popup.component-CPVRbE8B.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-C6DaBt_N.mjs} +14 -14
  44. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-C6DaBt_N.mjs.map +1 -0
  45. package/fesm2022/{acorex-platform-widgets-tabular-data-view-popup.component-Dmg5DdX8.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-Bth3jI9T.mjs} +6 -5
  46. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-Bth3jI9T.mjs.map +1 -0
  47. package/fesm2022/{acorex-platform-widgets-text-block-widget-designer.component-yADN3Xji.mjs → acorex-platform-layout-widgets-text-block-widget-designer.component-CUHptbP4.mjs} +6 -7
  48. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-CUHptbP4.mjs.map +1 -0
  49. package/fesm2022/{acorex-platform-widgets.mjs → acorex-platform-layout-widgets.mjs} +8362 -7479
  50. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -0
  51. package/fesm2022/acorex-platform-native.mjs +7 -7
  52. package/fesm2022/acorex-platform-native.mjs.map +1 -1
  53. package/fesm2022/acorex-platform-runtime.mjs +40 -40
  54. package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
  55. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-eGzN6g2Y.mjs +115 -0
  56. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-eGzN6g2Y.mjs.map +1 -0
  57. package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-X0hLRZhX.mjs → acorex-platform-themes-default-entity-master-list-view.component-nDHfQQ3O.mjs} +34 -36
  58. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-nDHfQQ3O.mjs.map +1 -0
  59. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-HJyalvcu.mjs +101 -0
  60. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-HJyalvcu.mjs.map +1 -0
  61. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-BExtm1JE.mjs → acorex-platform-themes-default-entity-master-single-view.component-e7m70Wls.mjs} +17 -17
  62. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-e7m70Wls.mjs.map +1 -0
  63. package/fesm2022/{acorex-platform-themes-default-error-401.component-DrO1PEOH.mjs → acorex-platform-themes-default-error-401.component-CoBaQFTn.mjs} +4 -4
  64. package/fesm2022/{acorex-platform-themes-default-error-401.component-DrO1PEOH.mjs.map → acorex-platform-themes-default-error-401.component-CoBaQFTn.mjs.map} +1 -1
  65. package/fesm2022/{acorex-platform-themes-default-error-404.component-DqVq0oHX.mjs → acorex-platform-themes-default-error-404.component-BLlVOsS2.mjs} +4 -4
  66. package/fesm2022/{acorex-platform-themes-default-error-404.component-DqVq0oHX.mjs.map → acorex-platform-themes-default-error-404.component-BLlVOsS2.mjs.map} +1 -1
  67. package/fesm2022/{acorex-platform-themes-default-error-offline.component-Bt2PTL7_.mjs → acorex-platform-themes-default-error-offline.component-CybYQI9F.mjs} +4 -4
  68. package/fesm2022/{acorex-platform-themes-default-error-offline.component-Bt2PTL7_.mjs.map → acorex-platform-themes-default-error-offline.component-CybYQI9F.mjs.map} +1 -1
  69. package/fesm2022/acorex-platform-themes-default.mjs +45 -45
  70. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  71. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-KpZWpnOJ.mjs → acorex-platform-themes-shared-icon-chooser-view.component-ReKSoVeN.mjs} +25 -15
  72. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-ReKSoVeN.mjs.map +1 -0
  73. package/fesm2022/{acorex-platform-themes-shared-settings.provider-CXiRmniv.mjs → acorex-platform-themes-shared-settings.provider-DY2xFnrv.mjs} +9 -9
  74. package/fesm2022/acorex-platform-themes-shared-settings.provider-DY2xFnrv.mjs.map +1 -0
  75. package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-column.component-BvOiVCgt.mjs → acorex-platform-themes-shared-theme-color-chooser-column.component-B2HDyY2z.mjs} +24 -9
  76. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-B2HDyY2z.mjs.map +1 -0
  77. package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-view.component-BW0rfkjk.mjs → acorex-platform-themes-shared-theme-color-chooser-view.component-CeZxa49U.mjs} +24 -9
  78. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-CeZxa49U.mjs.map +1 -0
  79. package/fesm2022/acorex-platform-themes-shared.mjs +264 -86
  80. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  81. package/fesm2022/acorex-platform-workflow.mjs +27 -39
  82. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  83. package/layout/builder/README.md +2 -3
  84. package/layout/builder/index.d.ts +683 -819
  85. package/layout/components/index.d.ts +1141 -115
  86. package/layout/designer/index.d.ts +8 -6
  87. package/layout/entity/index.d.ts +979 -282
  88. package/layout/views/index.d.ts +13 -13
  89. package/layout/widget-core/README.md +4 -0
  90. package/layout/widget-core/index.d.ts +957 -0
  91. package/layout/widgets/README.md +4 -0
  92. package/{widgets → layout/widgets}/index.d.ts +1933 -770
  93. package/package.json +14 -10
  94. package/themes/shared/index.d.ts +2 -2
  95. package/workflow/index.d.ts +3 -173
  96. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-BXbkGGei.mjs +0 -115
  97. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-BXbkGGei.mjs.map +0 -1
  98. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-X0hLRZhX.mjs.map +0 -1
  99. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Bp1JLsj1.mjs +0 -101
  100. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Bp1JLsj1.mjs.map +0 -1
  101. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-BExtm1JE.mjs.map +0 -1
  102. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-KpZWpnOJ.mjs.map +0 -1
  103. package/fesm2022/acorex-platform-themes-shared-settings.provider-CXiRmniv.mjs.map +0 -1
  104. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-BvOiVCgt.mjs.map +0 -1
  105. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-BW0rfkjk.mjs.map +0 -1
  106. package/fesm2022/acorex-platform-widgets-button-widget-designer.component-C2Qn1YAW.mjs.map +0 -1
  107. package/fesm2022/acorex-platform-widgets-checkbox-widget-column.component-CzEFmKWG.mjs +0 -84
  108. package/fesm2022/acorex-platform-widgets-checkbox-widget-column.component-CzEFmKWG.mjs.map +0 -1
  109. package/fesm2022/acorex-platform-widgets-checkbox-widget-designer.component-JC_nYunG.mjs +0 -55
  110. package/fesm2022/acorex-platform-widgets-checkbox-widget-designer.component-JC_nYunG.mjs.map +0 -1
  111. package/fesm2022/acorex-platform-widgets-checkbox-widget-view.component-C-4bWr9G.mjs +0 -76
  112. package/fesm2022/acorex-platform-widgets-checkbox-widget-view.component-C-4bWr9G.mjs.map +0 -1
  113. package/fesm2022/acorex-platform-widgets-color-box-widget-designer.component-CxgKO2VI.mjs +0 -55
  114. package/fesm2022/acorex-platform-widgets-color-box-widget-designer.component-CxgKO2VI.mjs.map +0 -1
  115. package/fesm2022/acorex-platform-widgets-extra-properties-schema-widget-edit.component-D9mf08rU.mjs.map +0 -1
  116. package/fesm2022/acorex-platform-widgets-extra-properties-schema-widget-view.component-D6GQ-eyr.mjs.map +0 -1
  117. package/fesm2022/acorex-platform-widgets-extra-properties-values-widget-edit.component-DVbIdVZ6.mjs.map +0 -1
  118. package/fesm2022/acorex-platform-widgets-extra-properties-values-widget-view.component-D-aM64Hu.mjs.map +0 -1
  119. package/fesm2022/acorex-platform-widgets-extra-properties-widget-edit.component-em2-aU8E.mjs.map +0 -1
  120. package/fesm2022/acorex-platform-widgets-extra-properties-widget-view.component-BeuIofdr.mjs.map +0 -1
  121. package/fesm2022/acorex-platform-widgets-file-list-popup.component-rW2RD35f.mjs.map +0 -1
  122. package/fesm2022/acorex-platform-widgets-file-rename-popup.component-DHFMnkls.mjs +0 -211
  123. package/fesm2022/acorex-platform-widgets-file-rename-popup.component-DHFMnkls.mjs.map +0 -1
  124. package/fesm2022/acorex-platform-widgets-page-widget-designer.component-DNvnQ4Mc.mjs.map +0 -1
  125. package/fesm2022/acorex-platform-widgets-rich-text-popup.component-Cydlpsat.mjs +0 -40
  126. package/fesm2022/acorex-platform-widgets-rich-text-popup.component-Cydlpsat.mjs.map +0 -1
  127. package/fesm2022/acorex-platform-widgets-tabular-data-edit-popup.component-CPVRbE8B.mjs.map +0 -1
  128. package/fesm2022/acorex-platform-widgets-tabular-data-view-popup.component-Dmg5DdX8.mjs.map +0 -1
  129. package/fesm2022/acorex-platform-widgets-text-block-widget-designer.component-yADN3Xji.mjs.map +0 -1
  130. package/fesm2022/acorex-platform-widgets.mjs.map +0 -1
  131. package/widgets/README.md +0 -4
@@ -1,21 +1,25 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { Signal, InjectionToken, InputSignal, TemplateRef, ElementRef, OnInit, OnDestroy, Type, ViewContainerRef, ModuleWithProviders, WritableSignal, QueryList, EventEmitter } from '@angular/core';
3
3
  import * as _acorex_platform_core from '@acorex/platform/core';
4
- import { AXPActivityLog, AXPSystemActionType, AXPColumnQuery, AXPContextData, AXPOptionsData, AXPActionMenuItem, AXPExecuteCommand, AXPFilterDefinition, AXPFilterQuery, AXPSortDefinition, AXPSortQuery, AXPMetaData, AXPViewQuery } from '@acorex/platform/core';
4
+ import { AXPActivityLog, AXPSystemActionType, AXPCategoryEntity, AXPColumnQuery, AXPContextData, AXPOptionsData, AXPGridLayoutOptions, AXPActionMenuItem, AXPExecuteCommand, AXPValidationRules, AXPFilterDefinition, AXPFilterQuery, AXPSortDefinition, AXPSortQuery, AXPMetaData, AXPViewQuery } from '@acorex/platform/core';
5
5
  import { AXPMenuItem } from '@acorex/platform/common';
6
- import { AXValueChangedEvent, AXHtmlEvent, AXEvent } from '@acorex/cdk/common';
6
+ import * as _acorex_cdk_common from '@acorex/cdk/common';
7
+ import { AXValueChangedEvent, AXClickEvent, AXDataSource, AXDataSourceFilterOption, AXOrientation, AXHtmlEvent, AXEvent } from '@acorex/cdk/common';
8
+ import { AXTreeViewComponent, AXTreeItemClickBaseEvent } from '@acorex/components/tree-view';
9
+ import { AXTranslationService } from '@acorex/core/translation';
7
10
  import { CdkDragDrop } from '@angular/cdk/drag-drop';
8
- import { AXPWidgetNode, AXPLayoutContextChangeEvent, AXPWidgetProperty, AXPWidgetConfig } from '@acorex/platform/layout/builder';
11
+ import { AXPWidgetNode, AXPWidgetCoreContextChangeEvent, AXPWidgetContainerComponent, AXPWidgetProperty, AXPWidgetConfig } from '@acorex/platform/layout/widget-core';
9
12
  import * as _ngrx_signals from '@ngrx/signals';
10
- import { AXPopupSizeType, AXPopupService } from '@acorex/components/popup';
13
+ import { AXDataTableComponent, AXDataTableRowDbClick, AXDataTableRowClick } from '@acorex/components/data-table';
11
14
  import { AXBasePageComponent } from '@acorex/components/page';
15
+ import { AXPopupSizeType, AXPopupService } from '@acorex/components/popup';
16
+ import * as _acorex_platform_layout_components from '@acorex/platform/layout/components';
12
17
  import { AXFormComponent } from '@acorex/components/form';
13
18
  import { AXPopoverComponent } from '@acorex/components/popover';
14
19
  import { AXTagBoxComponent } from '@acorex/components/tag-box';
15
20
  import { AXCalendarService } from '@acorex/core/date-time';
16
- import { AXTranslationService } from '@acorex/core/translation';
21
+ import { AXTabStripChangedEvent, AXTabsComponent } from '@acorex/components/tabs';
17
22
  import { Observable } from 'rxjs';
18
- import { AXTabsComponent, AXTabStripChangedEvent } from '@acorex/components/tabs';
19
23
 
20
24
  declare class AXPActivityLogComponent {
21
25
  private readonly translateService;
@@ -203,6 +207,85 @@ declare class AXPThemeLayoutContainerComponent {
203
207
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPThemeLayoutContainerComponent, "axp-layout-container", never, {}, {}, never, ["*"], true, never>;
204
208
  }
205
209
 
210
+ interface AXPCategoryTreeNode extends AXPCategoryEntity {
211
+ children?: AXPCategoryTreeNode[];
212
+ expand?: boolean;
213
+ hasChild?: boolean;
214
+ [key: string]: any;
215
+ }
216
+ interface AXPCategoryTreeConfig {
217
+ textField?: string;
218
+ valueField?: string;
219
+ expandedField?: string;
220
+ showCheckbox?: boolean;
221
+ searchable?: boolean;
222
+ searchPlaceholder?: string;
223
+ emptyStateTitle?: string;
224
+ emptyStateDescription?: string;
225
+ emptyStateIcon?: string;
226
+ }
227
+ interface AXPCategoryTreeEvents {
228
+ onNodeClick?: (node: AXPCategoryEntity) => void;
229
+ onNodeSelect?: (node: AXPCategoryEntity) => void;
230
+ onNodeCreate?: (parentNode?: AXPCategoryEntity) => void;
231
+ onNodeUpdate?: (node: AXPCategoryEntity) => void;
232
+ onNodeDelete?: (node: AXPCategoryEntity) => void;
233
+ onSearchChange?: (searchValue: string) => void;
234
+ onCollapseChange?: (node: AXPCategoryEntity) => void;
235
+ }
236
+ interface AXPCategoryTreeActions {
237
+ canCreate?: boolean;
238
+ canUpdate?: boolean;
239
+ canDelete?: boolean;
240
+ canCreateChild?: boolean;
241
+ createLabel?: string;
242
+ updateLabel?: string;
243
+ deleteLabel?: string;
244
+ createChildLabel?: string;
245
+ }
246
+ interface AXPCategoryTreeDataSource {
247
+ loadRootNodes: () => Promise<AXPCategoryEntity[]>;
248
+ loadChildNodes?: (parentId: string) => Promise<AXPCategoryEntity[]>;
249
+ searchNodes?: (searchValue: string) => Promise<AXPCategoryEntity[]>;
250
+ }
251
+
252
+ declare class AXPCategoryTreeComponent {
253
+ protected readonly translationService: AXTranslationService;
254
+ dataSource: _angular_core.InputSignal<AXPCategoryTreeDataSource>;
255
+ config: _angular_core.InputSignal<AXPCategoryTreeConfig>;
256
+ actions: _angular_core.InputSignal<AXPCategoryTreeActions>;
257
+ events: _angular_core.InputSignal<AXPCategoryTreeEvents>;
258
+ nodeClick: _angular_core.OutputEmitterRef<AXPCategoryEntity<string>>;
259
+ nodeSelect: _angular_core.OutputEmitterRef<AXPCategoryEntity<string>>;
260
+ nodeCreate: _angular_core.OutputEmitterRef<AXPCategoryEntity<string> | undefined>;
261
+ nodeUpdate: _angular_core.OutputEmitterRef<AXPCategoryEntity<string>>;
262
+ nodeDelete: _angular_core.OutputEmitterRef<AXPCategoryEntity<string>>;
263
+ searchChange: _angular_core.OutputEmitterRef<string>;
264
+ collapseChange: _angular_core.OutputEmitterRef<AXPCategoryEntity<string>>;
265
+ tree: _angular_core.Signal<AXTreeViewComponent | undefined>;
266
+ isLoading: _angular_core.WritableSignal<boolean>;
267
+ searchValue: _angular_core.WritableSignal<string>;
268
+ protected treeItems: _angular_core.WritableSignal<AXPCategoryTreeNode[]>;
269
+ protected emptyStateTitle: _angular_core.Signal<string>;
270
+ protected emptyStateDescription: _angular_core.Signal<string>;
271
+ ngOnInit(): Promise<void>;
272
+ loadRootNodes(): Promise<void>;
273
+ loadChildNodes(parentId: string): Promise<void>;
274
+ searchNodes(searchValue: string): Promise<void>;
275
+ handleNodeClick(event: AXTreeItemClickBaseEvent): Promise<void>;
276
+ handleCollapseChanged(event: AXTreeItemClickBaseEvent): Promise<void>;
277
+ handleSearchChange(event: AXValueChangedEvent): Promise<void>;
278
+ handleCreateRootClick(event: AXClickEvent): Promise<void>;
279
+ handleCreateChildClick(node: AXPCategoryTreeNode, event: AXClickEvent): Promise<void>;
280
+ handleUpdateNodeClick(node: AXPCategoryTreeNode, event: AXClickEvent): Promise<void>;
281
+ handleDeleteNodeClick(node: AXPCategoryTreeNode, event: AXClickEvent): Promise<void>;
282
+ private convertEntitiesToTreeNodes;
283
+ private updateNodeChildren;
284
+ refreshTree(parentId?: string): Promise<void>;
285
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPCategoryTreeComponent, never>;
286
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPCategoryTreeComponent, "axp-category-tree", never, { "dataSource": { "alias": "dataSource"; "required": true; "isSignal": true; }; "config": { "alias": "config"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "events": { "alias": "events"; "required": false; "isSignal": true; }; }, { "nodeClick": "nodeClick"; "nodeSelect": "nodeSelect"; "nodeCreate": "nodeCreate"; "nodeUpdate": "nodeUpdate"; "nodeDelete": "nodeDelete"; "searchChange": "searchChange"; "collapseChange": "collapseChange"; }, never, never, true, never>;
287
+ }
288
+
206
289
  declare class AXPQueryColumnsComponent {
207
290
  columns: _angular_core.ModelSignal<AXPColumnQuery[]>;
208
291
  handleVisibilityChange(e: AXValueChangedEvent<boolean>, name: string): void;
@@ -357,10 +440,115 @@ declare class AXPComponentSlotModule {
357
440
  static ɵinj: _angular_core.ɵɵInjectorDeclaration<AXPComponentSlotModule>;
358
441
  }
359
442
 
443
+ interface AXPDataSelectorColumn {
444
+ name: string;
445
+ title: string;
446
+ visible: boolean;
447
+ widget: {
448
+ type: string;
449
+ options: any;
450
+ };
451
+ }
452
+ interface AXPDataSelectorConfig {
453
+ title: string;
454
+ dataSource: AXDataSource<any>;
455
+ columns: AXPDataSelectorColumn[];
456
+ selectionMode: 'single' | 'multiple';
457
+ searchFields?: string[];
458
+ parentField?: string;
459
+ allowCreate?: boolean;
460
+ filters?: AXDataSourceFilterOption;
461
+ categoryFilter?: {
462
+ enabled: boolean;
463
+ title: string;
464
+ dataSource: AXPCategoryTreeDataSource;
465
+ filterField: string;
466
+ filterOperator?: 'equal' | 'contains' | 'in';
467
+ width?: string;
468
+ };
469
+ }
470
+ declare class AXPDataSelectorComponent extends AXBasePageComponent {
471
+ protected config: _angular_core.WritableSignal<AXPDataSelectorConfig>;
472
+ protected searchTerm: string;
473
+ protected filter: AXDataSourceFilterOption;
474
+ protected grid: _angular_core.Signal<AXDataTableComponent | undefined>;
475
+ protected initialSelectedItems: any[];
476
+ protected selectedItems: _angular_core.WritableSignal<any[]>;
477
+ protected activeCategoryFilter: _angular_core.WritableSignal<{
478
+ node: AXPCategoryEntity;
479
+ filterValue: any;
480
+ } | null>;
481
+ protected allowSelect: _angular_core.Signal<boolean>;
482
+ protected hasSearch: _angular_core.Signal<boolean | undefined>;
483
+ protected searchPlaceholder: _angular_core.Signal<string>;
484
+ protected categoryTreeConfig: _angular_core.Signal<{
485
+ textField: string;
486
+ valueField: string;
487
+ showCheckbox: boolean;
488
+ searchable: boolean;
489
+ searchPlaceholder: string;
490
+ emptyStateTitle: string;
491
+ emptyStateDescription: string;
492
+ emptyStateIcon: string;
493
+ }>;
494
+ protected categoryTreeActions: _angular_core.Signal<{
495
+ canCreate: boolean;
496
+ canUpdate: boolean;
497
+ canDelete: boolean;
498
+ canCreateChild: boolean;
499
+ }>;
500
+ protected ngOnInit(): void;
501
+ protected ngAfterViewInit(): void;
502
+ protected handleRowDbClick(e: AXDataTableRowDbClick): void;
503
+ protected handleRowClick(e: AXDataTableRowClick): void;
504
+ protected handleSelectedRowsChange(rows: unknown[]): Promise<void>;
505
+ protected handleChangeSearchValue(e: AXValueChangedEvent): void;
506
+ protected handleCreateNewClick(): Promise<void>;
507
+ protected handleCloseClick(): void;
508
+ protected handleSelectClick(): void;
509
+ protected handleExpandRow(row: any): Promise<void>;
510
+ protected handleCategoryFilterClick(node: AXPCategoryEntity): void;
511
+ protected clearCategoryFilter(): void;
512
+ private applySearchFilter;
513
+ private applyFilterAndSort;
514
+ private applyCategoryFilter;
515
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDataSelectorComponent, never>;
516
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDataSelectorComponent, "axp-data-selector", never, {}, {}, never, never, true, never>;
517
+ }
518
+
519
+ declare class AXPDataSelectorService {
520
+ private readonly popupService;
521
+ private readonly expressionService;
522
+ /**
523
+ * Open data selector popup
524
+ */
525
+ open(config: AXPDataSelectorConfig): Promise<{
526
+ items: any[];
527
+ } | null>;
528
+ /**
529
+ * Open data selector with category filter
530
+ */
531
+ openWithCategoryFilter(config: Omit<AXPDataSelectorConfig, 'categoryFilter'>, categoryFilterConfig: {
532
+ title: string;
533
+ dataSource: AXPCategoryTreeDataSource;
534
+ filterField: string;
535
+ filterOperator?: 'equal' | 'contains' | 'in';
536
+ width?: string;
537
+ }): Promise<{
538
+ items: any[];
539
+ } | null>;
540
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDataSelectorService, never>;
541
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPDataSelectorService>;
542
+ }
543
+
544
+ /**
545
+ * Form appearance and density styling (using fieldset widget look)
546
+ */
547
+ type AXPDynamicFormLook = 'fieldset' | 'card' | 'group' | 'container';
360
548
  /**
361
- * Form appearance and density styling
549
+ * Form rendering mode
362
550
  */
363
- type AXPDynamicFormLook = 'normal' | 'compact' | 'borderless';
551
+ type AXPDynamicFormMode = 'view' | 'edit';
364
552
  /**
365
553
  * Form layout direction and flow
366
554
  */
@@ -370,43 +558,244 @@ interface AXPDynamicFormFieldDefinition {
370
558
  title?: string;
371
559
  description?: string;
372
560
  widget: AXPWidgetNode;
561
+ /**
562
+ * Optional per-field rendering mode. Takes precedence over section and form modes.
563
+ */
564
+ mode?: AXPDynamicFormMode;
565
+ layout?: AXPGridLayoutOptions;
373
566
  }
374
567
  interface AXPDynamicFormGroupDefinition {
375
568
  name: string;
376
569
  title?: string;
377
570
  description?: string;
378
571
  parameters: AXPDynamicFormFieldDefinition[];
572
+ /**
573
+ * Optional per-section rendering mode. Takes precedence over form mode and is overridden by field mode.
574
+ */
575
+ mode?: AXPDynamicFormMode;
379
576
  }
380
577
  interface AXPDynamicFormDefinition {
381
578
  groups: AXPDynamicFormGroupDefinition[];
579
+ /**
580
+ * Optional form-level rendering mode
581
+ */
582
+ mode?: AXPDynamicFormMode;
382
583
  }
383
- interface AXPDynamicFormLayoutConfig {
384
- positions: {
385
- default: {
386
- colSpan: number;
387
- };
388
- md?: {
389
- colSpan: number;
390
- };
391
- lg?: {
392
- colSpan: number;
393
- };
394
- xl?: {
395
- colSpan: number;
396
- };
397
- xxl?: {
398
- colSpan: number;
399
- };
584
+
585
+ /**
586
+ * Describes a single step of the dynamic form stepper.
587
+ * Each step contains one or more groups rendered by AXPDynamicFormComponent.
588
+ */
589
+ interface AXPDynamicFormStepperStepDefinition {
590
+ /** Unique identifier for the step */
591
+ id: string;
592
+ /** Display title for the step */
593
+ title?: string;
594
+ /** Optional descriptive text for the step */
595
+ description?: string;
596
+ /** Optional icon name for the step header */
597
+ icon?: string;
598
+ /** Field groups to render in this step */
599
+ groups: AXPDynamicFormGroupDefinition[];
600
+ /** Optional layout direction override for this step's form */
601
+ formDirection?: AXPDynamicFormDirection;
602
+ /** Whether the user may skip this step (defaults to false) */
603
+ canSkip?: boolean;
604
+ /** Whether the user may navigate back from this step (defaults to true) */
605
+ canGoBack?: boolean;
606
+ /** Optional data path inside the shared context for this step's data */
607
+ dataPath?: string;
608
+ }
609
+ /**
610
+ * Root definition for the dynamic form stepper.
611
+ */
612
+ interface AXPDynamicFormStepperDefinition {
613
+ /** Ordered collection of steps */
614
+ steps: AXPDynamicFormStepperStepDefinition[];
615
+ /** Enforce sequential navigation (no jumping to future steps) */
616
+ linear?: boolean;
617
+ /** Show progress indicator above the content */
618
+ showProgress?: boolean;
619
+ /** Show step numbers in the header */
620
+ showStepNumbers?: boolean;
621
+ }
622
+
623
+ declare class AXPDynamicFormStepperComponent {
624
+ #private;
625
+ /**
626
+ * Stepper definition providing steps metadata and behavior configuration
627
+ */
628
+ definition: _angular_core.InputSignal<AXPDynamicFormStepperDefinition>;
629
+ /**
630
+ * Shared root context for all steps
631
+ */
632
+ context: _angular_core.InputSignal<any>;
633
+ /**
634
+ * Optional pass-through layout props for inner forms
635
+ */
636
+ layoutLook: _angular_core.InputSignal<AXPDynamicFormLook>;
637
+ stepperDirection: _angular_core.InputSignal<AXOrientation>;
638
+ layoutConfig: _angular_core.InputSignal<AXPGridLayoutOptions | undefined>;
639
+ /**
640
+ * Optional guard that controls advancing to the next step (async only)
641
+ */
642
+ guardNext: _angular_core.InputSignal<((e: {
643
+ index: number;
644
+ id: string;
645
+ fullContext: any;
646
+ }) => Promise<boolean>) | undefined>;
647
+ /**
648
+ * Emits when the shared root context changes
649
+ */
650
+ contextChange: _angular_core.OutputEmitterRef<any>;
651
+ /**
652
+ * Emits when the active step changes
653
+ */
654
+ stepChange: _angular_core.OutputEmitterRef<{
655
+ index: number;
656
+ id: string;
657
+ }>;
658
+ /**
659
+ * Emits after successful finish
660
+ */
661
+ finished: _angular_core.OutputEmitterRef<any>;
662
+ /**
663
+ * Emits when cancelled by API
664
+ */
665
+ cancel: _angular_core.OutputEmitterRef<void>;
666
+ /**
667
+ * Emits when navigation is blocked by validation or policy
668
+ */
669
+ navigationBlocked: _angular_core.OutputEmitterRef<{
670
+ reason: "invalid" | "linear" | "cannot-skip" | "cannot-go-back";
671
+ stepId: string;
672
+ targetIndex?: number;
673
+ }>;
674
+ /**
675
+ * Internal reactive copy of the shared context
676
+ */
677
+ private internalContext;
678
+ /**
679
+ * Active step index
680
+ */
681
+ protected currentStepIndex: _angular_core.WritableSignal<number>;
682
+ /**
683
+ * Navigation lock while async guards are pending
684
+ */
685
+ private navigationLocked;
686
+ /**
687
+ * Reference to underlying step wizard to sync visual navigation
688
+ */
689
+ private readonly wizard;
690
+ /**
691
+ * References to rendered dynamic forms (usually one active)
692
+ */
693
+ private readonly forms;
694
+ protected steps: _angular_core.Signal<_acorex_platform_layout_components.AXPDynamicFormStepperStepDefinition[]>;
695
+ protected stepCount: _angular_core.Signal<number>;
696
+ protected currentStep: _angular_core.Signal<_acorex_platform_layout_components.AXPDynamicFormStepperStepDefinition>;
697
+ protected isFirstComputed: _angular_core.Signal<boolean>;
698
+ protected isLastComputed: _angular_core.Signal<boolean>;
699
+ /**
700
+ * Non-undefined layout config for inner dynamic forms
701
+ */
702
+ protected effectiveLayoutConfig: _angular_core.Signal<AXPGridLayoutOptions>;
703
+ /**
704
+ * Returns the current step pointer
705
+ */
706
+ getCurrentStep(): {
707
+ index: number;
708
+ id: string;
709
+ };
710
+ /**
711
+ * Public helpers for templates/consumers
712
+ */
713
+ isFirst(): boolean;
714
+ isLast(): boolean;
715
+ /**
716
+ * Returns the root context
717
+ */
718
+ getContext(): any;
719
+ /**
720
+ * Replaces the root context programmatically
721
+ */
722
+ setContext(ctx: any): void;
723
+ /**
724
+ * Validates the current step.
725
+ */
726
+ validateCurrentStep(): Promise<boolean>;
727
+ /**
728
+ * Attempts to advance to the next step applying validation and guard
729
+ */
730
+ next(): Promise<void>;
731
+ /**
732
+ * Goes back to the previous step if possible
733
+ */
734
+ previous(): Promise<void>;
735
+ /**
736
+ * Navigates to a specific step by id or index
737
+ */
738
+ goTo(stepIdOrIndex: string | number): Promise<void>;
739
+ /**
740
+ * Validates all steps and emits finished when successful
741
+ */
742
+ finish(): Promise<void>;
743
+ /**
744
+ * Emits cancel event without state changes
745
+ */
746
+ cancelFlow(): void;
747
+ /**
748
+ * Handle per-step context changes and keep internal root context in sync.
749
+ */
750
+ protected onStepContextChange(stepId: string, stepContext: any): void;
751
+ /**
752
+ * Exposes reading a step slice to the template
753
+ */
754
+ readStepSlice(path?: string): {
755
+ slice: any;
756
+ exists: boolean;
400
757
  };
758
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDynamicFormStepperComponent, never>;
759
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDynamicFormStepperComponent, "axp-dynamic-form-stepper", never, { "definition": { "alias": "definition"; "required": true; "isSignal": true; }; "context": { "alias": "context"; "required": true; "isSignal": true; }; "layoutLook": { "alias": "layoutLook"; "required": false; "isSignal": true; }; "stepperDirection": { "alias": "stepperDirection"; "required": false; "isSignal": true; }; "layoutConfig": { "alias": "layoutConfig"; "required": false; "isSignal": true; }; "guardNext": { "alias": "guardNext"; "required": false; "isSignal": true; }; }, { "contextChange": "contextChange"; "stepChange": "stepChange"; "finished": "finished"; "cancel": "cancel"; "navigationBlocked": "navigationBlocked"; }, never, never, true, never>;
401
760
  }
402
761
 
403
762
  interface AXPDynamicDialogConfig {
404
763
  title: string;
405
764
  message?: string;
406
- formDefinition: AXPDynamicFormDefinition;
765
+ /**
766
+ * Legacy: If provided, dialog renders only dynamic-form.
767
+ */
768
+ formDefinition?: AXPDynamicFormDefinition;
769
+ /**
770
+ * Preferred definition: dynamic form (no steps or single step) or a multi-step stepper definition.
771
+ */
772
+ definition?: AXPDynamicFormDefinition | AXPDynamicFormStepperDefinition;
773
+ /**
774
+ * Shared context passed to the rendered control
775
+ */
407
776
  context: any;
408
- layoutConfig?: AXPDynamicFormLayoutConfig;
777
+ /**
778
+ * Shared layout options applied to form/stepper unless overridden
779
+ */
780
+ layoutConfig?: AXPGridLayoutOptions;
781
+ layoutLook?: AXPDynamicFormLook;
782
+ mode?: AXPDynamicFormMode;
409
783
  size?: AXPopupSizeType;
784
+ closeButton?: boolean;
785
+ /**
786
+ * Optional stepper-only options. Ignored when rendering dynamic-form.
787
+ */
788
+ stepper?: {
789
+ guardNext?: (e: {
790
+ index: number;
791
+ id: string;
792
+ fullContext: unknown;
793
+ }) => Promise<boolean>;
794
+ stepperDirection?: AXOrientation;
795
+ };
796
+ /**
797
+ * Footer actions. In stepper mode, footer is replaced by Prev/Next/Confirm.
798
+ */
410
799
  actions?: {
411
800
  footer?: {
412
801
  prefix?: AXPActionMenuItem[];
@@ -418,44 +807,82 @@ interface AXPDynamicDialogResult {
418
807
  context: any;
419
808
  action?: string;
420
809
  }
810
+ interface AXPDialogRef {
811
+ /**
812
+ * Manually close the dialog (optional - dialog closes automatically after user interaction)
813
+ */
814
+ close(): void;
815
+ /**
816
+ * Get the form data from the dialog
817
+ */
818
+ context(): any;
819
+ /**
820
+ * Get the action that was clicked by the user
821
+ */
822
+ action(): string | undefined;
823
+ /**
824
+ * Set the loading state of the dialog
825
+ */
826
+ setLoading(loading: boolean): void;
827
+ }
421
828
 
422
829
  declare class AXPDynamicDialogComponent extends AXBasePageComponent {
423
830
  config: AXPDynamicDialogConfig;
424
831
  private readonly dynamicForm;
832
+ protected readonly stepper: _angular_core.Signal<AXPDynamicFormStepperComponent | undefined>;
425
833
  isSubmitting: _angular_core.WritableSignal<boolean>;
426
834
  private previousContext;
427
835
  private formData;
836
+ dialogResult: AXPDynamicDialogResult | null;
837
+ isSubmittingFromDialog: boolean;
838
+ data: any;
839
+ callBack: (dialogRef: AXPDialogRef) => void;
428
840
  /**
429
841
  * Form context for widget container
430
842
  */
431
843
  protected formContext: _angular_core.Signal<Record<string, any>>;
432
- protected defaultLayout: () => {
433
- positions: {
434
- default: {
435
- colSpan: number;
436
- };
437
- md: {
438
- colSpan: number;
439
- };
440
- lg: {
441
- colSpan: number;
442
- };
443
- xl: {
444
- colSpan: number;
445
- };
446
- xxl: {
447
- colSpan: number;
448
- };
449
- };
450
- };
844
+ /**
845
+ * Combined loading state from both signal and dialog
846
+ */
847
+ protected isFormLoading: _angular_core.Signal<boolean>;
848
+ protected defaultLayout: () => AXPGridLayoutOptions;
849
+ /**
850
+ * Determine rendering mode and effective definitions
851
+ */
852
+ protected readonly hasLegacyForm: _angular_core.Signal<boolean>;
853
+ protected readonly providedDefinition: _angular_core.Signal<_acorex_platform_layout_components.AXPDynamicFormDefinition | _acorex_platform_layout_components.AXPDynamicFormStepperDefinition | undefined>;
854
+ protected readonly providedMode: _angular_core.Signal<_acorex_platform_layout_components.AXPDynamicFormMode>;
855
+ protected readonly isStepperDefinition: _angular_core.Signal<boolean>;
856
+ protected readonly shouldRenderForm: _angular_core.Signal<boolean>;
857
+ protected readonly effectiveFormDefinition: _angular_core.Signal<any>;
858
+ protected readonly resolvedFormDefinition: _angular_core.Signal<any>;
859
+ protected readonly effectiveLayoutLook: _angular_core.Signal<_acorex_platform_layout_components.AXPDynamicFormLook>;
860
+ protected readonly effectiveLayoutConfig: _angular_core.Signal<AXPGridLayoutOptions>;
861
+ protected readonly stepperGuardNext: _angular_core.Signal<((e: {
862
+ index: number;
863
+ id: string;
864
+ fullContext: unknown;
865
+ }) => Promise<boolean>) | undefined>;
866
+ protected readonly stepperDirection: _angular_core.Signal<_acorex_cdk_common.AXOrientation>;
867
+ protected readonly stepperDefinition: _angular_core.Signal<any>;
868
+ stepperIsFirst: _angular_core.Signal<boolean>;
869
+ stepperIsLast: _angular_core.Signal<boolean>;
870
+ /**
871
+ * Effective form direction when rendering dynamic-form (single-step or legacy form).
872
+ * If a single-step definition is provided and that step specifies formDirection, use it.
873
+ */
874
+ protected readonly effectiveFormDirection: _angular_core.Signal<AXPDynamicFormDirection>;
451
875
  /**
452
876
  * Footer actions for dynamic button system
453
877
  */
454
878
  protected footerPrefixActions: _angular_core.Signal<AXPActionMenuItem[]>;
455
879
  protected footerSuffixActions: _angular_core.Signal<AXPActionMenuItem[]>;
880
+ protected visibleFooterPrefixActions: _angular_core.Signal<AXPActionMenuItem[]>;
881
+ protected visibleFooterSuffixActions: _angular_core.Signal<AXPActionMenuItem[]>;
456
882
  protected hasFooterActions: _angular_core.Signal<boolean>;
457
- protected hasVisibleFooterPrefixActions: _angular_core.Signal<boolean>;
458
- protected hasVisibleFooterSuffixActions: _angular_core.Signal<boolean>;
883
+ /** Stepper footer: choose a single confirm action from provided suffix actions (first visible). */
884
+ protected confirmAction: _angular_core.Signal<AXPActionMenuItem | undefined>;
885
+ protected confirmActionTitle: _angular_core.Signal<string>;
459
886
  ngOnInit(): void;
460
887
  protected handleContextInitiated(context: any): void;
461
888
  protected handleContextChanged(context: any): void;
@@ -471,6 +898,9 @@ declare class AXPDynamicDialogComponent extends AXBasePageComponent {
471
898
  * Check if form is valid
472
899
  */
473
900
  protected isFormValid(): Promise<boolean>;
901
+ /** Stepper navigation handlers */
902
+ protected goPrev(): void;
903
+ protected goNext(): void;
474
904
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDynamicDialogComponent, never>;
475
905
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDynamicDialogComponent, "axp-dynamic-dialog", never, { "config": { "alias": "config"; "required": true; }; }, {}, never, never, true, never>;
476
906
  }
@@ -480,19 +910,25 @@ declare class AXPDynamicDialogService {
480
910
  /**
481
911
  * Show a dynamic dialog with the given configuration
482
912
  * @param config Dialog configuration including fields, validation, and UI options
483
- * @returns Promise resolving to dialog result with form values and cancellation status
913
+ * @returns Promise resolving to dialog reference for controlling the dialog
484
914
  */
485
- showDialog(config: AXPDynamicDialogConfig): Promise<AXPDynamicDialogResult>;
915
+ showDialog(config: AXPDynamicDialogConfig): Promise<AXPDialogRef>;
486
916
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDynamicDialogService, never>;
487
917
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPDynamicDialogService>;
488
918
  }
489
919
 
490
920
  declare class AXPDynamicFormComponent implements OnInit {
491
921
  #private;
922
+ private evaluatorService;
923
+ private formBuilderService;
924
+ /**
925
+ * Tracks the latest scheduled evaluation to ensure last-write-wins for async evaluate
926
+ */
927
+ private evaluationRunId;
492
928
  /**
493
- * Form definition containing groups and fields
929
+ * Form definition containing groups and fields OR widget tree
494
930
  */
495
- formDefinition: _angular_core.InputSignal<AXPDynamicFormDefinition>;
931
+ data: _angular_core.InputSignal<AXPWidgetNode | AXPDynamicFormDefinition>;
496
932
  /**
497
933
  * Form context/model data
498
934
  */
@@ -502,13 +938,23 @@ declare class AXPDynamicFormComponent implements OnInit {
502
938
  */
503
939
  layoutLook: _angular_core.InputSignal<AXPDynamicFormLook>;
504
940
  /**
505
- * Form layout direction and flow (vertical, horizontal, grid)
941
+ * Default form mode. Can be overridden by section/group and field.
942
+ */
943
+ mode: _angular_core.InputSignal<AXPDynamicFormMode>;
944
+ /**
945
+ * Convert input data to widget tree
946
+ */
947
+ private convertToWidgetTree;
948
+ protected widgetTree: _angular_core.WritableSignal<AXPWidgetNode | null>;
949
+ /**
950
+ * Convert and evaluate data when inputs change
506
951
  */
507
- layoutDirection: _angular_core.InputSignal<AXPDynamicFormDirection>;
952
+ conversionEffect: _angular_core.EffectRef;
953
+ protected expressionEvaluator(expression: any, context: any): Promise<any>;
508
954
  /**
509
- * Custom layout configuration for form fields
955
+ * Apply layout look to all fieldset widgets in the widget tree
510
956
  */
511
- layoutConfig: _angular_core.InputSignal<AXPDynamicFormLayoutConfig>;
957
+ private applyLayoutLookToWidgetTree;
512
958
  /**
513
959
  * Emitted when form context changes
514
960
  */
@@ -528,23 +974,22 @@ declare class AXPDynamicFormComponent implements OnInit {
528
974
  */
529
975
  protected internalContext: _angular_core.WritableSignal<any>;
530
976
  /**
531
- * Computed layout configuration
532
- */
533
- protected computedLayout: _angular_core.Signal<AXPDynamicFormLayoutConfig>;
534
- /**
535
- * Host classes based on layout look and direction
977
+ * Host classes based on layout look and mode
536
978
  */
537
979
  protected hostClasses: _angular_core.Signal<string>;
538
980
  ngOnInit(): void;
539
981
  /**
540
982
  * Handle context change events from widget container
541
983
  */
542
- protected handleContextChanged(event: AXPLayoutContextChangeEvent): void;
543
- protected isRequired(param: AXPDynamicFormFieldDefinition): boolean;
984
+ protected handleContextChanged(event: AXPWidgetCoreContextChangeEvent): void;
544
985
  /**
545
986
  * Get the form component instance
546
987
  */
547
988
  getForm(): AXFormComponent | undefined;
989
+ /**
990
+ * Get the widget container component instance
991
+ */
992
+ getContainer(): AXPWidgetContainerComponent | undefined;
548
993
  /**
549
994
  * Get current form context
550
995
  */
@@ -553,12 +998,514 @@ declare class AXPDynamicFormComponent implements OnInit {
553
998
  * Update form context programmatically
554
999
  */
555
1000
  updateContext(context: any): void;
1001
+ /**
1002
+ * Get the current widget tree
1003
+ */
1004
+ getWidgetTree(): AXPWidgetNode | null;
556
1005
  /**
557
1006
  * Validate the form
558
1007
  */
559
1008
  validate(): Promise<boolean>;
560
1009
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDynamicFormComponent, never>;
561
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDynamicFormComponent, "axp-dynamic-form", never, { "formDefinition": { "alias": "formDefinition"; "required": true; "isSignal": true; }; "context": { "alias": "context"; "required": true; "isSignal": true; }; "layoutLook": { "alias": "layoutLook"; "required": false; "isSignal": true; }; "layoutDirection": { "alias": "layoutDirection"; "required": false; "isSignal": true; }; "layoutConfig": { "alias": "layoutConfig"; "required": false; "isSignal": true; }; }, { "contextChange": "contextChange"; "contextInitiated": "contextInitiated"; "validityChange": "validityChange"; }, never, never, true, never>;
1010
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDynamicFormComponent, "axp-dynamic-form", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; "context": { "alias": "context"; "required": true; "isSignal": true; }; "layoutLook": { "alias": "layoutLook"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, { "contextChange": "contextChange"; "contextInitiated": "contextInitiated"; "validityChange": "validityChange"; }, never, never, true, never>;
1011
+ }
1012
+
1013
+ interface TextBoxOptions {
1014
+ placeholder?: string;
1015
+ maxLength?: number;
1016
+ minLength?: number;
1017
+ mask?: string;
1018
+ disabled?: boolean;
1019
+ readonly?: boolean;
1020
+ validations?: AXPValidationRules;
1021
+ }
1022
+ interface LargeTextBoxOptions {
1023
+ placeholder?: string;
1024
+ maxLength?: number;
1025
+ minLength?: number;
1026
+ rows?: number;
1027
+ disabled?: boolean;
1028
+ readonly?: boolean;
1029
+ validations?: AXPValidationRules;
1030
+ }
1031
+ interface RichTextOptions {
1032
+ placeholder?: string;
1033
+ toolbar?: string[];
1034
+ height?: number;
1035
+ disabled?: boolean;
1036
+ readonly?: boolean;
1037
+ validations?: AXPValidationRules;
1038
+ }
1039
+ interface SelectBoxOptions<TItem extends Record<string, unknown> = Record<string, unknown>> {
1040
+ valueField: keyof TItem & string;
1041
+ textField: keyof TItem & string;
1042
+ dataSource: TItem[];
1043
+ multiple?: boolean;
1044
+ placeholder?: string;
1045
+ disabled?: boolean;
1046
+ readonly?: boolean;
1047
+ allowSearch?: boolean;
1048
+ validations?: AXPValidationRules;
1049
+ }
1050
+ interface LookupBoxOptions {
1051
+ entity: string;
1052
+ multiple?: boolean;
1053
+ expose?: Array<{
1054
+ source: string;
1055
+ target: string;
1056
+ }>;
1057
+ placeholder?: string;
1058
+ textField?: string;
1059
+ valueField?: string;
1060
+ look?: string;
1061
+ columns?: string[];
1062
+ allowClear?: boolean;
1063
+ disabled?: boolean;
1064
+ readonly?: boolean;
1065
+ validations?: AXPValidationRules;
1066
+ }
1067
+ interface NumberBoxOptions {
1068
+ minValue?: number;
1069
+ maxValue?: number;
1070
+ step?: number;
1071
+ format?: string;
1072
+ placeholder?: string;
1073
+ disabled?: boolean;
1074
+ readonly?: boolean;
1075
+ validations?: AXPValidationRules;
1076
+ }
1077
+ interface DateTimeBoxOptions {
1078
+ format?: string;
1079
+ min?: Date;
1080
+ max?: Date;
1081
+ showTime?: boolean;
1082
+ placeholder?: string;
1083
+ disabled?: boolean;
1084
+ readonly?: boolean;
1085
+ validations?: AXPValidationRules;
1086
+ }
1087
+ interface ToggleSwitchOptions {
1088
+ onText?: string;
1089
+ offText?: string;
1090
+ validations?: AXPValidationRules;
1091
+ }
1092
+ interface PasswordBoxOptions {
1093
+ placeholder?: string;
1094
+ maxLength?: number;
1095
+ minLength?: number;
1096
+ showToggle?: boolean;
1097
+ validations?: AXPValidationRules;
1098
+ }
1099
+ interface SelectionListOptions<TItem extends Record<string, unknown> = Record<string, unknown>> {
1100
+ valueField: keyof TItem & string;
1101
+ textField: keyof TItem & string;
1102
+ dataSource: TItem[];
1103
+ multiple?: boolean;
1104
+ placeholder?: string;
1105
+ disabled?: boolean;
1106
+ readonly?: boolean;
1107
+ validations?: AXPValidationRules;
1108
+ }
1109
+ interface ColorBoxOptions {
1110
+ defaultColor?: string;
1111
+ showAlpha?: boolean;
1112
+ disabled?: boolean;
1113
+ readonly?: boolean;
1114
+ validations?: AXPValidationRules;
1115
+ }
1116
+ interface IFieldOptions {
1117
+ hidden?: string | boolean;
1118
+ readonly?: string | boolean;
1119
+ disabled?: string | boolean;
1120
+ defaultValue?: any;
1121
+ }
1122
+ interface IFieldBuilder {
1123
+ title(title: string): IFieldBuilder;
1124
+ description(description: string): IFieldBuilder;
1125
+ mode(mode: AXPDynamicFormMode): IFieldBuilder;
1126
+ options(values: IFieldOptions): IFieldBuilder;
1127
+ layout(layout: AXPGridLayoutOptions | number): IFieldBuilder;
1128
+ textBox(options?: TextBoxOptions): IFieldBuilder;
1129
+ largeTextBox(options?: LargeTextBoxOptions): IFieldBuilder;
1130
+ richText(options?: RichTextOptions): IFieldBuilder;
1131
+ passwordBox(options?: PasswordBoxOptions): IFieldBuilder;
1132
+ selectBox(options: SelectBoxOptions): IFieldBuilder;
1133
+ lookupBox(options: LookupBoxOptions): IFieldBuilder;
1134
+ selectionList(options: SelectionListOptions): IFieldBuilder;
1135
+ numberBox(options?: NumberBoxOptions): IFieldBuilder;
1136
+ dateTimeBox(options?: DateTimeBoxOptions): IFieldBuilder;
1137
+ toggleSwitch(options?: ToggleSwitchOptions): IFieldBuilder;
1138
+ colorBox(options?: ColorBoxOptions): IFieldBuilder;
1139
+ widget(type: string, options?: unknown): IFieldBuilder;
1140
+ }
1141
+ interface IGroupBuilder {
1142
+ title(title: string): IGroupBuilder;
1143
+ description(description: string): IGroupBuilder;
1144
+ mode(mode: AXPDynamicFormMode): IGroupBuilder;
1145
+ field(path: string, delegate?: (field: IFieldBuilder) => void): IGroupBuilder;
1146
+ group(name: string, delegate?: (group: IGroupBuilder) => void): IGroupBuilder;
1147
+ }
1148
+ interface IStepBuilder {
1149
+ title(title: string): IStepBuilder;
1150
+ description(description: string): IStepBuilder;
1151
+ icon(icon: string): IStepBuilder;
1152
+ group(name: string, delegate?: (group: IGroupBuilder) => void): IStepBuilder;
1153
+ }
1154
+ interface IFormBuilder {
1155
+ group(name: string, delegate?: (group: IGroupBuilder) => void): IFormBuilder;
1156
+ layout(config: Partial<AXPGridLayoutOptions>): IFormBuilder;
1157
+ look(look: AXPDynamicFormLook): IFormBuilder;
1158
+ mode(mode: AXPDynamicFormMode): IFormBuilder;
1159
+ build(): AXPDynamicFormDefinition;
1160
+ export(): AXPWidgetNode;
1161
+ import(widgetTree: AXPWidgetNode): IFormBuilder;
1162
+ }
1163
+ interface IActionBuilder {
1164
+ cancel(text?: string): IActionBuilder;
1165
+ submit(text?: string): IActionBuilder;
1166
+ custom(action: AXPActionMenuItem): IActionBuilder;
1167
+ }
1168
+ interface IDialogBuilder extends IFormBuilder {
1169
+ group(name: string, delegate?: (group: IGroupBuilder) => void): IDialogBuilder;
1170
+ layout(config: Partial<AXPGridLayoutOptions>): IDialogBuilder;
1171
+ look(look: AXPDynamicFormLook): IDialogBuilder;
1172
+ closeButton(closeButton: boolean): IDialogBuilder;
1173
+ step(id: string, delegate?: (step: IStepBuilder) => void): IDialogBuilder;
1174
+ stepperDirection(direction: AXOrientation): IDialogBuilder;
1175
+ guardNext(guard: (e: {
1176
+ index: number;
1177
+ id: string;
1178
+ fullContext: unknown;
1179
+ }) => Promise<boolean>): IDialogBuilder;
1180
+ title(title: string): IDialogBuilder;
1181
+ message(message?: string): IDialogBuilder;
1182
+ size(size: AXPopupSizeType): IDialogBuilder;
1183
+ context(context: AXPContextData): IDialogBuilder;
1184
+ actions(delegate?: (actions: IActionBuilder) => void): IDialogBuilder;
1185
+ show(): Promise<AXPDialogRef>;
1186
+ }
1187
+ interface FormBuilderState {
1188
+ groups: AXPDynamicFormGroupDefinition[];
1189
+ layoutConfig: AXPGridLayoutOptions;
1190
+ look: AXPDynamicFormLook;
1191
+ mode?: AXPDynamicFormMode;
1192
+ }
1193
+ interface DialogBuilderState extends FormBuilderState {
1194
+ title?: string;
1195
+ message?: string;
1196
+ size?: AXPopupSizeType;
1197
+ context?: AXPContextData;
1198
+ steps: StepBuilderState[];
1199
+ stepperDirection?: AXOrientation;
1200
+ closeButton?: boolean;
1201
+ guardNext?: (e: {
1202
+ index: number;
1203
+ id: string;
1204
+ fullContext: unknown;
1205
+ }) => Promise<boolean>;
1206
+ actions?: {
1207
+ footer?: {
1208
+ prefix?: AXPActionMenuItem[];
1209
+ suffix?: AXPActionMenuItem[];
1210
+ };
1211
+ };
1212
+ }
1213
+ interface FieldBuilderState {
1214
+ path: string;
1215
+ title?: string;
1216
+ description?: string;
1217
+ defaultValue?: any;
1218
+ hidden?: string | boolean;
1219
+ readonly?: string | boolean;
1220
+ disabled?: string | boolean;
1221
+ widget?: AXPWidgetNode;
1222
+ layout?: AXPGridLayoutOptions;
1223
+ mode?: AXPDynamicFormMode;
1224
+ }
1225
+ interface GroupBuilderState {
1226
+ name: string;
1227
+ title?: string;
1228
+ description?: string;
1229
+ parameters: AXPDynamicFormFieldDefinition[];
1230
+ mode?: AXPDynamicFormMode;
1231
+ }
1232
+ interface StepBuilderState {
1233
+ id: string;
1234
+ title?: string;
1235
+ description?: string;
1236
+ icon?: string;
1237
+ groups: AXPDynamicFormGroupDefinition[];
1238
+ }
1239
+
1240
+ declare class AXPDynamicFormBuilderService {
1241
+ private readonly dialogService;
1242
+ private widgetTreeCache;
1243
+ private formDefinitionCache;
1244
+ /**
1245
+ * Create a new form builder
1246
+ */
1247
+ form(): IFormBuilder;
1248
+ /**
1249
+ * Export form definition to AXPWidgetNode
1250
+ */
1251
+ exportFormDefinition(formDefinition: AXPDynamicFormDefinition): AXPWidgetNode;
1252
+ /**
1253
+ * Import form definition from AXPWidgetNode
1254
+ */
1255
+ importFormDefinition(widgetTree: AXPWidgetNode): AXPDynamicFormDefinition;
1256
+ /**
1257
+ * Export widget tree to AXPWidgetNode (deep clone)
1258
+ */
1259
+ exportWidgetTree(widgetTree: AXPWidgetNode): AXPWidgetNode;
1260
+ /**
1261
+ * Import widget tree from AXPWidgetNode (with validation)
1262
+ */
1263
+ importWidgetTree(widgetTree: AXPWidgetNode): AXPWidgetNode;
1264
+ /**
1265
+ * Create a new dialog builder
1266
+ */
1267
+ dialog(): IDialogBuilder;
1268
+ /**
1269
+ * Convert AXPDynamicFormDefinition to AXPWidgetNode tree structure
1270
+ * Groups become Grid Layouts with Grid Items
1271
+ * Fields become Form Field widgets with Editor widgets as children
1272
+ */
1273
+ serializeToWidgetTree(formDefinition: AXPDynamicFormDefinition): AXPWidgetNode;
1274
+ /**
1275
+ * Convert AXPWidgetNode tree back to AXPDynamicFormDefinition
1276
+ * Parses Grid Layouts back to Groups
1277
+ * Parses Form Field widgets back to Fields
1278
+ */
1279
+ deserializeFromWidgetTree(widgetTree: AXPWidgetNode): AXPDynamicFormDefinition;
1280
+ /**
1281
+ * Validate that a widget tree represents a valid dynamic form structure
1282
+ */
1283
+ validateFormWidgetTree(widgetTree: AXPWidgetNode): boolean;
1284
+ /**
1285
+ * Convert a single group to Fieldset widget structure
1286
+ */
1287
+ private createGroupAsFieldsetWidget;
1288
+ /**
1289
+ * Convert fields to Form Field widgets
1290
+ */
1291
+ private createFieldWidgets;
1292
+ /**
1293
+ * Convert a single field to Form Field widget with editor as child
1294
+ */
1295
+ private createFormFieldWidget;
1296
+ /**
1297
+ * Extract group information from Grid Layout widget
1298
+ */
1299
+ private extractGroupFromFieldset;
1300
+ /**
1301
+ * Extract field information from Form Field widget
1302
+ */
1303
+ private extractFieldFromFormWidget;
1304
+ /**
1305
+ * Create cache key for form definition
1306
+ */
1307
+ private createFormDefinitionCacheKey;
1308
+ /**
1309
+ * Create cache key for widget tree
1310
+ */
1311
+ private createWidgetTreeCacheKey;
1312
+ /**
1313
+ * Clear all caches
1314
+ */
1315
+ clearCaches(): void;
1316
+ /**
1317
+ * Get cache statistics
1318
+ */
1319
+ getCacheStats(): {
1320
+ widgetTreeCacheSize: number;
1321
+ formDefinitionCacheSize: number;
1322
+ };
1323
+ /**
1324
+ * Create a simple hash from a string
1325
+ */
1326
+ private createSimpleHash;
1327
+ /**
1328
+ * Validate widget tree structure recursively
1329
+ */
1330
+ private validateWidgetTreeStructure;
1331
+ /**
1332
+ * Deep clone AXPWidgetNode
1333
+ */
1334
+ private deepCloneWidgetNode;
1335
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDynamicFormBuilderService, never>;
1336
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPDynamicFormBuilderService>;
1337
+ }
1338
+
1339
+ interface AXPDynamicFormDesignerField {
1340
+ id: string;
1341
+ name: string;
1342
+ title: string;
1343
+ description?: string;
1344
+ widget: AXPWidgetNode;
1345
+ mode?: 'view' | 'edit';
1346
+ layout?: AXPGridLayoutOptions;
1347
+ validations?: Array<{
1348
+ rule: string;
1349
+ options?: Record<string, any>;
1350
+ }>;
1351
+ }
1352
+ interface AXPDynamicFormDesignerGroup {
1353
+ id: string;
1354
+ name: string;
1355
+ title?: string;
1356
+ description?: string;
1357
+ fields: AXPDynamicFormDesignerField[];
1358
+ mode?: 'view' | 'edit';
1359
+ layout?: AXPGridLayoutOptions;
1360
+ }
1361
+ interface AXPDynamicFormDesignerState {
1362
+ groups: AXPDynamicFormDesignerGroup[];
1363
+ selectedFieldId?: string;
1364
+ selectedGroupId?: string;
1365
+ mode: 'designer' | 'preview';
1366
+ }
1367
+ /**
1368
+ * Convert designer field to form field definition
1369
+ */
1370
+ declare function convertDesignerFieldToFormField(field: AXPDynamicFormDesignerField): AXPDynamicFormFieldDefinition;
1371
+ /**
1372
+ * Convert designer group to form group definition
1373
+ */
1374
+ declare function convertDesignerGroupToFormGroup(group: AXPDynamicFormDesignerGroup): AXPDynamicFormGroupDefinition;
1375
+ /**
1376
+ * Convert designer state to form definition
1377
+ */
1378
+ declare function convertDesignerStateToFormDefinition(state: AXPDynamicFormDesignerState): AXPDynamicFormDefinition;
1379
+ interface AXPFormElementWidget {
1380
+ name: string;
1381
+ title: string;
1382
+ icon?: string;
1383
+ description?: string;
1384
+ type: string;
1385
+ properties?: any[];
1386
+ }
1387
+
1388
+ declare class AXPDynamicFormDesignerComponent {
1389
+ formDefinition: _angular_core.ModelSignal<AXPDynamicFormDefinition>;
1390
+ readonly: _angular_core.InputSignal<boolean>;
1391
+ private isInternalUpdate;
1392
+ private readonly widgetRegistry;
1393
+ private readonly formBuilderService;
1394
+ private readonly widgetPropertyViewerService;
1395
+ private readonly dialogService;
1396
+ protected selectedFieldId: _angular_core.WritableSignal<string | null>;
1397
+ private designerState;
1398
+ protected availableWidgets: _angular_core.Signal<AXPFormElementWidget[]>;
1399
+ protected widgetOptions: _angular_core.Signal<{
1400
+ value: string;
1401
+ text: string;
1402
+ }[]>;
1403
+ protected getAllFields: _angular_core.Signal<AXPDynamicFormDesignerField[]>;
1404
+ protected designerGroups: _angular_core.Signal<AXPDynamicFormDesignerGroup[]>;
1405
+ /**
1406
+ * Effect to log form definition changes
1407
+ */
1408
+ private logFormDefinitionChanges;
1409
+ /**
1410
+ * Effect to sync form definition model to designer state
1411
+ */
1412
+ private syncModelToDesigner;
1413
+ /**
1414
+ * Effect to sync designer state changes back to model
1415
+ */
1416
+ private syncDesignerToModel;
1417
+ /**
1418
+ * Get the current form definition (converted from designer state)
1419
+ */
1420
+ getFormDefinition(): AXPDynamicFormDefinition;
1421
+ /**
1422
+ * Set the form definition (converted to designer state)
1423
+ */
1424
+ setFormDefinition(definition: AXPDynamicFormDefinition): void;
1425
+ /**
1426
+ * Add a new field to the form
1427
+ * @param field The field to add
1428
+ */
1429
+ addField(field: AXPDynamicFormDesignerField): void;
1430
+ /**
1431
+ * Update an existing field
1432
+ * @param fieldId The ID of the field to update
1433
+ * @param updates The updates to apply
1434
+ */
1435
+ updateField(fieldId: string, updates: Partial<AXPDynamicFormDesignerField>): void;
1436
+ /**
1437
+ * Remove a field from the form
1438
+ * @param fieldId The ID of the field to remove
1439
+ */
1440
+ removeField(fieldId: string): void;
1441
+ /**
1442
+ * Get all available widget types
1443
+ */
1444
+ getAvailableWidgets(): AXPFormElementWidget[];
1445
+ /**
1446
+ * Add a new group to the form
1447
+ * @param group The group to add
1448
+ */
1449
+ addGroup(group: AXPDynamicFormDesignerGroup): void;
1450
+ /**
1451
+ * Remove a group from the form
1452
+ * @param groupName The name of the group to remove
1453
+ */
1454
+ removeGroup(groupName: string): void;
1455
+ /**
1456
+ * Reorder groups in the form
1457
+ * @param fromIndex Source index
1458
+ * @param toIndex Target index
1459
+ */
1460
+ reorderGroups(fromIndex: number, toIndex: number): void;
1461
+ /**
1462
+ * Update an existing group
1463
+ * @param groupName The name of the group to update
1464
+ * @param updates The updates to apply
1465
+ */
1466
+ updateGroup(groupName: string, updates: Partial<AXPDynamicFormDesignerGroup>): void;
1467
+ /**
1468
+ * Move a field to a different group
1469
+ * @param fieldName The name/path of the field to move
1470
+ * @param targetGroupName The name of the target group
1471
+ */
1472
+ moveFieldToGroup(fieldName: string, targetGroupName: string): void;
1473
+ protected handleAddGroupClick(): Promise<void>;
1474
+ protected handleAddFieldToGroup(group: AXPDynamicFormDesignerGroup): Promise<void>;
1475
+ protected handleFieldEdit(field: AXPDynamicFormDesignerField): Promise<void>;
1476
+ protected handleFieldRemove(field: AXPDynamicFormDesignerField): void;
1477
+ protected handleGroupEdit(group: AXPDynamicFormDesignerGroup): Promise<void>;
1478
+ protected handleGroupLayoutEdit(group: AXPDynamicFormDesignerGroup): Promise<void>;
1479
+ protected handleGroupRemove(group: AXPDynamicFormDesignerGroup): void;
1480
+ /**
1481
+ * Handle field layout editing
1482
+ */
1483
+ protected handleFieldLayoutEdit(field: AXPDynamicFormDesignerField, group: AXPDynamicFormDesignerGroup): Promise<void>;
1484
+ protected handleGroupDrop(event: CdkDragDrop<AXPDynamicFormDesignerGroup[]>): void;
1485
+ protected handleFieldDrop(event: CdkDragDrop<AXPDynamicFormDesignerField[]>, targetGroupName?: string): void;
1486
+ protected handlePreviewClick(): Promise<void>;
1487
+ protected deriveKey(input: string): string;
1488
+ protected generateId(): string;
1489
+ protected getWidgetIcon(widgetName: string): string;
1490
+ protected getWidgetTitle(widgetName: string): string;
1491
+ protected getWidgetNode(field: AXPDynamicFormDesignerField): AXPWidgetNode;
1492
+ protected deriveGroupKey(input: string): string;
1493
+ protected getGroupOptions(): Array<{
1494
+ value: string;
1495
+ text: string;
1496
+ }>;
1497
+ protected addFieldToGroup(field: AXPDynamicFormDesignerField, groupName: string): void;
1498
+ protected getAllGroupDropLists(): string[];
1499
+ /**
1500
+ * Get the grid column count for a group (always 12 columns)
1501
+ */
1502
+ protected getGroupColumnCount(): number;
1503
+ /**
1504
+ * Get default field grid layout based on group configuration
1505
+ */
1506
+ protected getFieldGridLayout(group: AXPDynamicFormDesignerGroup, fieldIndex?: number): AXPGridLayoutOptions;
1507
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDynamicFormDesignerComponent, never>;
1508
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDynamicFormDesignerComponent, "axp-dynamic-form-designer", never, { "formDefinition": { "alias": "formDefinition"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; }, { "formDefinition": "formDefinitionChange"; }, never, never, true, never>;
562
1509
  }
563
1510
 
564
1511
  /**
@@ -599,8 +1546,8 @@ declare const AXP_EXTRA_PROPERTY_TYPES: InjectionToken<AXPExtraPropertyType[]>;
599
1546
 
600
1547
  declare class AXPExtraPropertiesComponent {
601
1548
  items: _angular_core.InputSignal<AXPExtraPropertyItem[]>;
602
- mode: _angular_core.InputSignal<"edit" | "view">;
603
- protected onContextChanged(event: AXPLayoutContextChangeEvent): void;
1549
+ mode: _angular_core.InputSignal<"view" | "edit">;
1550
+ protected onContextChanged(event: AXPWidgetCoreContextChangeEvent): void;
604
1551
  itemsChange: _angular_core.OutputEmitterRef<AXPExtraPropertyItem[]>;
605
1552
  private readonly providedTypes;
606
1553
  private readonly translationService;
@@ -640,7 +1587,7 @@ declare class AXPExtraPropertiesComponent {
640
1587
 
641
1588
  declare class AXPExtraPropertiesSchemaComponent {
642
1589
  schema: _angular_core.InputSignal<AXPExtraPropertySchemaItem[]>;
643
- mode: _angular_core.InputSignal<"edit" | "view">;
1590
+ mode: _angular_core.InputSignal<"view" | "edit">;
644
1591
  schemaChange: _angular_core.OutputEmitterRef<AXPExtraPropertySchemaItem[]>;
645
1592
  private readonly providedTypes;
646
1593
  private readonly translationService;
@@ -671,13 +1618,13 @@ declare class AXPExtraPropertiesSchemaComponent {
671
1618
  declare class AXPExtraPropertiesValuesComponent {
672
1619
  schema: _angular_core.InputSignal<AXPExtraPropertySchemaItem[]>;
673
1620
  values: _angular_core.InputSignal<Record<string, any>>;
674
- mode: _angular_core.InputSignal<"edit" | "view">;
1621
+ mode: _angular_core.InputSignal<"view" | "edit">;
675
1622
  valuesChange: _angular_core.OutputEmitterRef<Record<string, any>>;
676
1623
  isRequired: (item: AXPExtraPropertySchemaItem) => any;
677
1624
  protected internalContext: _angular_core.WritableSignal<Record<string, any>>;
678
1625
  private nodeCache;
679
1626
  private lastTypeByKey;
680
- protected onContextChanged(event: AXPLayoutContextChangeEvent): void;
1627
+ protected onContextChanged(event: AXPWidgetCoreContextChangeEvent): void;
681
1628
  private readonly syncContextFromInputs;
682
1629
  private readonly clearOnSchemaTypeChange;
683
1630
  protected getNode(item: AXPExtraPropertySchemaItem): AXPWidgetNode;
@@ -712,7 +1659,7 @@ declare class AXPQueryFiltersComponent {
712
1659
  ngOnInit(): void;
713
1660
  handleSelectField(field: AXPFilterDefinition): void;
714
1661
  handleFieldKeyDown(e: KeyboardEvent, field: AXPFilterDefinition): void;
715
- onContextChanged(e: AXPLayoutContextChangeEvent): void;
1662
+ onContextChanged(e: AXPWidgetCoreContextChangeEvent): void;
716
1663
  handleApplyFilter(): void;
717
1664
  handleButtonKeyDown(e: Event): void;
718
1665
  handleKeyDown(e: AXHtmlEvent<KeyboardEvent>): void;
@@ -727,6 +1674,116 @@ declare class AXPQueryFiltersComponent {
727
1674
  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>;
728
1675
  }
729
1676
 
1677
+ declare class AXPImageEditorPopupComponent extends AXBasePageComponent {
1678
+ private readonly fileStorage;
1679
+ image: _angular_core.InputSignal<Blob>;
1680
+ showHistory: _angular_core.InputSignal<boolean>;
1681
+ look: _angular_core.InputSignal<"solid" | "outline" | "blank">;
1682
+ private container;
1683
+ private blobUrl;
1684
+ protected url: _angular_core.WritableSignal<string | null>;
1685
+ protected context: _angular_core.WritableSignal<{
1686
+ image: Blob | null;
1687
+ }>;
1688
+ ngOnInit(): Promise<void>;
1689
+ handleValueChanged(e: any): void;
1690
+ handleSave(): void;
1691
+ handleCancel(): void;
1692
+ ngOnDestroy(): void;
1693
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPImageEditorPopupComponent, never>;
1694
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPImageEditorPopupComponent, "axp-image-editor-popup", never, { "image": { "alias": "image"; "required": true; "isSignal": true; }; "showHistory": { "alias": "showHistory"; "required": false; "isSignal": true; }; "look": { "alias": "look"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1695
+ }
1696
+
1697
+ interface AXPImageEditorOpenOptions {
1698
+ title?: string;
1699
+ image: Blob;
1700
+ showHistory?: boolean;
1701
+ look?: 'solid' | 'outline' | 'blank';
1702
+ }
1703
+ declare class AXPImageEditorService {
1704
+ private readonly popupService;
1705
+ private readonly translate;
1706
+ open(options?: AXPImageEditorOpenOptions): Promise<Blob | null>;
1707
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPImageEditorService, never>;
1708
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPImageEditorService>;
1709
+ }
1710
+
1711
+ interface AXPWidgetPropertyTab {
1712
+ name: string;
1713
+ title: string;
1714
+ groups: {
1715
+ name: string;
1716
+ title: string;
1717
+ isCollapsed: boolean;
1718
+ props: AXPWidgetProperty[];
1719
+ }[];
1720
+ }
1721
+ interface AXPWidgetPropertiesChangedEvent {
1722
+ values: any;
1723
+ mode: 'init' | 'update';
1724
+ }
1725
+ declare class AXPWidgetPropertyViewerComponent {
1726
+ widget: _angular_core.InputSignal<AXPWidgetNode>;
1727
+ mode: _angular_core.InputSignal<"simple" | "advanced">;
1728
+ private widgetRegistryService;
1729
+ protected currentTabIndex: WritableSignal<number>;
1730
+ protected config: WritableSignal<AXPWidgetConfig<any> | null>;
1731
+ protected allPoperties: AXPWidgetProperty[];
1732
+ protected tabs: WritableSignal<AXPWidgetPropertyTab[]>;
1733
+ protected groups: _angular_core.Signal<{
1734
+ name: string;
1735
+ title: string;
1736
+ isCollapsed: boolean;
1737
+ props: AXPWidgetProperty[];
1738
+ }[]>;
1739
+ protected groupCollapsedStates: Map<string, boolean>;
1740
+ onChanged: EventEmitter<AXPWidgetPropertiesChangedEvent>;
1741
+ protected context: WritableSignal<any>;
1742
+ protected initialContext: any;
1743
+ constructor();
1744
+ update(values: any): void;
1745
+ private fillTabs;
1746
+ protected handleContextChange(e: AXPWidgetCoreContextChangeEvent): void;
1747
+ protected handleTabChange(event: AXTabStripChangedEvent): void;
1748
+ protected handleCollapsedChange(group: string, collapsed: boolean): void;
1749
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetPropertyViewerComponent, never>;
1750
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPWidgetPropertyViewerComponent, "axp-widget-property-viewer", never, { "widget": { "alias": "widget"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, { "onChanged": "onChanged"; }, never, never, true, never>;
1751
+ }
1752
+
1753
+ declare class AXPWidgetPropertyViewerPopupComponent extends AXBasePageComponent {
1754
+ widget: _angular_core.InputSignal<AXPWidgetNode>;
1755
+ mode: _angular_core.InputSignal<"simple" | "advanced">;
1756
+ protected currentValues: _angular_core.WritableSignal<any>;
1757
+ protected handlePropertyChanged(event: {
1758
+ values: any;
1759
+ mode: 'init' | 'update';
1760
+ }): void;
1761
+ protected handleCloseClick(): void;
1762
+ protected handleApplyClick(): void;
1763
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetPropertyViewerPopupComponent, never>;
1764
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPWidgetPropertyViewerPopupComponent, "axp-widget-property-viewer-popup", never, { "widget": { "alias": "widget"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1765
+ }
1766
+
1767
+ interface AXPWidgetPropertyViewerConfig {
1768
+ title: string;
1769
+ widget: AXPWidgetNode;
1770
+ mode?: 'simple' | 'advanced';
1771
+ size?: 'sm' | 'md' | 'lg' | 'full';
1772
+ }
1773
+ interface AXPWidgetPropertyViewerResult {
1774
+ values: any;
1775
+ mode: 'init' | 'update';
1776
+ }
1777
+ declare class AXPWidgetPropertyViewerService {
1778
+ private readonly popupService;
1779
+ /**
1780
+ * Open widget property viewer popup
1781
+ */
1782
+ open(config: AXPWidgetPropertyViewerConfig): Promise<AXPWidgetPropertyViewerResult | null>;
1783
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetPropertyViewerService, never>;
1784
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPWidgetPropertyViewerService>;
1785
+ }
1786
+
730
1787
  declare class AXPQuerySortsComponent {
731
1788
  sortDefinitions: _angular_core.ModelSignal<AXPSortDefinition[]>;
732
1789
  sortQueries: _angular_core.WritableSignal<AXPSortQuery[]>;
@@ -740,6 +1797,17 @@ declare class AXPQuerySortsComponent {
740
1797
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPQuerySortsComponent, "axp-query-sorts", never, { "sortDefinitions": { "alias": "sortDefinitions"; "required": false; "isSignal": true; }; "initialSortQueries": { "alias": "initialSortQueries"; "required": false; "isSignal": true; }; }, { "sortDefinitions": "sortDefinitionsChange"; "sortQueriesChange": "sortQueriesChange"; }, never, never, true, never>;
741
1798
  }
742
1799
 
1800
+ type StateMode = 'empty' | 'error' | 'loading' | 'warning' | 'info' | 'success';
1801
+ declare class AXPStateMessageComponent {
1802
+ mode: _angular_core.InputSignal<StateMode>;
1803
+ icon: _angular_core.InputSignal<string>;
1804
+ title: _angular_core.InputSignal<string>;
1805
+ description: _angular_core.InputSignal<string>;
1806
+ variant: _angular_core.InputSignal<"default" | "compact" | "minimal">;
1807
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPStateMessageComponent, never>;
1808
+ 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>;
1809
+ }
1810
+
743
1811
  interface AXPTemplateViewerConfig {
744
1812
  template: AXPWidgetNode | string;
745
1813
  title?: string;
@@ -765,7 +1833,7 @@ declare class AXPTemplateViewerComponent extends AXBasePageComponent {
765
1833
  protected readonly currentPage: _angular_core.Signal<AXPWidgetNode>;
766
1834
  protected ngOnInit(): Promise<void>;
767
1835
  private loadTemplate;
768
- protected handleContextChanged(e: AXPLayoutContextChangeEvent): void;
1836
+ protected handleContextChanged(e: AXPWidgetCoreContextChangeEvent): void;
769
1837
  protected handleSubmit(form: AXFormComponent): Promise<void>;
770
1838
  protected handleCancel(): void;
771
1839
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTemplateViewerComponent, never>;
@@ -956,47 +2024,5 @@ declare class AXPWidgetItemComponent {
956
2024
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPWidgetItemComponent, "axp-widget-item", never, { "widget": { "alias": "widget"; "required": true; "isSignal": true; }; "isSelected": { "alias": "isSelected"; "required": false; "isSignal": true; }; "showPinButton": { "alias": "showPinButton"; "required": false; "isSignal": true; }; "customClasses": { "alias": "customClasses"; "required": false; "isSignal": true; }; }, { "onWidgetClick": "onWidgetClick"; "onPinClick": "onPinClick"; }, never, never, true, never>;
957
2025
  }
958
2026
 
959
- interface AXPWidgetPropertyTab {
960
- name: string;
961
- title: string;
962
- groups: {
963
- name: string;
964
- title: string;
965
- isCollapsed: boolean;
966
- props: AXPWidgetProperty[];
967
- }[];
968
- }
969
- interface AXPWidgetPropertiesChangedEvent {
970
- values: any;
971
- mode: 'init' | 'update';
972
- }
973
- declare class AXPWidgetPropertyViewerComponent {
974
- widget: _angular_core.InputSignal<AXPWidgetNode>;
975
- mode: _angular_core.InputSignal<"simple" | "advanced">;
976
- private widgetRegistryService;
977
- protected currentTabIndex: WritableSignal<number>;
978
- protected config: WritableSignal<AXPWidgetConfig<any> | null>;
979
- protected allPoperties: AXPWidgetProperty[];
980
- protected tabs: WritableSignal<AXPWidgetPropertyTab[]>;
981
- protected groups: _angular_core.Signal<{
982
- name: string;
983
- title: string;
984
- isCollapsed: boolean;
985
- props: AXPWidgetProperty[];
986
- }[]>;
987
- protected groupCollapsedStates: Map<string, boolean>;
988
- onChanged: EventEmitter<AXPWidgetPropertiesChangedEvent>;
989
- protected context: WritableSignal<any>;
990
- protected initialContext: any;
991
- constructor();
992
- update(values: any): void;
993
- private fillTabs;
994
- protected handleContextChange(e: AXPLayoutContextChangeEvent): void;
995
- protected handleTabChange(event: AXTabStripChangedEvent): void;
996
- protected handleCollapsedChange(group: string, collapsed: boolean): void;
997
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetPropertyViewerComponent, never>;
998
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPWidgetPropertyViewerComponent, "axp-widget-property-viewer", never, { "widget": { "alias": "widget"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, { "onChanged": "onChanged"; }, never, never, true, never>;
999
- }
1000
-
1001
- export { AXPActivityLogComponent, AXPCompareViewComponent, AXPComponentSlot, AXPComponentSlotDirective, AXPComponentSlotModule, AXPComponentSlotRegistryService, AXPDynamicDialogComponent, AXPDynamicDialogService, AXPDynamicFormComponent, AXPExtraPropertiesComponent, AXPExtraPropertiesSchemaComponent, AXPExtraPropertiesValuesComponent, AXPMenuBadgeHelper, AXPQueryColumnsComponent, AXPQueryFiltersComponent, AXPQuerySortsComponent, AXPQueryViewsComponent, AXPTaskBadgeDirective, AXPTaskBadgeProvider, AXPTaskBadgeService, AXPTemplateViewerComponent, AXPTemplateViewerService, AXPThemeLayoutActionsComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutContainerComponent, AXPThemeLayoutEndSideComponent, AXPThemeLayoutFooterComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutListComponent, AXPThemeLayoutListItemComponent, AXPThemeLayoutListItemsGroupComponent, AXPThemeLayoutPageHeaderComponent, AXPThemeLayoutPagePrimaryActionsComponent, AXPThemeLayoutPageSecondaryActionsComponent, AXPThemeLayoutSectionComponent, AXPThemeLayoutStartSideComponent, AXPThemeLayoutToolbarComponent, AXPUserAvatarComponent, AXPUserAvatarService, AXPWidgetItemComponent, AXPWidgetPropertyViewerComponent, AXP_EXTRA_PROPERTY_TYPES, AXP_TASK_BADGE_PROVIDERS, AXP_USER_AVATAR_PROVIDER };
1002
- export type { AXPCompareViewField, AXPCompareViewInputs, AXPCompareViewMode, AXPCompareViewObject, AXPComponentSlotConfig, AXPComponentSlotModuleConfigs, AXPDynamicDialogConfig, AXPDynamicDialogResult, AXPDynamicFormDefinition, AXPDynamicFormDirection, AXPDynamicFormFieldDefinition, AXPDynamicFormGroupDefinition, AXPDynamicFormLayoutConfig, AXPDynamicFormLook, AXPExtraPropertyItem, AXPExtraPropertySchemaItem, AXPExtraPropertyType, AXPTemplateViewerConfig, AXPTemplateViewerResult, AXPUserAvatarData, AXPUserAvatarProvider, AXPUserAvatarSize, AXPUserAvatarStatus, AXPWidgetItemClickEvent, AXPWidgetItemData, AXPWidgetPropertiesChangedEvent, AXPWidgetPropertyTab };
2027
+ export { AXPActivityLogComponent, AXPCategoryTreeComponent, AXPCompareViewComponent, AXPComponentSlot, AXPComponentSlotDirective, AXPComponentSlotModule, AXPComponentSlotRegistryService, AXPDataSelectorComponent, AXPDataSelectorService, AXPDynamicDialogComponent, AXPDynamicDialogService, AXPDynamicFormBuilderService, AXPDynamicFormComponent, AXPDynamicFormDesignerComponent, AXPDynamicFormStepperComponent, AXPExtraPropertiesComponent, AXPExtraPropertiesSchemaComponent, AXPExtraPropertiesValuesComponent, AXPImageEditorPopupComponent, AXPImageEditorService, AXPMenuBadgeHelper, AXPQueryColumnsComponent, AXPQueryFiltersComponent, AXPQuerySortsComponent, AXPQueryViewsComponent, AXPStateMessageComponent, AXPTaskBadgeDirective, AXPTaskBadgeProvider, AXPTaskBadgeService, AXPTemplateViewerComponent, AXPTemplateViewerService, AXPThemeLayoutActionsComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutContainerComponent, AXPThemeLayoutEndSideComponent, AXPThemeLayoutFooterComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutListComponent, AXPThemeLayoutListItemComponent, AXPThemeLayoutListItemsGroupComponent, AXPThemeLayoutPageHeaderComponent, AXPThemeLayoutPagePrimaryActionsComponent, AXPThemeLayoutPageSecondaryActionsComponent, AXPThemeLayoutSectionComponent, AXPThemeLayoutStartSideComponent, AXPThemeLayoutToolbarComponent, AXPUserAvatarComponent, AXPUserAvatarService, AXPWidgetItemComponent, AXPWidgetPropertyViewerComponent, AXPWidgetPropertyViewerPopupComponent, AXPWidgetPropertyViewerService, AXP_EXTRA_PROPERTY_TYPES, AXP_TASK_BADGE_PROVIDERS, AXP_USER_AVATAR_PROVIDER, convertDesignerFieldToFormField, convertDesignerGroupToFormGroup, convertDesignerStateToFormDefinition };
2028
+ export type { AXPCategoryTreeActions, AXPCategoryTreeConfig, AXPCategoryTreeDataSource, AXPCategoryTreeEvents, AXPCategoryTreeNode, AXPCompareViewField, AXPCompareViewInputs, AXPCompareViewMode, AXPCompareViewObject, AXPComponentSlotConfig, AXPComponentSlotModuleConfigs, AXPDataSelectorColumn, AXPDataSelectorConfig, AXPDialogRef, AXPDynamicDialogConfig, AXPDynamicDialogResult, AXPDynamicFormDefinition, AXPDynamicFormDesignerField, AXPDynamicFormDesignerGroup, AXPDynamicFormDesignerState, AXPDynamicFormDirection, AXPDynamicFormFieldDefinition, AXPDynamicFormGroupDefinition, AXPDynamicFormLook, AXPDynamicFormMode, AXPDynamicFormStepperDefinition, AXPDynamicFormStepperStepDefinition, AXPExtraPropertyItem, AXPExtraPropertySchemaItem, AXPExtraPropertyType, AXPFormElementWidget, AXPImageEditorOpenOptions, AXPTemplateViewerConfig, AXPTemplateViewerResult, AXPUserAvatarData, AXPUserAvatarProvider, AXPUserAvatarSize, AXPUserAvatarStatus, AXPWidgetItemClickEvent, AXPWidgetItemData, AXPWidgetPropertiesChangedEvent, AXPWidgetPropertyTab, AXPWidgetPropertyViewerConfig, AXPWidgetPropertyViewerResult, ColorBoxOptions, DateTimeBoxOptions, DialogBuilderState, FieldBuilderState, FormBuilderState, GroupBuilderState, IActionBuilder, IDialogBuilder, IFieldBuilder, IFieldOptions, IFormBuilder, IGroupBuilder, IStepBuilder, LargeTextBoxOptions, LookupBoxOptions, NumberBoxOptions, PasswordBoxOptions, RichTextOptions, SelectBoxOptions, SelectionListOptions, StateMode, StepBuilderState, TextBoxOptions, ToggleSwitchOptions };