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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/fesm2022/acorex-platform-auth.mjs +281 -23
  2. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  3. package/fesm2022/acorex-platform-common-common-settings.provider-Bi1RYif5.mjs +163 -0
  4. package/fesm2022/acorex-platform-common-common-settings.provider-Bi1RYif5.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-common.mjs +1047 -263
  6. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-core.mjs +1138 -510
  8. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-domain.mjs +557 -826
  10. package/fesm2022/acorex-platform-domain.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-layout-builder.mjs +804 -186
  12. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  13. package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs +121 -0
  14. package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-layout-components.mjs +6208 -2344
  16. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  17. package/fesm2022/acorex-platform-layout-designer.mjs +456 -204
  18. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-layout-entity.mjs +18632 -10286
  20. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-layout-views.mjs +538 -168
  22. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  23. package/fesm2022/acorex-platform-layout-widget-core.mjs +720 -456
  24. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  25. package/fesm2022/{acorex-platform-layout-widgets-button-widget-designer.component-C3VoBb_b.mjs → acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs} +10 -10
  26. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs.map +1 -0
  27. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CDYAGBku.mjs +103 -0
  28. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CDYAGBku.mjs.map +1 -0
  29. package/fesm2022/{acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs → acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs} +6 -7
  30. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs.map +1 -0
  31. package/fesm2022/{acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs → acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs} +12 -12
  32. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs.map +1 -0
  33. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BGO75IMz.mjs +116 -0
  34. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BGO75IMz.mjs.map +1 -0
  35. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-DmzNTYiS.mjs} +6 -6
  36. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-DmzNTYiS.mjs.map +1 -0
  37. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-BNG_588B.mjs} +5 -5
  38. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-BNG_588B.mjs.map +1 -0
  39. package/fesm2022/{acorex-platform-layout-widgets-text-block-widget-designer.component-Df1BFkSa.mjs → acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs} +6 -6
  40. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs.map +1 -0
  41. package/fesm2022/acorex-platform-layout-widgets.mjs +8728 -4269
  42. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  43. package/fesm2022/acorex-platform-native.mjs +8 -7
  44. package/fesm2022/acorex-platform-native.mjs.map +1 -1
  45. package/fesm2022/acorex-platform-runtime.mjs +391 -166
  46. package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
  47. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cx1lLUaR.mjs +160 -0
  48. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cx1lLUaR.mjs.map +1 -0
  49. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-AOrcgjDF.mjs +120 -0
  50. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-AOrcgjDF.mjs.map +1 -0
  51. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs → acorex-platform-themes-default-entity-master-single-view.component-BfCeUU5F.mjs} +19 -26
  52. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-BfCeUU5F.mjs.map +1 -0
  53. package/fesm2022/{acorex-platform-themes-default-error-401.component-cfREo88K.mjs → acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs} +4 -4
  54. package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs.map +1 -0
  55. package/fesm2022/{acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs → acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs} +4 -4
  56. package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs.map +1 -0
  57. package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs +19 -0
  58. package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs.map +1 -0
  59. package/fesm2022/acorex-platform-themes-default.mjs +1836 -67
  60. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  61. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs → acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs} +6 -6
  62. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs.map +1 -0
  63. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs → acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs} +6 -6
  64. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs.map +1 -0
  65. package/fesm2022/{acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs → acorex-platform-themes-shared-settings.provider-DK6R87Lf.mjs} +24 -25
  66. package/fesm2022/acorex-platform-themes-shared-settings.provider-DK6R87Lf.mjs.map +1 -0
  67. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs +94 -0
  68. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs.map +1 -0
  69. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs +86 -0
  70. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs.map +1 -0
  71. package/fesm2022/acorex-platform-themes-shared.mjs +674 -573
  72. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  73. package/fesm2022/acorex-platform-workflow.mjs +1715 -535
  74. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  75. package/fesm2022/acorex-platform.mjs.map +1 -1
  76. package/package.json +37 -37
  77. package/{auth/index.d.ts → types/acorex-platform-auth.d.ts} +241 -4
  78. package/{common/index.d.ts → types/acorex-platform-common.d.ts} +598 -80
  79. package/{core/index.d.ts → types/acorex-platform-core.d.ts} +595 -132
  80. package/{domain/index.d.ts → types/acorex-platform-domain.d.ts} +744 -412
  81. package/{layout/builder/index.d.ts → types/acorex-platform-layout-builder.d.ts} +193 -48
  82. package/types/acorex-platform-layout-components.d.ts +2979 -0
  83. package/{layout/designer/index.d.ts → types/acorex-platform-layout-designer.d.ts} +96 -18
  84. package/{layout/entity/index.d.ts → types/acorex-platform-layout-entity.d.ts} +1601 -261
  85. package/{layout/views/index.d.ts → types/acorex-platform-layout-views.d.ts} +116 -55
  86. package/{layout/widget-core/index.d.ts → types/acorex-platform-layout-widget-core.d.ts} +272 -124
  87. package/{layout/widgets/index.d.ts → types/acorex-platform-layout-widgets.d.ts} +1055 -157
  88. package/{native/index.d.ts → types/acorex-platform-native.d.ts} +0 -7
  89. package/types/acorex-platform-runtime.d.ts +571 -0
  90. package/{themes/default/index.d.ts → types/acorex-platform-themes-default.d.ts} +122 -5
  91. package/{themes/shared/index.d.ts → types/acorex-platform-themes-shared.d.ts} +1 -1
  92. package/types/acorex-platform-workflow.d.ts +1884 -0
  93. package/fesm2022/acorex-platform-common-common-settings.provider-zhqNP3xb.mjs +0 -71
  94. package/fesm2022/acorex-platform-common-common-settings.provider-zhqNP3xb.mjs.map +0 -1
  95. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-C3VoBb_b.mjs.map +0 -1
  96. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs +0 -135
  97. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs.map +0 -1
  98. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs.map +0 -1
  99. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs.map +0 -1
  100. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs.map +0 -1
  101. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs.map +0 -1
  102. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Df1BFkSa.mjs.map +0 -1
  103. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs +0 -157
  104. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs.map +0 -1
  105. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DyDa_hyd.mjs +0 -1542
  106. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DyDa_hyd.mjs.map +0 -1
  107. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs +0 -101
  108. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs.map +0 -1
  109. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs.map +0 -1
  110. package/fesm2022/acorex-platform-themes-default-error-401.component-cfREo88K.mjs.map +0 -1
  111. package/fesm2022/acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs.map +0 -1
  112. package/fesm2022/acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs +0 -19
  113. package/fesm2022/acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs.map +0 -1
  114. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs.map +0 -1
  115. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs.map +0 -1
  116. package/fesm2022/acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs.map +0 -1
  117. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs +0 -65
  118. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs.map +0 -1
  119. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs +0 -64
  120. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs.map +0 -1
  121. package/layout/components/index.d.ts +0 -1669
  122. package/runtime/index.d.ts +0 -307
  123. package/workflow/index.d.ts +0 -1808
  124. /package/{index.d.ts → types/acorex-platform.d.ts} +0 -0
