@acorex/platform 21.0.0-next.7 → 21.0.0-next.70

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 (126) 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 +1370 -276
  6. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-core.mjs +1185 -514
  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 +832 -189
  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 +6309 -1956
  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-attachments-page.component-D8iQnT-R.mjs +371 -0
  20. package/fesm2022/acorex-platform-layout-entity-attachments-page.component-D8iQnT-R.mjs.map +1 -0
  21. package/fesm2022/acorex-platform-layout-entity-file-list-popup.component-_yrP5SQe.mjs +100 -0
  22. package/fesm2022/acorex-platform-layout-entity-file-list-popup.component-_yrP5SQe.mjs.map +1 -0
  23. package/fesm2022/acorex-platform-layout-entity.mjs +22488 -10232
  24. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  25. package/fesm2022/acorex-platform-layout-views.mjs +564 -170
  26. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  27. package/fesm2022/acorex-platform-layout-widget-core.mjs +2084 -481
  28. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  29. 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
  30. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs.map +1 -0
  31. package/fesm2022/{acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs → acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs} +6 -7
  32. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs.map +1 -0
  33. package/fesm2022/{acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs → acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs} +12 -12
  34. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs.map +1 -0
  35. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-J0zcGKBX.mjs +116 -0
  36. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-J0zcGKBX.mjs.map +1 -0
  37. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-BcpRkpJp.mjs} +6 -6
  38. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-BcpRkpJp.mjs.map +1 -0
  39. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-DQtK4lxl.mjs} +5 -5
  40. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-DQtK4lxl.mjs.map +1 -0
  41. 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
  42. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs.map +1 -0
  43. package/fesm2022/acorex-platform-layout-widgets.mjs +10326 -7981
  44. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  45. package/fesm2022/acorex-platform-native.mjs +8 -7
  46. package/fesm2022/acorex-platform-native.mjs.map +1 -1
  47. package/fesm2022/acorex-platform-runtime.mjs +391 -166
  48. package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
  49. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-CWLfNqV0.mjs +160 -0
  50. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-CWLfNqV0.mjs.map +1 -0
  51. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-C7cT82K2.mjs +120 -0
  52. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-C7cT82K2.mjs.map +1 -0
  53. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs → acorex-platform-themes-default-entity-master-single-view.component-Br9p5aXT.mjs} +21 -28
  54. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-Br9p5aXT.mjs.map +1 -0
  55. package/fesm2022/{acorex-platform-themes-default-error-401.component-cfREo88K.mjs → acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs} +4 -4
  56. package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs.map +1 -0
  57. package/fesm2022/{acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs → acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs} +4 -4
  58. package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs.map +1 -0
  59. package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs +19 -0
  60. package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs.map +1 -0
  61. package/fesm2022/acorex-platform-themes-default.mjs +2283 -83
  62. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  63. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs → acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs} +6 -6
  64. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs.map +1 -0
  65. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs → acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs} +6 -6
  66. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs.map +1 -0
  67. package/fesm2022/{acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs → acorex-platform-themes-shared-settings.provider-BjuzSe0T.mjs} +52 -33
  68. package/fesm2022/acorex-platform-themes-shared-settings.provider-BjuzSe0T.mjs.map +1 -0
  69. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs +94 -0
  70. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs.map +1 -0
  71. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs +86 -0
  72. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs.map +1 -0
  73. package/fesm2022/acorex-platform-themes-shared.mjs +767 -609
  74. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  75. package/fesm2022/acorex-platform-workflow.mjs +978 -238
  76. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  77. package/fesm2022/acorex-platform.mjs.map +1 -1
  78. package/package.json +40 -38
  79. package/{auth/index.d.ts → types/acorex-platform-auth.d.ts} +241 -4
  80. package/{common/index.d.ts → types/acorex-platform-common.d.ts} +822 -89
  81. package/{core/index.d.ts → types/acorex-platform-core.d.ts} +658 -133
  82. package/{domain/index.d.ts → types/acorex-platform-domain.d.ts} +744 -412
  83. package/{layout/builder/index.d.ts → types/acorex-platform-layout-builder.d.ts} +194 -49
  84. package/types/acorex-platform-layout-components.d.ts +3253 -0
  85. package/{layout/designer/index.d.ts → types/acorex-platform-layout-designer.d.ts} +96 -18
  86. package/types/acorex-platform-layout-entity.d.ts +4439 -0
  87. package/{layout/views/index.d.ts → types/acorex-platform-layout-views.d.ts} +179 -56
  88. package/{layout/widget-core/index.d.ts → types/acorex-platform-layout-widget-core.d.ts} +398 -127
  89. package/{layout/widgets/index.d.ts → types/acorex-platform-layout-widgets.d.ts} +1120 -501
  90. package/{native/index.d.ts → types/acorex-platform-native.d.ts} +0 -7
  91. package/types/acorex-platform-runtime.d.ts +571 -0
  92. package/{themes/default/index.d.ts → types/acorex-platform-themes-default.d.ts} +233 -6
  93. package/{themes/shared/index.d.ts → types/acorex-platform-themes-shared.d.ts} +24 -2
  94. package/{workflow/index.d.ts → types/acorex-platform-workflow.d.ts} +620 -617
  95. package/fesm2022/acorex-platform-common-common-settings.provider-zhqNP3xb.mjs +0 -71
  96. package/fesm2022/acorex-platform-common-common-settings.provider-zhqNP3xb.mjs.map +0 -1
  97. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-C3VoBb_b.mjs.map +0 -1
  98. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs +0 -135
  99. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs.map +0 -1
  100. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs.map +0 -1
  101. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs.map +0 -1
  102. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs.map +0 -1
  103. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs.map +0 -1
  104. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Df1BFkSa.mjs.map +0 -1
  105. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs +0 -157
  106. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs.map +0 -1
  107. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DfJEx_bs.mjs +0 -1542
  108. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DfJEx_bs.mjs.map +0 -1
  109. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs +0 -101
  110. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs.map +0 -1
  111. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs.map +0 -1
  112. package/fesm2022/acorex-platform-themes-default-error-401.component-cfREo88K.mjs.map +0 -1
  113. package/fesm2022/acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs.map +0 -1
  114. package/fesm2022/acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs +0 -19
  115. package/fesm2022/acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs.map +0 -1
  116. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs.map +0 -1
  117. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs.map +0 -1
  118. package/fesm2022/acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs.map +0 -1
  119. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs +0 -65
  120. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs.map +0 -1
  121. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs +0 -64
  122. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs.map +0 -1
  123. package/layout/components/index.d.ts +0 -1669
  124. package/layout/entity/index.d.ts +0 -2287
  125. package/runtime/index.d.ts +0 -307
  126. /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,7 +78,20 @@ 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
  }
