@acorex/platform 20.3.0-next.1 → 20.3.0-next.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/common/index.d.ts +125 -12
  2. package/core/index.d.ts +656 -100
  3. package/fesm2022/acorex-platform-auth.mjs +20 -20
  4. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  5. package/fesm2022/acorex-platform-common.mjs +120 -148
  6. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-core.mjs +885 -261
  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 +1615 -662
  12. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  13. package/fesm2022/acorex-platform-layout-components.mjs +3327 -157
  14. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  15. package/fesm2022/acorex-platform-layout-designer.mjs +172 -210
  16. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  17. package/fesm2022/acorex-platform-layout-entity-create-entity.command-764ie8R8.mjs +52 -0
  18. package/fesm2022/acorex-platform-layout-entity-create-entity.command-764ie8R8.mjs.map +1 -0
  19. package/fesm2022/acorex-platform-layout-entity.mjs +4522 -1643
  20. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-layout-views.mjs +398 -89
  22. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  23. package/fesm2022/acorex-platform-native.mjs +7 -7
  24. package/fesm2022/acorex-platform-native.mjs.map +1 -1
  25. package/fesm2022/acorex-platform-runtime.mjs +40 -40
  26. package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
  27. package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-hHXxHlFG.mjs → acorex-platform-themes-default-entity-master-create-view.component-Ct-ri59W.mjs} +7 -7
  28. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Ct-ri59W.mjs.map +1 -0
  29. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-7BB4LdjK.mjs +706 -0
  30. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-7BB4LdjK.mjs.map +1 -0
  31. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BDJR088o.mjs +101 -0
  32. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BDJR088o.mjs.map +1 -0
  33. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-BExtm1JE.mjs +244 -0
  34. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-BExtm1JE.mjs.map +1 -0
  35. package/fesm2022/{acorex-platform-themes-default-error-401.component-D4glpFvU.mjs → acorex-platform-themes-default-error-401.component-DrO1PEOH.mjs} +4 -4
  36. package/fesm2022/{acorex-platform-themes-default-error-401.component-D4glpFvU.mjs.map → acorex-platform-themes-default-error-401.component-DrO1PEOH.mjs.map} +1 -1
  37. package/fesm2022/{acorex-platform-themes-default-error-404.component-BvGeDMjo.mjs → acorex-platform-themes-default-error-404.component-DqVq0oHX.mjs} +4 -4
  38. package/fesm2022/{acorex-platform-themes-default-error-404.component-BvGeDMjo.mjs.map → acorex-platform-themes-default-error-404.component-DqVq0oHX.mjs.map} +1 -1
  39. package/fesm2022/{acorex-platform-themes-default-error-offline.component-BINy-Zo3.mjs → acorex-platform-themes-default-error-offline.component-Bt2PTL7_.mjs} +4 -4
  40. package/fesm2022/{acorex-platform-themes-default-error-offline.component-BINy-Zo3.mjs.map → acorex-platform-themes-default-error-offline.component-Bt2PTL7_.mjs.map} +1 -1
  41. package/fesm2022/acorex-platform-themes-default.mjs +64 -509
  42. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  43. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-C833prGO.mjs → acorex-platform-themes-shared-icon-chooser-view.component-BgEh06Tn.mjs} +24 -14
  44. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BgEh06Tn.mjs.map +1 -0
  45. package/fesm2022/{acorex-platform-themes-shared-settings.provider-CXiRmniv.mjs → acorex-platform-themes-shared-settings.provider-CLUKU4y0.mjs} +2 -2
  46. package/fesm2022/acorex-platform-themes-shared-settings.provider-CLUKU4y0.mjs.map +1 -0
  47. package/fesm2022/{acorex-platform-themes-shared-color-chooser-column.component-DjKLg513.mjs → acorex-platform-themes-shared-theme-color-chooser-column.component-AeOQxjbS.mjs} +23 -8
  48. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-AeOQxjbS.mjs.map +1 -0
  49. package/fesm2022/{acorex-platform-themes-shared-color-chooser-view.component-DE0wO98F.mjs → acorex-platform-themes-shared-theme-color-chooser-view.component-DEVzRd6-.mjs} +23 -8
  50. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-DEVzRd6-.mjs.map +1 -0
  51. package/fesm2022/acorex-platform-themes-shared.mjs +250 -85
  52. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  53. package/fesm2022/{acorex-platform-widgets-button-widget-designer.component-lNF95FJv.mjs → acorex-platform-widgets-button-widget-designer.component-DSaD9Fwc.mjs} +7 -7
  54. package/fesm2022/acorex-platform-widgets-button-widget-designer.component-DSaD9Fwc.mjs.map +1 -0
  55. package/fesm2022/acorex-platform-widgets-extra-properties-schema-widget-edit.component-D9mf08rU.mjs +50 -0
  56. package/fesm2022/acorex-platform-widgets-extra-properties-schema-widget-edit.component-D9mf08rU.mjs.map +1 -0
  57. package/fesm2022/acorex-platform-widgets-extra-properties-schema-widget-view.component-D6GQ-eyr.mjs +42 -0
  58. package/fesm2022/acorex-platform-widgets-extra-properties-schema-widget-view.component-D6GQ-eyr.mjs.map +1 -0
  59. package/fesm2022/acorex-platform-widgets-extra-properties-values-widget-edit.component-DVbIdVZ6.mjs +55 -0
  60. package/fesm2022/acorex-platform-widgets-extra-properties-values-widget-edit.component-DVbIdVZ6.mjs.map +1 -0
  61. package/fesm2022/acorex-platform-widgets-extra-properties-values-widget-view.component-D-aM64Hu.mjs +50 -0
  62. package/fesm2022/acorex-platform-widgets-extra-properties-values-widget-view.component-D-aM64Hu.mjs.map +1 -0
  63. package/fesm2022/acorex-platform-widgets-extra-properties-widget-edit.component-em2-aU8E.mjs +48 -0
  64. package/fesm2022/acorex-platform-widgets-extra-properties-widget-edit.component-em2-aU8E.mjs.map +1 -0
  65. package/fesm2022/acorex-platform-widgets-extra-properties-widget-view.component-BeuIofdr.mjs +42 -0
  66. package/fesm2022/acorex-platform-widgets-extra-properties-widget-view.component-BeuIofdr.mjs.map +1 -0
  67. package/fesm2022/{acorex-platform-widgets-file-list-popup.component-DFbPO0ud.mjs → acorex-platform-widgets-file-list-popup.component-Cmtq2bBV.mjs} +72 -7
  68. package/fesm2022/acorex-platform-widgets-file-list-popup.component-Cmtq2bBV.mjs.map +1 -0
  69. package/fesm2022/{acorex-platform-widgets-page-widget-designer.component-DRsLkulH.mjs → acorex-platform-widgets-page-widget-designer.component-B-ZEi2yd.mjs} +79 -69
  70. package/fesm2022/acorex-platform-widgets-page-widget-designer.component-B-ZEi2yd.mjs.map +1 -0
  71. package/fesm2022/{acorex-platform-widgets-tabular-data-edit-popup.component-nLZYiPnF.mjs → acorex-platform-widgets-tabular-data-edit-popup.component-CMqq_iOj.mjs} +13 -13
  72. package/fesm2022/acorex-platform-widgets-tabular-data-edit-popup.component-CMqq_iOj.mjs.map +1 -0
  73. package/fesm2022/{acorex-platform-widgets-tabular-data-view-popup.component-D6kiasYM.mjs → acorex-platform-widgets-tabular-data-view-popup.component-CRpjdiNz.mjs} +8 -7
  74. package/fesm2022/acorex-platform-widgets-tabular-data-view-popup.component-CRpjdiNz.mjs.map +1 -0
  75. package/fesm2022/{acorex-platform-widgets-text-block-widget-designer.component-CCMQtH3e.mjs → acorex-platform-widgets-text-block-widget-designer.component-DeSmBqMa.mjs} +9 -14
  76. package/fesm2022/acorex-platform-widgets-text-block-widget-designer.component-DeSmBqMa.mjs.map +1 -0
  77. package/fesm2022/acorex-platform-widgets.mjs +9152 -7182
  78. package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
  79. package/fesm2022/acorex-platform-workflow.mjs +28 -25
  80. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  81. package/layout/builder/index.d.ts +419 -185
  82. package/layout/components/index.d.ts +1129 -24
  83. package/layout/designer/index.d.ts +20 -49
  84. package/layout/entity/index.d.ts +424 -332
  85. package/layout/views/index.d.ts +129 -22
  86. package/package.json +25 -39
  87. package/widgets/index.d.ts +1908 -783
  88. package/workflow/index.d.ts +4 -1
  89. package/fesm2022/acorex-platform-themes-default-create-entity-view.component-SY0oMDoH.mjs +0 -22
  90. package/fesm2022/acorex-platform-themes-default-create-entity-view.component-SY0oMDoH.mjs.map +0 -1
  91. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-hHXxHlFG.mjs.map +0 -1
  92. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-hf4QOz_4.mjs +0 -665
  93. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-hf4QOz_4.mjs.map +0 -1
  94. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-DC3MrDtI.mjs +0 -108
  95. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-DC3MrDtI.mjs.map +0 -1
  96. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-Bb90PeHq.mjs +0 -236
  97. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-Bb90PeHq.mjs.map +0 -1
  98. package/fesm2022/acorex-platform-themes-shared-color-chooser-column.component-DjKLg513.mjs.map +0 -1
  99. package/fesm2022/acorex-platform-themes-shared-color-chooser-view.component-DE0wO98F.mjs.map +0 -1
  100. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-C833prGO.mjs.map +0 -1
  101. package/fesm2022/acorex-platform-themes-shared-settings.provider-CXiRmniv.mjs.map +0 -1
  102. package/fesm2022/acorex-platform-widgets-button-widget-designer.component-lNF95FJv.mjs.map +0 -1
  103. package/fesm2022/acorex-platform-widgets-checkbox-widget-column.component-BNBOATPB.mjs +0 -85
  104. package/fesm2022/acorex-platform-widgets-checkbox-widget-column.component-BNBOATPB.mjs.map +0 -1
  105. package/fesm2022/acorex-platform-widgets-checkbox-widget-designer.component-BI18uzNZ.mjs +0 -55
  106. package/fesm2022/acorex-platform-widgets-checkbox-widget-designer.component-BI18uzNZ.mjs.map +0 -1
  107. package/fesm2022/acorex-platform-widgets-checkbox-widget-view.component-C6-QPsnb.mjs +0 -76
  108. package/fesm2022/acorex-platform-widgets-checkbox-widget-view.component-C6-QPsnb.mjs.map +0 -1
  109. package/fesm2022/acorex-platform-widgets-color-box-widget-designer.component-pYOQv5g8.mjs +0 -55
  110. package/fesm2022/acorex-platform-widgets-color-box-widget-designer.component-pYOQv5g8.mjs.map +0 -1
  111. package/fesm2022/acorex-platform-widgets-file-list-popup.component-DFbPO0ud.mjs.map +0 -1
  112. package/fesm2022/acorex-platform-widgets-file-rename-popup.component-DA_CgIvm.mjs +0 -211
  113. package/fesm2022/acorex-platform-widgets-file-rename-popup.component-DA_CgIvm.mjs.map +0 -1
  114. package/fesm2022/acorex-platform-widgets-page-widget-designer.component-DRsLkulH.mjs.map +0 -1
  115. package/fesm2022/acorex-platform-widgets-rich-text-popup.component-CM_v-cL4.mjs +0 -40
  116. package/fesm2022/acorex-platform-widgets-rich-text-popup.component-CM_v-cL4.mjs.map +0 -1
  117. package/fesm2022/acorex-platform-widgets-tabular-data-edit-popup.component-nLZYiPnF.mjs.map +0 -1
  118. package/fesm2022/acorex-platform-widgets-tabular-data-view-popup.component-D6kiasYM.mjs.map +0 -1
  119. package/fesm2022/acorex-platform-widgets-text-block-widget-designer.component-CCMQtH3e.mjs.map +0 -1