@@ -3,13 +3,19 @@ import { OnInit, EventEmitter } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
4
  import { AXFormComponent } from '@acorex/components/form';
5
5
  import { AXValidationSummary } from '@acorex/core/validation';
6
- import { AXPWidgetNode, AXPWidgetRenderMode, AXPWidgetCoreContextChangeEvent, AXPWidgetContainerComponent, AXPWidgetCoreElementAction } from '@acorex/platform/layout/widget-core';
6
+ import { AXPWidgetNode, AXPWidgetRenderMode, AXPWidgetContainerComponent, AXPWidgetCoreElementAction } from '@acorex/platform/layout/widget-core';
7
7
  import { AXDataSource } from '@acorex/cdk/common';
8
8
  import { AXPopupSizeType } from '@acorex/components/popup';
9
9
  import { AXStepWizardLook } from '@acorex/components/step-wizard';
10
- import { AXPGridLayoutOptions, AXPExpression, AXPValidationRules, AXPOptionsData, AXPActionMenuItem } from '@acorex/platform/core';
10
+ import { AXPMetaData, AXPGridLayoutOptions, AXPActionMenuItem, AXPMultiLanguageString, AXPExpression, AXPValidationRules, AXPOptionsData, AXPContextChangeEvent, AXPExecuteCommandResult } from '@acorex/platform/core';
11
11
  import { AXBasePageComponent } from '@acorex/components/page';
12
+ import { AXPCommand } from '@acorex/platform/runtime';
12
13
 
14
+ /**
15
+ * Extended widget node properties (excluding type, path, name, options, children)
16
+ * These properties can be passed as a third parameter to customWidget method
17
+ */
18
+ type AXPWidgetNodeExtendedProperties = Omit<AXPWidgetNode, 'type' | 'path' | 'name' | 'options'>;
13
19
  /**
14
20
  * Form appearance and density styling (using fieldset widget look)
15
21
  */
@@ -24,9 +30,9 @@ type AXPDynamicFormMode = 'view' | 'edit';
24
30
  type AXPDynamicFormDirection = 'vertical' | 'horizontal' | 'grid';