93
+ /** Fallback {@link AXPDialogRef} when the popup is dismissed without a footer action (e.g. header close). */
94
+ declare function createDismissedDialogRef(context?: () => unknown): AXPDialogRef;
76
95
  interface LayoutWidgetOptions {
77
96
  name?: string;
78
97
  }
@@ -82,7 +101,7 @@ interface ValueWidgetOptions extends LayoutWidgetOptions {
82
101
  validations?: AXPValidationRules;
83
102
  }
84
103
  interface TextBoxOptions extends ValueWidgetOptions {
85
- placeholder?: string;
104
+ placeholder?: AXPMultiLanguageString;
86
105
  maxLength?: number;
87
106
  minLength?: number;
88
107
  prefix?: string;
@@ -93,14 +112,14 @@ interface NumberBoxOptions extends ValueWidgetOptions {
93
112
  min?: number;
94
113
  max?: number;
95
114
  step?: number;
96
- placeholder?: string;
115
+ placeholder?: AXPMultiLanguageString;
97
116
  format?: string;
98
117
  }
99
118
  interface SelectBoxOptions extends ValueWidgetOptions {
100
119
  dataSource: any[] | (() => any[]) | (() => Promise<any[]>) | AXDataSource<any>;
101
120
  valueField?: string;
102
121
  textField?: string;
103
- placeholder?: string;
122
+ placeholder?: AXPMultiLanguageString;
104
123
  multiple?: boolean;
105
124
  searchable?: boolean;
106
125
  clearButton?: boolean;
@@ -111,7 +130,7 @@ interface DateTimeBoxOptions extends ValueWidgetOptions {
111
130
  format?: string;
112
131
  min?: Date | string;
113
132
  max?: Date | string;
114
- placeholder?: string;
133
+ placeholder?: AXPMultiLanguageString;
115
134
  clearButton?: boolean;
116
135
  }
117
136
  interface ToggleSwitchOptions extends ValueWidgetOptions {
@@ -123,7 +142,7 @@ interface LargeTextBoxOptions extends ValueWidgetOptions {
123
142
  rows?: number;
124
143
  maxLength?: number;
125
144
  minLength?: number;
126
- placeholder?: string;
145
+ placeholder?: AXPMultiLanguageString;
127
146
  resizable?: boolean;
128
147
  }
129
148
  interface ColorBoxOptions extends ValueWidgetOptions {
@@ -222,12 +241,18 @@ interface AXPFieldsetContainerOptions extends LayoutWidgetOptions {
222
241
  isOpen?: boolean;
223
242
  look?: 'fieldset' | 'card' | 'group' | 'container';
224
243
  disabled?: boolean;
244
+ showTitle?: boolean;
225
245
  showHeader?: boolean;
226
246
  cols?: number;
227
247
  }
248
+ /** How optional `hint` text is rendered in `form-field` layout widgets. */
249
+ type AXPFormFieldHintDisplayMode = 'icon' | 'note';
228
250
  interface AXPFormFieldOptions extends LayoutWidgetOptions {
229
251
  label?: string;
230
252
  showLabel?: boolean;
253
+ /** Translated/helper copy; pairing with {@link hintDisplayMode}. */
254
+ hint?: AXPMultiLanguageString;
255
+ hintDisplayMode?: AXPFormFieldHintDisplayMode;
231
256
  }
232
257
  interface AXPDialogContainerOptions extends LayoutWidgetOptions {
233
258
  title?: string;
@@ -235,14 +260,35 @@ interface AXPDialogContainerOptions extends LayoutWidgetOptions {
235
260
  size?: AXPopupSizeType;
236
261
  closeButton?: boolean;
237
262
  context?: any;
263
+ metadata?: AXPMetaData;
264
+ /**
265
+ * When set, invoked on footer action with {@link AXPDialogRef}.
266
+ * Set via {@link IDialogBuilder.onAction}.
267
+ */
268
+ onAction?: (dialogRef: AXPDialogRef) => unknown | Promise<unknown>;
269
+ }
270
+ /**
271
+ * Popup payload for `AXPDialogRendererComponent` (`data.config`) and the `layout-builder.dialog.config` hook.
272
+ */
273
+ interface AXPLayoutBuilderDialogConfig {
274
+ title: string;
275
+ context: Record<string, unknown>;
276
+ definition: AXPWidgetNode;
277
+ metadata?: AXPMetaData;
278
+ actions: NonNullable<DialogBuilderState['actions']>;
279
+ onAction?: (dialogRef: AXPDialogRef) => unknown | Promise<unknown>;
238
280
  }
239
281
  interface RichTextOptions extends ValueWidgetOptions {
240
- placeholder?: string;
282
+ placeholder?: AXPMultiLanguageString;
241
283
  toolbar?: string[];
242
284
  readonly?: boolean;
285
+ /** Max height (px) for scrollable full preview when `showFullContent` is true. */
286
+ height?: number;
287
+ /** When true, view mode renders full HTML in a scrollable area instead of a truncated snippet. */
288
+ showFullContent?: boolean;
243
289
  }
244
290
  interface PasswordBoxOptions extends ValueWidgetOptions {
245
- placeholder?: string;
291
+ placeholder?: AXPMultiLanguageString;
246
292
  revealToggle?: boolean;
247
293
  maxLength?: number;
248
294
  }
@@ -264,7 +310,7 @@ interface SelectionListOptions extends ValueWidgetOptions {
264
310
  textField?: string;
265
311
  multiple?: boolean;
266
312
  searchable?: boolean;
267
- placeholder?: string;
313
+ placeholder?: AXPMultiLanguageString;
268
314
  }
269
315
  interface AXPListWidgetColumn {
270
316
  name: string;
@@ -384,7 +430,7 @@ interface AXPWidgetConfiguration {
384
430
  options?: AXPOptionsData;
385
431
  }
386
432
  type LayoutBuilderState = AXPWidgetNode;
387
- type WidgetBuilderState = Omit<AXPWidgetNode, 'children'> & {
433
+ type WidgetBuilderState = AXPWidgetNode & {
388
434
  layout?: AXPGridLayoutOptions;
389
435
  };
390
436
  type FormFieldBuilderState = AXPWidgetNode & {
@@ -403,7 +449,9 @@ type DialogBuilderState = AXPWidgetNode & {
403
449
  interface IActionBuilder {
404
450
  cancel(text?: string): IActionBuilder;
405
451
  submit(text?: string): IActionBuilder;
406
- custom(action: AXPActionMenuItem): IActionBuilder;
452
+ custom(action: AXPActionMenuItem & {
453
+ position?: 'prefix' | 'suffix';
454
+ }): IActionBuilder;
407
455
  }
408
456
  interface ILayoutBuilder {
409
457
  grid(delegate: (container: IGridContainerBuilder) => void): ILayoutBuilder;
@@ -412,7 +460,7 @@ interface ILayoutBuilder {
412
460
  page(delegate: (container: IPageContainerBuilder) => void): ILayoutBuilder;
413
461
  tabset(delegate: (container: ITabsetContainerBuilder) => void): ILayoutBuilder;
414
462
  fieldset(delegate: (container: IFieldsetContainerBuilder) => void): ILayoutBuilder;
415
- dialog(delegate: (container: IDialogBuilder) => void): IDialogBuilder;
463
+ dialog<T = AXPDialogRef>(delegate: (container: IDialogBuilder<T>) => void): IDialogBuilder<T>;
416
464
  stepWizard(delegate: (wizard: IStepWizardBuilder) => void): ILayoutBuilder;
417
465
  build(): AXPWidgetNode;
418
466
  toJson(options?: {
@@ -503,6 +551,8 @@ interface IGridContainerBuilder extends IBaseContainerBuilder<IGridContainerBuil
503
551
  setBackgroundColor(color: string): IGridContainerBuilder;
504
552
  setPadding(padding: string): IGridContainerBuilder;
505
553
  setMargin(margin: string): IGridContainerBuilder;
554
+ /** Add a grid-item-layout child with optional placement; delegate builds the fieldset content. */
555
+ item(layoutOptions: Partial<AXPGridLayoutOptions> | null | undefined, delegate: (container: IFieldsetContainerBuilder) => void): IGridContainerBuilder;
506
556
  }
507
557
  interface IPanelContainerBuilder extends IBaseContainerBuilder<IPanelContainerBuilder>, ILayoutContainerBuilder<IPanelContainerBuilder>, IChildContainerBuilder<IPanelContainerBuilder>, IWidgetContainerBuilder<IPanelContainerBuilder> {
508
558
  setOptions(options: AXPPanelContainerOptions): IPanelContainerBuilder;
@@ -545,6 +595,7 @@ interface IFormFieldBuilder extends IBaseContainerBuilder<IFormFieldBuilder>, IL
545
595
  toggleSwitch(options?: Omit<ToggleSwitchOptions, 'path'>): IFormFieldBuilder;
546
596
  colorBox(options?: Omit<ColorBoxOptions, 'path'>): IFormFieldBuilder;
547
597
  customWidget<T>(type: string, options?: Omit<T, 'path'>): IFormFieldBuilder;
598
+ customWidget<T>(type: string, options?: Omit<T, 'path'> & Partial<AXPWidgetNodeExtendedProperties>): IFormFieldBuilder;
548
599
  }
549
600
  interface IFieldsetContainerBuilder extends IBaseContainerBuilder<IFieldsetContainerBuilder>, ILayoutContainerBuilder<IFieldsetContainerBuilder> {
550
601
  setOptions(options: AXPFieldsetContainerOptions): IFieldsetContainerBuilder;
@@ -558,20 +609,26 @@ interface IFieldsetContainerBuilder extends IBaseContainerBuilder<IFieldsetConta
558
609
  setCols(cols: number): IFieldsetContainerBuilder;
559
610
  formField(label: string, delegate?: (field: IFormFieldBuilder) => void): IFieldsetContainerBuilder;
560
611
  }
561
- interface IDialogBuilder {
562
- }
563
- interface IDialogBuilder {
564
- setOptions(options: AXPDialogContainerOptions): IDialogBuilder;
565
- setTitle(title: string): IDialogBuilder;
566
- setMessage(message?: string): IDialogBuilder;
567
- setSize(size: AXPopupSizeType): IDialogBuilder;
568
- setCloseButton(closeButton: boolean): IDialogBuilder;
569
- setContext(context: any): IDialogBuilder;
570
- content(delegate: (layoutBuilder: IFlexContainerBuilder) => void): IDialogBuilder;
571
- setActions(delegate?: (actions: IActionBuilder) => void): IDialogBuilder;
572
- addCustomAction(action: AXPActionMenuItem): IDialogBuilder;
612
+ interface IDialogBuilder<T = AXPDialogRef> {
613
+ }
614
+ interface IDialogBuilder<T = AXPDialogRef> {
615
+ setOptions(options: AXPDialogContainerOptions): IDialogBuilder<T>;
616
+ setTitle(title: string): IDialogBuilder<T>;
617
+ setMessage(message?: string): IDialogBuilder<T>;
618
+ setSize(size: AXPopupSizeType): IDialogBuilder<T>;
619
+ setCloseButton(closeButton: boolean): IDialogBuilder<T>;
620
+ setContext(context: any): IDialogBuilder<T>;
621
+ content(delegate: (layoutBuilder: IFlexContainerBuilder) => void): IDialogBuilder<T>;
622
+ setActions(delegate?: (actions: IActionBuilder) => void): IDialogBuilder<T>;
623
+ /**
624
+ * Handler invoked when user clicks an action. Receives AXPDialogRef (context, action, setLoading, close).
625
+ * If handler throws, dialog stays open for retry.
626
+ * If handler returns, dialog closes and show() resolves with the return value.
627
+ */
628
+ onAction(handler: (dialogRef: AXPDialogRef) => T | Promise<T>): IDialogBuilder<T>;
629
+ addCustomAction(action: AXPActionMenuItem): IDialogBuilder<T>;
573
630
  build(): AXPWidgetNode;
574
- show(): Promise<AXPDialogRef>;
631
+ show(): Promise<T>;
575
632
  }
576
633
  interface IListWidgetBuilder extends IBaseContainerBuilder<IListWidgetBuilder>, ILayoutContainerBuilder<IListWidgetBuilder>, IChildContainerBuilder<IListWidgetBuilder>, IWidgetContainerBuilder<IListWidgetBuilder> {
577
634
  setOptions(options: AXPListWidgetOptions): IListWidgetBuilder;
@@ -647,6 +704,11 @@ declare class AXPLayoutRendererComponent implements OnInit {
647
704
  */
648
705
  mode: _angular_core.InputSignal<AXPDynamicFormMode>;
649
706
  protected widgetTree: _angular_core.WritableSignal<AXPWidgetNode | null>;
707
+ /**
708
+ * Prefer explicit {@link AXPWidgetNode.mode} on the root node (e.g. dialog flex `mode('view')`)
709
+ * so nested widgets resolve view vs edit correctly; fall back to the layout `mode` input.
710
+ */
711
+ protected effectiveRenderMode: _angular_core.Signal<"view" | "edit" | "column" | "designer" | "print" | "filter">;
650
712
  /**
651
713
  * Convert layout data to widget tree when inputs change
652
714
  */
@@ -673,7 +735,7 @@ declare class AXPLayoutRendererComponent implements OnInit {
673
735
  /**
674
736
  * Handle context change events from widget container (optimized with RxJS)
675
737
  */
676
- protected handleContextChanged(event: AXPWidgetCoreContextChangeEvent): void;
738
+ protected handleContextChanged(event: AXPContextChangeEvent): void;
677
739
  /**
678
740
  * Get the form component instance
679
741
  */
@@ -728,8 +790,40 @@ declare class LayoutBuilderModule {
728
790
  static ɵinj: _angular_core.ɵɵInjectorDeclaration<LayoutBuilderModule>;
729
791
  }
730
792
 
793
+ /**
794
+ * Runs after dialog options and context are prepared and **before** footer customization and popup open.
795
+ * Listeners may mutate {@link AXPLayoutBuilderDialogBeforeOpenPayload.context} by reference.
796
+ */
797
+ declare const AXP_LAYOUT_BUILDER_DIALOG_BEFORE_OPEN_HOOK_KEY = "layout-builder.dialog.before-open";
798
+ interface AXPLayoutBuilderDialogBeforeOpenPayload {
799
+ context: Record<string, unknown>;
800
+ dialogOptions: AXPDialogContainerOptions;
801
+ }
802
+ /**
803
+ * Runs after builder-defined footer actions exist and **before** the dialog opens.
804
+ * Listeners receive the live `actions.footer.prefix` / `suffix` arrays (same references as the dialog)
805
+ * so they may push, splice, filter, or replace items. They may also mutate {@link AXPLayoutBuilderDialogFooterPayload.context} by reference.
806
+ */
807
+ declare const AXP_LAYOUT_BUILDER_DIALOG_CONFIG_HOOK_KEY = "layout-builder.dialog.config";
808
+ /**
809
+ * Runs whenever the dialog layout builder context changes (debounced upstream), **after** the popup is visible.
810
+ * Use for side effects that depend on live context (for example values updated by widgets after render).
811
+ * Payload mirrors `AXPDialogRendererComponent` semantics: {@link AXPLayoutBuilderDialogContextChangedPayload.getContext},
812
+ * {@link AXPLayoutBuilderDialogContextChangedPayload.patchContext}, and optional loading state.
813
+ */
814
+ declare const AXP_LAYOUT_BUILDER_DIALOG_CONTEXT_CHANGED_HOOK_KEY = "layout-builder.dialog.context-changed";
815
+ interface AXPLayoutBuilderDialogContextChangedPayload {
816
+ /** Stable id for this dialog instance; lets listeners correlate repeated emissions or async follow-up work. */
817
+ sessionKey: string;
818
+ getContext: () => Record<string, unknown>;
819
+ metadata: Record<string, unknown> | undefined;
820
+ patchContext: (partial: Record<string, unknown>) => void;
821
+ setLoading: (loading: boolean) => void;
822
+ }
823
+
731
824
  declare class AXPLayoutBuilderService {
732
825
  private popupService;
826
+ private readonly hookService;
733
827
  /**
734
828
  * Create a new layout builder
735
829
  */
@@ -804,18 +898,7 @@ declare class AXPLayoutConversionService {
804
898
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPLayoutConversionService>;
805
899
  }
806
900
 
807
- interface DialogRendererConfig {
808
- title: string;
809
- message?: string;
810
- context: any;
811
- definition: AXPWidgetNode;
812
- actions?: {
813
- footer?: {
814
- prefix?: any[];
815
- suffix?: any[];
816
- };
817
- };
818
- }
901
+ type DialogRendererConfig = AXPLayoutBuilderDialogConfig;
819
902
  interface DialogRendererResult {
820
903
  context: any;
821
904
  action?: string;
@@ -826,35 +909,97 @@ declare class AXPDialogRendererComponent extends AXBasePageComponent implements
826
909
  result: EventEmitter<DialogRendererResult>;
827
910
  private widgetCoreService;
828
911
  private expressionEvaluator;
912
+ private readonly commandService;
913
+ private readonly hookService;
829
914
  private dialogResult?;
915
+ /** Ensures `show()` resolves once when the dialog closes (footer action or header close). */
916
+ private callbackInvoked;
830
917
  context: _angular_core.WritableSignal<any>;
831
- callBack: (dialogRef: AXPDialogRef) => void;
918
+ callBack: (result: unknown) => void;
832
919
  data: any;
833
920
  private isDialogLoading;
834
921
  footerPrefix: _angular_core.WritableSignal<AXPWidgetCoreElementAction[]>;
835
922
  footerSuffix: _angular_core.WritableSignal<AXPWidgetCoreElementAction[]>;
923
+ /**
924
+ * Correlate layout context snapshots for distributed hooks (`layout-builder.dialog.context-changed`).
925
+ */
926
+ private readonly contextChangedHooksSessionKey;
836
927
  ngOnInit(): void;
837
928
  private layoutRenderer;
838
929
  private debounceTimer?;
839
930
  handleContextChanged(event: any): void;
840
931
  handleContextInitiated(event: any): void;
932
+ private invokeLayoutContextChangedHooks;
841
933
  footerPrefixActions(): AXPWidgetCoreElementAction[];
842
934
  footerSuffixActions(): AXPWidgetCoreElementAction[];
843
935
  isFormLoading(): boolean;
844
936
  isSubmitting(): boolean;
845
937
  executeAction(action: AXPWidgetCoreElementAction): Promise<void>;
938
+ /** Whether the layout form should be validated before running this footer command. */
939
+ private shouldValidateBeforeAction;
940
+ /** True when a footer handler or command result asks to leave the dialog open (`keepDialogOpen` on the result or `result.data`). */
941
+ private shouldKeepDialogOpenAfterCommandResult;
942
+ /** Resolves the dialog `show()` promise exactly once. */
943
+ private resolveDialog;
944
+ private createDialogRef;
945
+ private closeWithOptionalSkipValidate;
946
+ /** Resolves footer/widget action command to a string (e.g. `cancel`, `submit`, `widget:...`). */
947
+ private resolveActionCommandName;
846
948
  private parseWidgetCommand;
847
- private executeWidgetApi;
949
+ private invokeWidget;
848
950
  close(result?: DialogRendererResult): Promise<void>;
849
951
  private aggregateAndEvaluateActions;
850
952
  private collectWidgetActions;
851
953
  private collectDialogActionsFromConfig;
852
954
  private evaluatePredicates;
853
955
  private evalBool;
956
+ /** Resolves footer action title when it contains {{ ... }} (e.g. wizard labels from dialog context). */
957
+ private evalActionTitle;
854
958
  private resolveApi;
855
959
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDialogRendererComponent, never>;
856
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDialogRendererComponent, "axp-dialog-renderer", never, { "config": { "alias": "config"; "required": false; }; }, { "result": "result"; }, never, never, true, never>;
960
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDialogRendererComponent, "axp-dialog-renderer", never, {}, { "result": "result"; }, never, never, true, never>;
961
+ }
962
+
963
+ /** Registration key for {@link AXPPreviewWidgetFieldCommand}; lives alone so `LayoutBuilderModule` can reference it without static-importing the command implementation. */
964
+ declare const AXP_PREVIEW_WIDGET_FIELD_COMMAND_KEY = "Widget:Preview";
965
+
966
+ /** See `AXP_PREVIEW_WIDGET_FIELD_COMMAND_KEY` in `preview-widget-field.command.key.ts`. */
967
+ interface AXPPreviewWidgetFieldCommandInput {
968
+ /** Widget node to render (same shape as `widget-field-configurator` model). */
969
+ widget?: AXPWidgetNode;
970
+ /**
971
+ * Alternate property name for the widget node (matches metadata definition `interface` field).
972
+ */
973
+ interface?: AXPWidgetNode | string;
974
+ fieldName?: string;
975
+ fieldTitle?: AXPMultiLanguageString;
976
+ name?: string;
977
+ title?: AXPMultiLanguageString;
978
+ }
979
+ type AXPPreviewWidgetFieldInvocation = AXPPreviewWidgetFieldCommandInput & {
980
+ __context__?: {
981
+ data?: Record<string, unknown>;
982
+ options?: Record<string, unknown>;
983
+ };
984
+ };
985
+ /**
986
+ * Opens a dialog that previews a widget configuration (same behavior as the preview button on
987
+ * `axp-widget-field-configurator`). Invoked from that component and from entity list actions.
988
+ */
989
+ declare class AXPPreviewWidgetFieldCommand implements AXPCommand<AXPPreviewWidgetFieldCommandInput, void> {
990
+ private readonly formBuilderService;
991
+ private readonly widgetRegistry;
992
+ private readonly translationService;
993
+ private readonly crudService;
994
+ execute(input: AXPPreviewWidgetFieldInvocation): Promise<AXPExecuteCommandResult<void>>;
995
+ private mergeInvocation;
996
+ private normalizeWidget;
997
+ private resolveFieldTitleLabel;
998
+ private isCancelDialogOutcome;
999
+ private resolveWidgetDisplayTitle;
1000
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPPreviewWidgetFieldCommand, never>;
1001
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPPreviewWidgetFieldCommand>;
857
1002
  }
858
1003
 
859
- export { AXPDialogRendererComponent, AXPLayoutBuilderService, AXPLayoutConversionService, AXPLayoutRendererComponent, LayoutBuilderModule };
860
- 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 };
1004
+ 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, createDismissedDialogRef };
1005
+ 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 };