@@ -1,16 +1,24 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { Signal, InjectionToken, InputSignal, TemplateRef, ElementRef, OnInit, OnDestroy, Type, ViewContainerRef, ModuleWithProviders, QueryList } from '@angular/core';
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, AXPContextData, AXPFilterDefinition, AXPFilterQuery } from '@acorex/platform/core';
4
+ import { AXPActivityLog, AXPSystemActionType, AXPCategoryEntity, AXPColumnQuery, AXPContextData, AXPOptionsData, AXPActionMenuItem, AXPExecuteCommand, AXPValidationRules, AXPFilterDefinition, AXPFilterQuery, AXPSortDefinition, AXPSortQuery, AXPMetaData, AXPViewQuery } from '@acorex/platform/core';
5
5
  import { AXPMenuItem } from '@acorex/platform/common';
6
- import { AXPWidgetNode, AXPLayoutContextChangeEvent } from '@acorex/platform/layout/builder';
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';
10
+ import { CdkDragDrop } from '@angular/cdk/drag-drop';
11
+ import { AXPWidgetNode, AXPLayoutContextChangeEvent, AXPWidgetProperty, AXPWidgetConfig } from '@acorex/platform/layout/builder';
7
12
  import * as _ngrx_signals from '@ngrx/signals';
13
+ import { AXDataTableComponent, AXDataTableRowDbClick, AXDataTableRowClick } from '@acorex/components/data-table';
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';
8
17
  import { AXFormComponent } from '@acorex/components/form';
9
- import { AXHtmlEvent, AXValueChangedEvent, AXEvent } from '@acorex/cdk/common';
10
18
  import { AXPopoverComponent } from '@acorex/components/popover';
11
19
  import { AXTagBoxComponent } from '@acorex/components/tag-box';
12
20
  import { AXCalendarService } from '@acorex/core/date-time';
13
- import { AXTranslationService } from '@acorex/core/translation';
21
+ import { AXTabStripChangedEvent, AXTabsComponent } from '@acorex/components/tabs';
14
22
  import { Observable } from 'rxjs';
15
23
 