25
31
  interface AXPDynamicFormFieldDefinition {
26
32
  path: string;
27
- title?: string;
33
+ title?: AXPMultiLanguageString;
28
34
  badge?: string;
29
- description?: string;
35
+ description?: AXPMultiLanguageString;
30
36
  widget: AXPWidgetNode;
31
37
  /**
32
38
  * Optional per-field rendering mode. Takes precedence over section and form modes.
@@ -36,8 +42,8 @@ interface AXPDynamicFormFieldDefinition {
36
42
  }
37
43
  interface AXPDynamicFormGroupDefinition {
38
44
  name: string;
39
- title?: string;
40
- description?: string;
45
+ title?: AXPMultiLanguageString;
46
+ description?: AXPMultiLanguageString;
41
47
  parameters: AXPDynamicFormFieldDefinition[];
42
48
  /**
43
49
  * Optional per-section rendering mode. Takes precedence over form mode and is overridden by field mode.
@@ -59,7 +65,7 @@ interface AXPDialogRef {
59
65
  /**
60
66
  * Manually close the dialog (optional - dialog closes automatically after user interaction)
61
67
  */
62
- close(): void;
68
+ close(result?: any): void;
63
69
  /**
64
70
  * Get the form data from the dialog
65
71
  */
@@ -72,6 +78,17 @@ interface AXPDialogRef {
72
78
  * Set the loading state of the dialog
73
79
  */
74
80
  setLoading(loading: boolean): void;
81
+ /**
82
+ * Deep-merge partial values into the dialog layout context (e.g. after create returns an id).
83
+ */
84
+ patchContext?(partial: Record<string, unknown>): void;
85
+ /**
86
+ * Invoke a registered widget's public `api()` method (e.g. step-wizard `next`).
87
+ */
88
+ invokeWidget?(widgetName: string, method: string, options?: {
89
+ setLoading?: (loading: boolean) => void;
90
+ close?: (result?: any) => void;
91
+ }): Promise<void>;
75
92
  }
76
93
  interface LayoutWidgetOptions {
77
94
  name?: string;
@@ -82,7 +99,7 @@ interface ValueWidgetOptions extends LayoutWidgetOptions {
82
99
  validations?: AXPValidationRules;
83
100
  }
84
101
  interface TextBoxOptions extends ValueWidgetOptions {
85
- placeholder?: string;
102
+ placeholder?: AXPMultiLanguageString;
86
103
  maxLength?: number;
87
104
  minLength?: number;
88
105
  prefix?: string;
@@ -93,14 +110,14 @@ interface NumberBoxOptions extends ValueWidgetOptions {
93
110
  min?: number;
94
111
  max?: number;
95
112
  step?: number;
96
- placeholder?: string;
113
+ placeholder?: AXPMultiLanguageString;
97
114
  format?: string;
98
115
  }
99
116
  interface SelectBoxOptions extends ValueWidgetOptions {
100
117
  dataSource: any[] | (() => any[]) | (() => Promise<any[]>) | AXDataSource<any>;
101
118
  valueField?: string;
102
119
  textField?: string;
103
- placeholder?: string;
120
+ placeholder?: AXPMultiLanguageString;
104
121
  multiple?: boolean;
105
122
  searchable?: boolean;
106
123
  clearButton?: boolean;
@@ -111,7 +128,7 @@ interface DateTimeBoxOptions extends ValueWidgetOptions {
111
128
  format?: string;
112
129
  min?: Date | string;
113
130
  max?: Date | string;
114
- placeholder?: string;
131
+ placeholder?: AXPMultiLanguageString;
115
132
  clearButton?: boolean;
116
133
  }
117
134
  interface ToggleSwitchOptions extends ValueWidgetOptions {
@@ -123,7 +140,7 @@ interface LargeTextBoxOptions extends ValueWidgetOptions {
123
140
  rows?: number;
124
141
  maxLength?: number;
125
142
  minLength?: number;
126
- placeholder?: string;
143
+ placeholder?: AXPMultiLanguageString;
127
144
  resizable?: boolean;
128
145
  }
129
146
  interface ColorBoxOptions extends ValueWidgetOptions {
@@ -222,12 +239,18 @@ interface AXPFieldsetContainerOptions extends LayoutWidgetOptions {
222
239
  isOpen?: boolean;
223
240
  look?: 'fieldset' | 'card' | 'group' | 'container';
224
241
  disabled?: boolean;
242
+ showTitle?: boolean;
225
243
  showHeader?: boolean;
226
244
  cols?: number;
227
245
  }
246
+ /** How optional `hint` text is rendered in `form-field` layout widgets. */
247
+ type AXPFormFieldHintDisplayMode = 'icon' | 'note';
228
248
  interface AXPFormFieldOptions extends LayoutWidgetOptions {
229
249
  label?: string;
230
250
  showLabel?: boolean;
251
+ /** Translated/helper copy; pairing with {@link hintDisplayMode}. */
252
+ hint?: AXPMultiLanguageString;
253
+ hintDisplayMode?: AXPFormFieldHintDisplayMode;
231
254
  }
232
255
  interface AXPDialogContainerOptions extends LayoutWidgetOptions {
233
256
  title?: string;
@@ -235,14 +258,35 @@ interface AXPDialogContainerOptions extends LayoutWidgetOptions {
235
258
  size?: AXPopupSizeType;
236
259
  closeButton?: boolean;
237
260
  context?: any;
261
+ metadata?: AXPMetaData;
262
+ /**
263
+ * When set, invoked on footer action with {@link AXPDialogRef}.
264
+ * Set via {@link IDialogBuilder.onAction}.
265
+ */
266
+ onAction?: (dialogRef: AXPDialogRef) => unknown | Promise<unknown>;
267
+ }
268
+ /**
269
+ * Popup payload for `AXPDialogRendererComponent` (`data.config`) and the `layout-builder.dialog.config` hook.
270
+ */
271
+ interface AXPLayoutBuilderDialogConfig {
272
+ title: string;
273
+ context: Record<string, unknown>;
274
+ definition: AXPWidgetNode;
275
+ metadata?: AXPMetaData;
276
+ actions: NonNullable<DialogBuilderState['actions']>;
277
+ onAction?: (dialogRef: AXPDialogRef) => unknown | Promise<unknown>;
238
278
  }
239
279
  interface RichTextOptions extends ValueWidgetOptions {
240
- placeholder?: string;
280
+ placeholder?: AXPMultiLanguageString;
241
281
  toolbar?: string[];
242
282
  readonly?: boolean;
283
+ /** Max height (px) for scrollable full preview when `showFullContent` is true. */
284
+ height?: number;
285
+ /** When true, view mode renders full HTML in a scrollable area instead of a truncated snippet. */
286
+ showFullContent?: boolean;
243
287
  }
244
288
  interface PasswordBoxOptions extends ValueWidgetOptions {
245
- placeholder?: string;
289
+ placeholder?: AXPMultiLanguageString;
246
290
  revealToggle?: boolean;
247
291
  maxLength?: number;
248
292
  }
@@ -264,7 +308,7 @@ interface SelectionListOptions extends ValueWidgetOptions {
264
308
  textField?: string;
265
309
  multiple?: boolean;
266
310
  searchable?: boolean;
267
- placeholder?: string;
311
+ placeholder?: AXPMultiLanguageString;
268
312
  }
269
313
  interface AXPListWidgetColumn {
270
314
  name: string;
@@ -384,7 +428,7 @@ interface AXPWidgetConfiguration {
384
428
  options?: AXPOptionsData;
385
429
  }
386
430
  type LayoutBuilderState = AXPWidgetNode;
387
- type WidgetBuilderState = Omit<AXPWidgetNode, 'children'> & {
431
+ type WidgetBuilderState = AXPWidgetNode & {
388
432
  layout?: AXPGridLayoutOptions;
389
433
  };
390
434
  type FormFieldBuilderState = AXPWidgetNode & {
@@ -403,7 +447,9 @@ type DialogBuilderState = AXPWidgetNode & {
403
447
  interface IActionBuilder {
404
448
  cancel(text?: string): IActionBuilder;
405
449
  submit(text?: string): IActionBuilder;
406
- custom(action: AXPActionMenuItem): IActionBuilder;
450
+ custom(action: AXPActionMenuItem & {
451
+ position?: 'prefix' | 'suffix';
452
+ }): IActionBuilder;
407
453
  }
408
454
  interface ILayoutBuilder {
409
455
  grid(delegate: (container: IGridContainerBuilder) => void): ILayoutBuilder;
@@ -412,9 +458,14 @@ interface ILayoutBuilder {
412
458
  page(delegate: (container: IPageContainerBuilder) => void): ILayoutBuilder;
413
459
  tabset(delegate: (container: ITabsetContainerBuilder) => void): ILayoutBuilder;
414
460
  fieldset(delegate: (container: IFieldsetContainerBuilder) => void): ILayoutBuilder;
415
- dialog(delegate: (container: IDialogBuilder) => void): IDialogBuilder;
461
+ dialog<T = AXPDialogRef>(delegate: (container: IDialogBuilder<T>) => void): IDialogBuilder<T>;
416
462
  stepWizard(delegate: (wizard: IStepWizardBuilder) => void): ILayoutBuilder;
417
463
  build(): AXPWidgetNode;
464
+ toJson(options?: {
465
+ removeMeta?: boolean;
466
+ removeFunctions?: boolean;
467
+ pretty?: boolean;
468
+ }): string;
418
469
  }
419
470
  interface IWidgetBuilder {
420
471
  name(name: string): IWidgetBuilder;
@@ -498,6 +549,8 @@ interface IGridContainerBuilder extends IBaseContainerBuilder<IGridContainerBuil
498
549
  setBackgroundColor(color: string): IGridContainerBuilder;
499
550
  setPadding(padding: string): IGridContainerBuilder;
500
551
  setMargin(margin: string): IGridContainerBuilder;
552
+ /** Add a grid-item-layout child with optional placement; delegate builds the fieldset content. */
553
+ item(layoutOptions: Partial<AXPGridLayoutOptions> | null | undefined, delegate: (container: IFieldsetContainerBuilder) => void): IGridContainerBuilder;
501
554
  }
502
555
  interface IPanelContainerBuilder extends IBaseContainerBuilder<IPanelContainerBuilder>, ILayoutContainerBuilder<IPanelContainerBuilder>, IChildContainerBuilder<IPanelContainerBuilder>, IWidgetContainerBuilder<IPanelContainerBuilder> {
503
556
  setOptions(options: AXPPanelContainerOptions): IPanelContainerBuilder;
@@ -540,6 +593,7 @@ interface IFormFieldBuilder extends IBaseContainerBuilder<IFormFieldBuilder>, IL
540
593
  toggleSwitch(options?: Omit<ToggleSwitchOptions, 'path'>): IFormFieldBuilder;
541
594
  colorBox(options?: Omit<ColorBoxOptions, 'path'>): IFormFieldBuilder;
542
595
  customWidget<T>(type: string, options?: Omit<T, 'path'>): IFormFieldBuilder;
596
+ customWidget<T>(type: string, options?: Omit<T, 'path'> & Partial<AXPWidgetNodeExtendedProperties>): IFormFieldBuilder;
543
597
  }
544
598
  interface IFieldsetContainerBuilder extends IBaseContainerBuilder<IFieldsetContainerBuilder>, ILayoutContainerBuilder<IFieldsetContainerBuilder> {
545
599
  setOptions(options: AXPFieldsetContainerOptions): IFieldsetContainerBuilder;
@@ -553,19 +607,26 @@ interface IFieldsetContainerBuilder extends IBaseContainerBuilder<IFieldsetConta
553
607
  setCols(cols: number): IFieldsetContainerBuilder;
554
608
  formField(label: string, delegate?: (field: IFormFieldBuilder) => void): IFieldsetContainerBuilder;
555
609
  }
556
- interface IDialogBuilder {
610
+ interface IDialogBuilder<T = AXPDialogRef> {
557
611
  }
558
- interface IDialogBuilder {
559
- setOptions(options: AXPDialogContainerOptions): IDialogBuilder;
560
- setTitle(title: string): IDialogBuilder;
561
- setMessage(message?: string): IDialogBuilder;
562
- setSize(size: AXPopupSizeType): IDialogBuilder;
563
- setCloseButton(closeButton: boolean): IDialogBuilder;
564
- setContext(context: any): IDialogBuilder;
565
- content(delegate: (layoutBuilder: IFlexContainerBuilder) => void): IDialogBuilder;
566
- setActions(delegate?: (actions: IActionBuilder) => void): IDialogBuilder;
567
- addCustomAction(action: AXPActionMenuItem): IDialogBuilder;
568
- show(): Promise<AXPDialogRef>;
612
+ interface IDialogBuilder<T = AXPDialogRef> {
613
+ setOptions(options: AXPDialogContainerOptions): IDialogBuilder<T>;
614
+ setTitle(title: string): IDialogBuilder<T>;
615
+ setMessage(message?: string): IDialogBuilder<T>;
616
+ setSize(size: AXPopupSizeType): IDialogBuilder<T>;
617
+ setCloseButton(closeButton: boolean): IDialogBuilder<T>;
618
+ setContext(context: any): IDialogBuilder<T>;
619
+ content(delegate: (layoutBuilder: IFlexContainerBuilder) => void): IDialogBuilder<T>;
620
+ setActions(delegate?: (actions: IActionBuilder) => void): IDialogBuilder<T>;
621
+ /**
622
+ * Handler invoked when user clicks an action. Receives AXPDialogRef (context, action, setLoading, close).
623
+ * If handler throws, dialog stays open for retry.
624
+ * If handler returns, dialog closes and show() resolves with the return value.
625
+ */
626
+ onAction(handler: (dialogRef: AXPDialogRef) => T | Promise<T>): IDialogBuilder<T>;
627
+ addCustomAction(action: AXPActionMenuItem): IDialogBuilder<T>;
628
+ build(): AXPWidgetNode;
629
+ show(): Promise<T>;
569
630
  }
570
631
  interface IListWidgetBuilder extends IBaseContainerBuilder<IListWidgetBuilder>, ILayoutContainerBuilder<IListWidgetBuilder>, IChildContainerBuilder<IListWidgetBuilder>, IWidgetContainerBuilder<IListWidgetBuilder> {
571
632
  setOptions(options: AXPListWidgetOptions): IListWidgetBuilder;
@@ -641,6 +702,11 @@ declare class AXPLayoutRendererComponent implements OnInit {
641
702
  */
642
703
  mode: _angular_core.InputSignal<AXPDynamicFormMode>;
643
704
  protected widgetTree: _angular_core.WritableSignal<AXPWidgetNode | null>;
705
+ /**
706
+ * Prefer explicit {@link AXPWidgetNode.mode} on the root node (e.g. dialog flex `mode('view')`)
707
+ * so nested widgets resolve view vs edit correctly; fall back to the layout `mode` input.
708
+ */
709
+ protected effectiveRenderMode: _angular_core.Signal<"view" | "edit" | "column" | "designer" | "print" | "filter">;
644
710
  /**
645
711
  * Convert layout data to widget tree when inputs change
646
712
  */
@@ -667,7 +733,7 @@ declare class AXPLayoutRendererComponent implements OnInit {
667
733
  /**
668
734
  * Handle context change events from widget container (optimized with RxJS)
669
735
  */
670
- protected handleContextChanged(event: AXPWidgetCoreContextChangeEvent): void;
736
+ protected handleContextChanged(event: AXPContextChangeEvent): void;
671
737
  /**
672
738
  * Get the form component instance
673
739
  */
@@ -722,8 +788,40 @@ declare class LayoutBuilderModule {
722
788
  static ɵinj: _angular_core.ɵɵInjectorDeclaration<LayoutBuilderModule>;
723
789
  }
724
790
 
791
+ /**
792
+ * Runs after dialog options and context are prepared and **before** footer customization and popup open.
793
+ * Listeners may mutate {@link AXPLayoutBuilderDialogBeforeOpenPayload.context} by reference.
794
+ */
795
+ declare const AXP_LAYOUT_BUILDER_DIALOG_BEFORE_OPEN_HOOK_KEY = "layout-builder.dialog.before-open";
796
+ interface AXPLayoutBuilderDialogBeforeOpenPayload {
797
+ context: Record<string, unknown>;
798
+ dialogOptions: AXPDialogContainerOptions;
799
+ }
800
+ /**
801
+ * Runs after builder-defined footer actions exist and **before** the dialog opens.
802
+ * Listeners receive the live `actions.footer.prefix` / `suffix` arrays (same references as the dialog)
803
+ * so they may push, splice, filter, or replace items. They may also mutate {@link AXPLayoutBuilderDialogFooterPayload.context} by reference.
804
+ */
805
+ declare const AXP_LAYOUT_BUILDER_DIALOG_CONFIG_HOOK_KEY = "layout-builder.dialog.config";
806
+ /**
807
+ * Runs whenever the dialog layout builder context changes (debounced upstream), **after** the popup is visible.
808
+ * Use for side effects that depend on live context (for example values updated by widgets after render).
809
+ * Payload mirrors `AXPDialogRendererComponent` semantics: {@link AXPLayoutBuilderDialogContextChangedPayload.getContext},
810
+ * {@link AXPLayoutBuilderDialogContextChangedPayload.patchContext}, and optional loading state.
811
+ */
812
+ declare const AXP_LAYOUT_BUILDER_DIALOG_CONTEXT_CHANGED_HOOK_KEY = "layout-builder.dialog.context-changed";
813
+ interface AXPLayoutBuilderDialogContextChangedPayload {
814
+ /** Stable id for this dialog instance; lets listeners correlate repeated emissions or async follow-up work. */
815
+ sessionKey: string;
816
+ getContext: () => Record<string, unknown>;
817
+ metadata: Record<string, unknown> | undefined;
818
+ patchContext: (partial: Record<string, unknown>) => void;
819
+ setLoading: (loading: boolean) => void;
820
+ }
821
+
725
822
  declare class AXPLayoutBuilderService {
726
823
  private popupService;
824
+ private readonly hookService;
727
825
  /**
728
826
  * Create a new layout builder
729
827
  */
@@ -798,18 +896,7 @@ declare class AXPLayoutConversionService {
798
896
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPLayoutConversionService>;
799
897
  }
800
898
 
801
- interface DialogRendererConfig {
802
- title: string;
803
- message?: string;
804
- context: any;
805
- definition: AXPWidgetNode;
806
- actions?: {
807
- footer?: {
808
- prefix?: any[];
809
- suffix?: any[];
810
- };
811
- };
812
- }
899
+ type DialogRendererConfig = AXPLayoutBuilderDialogConfig;
813
900
  interface DialogRendererResult {
814
901
  context: any;
815
902
  action?: string;
@@ -820,35 +907,93 @@ declare class AXPDialogRendererComponent extends AXBasePageComponent implements
820
907
  result: EventEmitter<DialogRendererResult>;
821
908
  private widgetCoreService;
822
909
  private expressionEvaluator;
910
+ private readonly commandService;
911
+ private readonly hookService;
823
912
  private dialogResult?;
824
913
  context: _angular_core.WritableSignal<any>;
825
- callBack: (dialogRef: AXPDialogRef) => void;
914
+ callBack: (result: unknown) => void;
826
915
  data: any;
827
916
  private isDialogLoading;
828
917
  footerPrefix: _angular_core.WritableSignal<AXPWidgetCoreElementAction[]>;
829
918
  footerSuffix: _angular_core.WritableSignal<AXPWidgetCoreElementAction[]>;
919
+ /**
920
+ * Correlate layout context snapshots for distributed hooks (`layout-builder.dialog.context-changed`).
921
+ */
922
+ private readonly contextChangedHooksSessionKey;
830
923
  ngOnInit(): void;
831
924
  private layoutRenderer;
832
925
  private debounceTimer?;
833
926
  handleContextChanged(event: any): void;
834
927
  handleContextInitiated(event: any): void;
928
+ private invokeLayoutContextChangedHooks;
835
929
  footerPrefixActions(): AXPWidgetCoreElementAction[];
836
930
  footerSuffixActions(): AXPWidgetCoreElementAction[];
837
931
  isFormLoading(): boolean;
838
932
  isSubmitting(): boolean;
839
933
  executeAction(action: AXPWidgetCoreElementAction): Promise<void>;
934
+ /** Whether the layout form should be validated before running this footer command. */
935
+ private shouldValidateBeforeAction;
936
+ /** True when a footer handler or command result asks to leave the dialog open (`keepDialogOpen` on the result or `result.data`). */
937
+ private shouldKeepDialogOpenAfterCommandResult;
938
+ private createDialogRef;
939
+ private closeWithOptionalSkipValidate;
940
+ /** Resolves footer/widget action command to a string (e.g. `cancel`, `submit`, `widget:...`). */
941
+ private resolveActionCommandName;
840
942
  private parseWidgetCommand;
841
- private executeWidgetApi;
943
+ private invokeWidget;
842
944
  close(result?: DialogRendererResult): Promise<void>;
843
945
  private aggregateAndEvaluateActions;
844
946
  private collectWidgetActions;
845
947
  private collectDialogActionsFromConfig;
846
948
  private evaluatePredicates;
847
949
  private evalBool;
950
+ /** Resolves footer action title when it contains {{ ... }} (e.g. wizard labels from dialog context). */
951
+ private evalActionTitle;
848
952
  private resolveApi;
849
953
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDialogRendererComponent, never>;
850
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDialogRendererComponent, "axp-dialog-renderer", never, { "config": { "alias": "config"; "required": false; }; }, { "result": "result"; }, never, never, true, never>;
954
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDialogRendererComponent, "axp-dialog-renderer", never, {}, { "result": "result"; }, never, never, true, never>;
955
+ }
956
+
957
+ /** Registration key for {@link AXPPreviewWidgetFieldCommand}; lives alone so `LayoutBuilderModule` can reference it without static-importing the command implementation. */
958
+ declare const AXP_PREVIEW_WIDGET_FIELD_COMMAND_KEY = "Widget:Preview";
959
+
960
+ /** See `AXP_PREVIEW_WIDGET_FIELD_COMMAND_KEY` in `preview-widget-field.command.key.ts`. */
961
+ interface AXPPreviewWidgetFieldCommandInput {
962
+ /** Widget node to render (same shape as `widget-field-configurator` model). */
963
+ widget?: AXPWidgetNode;
964
+ /**
965
+ * Alternate property name for the widget node (matches metadata definition `interface` field).
966
+ */
967
+ interface?: AXPWidgetNode | string;
968
+ fieldName?: string;
969
+ fieldTitle?: AXPMultiLanguageString;
970
+ name?: string;
971
+ title?: AXPMultiLanguageString;
972
+ }
973
+ type AXPPreviewWidgetFieldInvocation = AXPPreviewWidgetFieldCommandInput & {
974
+ __context__?: {
975
+ data?: Record<string, unknown>;
976
+ options?: Record<string, unknown>;
977
+ };
978
+ };
979
+ /**
980
+ * Opens a dialog that previews a widget configuration (same behavior as the preview button on
981
+ * `axp-widget-field-configurator`). Invoked from that component and from entity list actions.
982
+ */
983
+ declare class AXPPreviewWidgetFieldCommand implements AXPCommand<AXPPreviewWidgetFieldCommandInput, void> {
984
+ private readonly formBuilderService;
985
+ private readonly widgetRegistry;
986
+ private readonly translationService;
987
+ private readonly crudService;
988
+ execute(input: AXPPreviewWidgetFieldInvocation): Promise<AXPExecuteCommandResult<void>>;
989
+ private mergeInvocation;
990
+ private normalizeWidget;
991
+ private resolveFieldTitleLabel;
992
+ private isCancelDialogOutcome;
993
+ private resolveWidgetDisplayTitle;
994
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPPreviewWidgetFieldCommand, never>;
995
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPPreviewWidgetFieldCommand>;
851
996
  }
852
997
 
853
- export { AXPDialogRendererComponent, AXPLayoutBuilderService, AXPLayoutConversionService, AXPLayoutRendererComponent, LayoutBuilderModule };
854
- export type { AXPDialogContainerOptions, AXPDialogRef, AXPDynamicFormDefinition, AXPDynamicFormDirection, AXPDynamicFormFieldDefinition, AXPDynamicFormGroupDefinition, AXPDynamicFormLook, AXPDynamicFormMode, AXPFieldsetContainerOptions, AXPFlexContainerOptions, AXPFormFieldOptions, AXPGridContainerOptions, AXPListWidgetColumn, AXPListWidgetOptions, AXPListWidgetRowCommand, AXPPageContainerOptions, AXPPanelContainerOptions, AXPStepDefinition, AXPStepWizardContainerOptions, AXPStepWizardDefinition, AXPStepWizardGuardPayload, AXPStepWizardStatus, AXPTabsetContainerOptions, AXPWidgetConfiguration, AXPWizardActionDefinition, AXPWizardActions, ColorBoxOptions, DateTimeBoxOptions, DialogBuilderState, DialogRendererConfig, DialogRendererResult, FormFieldBuilderState, IActionBuilder, IBaseContainerBuilder, IChildContainerBuilder, IDialogBuilder, IFieldsetContainerBuilder, IFlexContainerBuilder, IFormFieldBuilder, IGridContainerBuilder, ILayoutBuilder, ILayoutContainerBuilder, IListWidgetBuilder, IPageContainerBuilder, IPanelContainerBuilder, IStepBuilder, IStepWizardBuilder, ITabsetContainerBuilder, IWidgetBuilder, IWidgetContainerBuilder, InheritanceContext, InheritedProperties, LargeTextBoxOptions, LayoutBuilderState, LayoutWidgetOptions, LookupBoxOptions, NumberBoxOptions, PasswordBoxOptions, RichTextOptions, SelectBoxOptions, SelectionListOptions, TextBoxOptions, ToggleSwitchOptions, ValueWidgetOptions, WidgetBuilderState };
998
+ export { AXPDialogRendererComponent, AXPLayoutBuilderService, AXPLayoutConversionService, AXPLayoutRendererComponent, AXPPreviewWidgetFieldCommand, AXP_LAYOUT_BUILDER_DIALOG_BEFORE_OPEN_HOOK_KEY, AXP_LAYOUT_BUILDER_DIALOG_CONFIG_HOOK_KEY, AXP_LAYOUT_BUILDER_DIALOG_CONTEXT_CHANGED_HOOK_KEY, AXP_PREVIEW_WIDGET_FIELD_COMMAND_KEY, LayoutBuilderModule };
999
+ export type { AXPDialogContainerOptions, AXPDialogRef, AXPDynamicFormDefinition, AXPDynamicFormDirection, AXPDynamicFormFieldDefinition, AXPDynamicFormGroupDefinition, AXPDynamicFormLook, AXPDynamicFormMode, AXPFieldsetContainerOptions, AXPFlexContainerOptions, AXPFormFieldHintDisplayMode, AXPFormFieldOptions, AXPGridContainerOptions, AXPLayoutBuilderDialogBeforeOpenPayload, AXPLayoutBuilderDialogConfig, AXPLayoutBuilderDialogContextChangedPayload, AXPListWidgetColumn, AXPListWidgetOptions, AXPListWidgetRowCommand, AXPPageContainerOptions, AXPPanelContainerOptions, AXPPreviewWidgetFieldCommandInput, AXPStepDefinition, AXPStepWizardContainerOptions, AXPStepWizardDefinition, AXPStepWizardGuardPayload, AXPStepWizardStatus, AXPTabsetContainerOptions, AXPWidgetConfiguration, AXPWidgetNodeExtendedProperties, AXPWizardActionDefinition, AXPWizardActions, ColorBoxOptions, DateTimeBoxOptions, DialogBuilderState, DialogRendererConfig, DialogRendererResult, FormFieldBuilderState, IActionBuilder, IBaseContainerBuilder, IChildContainerBuilder, IDialogBuilder, IFieldsetContainerBuilder, IFlexContainerBuilder, IFormFieldBuilder, IGridContainerBuilder, ILayoutBuilder, ILayoutContainerBuilder, IListWidgetBuilder, IPageContainerBuilder, IPanelContainerBuilder, IStepBuilder, IStepWizardBuilder, ITabsetContainerBuilder, IWidgetBuilder, IWidgetContainerBuilder, InheritanceContext, InheritedProperties, LargeTextBoxOptions, LayoutBuilderState, LayoutWidgetOptions, LookupBoxOptions, NumberBoxOptions, PasswordBoxOptions, RichTextOptions, SelectBoxOptions, SelectionListOptions, TextBoxOptions, ToggleSwitchOptions, ValueWidgetOptions, WidgetBuilderState };