16
24
  declare class AXPActivityLogComponent {
@@ -199,6 +207,93 @@ declare class AXPThemeLayoutContainerComponent {
199
207
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPThemeLayoutContainerComponent, "axp-layout-container", never, {}, {}, never, ["*"], true, never>;
200
208
  }
201
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
+
289
+ declare class AXPQueryColumnsComponent {
290
+ columns: _angular_core.ModelSignal<AXPColumnQuery[]>;
291
+ handleVisibilityChange(e: AXValueChangedEvent<boolean>, name: string): void;
292
+ protected drop(event: CdkDragDrop<unknown[]>): void;
293
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPQueryColumnsComponent, never>;
294
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPQueryColumnsComponent, "axp-query-columns", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; }, { "columns": "columnsChange"; }, never, never, true, never>;
295
+ }
296
+
202
297
  interface AXPCompareViewField {
203
298
  path: string;
204
299
  title: string;
@@ -267,11 +362,7 @@ interface AXPComponentSlotConfig {
267
362
  component?: Type<any>;
268
363
  condition?: ((context?: AXPContextData) => (boolean | Promise<boolean>)) | string;
269
364
  loadComponent?: () => Type<any> | Promise<Type<any>>;
270
- options?: {
271
- [key: string]: unknown;
272
- } | (() => {
273
- [key: string]: unknown;
274
- });
365
+ options?: AXPOptionsData | (() => AXPOptionsData) | (() => Promise<AXPOptionsData>);
275
366
  }
276
367
  interface AXPComponentSlotModuleConfigs {
277
368
  [slotName: string]: AXPComponentSlotConfig[];
@@ -294,8 +385,8 @@ declare class AXPComponentSlotDirective implements OnInit {
294
385
  contextStore: {
295
386
  data: _angular_core.Signal<AXPContextData>;
296
387
  state: _angular_core.Signal<_acorex_platform_core.AXPContextState>;
297
- initialSnapshot: _ngrx_signals.DeepSignal<{}>;
298
- previousSnapshot: _ngrx_signals.DeepSignal<{}>;
388
+ initialSnapshot: _angular_core.Signal<{}>;
389
+ previousSnapshot: _angular_core.Signal<{}>;
299
390
  lastChange: _ngrx_signals.DeepSignal<_acorex_platform_core.AXPContextChangeEvent>;
300
391
  isChanged: _angular_core.Signal<boolean>;
301
392
  isReset: _angular_core.Signal<boolean>;
@@ -349,21 +440,155 @@ declare class AXPComponentSlotModule {
349
440
  static ɵinj: _angular_core.ɵɵInjectorDeclaration<AXPComponentSlotModule>;
350
441
  }
351
442
 
352
- type AXPDynamicFormLayoutStyle = 'normal' | 'compact' | 'vertical' | 'horizontal';
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
+ categoryFilter?: {
461
+ enabled: boolean;
462
+ title: string;
463
+ dataSource: AXPCategoryTreeDataSource;
464
+ filterField: string;
465
+ filterOperator?: 'equal' | 'contains' | 'in';
466
+ width?: string;
467
+ };
468
+ }
469
+ declare class AXPDataSelectorComponent extends AXBasePageComponent {
470
+ protected config: _angular_core.WritableSignal<AXPDataSelectorConfig>;
471
+ protected searchTerm: string;
472
+ protected filter: AXDataSourceFilterOption;
473
+ protected grid: _angular_core.Signal<AXDataTableComponent | undefined>;
474
+ protected initialSelectedItems: any[];
475
+ protected selectedItems: _angular_core.WritableSignal<any[]>;
476
+ protected activeCategoryFilter: _angular_core.WritableSignal<{
477
+ node: AXPCategoryEntity;
478
+ filterValue: any;
479
+ } | null>;
480
+ protected allowSelect: _angular_core.Signal<boolean>;
481
+ protected hasSearch: _angular_core.Signal<boolean | undefined>;
482
+ protected searchPlaceholder: _angular_core.Signal<string>;
483
+ protected categoryTreeConfig: _angular_core.Signal<{
484
+ textField: string;
485
+ valueField: string;
486
+ showCheckbox: boolean;
487
+ searchable: boolean;
488
+ searchPlaceholder: string;
489
+ emptyStateTitle: string;
490
+ emptyStateDescription: string;
491
+ emptyStateIcon: string;
492
+ }>;
493
+ protected categoryTreeActions: _angular_core.Signal<{
494
+ canCreate: boolean;
495
+ canUpdate: boolean;
496
+ canDelete: boolean;
497
+ canCreateChild: boolean;
498
+ }>;
499
+ protected ngOnInit(): void;
500
+ protected ngAfterViewInit(): void;
501
+ protected handleRowDbClick(e: AXDataTableRowDbClick): void;
502
+ protected handleRowClick(e: AXDataTableRowClick): void;
503
+ protected handleSelectedRowsChange(rows: unknown[]): Promise<void>;
504
+ protected handleChangeSearchValue(e: AXValueChangedEvent): void;
505
+ protected handleCreateNewClick(): Promise<void>;
506
+ protected handleCloseClick(): void;
507
+ protected handleSelectClick(): void;
508
+ protected handleExpandRow(row: any): Promise<void>;
509
+ protected handleCategoryFilterClick(node: AXPCategoryEntity): void;
510
+ protected clearCategoryFilter(): void;
511
+ private applySearchFilter;
512
+ private applyFilterAndSort;
513
+ private applyCategoryFilter;
514
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDataSelectorComponent, never>;
515
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDataSelectorComponent, "axp-data-selector", never, {}, {}, never, never, true, never>;
516
+ }
517
+
518
+ declare class AXPDataSelectorService {
519
+ private readonly popupService;
520
+ /**
521
+ * Open data selector popup
522
+ */
523
+ open(config: AXPDataSelectorConfig): Promise<{
524
+ items: any[];
525
+ } | null>;
526
+ /**
527
+ * Open data selector with category filter
528
+ */
529
+ openWithCategoryFilter(config: Omit<AXPDataSelectorConfig, 'categoryFilter'>, categoryFilterConfig: {
530
+ title: string;
531
+ dataSource: AXPCategoryTreeDataSource;
532
+ filterField: string;
533
+ filterOperator?: 'equal' | 'contains' | 'in';
534
+ width?: string;
535
+ }): Promise<{
536
+ items: any[];
537
+ } | null>;
538
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDataSelectorService, never>;
539
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPDataSelectorService>;
540
+ }
541
+
542
+ /**
543
+ * Form appearance and density styling
544
+ */
545
+ type AXPDynamicFormLook = 'normal' | 'compact' | 'borderless';
546
+ /**
547
+ * Form rendering mode
548
+ */
549
+ type AXPDynamicFormMode = 'view' | 'edit';
550
+ /**
551
+ * Form layout direction and flow
552
+ */
553
+ type AXPDynamicFormDirection = 'vertical' | 'horizontal' | 'grid';
353
554
  interface AXPDynamicFormFieldDefinition {
354
555
  path: string;
355
556
  title?: string;
356
557
  description?: string;
357
558
  widget: AXPWidgetNode;
559
+ /**
560
+ * Optional per-field rendering mode. Takes precedence over section and form modes.
561
+ */
562
+ mode?: AXPDynamicFormMode;
563
+ /**
564
+ * Optional per-parameter layout override. Takes precedence over form layoutConfig.
565
+ * - number: colSpan for all breakpoints
566
+ * - object: colSpan per breakpoint
567
+ */
568
+ layout?: number | {
569
+ default?: number;
570
+ md?: number;
571
+ lg?: number;
572
+ xl?: number;
573
+ xxl?: number;
574
+ };
358
575
  }
359
576
  interface AXPDynamicFormGroupDefinition {
360
577
  name: string;
361
578
  title?: string;
362
579
  description?: string;
363
580
  parameters: AXPDynamicFormFieldDefinition[];
581
+ /**
582
+ * Optional per-section rendering mode. Takes precedence over form mode and is overridden by field mode.
583
+ */
584
+ mode?: AXPDynamicFormMode;
364
585
  }
365
586
  interface AXPDynamicFormDefinition {
366
587
  groups: AXPDynamicFormGroupDefinition[];
588
+ /**
589
+ * Optional form-level rendering mode
590
+ */
591
+ mode?: AXPDynamicFormMode;
367
592
  }
368
593
  interface AXPDynamicFormLayoutConfig {
369
594
  positions: {
@@ -385,8 +610,370 @@ interface AXPDynamicFormLayoutConfig {
385
610
  };
386
611
  }
387
612
 
613
+ /**
614
+ * Describes a single step of the dynamic form stepper.
615
+ * Each step contains one or more groups rendered by AXPDynamicFormComponent.
616
+ */
617
+ interface AXPDynamicFormStepperStepDefinition {
618
+ /** Unique identifier for the step */
619
+ id: string;
620
+ /** Display title for the step */
621
+ title?: string;
622
+ /** Optional descriptive text for the step */
623
+ description?: string;
624
+ /** Optional icon name for the step header */
625
+ icon?: string;
626
+ /** Field groups to render in this step */
627
+ groups: AXPDynamicFormGroupDefinition[];
628
+ /** Optional layout direction override for this step's form */
629
+ formDirection?: AXPDynamicFormDirection;
630
+ /** Whether the user may skip this step (defaults to false) */
631
+ canSkip?: boolean;
632
+ /** Whether the user may navigate back from this step (defaults to true) */
633
+ canGoBack?: boolean;
634
+ /** Optional data path inside the shared context for this step's data */
635
+ dataPath?: string;
636
+ }
637
+ /**
638
+ * Root definition for the dynamic form stepper.
639
+ */
640
+ interface AXPDynamicFormStepperDefinition {
641
+ /** Ordered collection of steps */
642
+ steps: AXPDynamicFormStepperStepDefinition[];
643
+ /** Enforce sequential navigation (no jumping to future steps) */
644
+ linear?: boolean;
645
+ /** Show progress indicator above the content */
646
+ showProgress?: boolean;
647
+ /** Show step numbers in the header */
648
+ showStepNumbers?: boolean;
649
+ }
650
+
651
+ declare class AXPDynamicFormStepperComponent {
652
+ #private;
653
+ /**
654
+ * Stepper definition providing steps metadata and behavior configuration
655
+ */
656
+ definition: _angular_core.InputSignal<AXPDynamicFormStepperDefinition>;
657
+ /**
658
+ * Shared root context for all steps
659
+ */
660
+ context: _angular_core.InputSignal<any>;
661
+ /**
662
+ * Optional pass-through layout props for inner forms
663
+ */
664
+ layoutLook: _angular_core.InputSignal<AXPDynamicFormLook>;
665
+ stepperDirection: _angular_core.InputSignal<AXOrientation>;
666
+ layoutConfig: _angular_core.InputSignal<AXPDynamicFormLayoutConfig | undefined>;
667
+ /**
668
+ * Optional guard that controls advancing to the next step (async only)
669
+ */
670
+ guardNext: _angular_core.InputSignal<((e: {
671
+ index: number;
672
+ id: string;
673
+ fullContext: any;
674
+ }) => Promise<boolean>) | undefined>;
675
+ /**
676
+ * Emits when the shared root context changes
677
+ */
678
+ contextChange: _angular_core.OutputEmitterRef<any>;
679
+ /**
680
+ * Emits when the active step changes
681
+ */
682
+ stepChange: _angular_core.OutputEmitterRef<{
683
+ index: number;
684
+ id: string;
685
+ }>;
686
+ /**
687
+ * Emits after successful finish
688
+ */
689
+ finished: _angular_core.OutputEmitterRef<any>;
690
+ /**
691
+ * Emits when cancelled by API
692
+ */
693
+ cancel: _angular_core.OutputEmitterRef<void>;
694
+ /**
695
+ * Emits when navigation is blocked by validation or policy
696
+ */
697
+ navigationBlocked: _angular_core.OutputEmitterRef<{
698
+ reason: "invalid" | "linear" | "cannot-skip" | "cannot-go-back";
699
+ stepId: string;
700
+ targetIndex?: number;
701
+ }>;
702
+ /**
703
+ * Internal reactive copy of the shared context
704
+ */
705
+ private internalContext;
706
+ /**
707
+ * Active step index
708
+ */
709
+ protected currentStepIndex: _angular_core.WritableSignal<number>;
710
+ /**
711
+ * Navigation lock while async guards are pending
712
+ */
713
+ private navigationLocked;
714
+ /**
715
+ * Reference to underlying step wizard to sync visual navigation
716
+ */
717
+ private readonly wizard;
718
+ /**
719
+ * References to rendered dynamic forms (usually one active)
720
+ */
721
+ private readonly forms;
722
+ protected steps: _angular_core.Signal<_acorex_platform_layout_components.AXPDynamicFormStepperStepDefinition[]>;
723
+ protected stepCount: _angular_core.Signal<number>;
724
+ protected currentStep: _angular_core.Signal<_acorex_platform_layout_components.AXPDynamicFormStepperStepDefinition>;
725
+ protected isFirstComputed: _angular_core.Signal<boolean>;
726
+ protected isLastComputed: _angular_core.Signal<boolean>;
727
+ /**
728
+ * Non-undefined layout config for inner dynamic forms
729
+ */
730
+ protected effectiveLayoutConfig: _angular_core.Signal<AXPDynamicFormLayoutConfig>;
731
+ /**
732
+ * Returns the current step pointer
733
+ */
734
+ getCurrentStep(): {
735
+ index: number;
736
+ id: string;
737
+ };
738
+ /**
739
+ * Public helpers for templates/consumers
740
+ */
741
+ isFirst(): boolean;
742
+ isLast(): boolean;
743
+ /**
744
+ * Returns the root context
745
+ */
746
+ getContext(): any;
747
+ /**
748
+ * Replaces the root context programmatically
749
+ */
750
+ setContext(ctx: any): void;
751
+ /**
752
+ * Validates the current step.
753
+ */
754
+ validateCurrentStep(): Promise<boolean>;
755
+ /**
756
+ * Attempts to advance to the next step applying validation and guard
757
+ */
758
+ next(): Promise<void>;
759
+ /**
760
+ * Goes back to the previous step if possible
761
+ */
762
+ previous(): Promise<void>;
763
+ /**
764
+ * Navigates to a specific step by id or index
765
+ */
766
+ goTo(stepIdOrIndex: string | number): Promise<void>;
767
+ /**
768
+ * Validates all steps and emits finished when successful
769
+ */
770
+ finish(): Promise<void>;
771
+ /**
772
+ * Emits cancel event without state changes
773
+ */
774
+ cancelFlow(): void;
775
+ /**
776
+ * Handle per-step context changes and keep internal root context in sync.
777
+ */
778
+ protected onStepContextChange(stepId: string, stepContext: any): void;
779
+ /**
780
+ * Exposes reading a step slice to the template
781
+ */
782
+ readStepSlice(path?: string): {
783
+ slice: any;
784
+ exists: boolean;
785
+ };
786
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDynamicFormStepperComponent, never>;
787
+ 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>;
788
+ }
789
+
790
+ interface AXPDynamicDialogConfig {
791
+ title: string;
792
+ message?: string;
793
+ /**
794
+ * Legacy: If provided, dialog renders only dynamic-form.
795
+ */
796
+ formDefinition?: AXPDynamicFormDefinition;
797
+ /**
798
+ * Preferred definition: dynamic form (no steps or single step) or a multi-step stepper definition.
799
+ */
800
+ definition?: AXPDynamicFormDefinition | AXPDynamicFormStepperDefinition;
801
+ /**
802
+ * Shared context passed to the rendered control
803
+ */
804
+ context: any;
805
+ /**
806
+ * Shared layout options applied to form/stepper unless overridden
807
+ */
808
+ layoutConfig?: AXPDynamicFormLayoutConfig;
809
+ layoutLook?: AXPDynamicFormLook;
810
+ mode?: AXPDynamicFormMode;
811
+ size?: AXPopupSizeType;
812
+ closeButton?: boolean;
813
+ /**
814
+ * Optional stepper-only options. Ignored when rendering dynamic-form.
815
+ */
816
+ stepper?: {
817
+ guardNext?: (e: {
818
+ index: number;
819
+ id: string;
820
+ fullContext: unknown;
821
+ }) => Promise<boolean>;
822
+ stepperDirection?: AXOrientation;
823
+ };
824
+ /**
825
+ * Footer actions. In stepper mode, footer is replaced by Prev/Next/Confirm.
826
+ */
827
+ actions?: {
828
+ footer?: {
829
+ prefix?: AXPActionMenuItem[];
830
+ suffix?: AXPActionMenuItem[];
831
+ };
832
+ };
833
+ }
834
+ interface AXPDynamicDialogResult {
835
+ context: any;
836
+ action?: string;
837
+ }
838
+ interface AXPDialogRef {
839
+ /**
840
+ * Manually close the dialog (optional - dialog closes automatically after user interaction)
841
+ */
842
+ close(): void;
843
+ /**
844
+ * Get the form data from the dialog
845
+ */
846
+ context(): any;
847
+ /**
848
+ * Get the action that was clicked by the user
849
+ */
850
+ action(): string | undefined;
851
+ /**
852
+ * Set the loading state of the dialog
853
+ */
854
+ setLoading(loading: boolean): void;
855
+ }
856
+
857
+ declare class AXPDynamicDialogComponent extends AXBasePageComponent {
858
+ config: AXPDynamicDialogConfig;
859
+ private readonly dynamicForm;
860
+ protected readonly stepper: _angular_core.Signal<AXPDynamicFormStepperComponent | undefined>;
861
+ isSubmitting: _angular_core.WritableSignal<boolean>;
862
+ private previousContext;
863
+ private formData;
864
+ dialogResult: AXPDynamicDialogResult | null;
865
+ isSubmittingFromDialog: boolean;
866
+ data: any;
867
+ callBack: (dialogRef: AXPDialogRef) => void;
868
+ /**
869
+ * Form context for widget container
870
+ */
871
+ protected formContext: _angular_core.Signal<Record<string, any>>;
872
+ /**
873
+ * Combined loading state from both signal and dialog
874
+ */
875
+ protected isFormLoading: _angular_core.Signal<boolean>;
876
+ protected defaultLayout: () => {
877
+ positions: {
878
+ default: {
879
+ colSpan: number;
880
+ };
881
+ md: {
882
+ colSpan: number;
883
+ };
884
+ lg: {
885
+ colSpan: number;
886
+ };
887
+ xl: {
888
+ colSpan: number;
889
+ };
890
+ xxl: {
891
+ colSpan: number;
892
+ };
893
+ };
894
+ };
895
+ /**
896
+ * Determine rendering mode and effective definitions
897
+ */
898
+ protected readonly hasLegacyForm: _angular_core.Signal<boolean>;
899
+ protected readonly providedDefinition: _angular_core.Signal<_acorex_platform_layout_components.AXPDynamicFormDefinition | _acorex_platform_layout_components.AXPDynamicFormStepperDefinition | undefined>;
900
+ protected readonly providedMode: _angular_core.Signal<_acorex_platform_layout_components.AXPDynamicFormMode>;
901
+ protected readonly isStepperDefinition: _angular_core.Signal<boolean>;
902
+ protected readonly shouldRenderForm: _angular_core.Signal<boolean>;
903
+ protected readonly effectiveFormDefinition: _angular_core.Signal<any>;
904
+ protected readonly resolvedFormDefinition: _angular_core.Signal<any>;
905
+ protected readonly effectiveLayoutLook: _angular_core.Signal<_acorex_platform_layout_components.AXPDynamicFormLook>;
906
+ protected readonly effectiveLayoutConfig: _angular_core.Signal<_acorex_platform_layout_components.AXPDynamicFormLayoutConfig>;
907
+ protected readonly stepperGuardNext: _angular_core.Signal<((e: {
908
+ index: number;
909
+ id: string;
910
+ fullContext: unknown;
911
+ }) => Promise<boolean>) | undefined>;
912
+ protected readonly stepperDirection: _angular_core.Signal<_acorex_cdk_common.AXOrientation>;
913
+ protected readonly stepperDefinition: _angular_core.Signal<any>;
914
+ stepperIsFirst: _angular_core.Signal<boolean>;
915
+ stepperIsLast: _angular_core.Signal<boolean>;
916
+ /**
917
+ * Effective form direction when rendering dynamic-form (single-step or legacy form).
918
+ * If a single-step definition is provided and that step specifies formDirection, use it.
919
+ */
920
+ protected readonly effectiveFormDirection: _angular_core.Signal<AXPDynamicFormDirection>;
921
+ /**
922
+ * Footer actions for dynamic button system
923
+ */
924
+ protected footerPrefixActions: _angular_core.Signal<AXPActionMenuItem[]>;
925
+ protected footerSuffixActions: _angular_core.Signal<AXPActionMenuItem[]>;
926
+ protected visibleFooterPrefixActions: _angular_core.Signal<AXPActionMenuItem[]>;
927
+ protected visibleFooterSuffixActions: _angular_core.Signal<AXPActionMenuItem[]>;
928
+ protected hasFooterActions: _angular_core.Signal<boolean>;
929
+ /** Stepper footer: choose a single confirm action from provided suffix actions (first visible). */
930
+ protected confirmAction: _angular_core.Signal<AXPActionMenuItem | undefined>;
931
+ protected confirmActionTitle: _angular_core.Signal<string>;
932
+ ngOnInit(): void;
933
+ protected handleContextInitiated(context: any): void;
934
+ protected handleContextChanged(context: any): void;
935
+ /**
936
+ * Execute a dynamic action
937
+ */
938
+ protected executeAction(action: AXPActionMenuItem): Promise<void>;
939
+ /**
940
+ * Execute a command
941
+ */
942
+ protected executeCommand(command: AXPExecuteCommand): Promise<void>;
943
+ /**
944
+ * Check if form is valid
945
+ */
946
+ protected isFormValid(): Promise<boolean>;
947
+ /** Stepper navigation handlers */
948
+ protected goPrev(): void;
949
+ protected goNext(): void;
950
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDynamicDialogComponent, never>;
951
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDynamicDialogComponent, "axp-dynamic-dialog", never, { "config": { "alias": "config"; "required": true; }; }, {}, never, never, true, never>;
952
+ }
953
+
954
+ declare class AXPDynamicDialogService {
955
+ private readonly popupService;
956
+ /**
957
+ * Show a dynamic dialog with the given configuration
958
+ * @param config Dialog configuration including fields, validation, and UI options
959
+ * @returns Promise resolving to dialog reference for controlling the dialog
960
+ */
961
+ showDialog(config: AXPDynamicDialogConfig): Promise<AXPDialogRef>;
962
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDynamicDialogService, never>;
963
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPDynamicDialogService>;
964
+ }
965
+
388
966
  declare class AXPDynamicFormComponent implements OnInit {
389
967
  #private;
968
+ private evaluatorService;
969
+ /**
970
+ * Tracks the latest scheduled evaluation to ensure last-write-wins for async evaluate
971
+ */
972
+ private evaluationRunId;
973
+ /**
974
+ * Memoization cache for resolveParamLayout to keep stable object identities
975
+ */
976
+ private layoutCache;
390
977
  /**
391
978
  * Form definition containing groups and fields
392
979
  */
@@ -396,13 +983,27 @@ declare class AXPDynamicFormComponent implements OnInit {
396
983
  */
397
984
  context: _angular_core.InputSignal<any>;
398
985
  /**
399
- * Layout style for the form (normal, compact, vertical, horizontal)
986
+ * Form appearance and density styling (normal, compact, spacious)
400
987
  */
401
- layoutStyle: _angular_core.InputSignal<AXPDynamicFormLayoutStyle>;
988
+ layoutLook: _angular_core.InputSignal<AXPDynamicFormLook>;
989
+ /**
990
+ * Form layout direction and flow (vertical, horizontal, grid)
991
+ */
992
+ layoutDirection: _angular_core.InputSignal<AXPDynamicFormDirection>;
993
+ /**
994
+ * Default form mode. Can be overridden by section/group and field.
995
+ */
996
+ mode: _angular_core.InputSignal<AXPDynamicFormMode>;
402
997
  /**
403
998
  * Custom layout configuration for form fields
404
999
  */
405
1000
  layoutConfig: _angular_core.InputSignal<AXPDynamicFormLayoutConfig>;
1001
+ protected expressionEvaluator(expression: any, context: any): Promise<any>;
1002
+ protected evaluatedFormDefinition: _angular_core.WritableSignal<any>;
1003
+ /**
1004
+ * Evaluate definition when inputs change with last-write-wins and deep-equality guard
1005
+ */
1006
+ eff: _angular_core.EffectRef;
406
1007
  /**
407
1008
  * Emitted when form context changes
408
1009
  */
@@ -426,11 +1027,15 @@ declare class AXPDynamicFormComponent implements OnInit {
426
1027
  */
427
1028
  protected computedLayout: _angular_core.Signal<AXPDynamicFormLayoutConfig>;
428
1029
  /**
429
- * Computed form definition
1030
+ * Resolve effective mode with precedence: field > group > form
430
1031
  */
431
- protected computedFormDefinition: _angular_core.Signal<AXPDynamicFormDefinition>;
1032
+ protected resolveParamMode: (group: any, param: AXPDynamicFormFieldDefinition) => AXPDynamicFormMode;
432
1033
  /**
433
- * Host classes based on layout style
1034
+ * Resolve effective grid layout for a specific parameter, merging per-parameter override with form layout.
1035
+ */
1036
+ protected resolveParamLayout(param: AXPDynamicFormFieldDefinition): AXPDynamicFormLayoutConfig;
1037
+ /**
1038
+ * Host classes based on layout look and direction
434
1039
  */
435
1040
  protected hostClasses: _angular_core.Signal<string>;
436
1041
  ngOnInit(): void;
@@ -438,6 +1043,7 @@ declare class AXPDynamicFormComponent implements OnInit {
438
1043
  * Handle context change events from widget container
439
1044
  */
440
1045
  protected handleContextChanged(event: AXPLayoutContextChangeEvent): void;
1046
+ protected isRequired(param: AXPDynamicFormFieldDefinition): boolean;
441
1047
  /**
442
1048
  * Get the form component instance
443
1049
  */
@@ -455,10 +1061,389 @@ declare class AXPDynamicFormComponent implements OnInit {
455
1061
  */
456
1062
  validate(): Promise<boolean>;
457
1063
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDynamicFormComponent, never>;
458
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDynamicFormComponent, "axp-dynamic-form", never, { "formDefinition": { "alias": "formDefinition"; "required": true; "isSignal": true; }; "context": { "alias": "context"; "required": true; "isSignal": true; }; "layoutStyle": { "alias": "layoutStyle"; "required": false; "isSignal": true; }; "layoutConfig": { "alias": "layoutConfig"; "required": false; "isSignal": true; }; }, { "contextChange": "contextChange"; "contextInitiated": "contextInitiated"; "validityChange": "validityChange"; }, never, never, true, never>;
1064
+ 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; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "layoutConfig": { "alias": "layoutConfig"; "required": false; "isSignal": true; }; }, { "contextChange": "contextChange"; "contextInitiated": "contextInitiated"; "validityChange": "validityChange"; }, never, never, true, never>;
1065
+ }
1066
+
1067
+ interface TextBoxOptions {
1068
+ placeholder?: string;
1069
+ maxLength?: number;
1070
+ minLength?: number;
1071
+ mask?: string;
1072
+ disabled?: boolean;
1073
+ readonly?: boolean;
1074
+ validations?: AXPValidationRules;
1075
+ }
1076
+ interface LargeTextBoxOptions {
1077
+ placeholder?: string;
1078
+ maxLength?: number;
1079
+ minLength?: number;
1080
+ rows?: number;
1081
+ disabled?: boolean;
1082
+ readonly?: boolean;
1083
+ validations?: AXPValidationRules;
1084
+ }
1085
+ interface RichTextOptions {
1086
+ placeholder?: string;
1087
+ toolbar?: string[];
1088
+ height?: number;
1089
+ disabled?: boolean;
1090
+ readonly?: boolean;
1091
+ validations?: AXPValidationRules;
1092
+ }
1093
+ interface SelectBoxOptions<TItem extends Record<string, unknown> = Record<string, unknown>> {
1094
+ valueField: keyof TItem & string;
1095
+ textField: keyof TItem & string;
1096
+ dataSource: TItem[];
1097
+ multiple?: boolean;
1098
+ placeholder?: string;
1099
+ disabled?: boolean;
1100
+ readonly?: boolean;
1101
+ allowSearch?: boolean;
1102
+ validations?: AXPValidationRules;
1103
+ }
1104
+ interface LookupBoxOptions {
1105
+ entity: string;
1106
+ multiple?: boolean;
1107
+ expose?: Array<{
1108
+ source: string;
1109
+ target: string;
1110
+ }>;
1111
+ placeholder?: string;
1112
+ textField?: string;
1113
+ valueField?: string;
1114
+ look?: string;
1115
+ columns?: string[];
1116
+ allowClear?: boolean;
1117
+ disabled?: boolean;
1118
+ readonly?: boolean;
1119
+ validations?: AXPValidationRules;
1120
+ }
1121
+ interface NumberBoxOptions {
1122
+ minValue?: number;
1123
+ maxValue?: number;
1124
+ step?: number;
1125
+ format?: string;
1126
+ placeholder?: string;
1127
+ disabled?: boolean;
1128
+ readonly?: boolean;
1129
+ validations?: AXPValidationRules;
1130
+ }
1131
+ interface DateTimeBoxOptions {
1132
+ format?: string;
1133
+ min?: Date;
1134
+ max?: Date;
1135
+ showTime?: boolean;
1136
+ placeholder?: string;
1137
+ disabled?: boolean;
1138
+ readonly?: boolean;
1139
+ validations?: AXPValidationRules;
1140
+ }
1141
+ interface ToggleSwitchOptions {
1142
+ onText?: string;
1143
+ offText?: string;
1144
+ validations?: AXPValidationRules;
1145
+ }
1146
+ interface PasswordBoxOptions {
1147
+ placeholder?: string;
1148
+ maxLength?: number;
1149
+ minLength?: number;
1150
+ showToggle?: boolean;
1151
+ validations?: AXPValidationRules;
1152
+ }
1153
+ interface SelectionListOptions<TItem extends Record<string, unknown> = Record<string, unknown>> {
1154
+ valueField: keyof TItem & string;
1155
+ textField: keyof TItem & string;
1156
+ dataSource: TItem[];
1157
+ multiple?: boolean;
1158
+ placeholder?: string;
1159
+ disabled?: boolean;
1160
+ readonly?: boolean;
1161
+ validations?: AXPValidationRules;
1162
+ }
1163
+ interface ColorBoxOptions {
1164
+ defaultColor?: string;
1165
+ showAlpha?: boolean;
1166
+ disabled?: boolean;
1167
+ readonly?: boolean;
1168
+ validations?: AXPValidationRules;
1169
+ }
1170
+ interface IFieldOptions {
1171
+ hidden?: string | boolean;
1172
+ readonly?: string | boolean;
1173
+ disabled?: string | boolean;
1174
+ defaultValue?: any;
1175
+ }
1176
+ interface IFieldBuilder {
1177
+ title(title: string): IFieldBuilder;
1178
+ description(description: string): IFieldBuilder;
1179
+ mode(mode: AXPDynamicFormMode): IFieldBuilder;
1180
+ options(values: IFieldOptions): IFieldBuilder;
1181
+ layout(layout: AXPDynamicFormFieldDefinition['layout']): IFieldBuilder;
1182
+ textBox(options?: TextBoxOptions): IFieldBuilder;
1183
+ largeTextBox(options?: LargeTextBoxOptions): IFieldBuilder;
1184
+ richText(options?: RichTextOptions): IFieldBuilder;
1185
+ passwordBox(options?: PasswordBoxOptions): IFieldBuilder;
1186
+ selectBox(options: SelectBoxOptions): IFieldBuilder;
1187
+ lookupBox(options: LookupBoxOptions): IFieldBuilder;
1188
+ selectionList(options: SelectionListOptions): IFieldBuilder;
1189
+ numberBox(options?: NumberBoxOptions): IFieldBuilder;
1190
+ dateTimeBox(options?: DateTimeBoxOptions): IFieldBuilder;
1191
+ toggleSwitch(options?: ToggleSwitchOptions): IFieldBuilder;
1192
+ colorBox(options?: ColorBoxOptions): IFieldBuilder;
1193
+ widget(type: string, options?: unknown): IFieldBuilder;
1194
+ }
1195
+ interface IGroupBuilder {
1196
+ title(title: string): IGroupBuilder;
1197
+ description(description: string): IGroupBuilder;
1198
+ mode(mode: AXPDynamicFormMode): IGroupBuilder;
1199
+ field(path: string, delegate?: (field: IFieldBuilder) => void): IGroupBuilder;
1200
+ group(name: string, delegate?: (group: IGroupBuilder) => void): IGroupBuilder;
1201
+ }
1202
+ interface IStepBuilder {
1203
+ title(title: string): IStepBuilder;
1204
+ description(description: string): IStepBuilder;
1205
+ icon(icon: string): IStepBuilder;
1206
+ direction(direction: AXPDynamicFormDirection): IStepBuilder;
1207
+ group(name: string, delegate?: (group: IGroupBuilder) => void): IStepBuilder;
1208
+ }
1209
+ interface IFormBuilder {
1210
+ group(name: string, delegate?: (group: IGroupBuilder) => void): IFormBuilder;
1211
+ layout(config: Partial<AXPDynamicFormLayoutConfig>): IFormBuilder;
1212
+ look(look: AXPDynamicFormLook): IFormBuilder;
1213
+ direction(direction: AXPDynamicFormDirection): IFormBuilder;
1214
+ mode(mode: AXPDynamicFormMode): IFormBuilder;
1215
+ build(): AXPDynamicFormDefinition;
1216
+ }
1217
+ interface IActionBuilder {
1218
+ cancel(text?: string): IActionBuilder;
1219
+ submit(text?: string): IActionBuilder;
1220
+ custom(action: AXPActionMenuItem): IActionBuilder;
1221
+ }
1222
+ interface IDialogBuilder extends IFormBuilder {
1223
+ group(name: string, delegate?: (group: IGroupBuilder) => void): IDialogBuilder;
1224
+ layout(config: Partial<AXPDynamicFormLayoutConfig>): IDialogBuilder;
1225
+ look(look: AXPDynamicFormLook): IDialogBuilder;
1226
+ direction(direction: AXPDynamicFormDirection): IDialogBuilder;
1227
+ closeButton(closeButton: boolean): IDialogBuilder;
1228
+ step(id: string, delegate?: (step: IStepBuilder) => void): IDialogBuilder;
1229
+ stepperDirection(direction: AXOrientation): IDialogBuilder;
1230
+ guardNext(guard: (e: {
1231
+ index: number;
1232
+ id: string;
1233
+ fullContext: unknown;
1234
+ }) => Promise<boolean>): IDialogBuilder;
1235
+ title(title: string): IDialogBuilder;
1236
+ message(message?: string): IDialogBuilder;
1237
+ size(size: AXPopupSizeType): IDialogBuilder;
1238
+ context(context: AXPContextData): IDialogBuilder;
1239
+ actions(delegate?: (actions: IActionBuilder) => void): IDialogBuilder;
1240
+ show(): Promise<AXPDialogRef>;
1241
+ }
1242
+ interface FormBuilderState {
1243
+ groups: AXPDynamicFormGroupDefinition[];
1244
+ layoutConfig: AXPDynamicFormLayoutConfig;
1245
+ look: AXPDynamicFormLook;
1246
+ direction: AXPDynamicFormDirection;
1247
+ mode?: AXPDynamicFormMode;
1248
+ }
1249
+ interface DialogBuilderState extends FormBuilderState {
1250
+ title?: string;
1251
+ message?: string;
1252
+ size?: AXPopupSizeType;
1253
+ context?: AXPContextData;
1254
+ steps: StepBuilderState[];
1255
+ stepperDirection?: AXOrientation;
1256
+ closeButton?: boolean;
1257
+ guardNext?: (e: {
1258
+ index: number;
1259
+ id: string;
1260
+ fullContext: unknown;
1261
+ }) => Promise<boolean>;
1262
+ actions?: {
1263
+ footer?: {
1264
+ prefix?: AXPActionMenuItem[];
1265
+ suffix?: AXPActionMenuItem[];
1266
+ };
1267
+ };
1268
+ }
1269
+ interface FieldBuilderState {
1270
+ path: string;
1271
+ title?: string;
1272
+ description?: string;
1273
+ defaultValue?: any;
1274
+ hidden?: string | boolean;
1275
+ readonly?: string | boolean;
1276
+ disabled?: string | boolean;
1277
+ widget?: AXPWidgetNode;
1278
+ layout?: AXPDynamicFormFieldDefinition['layout'];
1279
+ mode?: AXPDynamicFormMode;
1280
+ }
1281
+ interface GroupBuilderState {
1282
+ name: string;
1283
+ title?: string;
1284
+ description?: string;
1285
+ parameters: AXPDynamicFormFieldDefinition[];
1286
+ mode?: AXPDynamicFormMode;
1287
+ }
1288
+ interface StepBuilderState {
1289
+ id: string;
1290
+ title?: string;
1291
+ description?: string;
1292
+ icon?: string;
1293
+ formDirection?: AXPDynamicFormDirection;
1294
+ groups: AXPDynamicFormGroupDefinition[];
1295
+ }
1296
+
1297
+ declare class AXPDynamicFormBuilderService {
1298
+ private readonly dialogService;
1299
+ /**
1300
+ * Create a new form builder
1301
+ */
1302
+ form(): IFormBuilder;
1303
+ /**
1304
+ * Create a new dialog builder
1305
+ */
1306
+ dialog(): IDialogBuilder;
1307
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDynamicFormBuilderService, never>;
1308
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPDynamicFormBuilderService>;
1309
+ }
1310
+
1311
+ type StateMode = 'empty' | 'error' | 'loading' | 'warning' | 'info' | 'success';
1312
+ declare class AXPStateMessageComponent {
1313
+ mode: _angular_core.InputSignal<StateMode>;
1314
+ icon: _angular_core.InputSignal<string>;
1315
+ title: _angular_core.InputSignal<string>;
1316
+ description: _angular_core.InputSignal<string>;
1317
+ variant: _angular_core.InputSignal<"default" | "compact" | "minimal">;
1318
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPStateMessageComponent, never>;
1319
+ 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>;
1320
+ }
1321
+
1322
+ /**
1323
+ * Describes a schema-only definition for an extra property (no value).
1324
+ */
1325
+ interface AXPExtraPropertySchemaItem {
1326
+ /** Unique key for the property (used as identifier) */
1327
+ key: string;
1328
+ /** Human-readable title/label */
1329
+ title: string;
1330
+ /** Widget name/id to render (e.g., 'text-editor', 'checkbox-editor') */
1331
+ type: string;
1332
+ /** Optional widget-specific options */
1333
+ options?: AXPOptionsData;
1334
+ }
1335
+ /**
1336
+ * Describes a single extra property row.
1337
+ */
1338
+ interface AXPExtraPropertyItem extends AXPExtraPropertySchemaItem {
1339
+ /** Current value bound to the rendered widget */
1340
+ value: unknown;
459
1341
  }
1342
+ /**
1343
+ * Describes an available extra property type that user can select when adding rows.
1344
+ */
1345
+ interface AXPExtraPropertyType {
1346
+ /** Unique id for the type (it should be the same as the widget name) */
1347
+ id: string;
1348
+ /** UI title for selection dropdown */
1349
+ title: string;
1350
+ /** Default widget options applied on create */
1351
+ defaultOptions?: AXPOptionsData;
1352
+ }
1353
+ /**
1354
+ * Injection token to provide available extra property types.
1355
+ */
1356
+ declare const AXP_EXTRA_PROPERTY_TYPES: InjectionToken<AXPExtraPropertyType[]>;
460
1357
 
461
- declare class AXPLayoutFiltersComponent {
1358
+ declare class AXPExtraPropertiesComponent {
1359
+ items: _angular_core.InputSignal<AXPExtraPropertyItem[]>;
1360
+ mode: _angular_core.InputSignal<"view" | "edit">;
1361
+ protected onContextChanged(event: AXPLayoutContextChangeEvent): void;
1362
+ itemsChange: _angular_core.OutputEmitterRef<AXPExtraPropertyItem[]>;
1363
+ private readonly providedTypes;
1364
+ private readonly translationService;
1365
+ protected newKey: WritableSignal<string>;
1366
+ protected newTitle: WritableSignal<string>;
1367
+ protected newTypeId: WritableSignal<string>;
1368
+ protected newValue: WritableSignal<any>;
1369
+ /** Local, ephemeral context for widget rendering */
1370
+ protected internalContext: WritableSignal<Record<string, any>>;
1371
+ private lastTypeByKey;
1372
+ protected draftVersion: WritableSignal<number>;
1373
+ protected draftKey: _angular_core.Signal<string>;
1374
+ protected typeOptions: _angular_core.Signal<AXPExtraPropertyType[]>;
1375
+ protected presetTypes: _angular_core.Signal<AXPExtraPropertyType[]>;
1376
+ protected canAdd: _angular_core.Signal<boolean>;
1377
+ /** Sync incoming items' values into internal context for rendering */
1378
+ private readonly syncContextFromItems;
1379
+ /**
1380
+ * Clear item values when their widget type changes to avoid incompatible stale values
1381
+ */
1382
+ private readonly clearValueOnTypeChange;
1383
+ protected handleAddItem(): void;
1384
+ protected handleRemoveItem(key: string): void;
1385
+ protected handleDrop(event: CdkDragDrop<AXPExtraPropertyItem[]>): void;
1386
+ protected selectPreset(id: string): void;
1387
+ private nodeCache;
1388
+ private draftNodeCache?;
1389
+ protected getNode(item: AXPExtraPropertyItem): AXPWidgetNode;
1390
+ protected draftNode(): AXPWidgetNode;
1391
+ protected newTypeChanged(val: string): void;
1392
+ protected ngOnInit(): void;
1393
+ protected handleTitleChange(val: string): void;
1394
+ protected sanitizeKey(input: string): string;
1395
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPExtraPropertiesComponent, never>;
1396
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPExtraPropertiesComponent, "axp-extra-properties", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, { "itemsChange": "itemsChange"; }, never, never, true, never>;
1397
+ }
1398
+
1399
+ declare class AXPExtraPropertiesSchemaComponent {
1400
+ schema: _angular_core.InputSignal<AXPExtraPropertySchemaItem[]>;
1401
+ mode: _angular_core.InputSignal<"view" | "edit">;
1402
+ schemaChange: _angular_core.OutputEmitterRef<AXPExtraPropertySchemaItem[]>;
1403
+ private readonly providedTypes;
1404
+ private readonly translationService;
1405
+ protected newTitle: WritableSignal<string>;
1406
+ protected newTypeId: WritableSignal<string>;
1407
+ protected typeOptions: _angular_core.Signal<AXPExtraPropertyType[]>;
1408
+ protected canAdd: _angular_core.Signal<boolean>;
1409
+ protected selectedKey: WritableSignal<string | null>;
1410
+ protected selectedItem: _angular_core.Signal<AXPExtraPropertySchemaItem | null>;
1411
+ constructor();
1412
+ protected handleAdd(): void;
1413
+ protected handleRemove(key: string): void;
1414
+ protected handleDrop(event: CdkDragDrop<AXPExtraPropertySchemaItem[]>): void;
1415
+ protected handleUpdateTitle(key: string, title: string): void;
1416
+ protected handleUpdateType(key: string, typeId: string): void;
1417
+ protected newTypeChanged(val: string): void;
1418
+ protected handleTitleChange(val: string): void;
1419
+ protected handleSelect(key: string): void;
1420
+ protected handleViewerChanged(e: {
1421
+ values: any;
1422
+ mode: 'init' | 'update';
1423
+ }): void;
1424
+ protected deriveKey(input: string): string;
1425
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPExtraPropertiesSchemaComponent, never>;
1426
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPExtraPropertiesSchemaComponent, "axp-extra-properties-schema", never, { "schema": { "alias": "schema"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, { "schemaChange": "schemaChange"; }, never, never, true, never>;
1427
+ }
1428
+
1429
+ declare class AXPExtraPropertiesValuesComponent {
1430
+ schema: _angular_core.InputSignal<AXPExtraPropertySchemaItem[]>;
1431
+ values: _angular_core.InputSignal<Record<string, any>>;
1432
+ mode: _angular_core.InputSignal<"view" | "edit">;
1433
+ valuesChange: _angular_core.OutputEmitterRef<Record<string, any>>;
1434
+ isRequired: (item: AXPExtraPropertySchemaItem) => any;
1435
+ protected internalContext: _angular_core.WritableSignal<Record<string, any>>;
1436
+ private nodeCache;
1437
+ private lastTypeByKey;
1438
+ protected onContextChanged(event: AXPLayoutContextChangeEvent): void;
1439
+ private readonly syncContextFromInputs;
1440
+ private readonly clearOnSchemaTypeChange;
1441
+ protected getNode(item: AXPExtraPropertySchemaItem): AXPWidgetNode;
1442
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPExtraPropertiesValuesComponent, never>;
1443
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPExtraPropertiesValuesComponent, "axp-extra-properties-values", never, { "schema": { "alias": "schema"; "required": false; "isSignal": true; }; "values": { "alias": "values"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, { "valuesChange": "valuesChange"; }, never, never, true, never>;
1444
+ }
1445
+
1446
+ declare class AXPQueryFiltersComponent {
462
1447
  #private;
463
1448
  protected translate: AXTranslationService;
464
1449
  protected calendarService: AXCalendarService;
@@ -496,8 +1481,113 @@ declare class AXPLayoutFiltersComponent {
496
1481
  handlePopoverClosed(e: AXEvent): void;
497
1482
  protected onPopoverOpened(e: AXEvent): void;
498
1483
  protected deactivateAllListItems(): void;
499
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLayoutFiltersComponent, never>;
500
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPLayoutFiltersComponent, "axp-layout-filters", never, { "filtersDefinitions": { "alias": "filtersDefinitions"; "required": false; "isSignal": true; }; "initialFilters": { "alias": "initialFilters"; "required": false; "isSignal": true; }; }, { "onFiltersChanged": "onFiltersChanged"; }, never, never, true, never>;
1484
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPQueryFiltersComponent, never>;
1485
+ 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>;
1486
+ }
1487
+
1488
+ interface AXPWidgetPropertyTab {
1489
+ name: string;
1490
+ title: string;
1491
+ groups: {
1492
+ name: string;
1493
+ title: string;
1494
+ isCollapsed: boolean;
1495
+ props: AXPWidgetProperty[];
1496
+ }[];
1497
+ }
1498
+ interface AXPWidgetPropertiesChangedEvent {
1499
+ values: any;
1500
+ mode: 'init' | 'update';
1501
+ }
1502
+ declare class AXPWidgetPropertyViewerComponent {
1503
+ widget: _angular_core.InputSignal<AXPWidgetNode>;
1504
+ mode: _angular_core.InputSignal<"simple" | "advanced">;
1505
+ private widgetRegistryService;
1506
+ protected currentTabIndex: WritableSignal<number>;
1507
+ protected config: WritableSignal<AXPWidgetConfig<any> | null>;
1508
+ protected allPoperties: AXPWidgetProperty[];
1509
+ protected tabs: WritableSignal<AXPWidgetPropertyTab[]>;
1510
+ protected groups: _angular_core.Signal<{
1511
+ name: string;
1512
+ title: string;
1513
+ isCollapsed: boolean;
1514
+ props: AXPWidgetProperty[];
1515
+ }[]>;
1516
+ protected groupCollapsedStates: Map<string, boolean>;
1517
+ onChanged: EventEmitter<AXPWidgetPropertiesChangedEvent>;
1518
+ protected context: WritableSignal<any>;
1519
+ protected initialContext: any;
1520
+ constructor();
1521
+ update(values: any): void;
1522
+ private fillTabs;
1523
+ protected handleContextChange(e: AXPLayoutContextChangeEvent): void;
1524
+ protected handleTabChange(event: AXTabStripChangedEvent): void;
1525
+ protected handleCollapsedChange(group: string, collapsed: boolean): void;
1526
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetPropertyViewerComponent, never>;
1527
+ 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>;
1528
+ }
1529
+
1530
+ declare class AXPQuerySortsComponent {
1531
+ sortDefinitions: _angular_core.ModelSignal<AXPSortDefinition[]>;
1532
+ sortQueries: _angular_core.WritableSignal<AXPSortQuery[]>;
1533
+ initialSortQueries: _angular_core.InputSignal<AXPSortQuery[]>;
1534
+ sortQueriesChange: _angular_core.OutputEmitterRef<AXPSortQuery[]>;
1535
+ constructor();
1536
+ protected drop(event: CdkDragDrop<unknown[]>): void;
1537
+ getSortDirection(item: AXPSortDefinition): "desc" | "asc" | undefined;
1538
+ protected changeItemSort(item: AXPSortDefinition): void;
1539
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPQuerySortsComponent, never>;
1540
+ 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>;
1541
+ }
1542
+
1543
+ interface AXPTemplateViewerConfig {
1544
+ template: AXPWidgetNode | string;
1545
+ title?: string;
1546
+ size?: AXPopupSizeType;
1547
+ context?: any;
1548
+ metadata?: AXPMetaData;
1549
+ readOnly?: boolean;
1550
+ showActions?: boolean;
1551
+ }
1552
+ interface AXPTemplateViewerResult {
1553
+ context: any;
1554
+ cancelled: boolean;
1555
+ metadata?: AXPMetaData;
1556
+ }
1557
+
1558
+ declare class AXPTemplateViewerComponent extends AXBasePageComponent {
1559
+ set config(value: AXPTemplateViewerConfig | undefined);
1560
+ get config(): AXPTemplateViewerConfig | undefined;
1561
+ protected context: any;
1562
+ protected readonly document: _angular_core.WritableSignal<AXPWidgetNode>;
1563
+ protected readonly currentPageIndex: _angular_core.WritableSignal<number>;
1564
+ protected readonly _config: _angular_core.WritableSignal<AXPTemplateViewerConfig | undefined>;
1565
+ protected readonly currentPage: _angular_core.Signal<AXPWidgetNode>;
1566
+ protected ngOnInit(): Promise<void>;
1567
+ private loadTemplate;
1568
+ protected handleContextChanged(e: AXPLayoutContextChangeEvent): void;
1569
+ protected handleSubmit(form: AXFormComponent): Promise<void>;
1570
+ protected handleCancel(): void;
1571
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTemplateViewerComponent, never>;
1572
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPTemplateViewerComponent, "axp-template-viewer", never, { "config": { "alias": "config"; "required": false; }; }, {}, never, never, true, never>;
1573
+ }
1574
+
1575
+ declare class AXPTemplateViewerService {
1576
+ private readonly popupService;
1577
+ /**
1578
+ * Show a template viewer dialog with the given configuration
1579
+ * @param config Template viewer configuration including template, title, and UI options
1580
+ * @returns Promise resolving to viewer result with form values and cancellation status
1581
+ */
1582
+ showTemplate(config: AXPTemplateViewerConfig): Promise<AXPTemplateViewerResult>;
1583
+ /**
1584
+ * Show a template viewer in read-only mode
1585
+ * @param config Template viewer configuration
1586
+ * @returns Promise resolving to viewer result
1587
+ */
1588
+ showTemplateReadOnly(config: Omit<AXPTemplateViewerConfig, 'readOnly' | 'showActions'>): Promise<AXPTemplateViewerResult>;
1589
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTemplateViewerService, never>;
1590
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPTemplateViewerService>;
501
1591
  }
502
1592
 
503
1593
  type AXPUserAvatarSize = 'small' | 'medium' | 'large';
@@ -591,6 +1681,21 @@ declare class AXPUserAvatarComponent implements OnInit, OnDestroy {
591
1681
  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>;
592
1682
  }
593
1683
 
1684
+ declare class AXPQueryViewsComponent {
1685
+ #private;
1686
+ protected popupService: AXPopupService;
1687
+ protected translate: AXTranslationService;
1688
+ protected tabs: _angular_core.Signal<AXTabsComponent | undefined>;
1689
+ views: _angular_core.ModelSignal<AXPViewQuery[]>;
1690
+ selectedView: _angular_core.ModelSignal<AXPViewQuery>;
1691
+ protected isMounted: _angular_core.WritableSignal<boolean>;
1692
+ ngAfterViewInit(): void;
1693
+ setView(view: AXPViewQuery): void;
1694
+ handleActiveChange(e: any): void;
1695
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPQueryViewsComponent, never>;
1696
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPQueryViewsComponent, "axp-query-views", never, { "views": { "alias": "views"; "required": false; "isSignal": true; }; "selectedView": { "alias": "selectedView"; "required": true; "isSignal": true; }; }, { "views": "viewsChange"; "selectedView": "selectedViewChange"; }, never, never, true, never>;
1697
+ }
1698
+
594
1699
  /**
595
1700
  * Generic interface for widget item data
596
1701
  */
@@ -651,5 +1756,5 @@ declare class AXPWidgetItemComponent {
651
1756
  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>;
652
1757
  }
653
1758
 
654
- export { AXPActivityLogComponent, AXPCompareViewComponent, AXPComponentSlot, AXPComponentSlotDirective, AXPComponentSlotModule, AXPComponentSlotRegistryService, AXPDynamicFormComponent, AXPLayoutFiltersComponent, AXPMenuBadgeHelper, AXPTaskBadgeDirective, AXPTaskBadgeProvider, AXPTaskBadgeService, AXPThemeLayoutActionsComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutContainerComponent, AXPThemeLayoutEndSideComponent, AXPThemeLayoutFooterComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutListComponent, AXPThemeLayoutListItemComponent, AXPThemeLayoutListItemsGroupComponent, AXPThemeLayoutPageHeaderComponent, AXPThemeLayoutPagePrimaryActionsComponent, AXPThemeLayoutPageSecondaryActionsComponent, AXPThemeLayoutSectionComponent, AXPThemeLayoutStartSideComponent, AXPThemeLayoutToolbarComponent, AXPUserAvatarComponent, AXPUserAvatarService, AXPWidgetItemComponent, AXP_TASK_BADGE_PROVIDERS, AXP_USER_AVATAR_PROVIDER };
655
- export type { AXPCompareViewField, AXPCompareViewInputs, AXPCompareViewMode, AXPCompareViewObject, AXPComponentSlotConfig, AXPComponentSlotModuleConfigs, AXPDynamicFormDefinition, AXPDynamicFormFieldDefinition, AXPDynamicFormGroupDefinition, AXPDynamicFormLayoutConfig, AXPDynamicFormLayoutStyle, AXPUserAvatarData, AXPUserAvatarProvider, AXPUserAvatarSize, AXPUserAvatarStatus, AXPWidgetItemClickEvent, AXPWidgetItemData };
1759
+ export { AXPActivityLogComponent, AXPCategoryTreeComponent, AXPCompareViewComponent, AXPComponentSlot, AXPComponentSlotDirective, AXPComponentSlotModule, AXPComponentSlotRegistryService, AXPDataSelectorComponent, AXPDataSelectorService, AXPDynamicDialogComponent, AXPDynamicDialogService, AXPDynamicFormBuilderService, AXPDynamicFormComponent, AXPDynamicFormStepperComponent, AXPExtraPropertiesComponent, AXPExtraPropertiesSchemaComponent, AXPExtraPropertiesValuesComponent, 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, AXP_EXTRA_PROPERTY_TYPES, AXP_TASK_BADGE_PROVIDERS, AXP_USER_AVATAR_PROVIDER };
1760
+ export type { AXPCategoryTreeActions, AXPCategoryTreeConfig, AXPCategoryTreeDataSource, AXPCategoryTreeEvents, AXPCategoryTreeNode, AXPCompareViewField, AXPCompareViewInputs, AXPCompareViewMode, AXPCompareViewObject, AXPComponentSlotConfig, AXPComponentSlotModuleConfigs, AXPDataSelectorColumn, AXPDataSelectorConfig, AXPDialogRef, AXPDynamicDialogConfig, AXPDynamicDialogResult, AXPDynamicFormDefinition, AXPDynamicFormDirection, AXPDynamicFormFieldDefinition, AXPDynamicFormGroupDefinition, AXPDynamicFormLayoutConfig, AXPDynamicFormLook, AXPDynamicFormMode, AXPDynamicFormStepperDefinition, AXPDynamicFormStepperStepDefinition, AXPExtraPropertyItem, AXPExtraPropertySchemaItem, AXPExtraPropertyType, AXPTemplateViewerConfig, AXPTemplateViewerResult, AXPUserAvatarData, AXPUserAvatarProvider, AXPUserAvatarSize, AXPUserAvatarStatus, AXPWidgetItemClickEvent, AXPWidgetItemData, AXPWidgetPropertiesChangedEvent, AXPWidgetPropertyTab, ColorBoxOptions, DateTimeBoxOptions, DialogBuilderState, FieldBuilderState, FormBuilderState, GroupBuilderState, IActionBuilder, IDialogBuilder, IFieldBuilder, IFieldOptions, IFormBuilder, IGroupBuilder, IStepBuilder, LargeTextBoxOptions, LookupBoxOptions, NumberBoxOptions, PasswordBoxOptions, RichTextOptions, SelectBoxOptions, SelectionListOptions, StateMode, StepBuilderState, TextBoxOptions, ToggleSwitchOptions };