@acorex/platform 20.8.9 → 20.8.11

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 (123) hide show
  1. package/fesm2022/acorex-platform-auth.mjs +125 -27
  2. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  3. package/fesm2022/{acorex-platform-common-common-settings.provider-DVvuLUfF.mjs → acorex-platform-common-common-settings.provider-Bi1RYif5.mjs} +30 -32
  4. package/fesm2022/acorex-platform-common-common-settings.provider-Bi1RYif5.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-common.mjs +711 -205
  6. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-core.mjs +420 -127
  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 +634 -114
  12. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  13. package/fesm2022/{acorex-platform-layout-components-binding-expression-editor-popup.component-CSxCnzwU.mjs → acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs} +9 -9
  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 +3365 -880
  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 +18667 -14048
  20. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-layout-views.mjs +413 -171
  22. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  23. package/fesm2022/acorex-platform-layout-widget-core.mjs +507 -441
  24. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  25. package/fesm2022/{acorex-platform-layout-widgets-button-widget-designer.component-CPBzE96V.mjs → acorex-platform-layout-widgets-button-widget-designer.component-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-Dtv6U3df.mjs → acorex-platform-layout-widgets-file-list-popup.component-CDYAGBku.mjs} +21 -76
  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-QxJfswhK.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-CVdssZBD.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-DVaZN9QN.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-DmzNTYiS.mjs} +5 -5
  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-DPGHgXa6.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-BNG_588B.mjs} +4 -4
  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-CdiNW691.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 +6578 -4314
  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-rGsMVAZj.mjs → acorex-platform-themes-default-entity-master-single-view.component-BfCeUU5F.mjs} +16 -23
  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-53VB-PS_.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-DVF9soT5.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 +1784 -61
  60. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  61. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-column.component-TJ9PWHMY.mjs → acorex-platform-themes-shared-icon-chooser-column.component-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-BHcKkIx0.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 +408 -305
  72. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  73. package/fesm2022/acorex-platform-workflow.mjs +359 -100
  74. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  75. package/fesm2022/acorex-platform.mjs.map +1 -1
  76. package/package.json +31 -31
  77. package/{auth/index.d.ts → types/acorex-platform-auth.d.ts} +14 -2
  78. package/{common/index.d.ts → types/acorex-platform-common.d.ts} +302 -30
  79. package/{core/index.d.ts → types/acorex-platform-core.d.ts} +188 -44
  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} +160 -38
  82. package/{layout/components/index.d.ts → types/acorex-platform-layout-components.d.ts} +854 -125
  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} +848 -63
  85. package/{layout/views/index.d.ts → types/acorex-platform-layout-views.d.ts} +80 -47
  86. package/{layout/widget-core/index.d.ts → types/acorex-platform-layout-widget-core.d.ts} +274 -197
  87. package/{layout/widgets/index.d.ts → types/acorex-platform-layout-widgets.d.ts} +608 -122
  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} +113 -4
  91. package/{themes/shared/index.d.ts → types/acorex-platform-themes-shared.d.ts} +5 -4
  92. package/{workflow/index.d.ts → types/acorex-platform-workflow.d.ts} +162 -81
  93. package/fesm2022/acorex-platform-common-common-settings.provider-DVvuLUfF.mjs.map +0 -1
  94. package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CSxCnzwU.mjs.map +0 -1
  95. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-CPBzE96V.mjs.map +0 -1
  96. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-Dtv6U3df.mjs.map +0 -1
  97. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-QxJfswhK.mjs.map +0 -1
  98. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-CVdssZBD.mjs.map +0 -1
  99. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BCxE0RTB.mjs +0 -111
  100. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BCxE0RTB.mjs.map +0 -1
  101. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-DVaZN9QN.mjs.map +0 -1
  102. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-DPGHgXa6.mjs.map +0 -1
  103. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-CdiNW691.mjs.map +0 -1
  104. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-D4hU2SCE.mjs +0 -160
  105. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-D4hU2SCE.mjs.map +0 -1
  106. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-D2CtNrSn.mjs +0 -1716
  107. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-D2CtNrSn.mjs.map +0 -1
  108. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BVTklnzs.mjs +0 -120
  109. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BVTklnzs.mjs.map +0 -1
  110. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-rGsMVAZj.mjs.map +0 -1
  111. package/fesm2022/acorex-platform-themes-default-error-401.component-53VB-PS_.mjs.map +0 -1
  112. package/fesm2022/acorex-platform-themes-default-error-404.component-DVF9soT5.mjs.map +0 -1
  113. package/fesm2022/acorex-platform-themes-default-error-offline.component-CwNNHzZn.mjs +0 -19
  114. package/fesm2022/acorex-platform-themes-default-error-offline.component-CwNNHzZn.mjs.map +0 -1
  115. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-TJ9PWHMY.mjs.map +0 -1
  116. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BHcKkIx0.mjs.map +0 -1
  117. package/fesm2022/acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs.map +0 -1
  118. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-BUPs84MI.mjs +0 -65
  119. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-BUPs84MI.mjs.map +0 -1
  120. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-BotknoHn.mjs +0 -64
  121. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-BotknoHn.mjs.map +0 -1
  122. package/runtime/index.d.ts +0 -307
  123. /package/{index.d.ts → types/acorex-platform.d.ts} +0 -0
@@ -3,12 +3,13 @@ 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
 
13
14
  /**
14
15
  * Extended widget node properties (excluding type, path, name, options, children)
@@ -29,9 +30,9 @@ type AXPDynamicFormMode = 'view' | 'edit';
29
30
  type AXPDynamicFormDirection = 'vertical' | 'horizontal' | 'grid';
30
31
  interface AXPDynamicFormFieldDefinition {
31
32
  path: string;
32
- title?: string;
33
+ title?: AXPMultiLanguageString;
33
34
  badge?: string;
34
- description?: string;
35
+ description?: AXPMultiLanguageString;
35
36
  widget: AXPWidgetNode;
36
37
  /**
37
38
  * Optional per-field rendering mode. Takes precedence over section and form modes.
@@ -41,8 +42,8 @@ interface AXPDynamicFormFieldDefinition {
41
42
  }
42
43
  interface AXPDynamicFormGroupDefinition {
43
44
  name: string;
44
- title?: string;
45
- description?: string;
45
+ title?: AXPMultiLanguageString;
46
+ description?: AXPMultiLanguageString;
46
47
  parameters: AXPDynamicFormFieldDefinition[];
47
48
  /**
48
49
  * Optional per-section rendering mode. Takes precedence over form mode and is overridden by field mode.
@@ -64,7 +65,7 @@ interface AXPDialogRef {
64
65
  /**
65
66
  * Manually close the dialog (optional - dialog closes automatically after user interaction)
66
67
  */
67
- close(): void;
68
+ close(result?: any): void;
68
69
  /**
69
70
  * Get the form data from the dialog
70
71
  */
@@ -77,6 +78,17 @@ interface AXPDialogRef {
77
78
  * Set the loading state of the dialog
78
79
  */
79
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>;
80
92
  }
81
93
  interface LayoutWidgetOptions {
82
94
  name?: string;
@@ -87,7 +99,7 @@ interface ValueWidgetOptions extends LayoutWidgetOptions {
87
99
  validations?: AXPValidationRules;
88
100
  }
89
101
  interface TextBoxOptions extends ValueWidgetOptions {
90
- placeholder?: string;
102
+ placeholder?: AXPMultiLanguageString;
91
103
  maxLength?: number;
92
104
  minLength?: number;
93
105
  prefix?: string;
@@ -98,14 +110,14 @@ interface NumberBoxOptions extends ValueWidgetOptions {
98
110
  min?: number;
99
111
  max?: number;
100
112
  step?: number;
101
- placeholder?: string;
113
+ placeholder?: AXPMultiLanguageString;
102
114
  format?: string;
103
115
  }
104
116
  interface SelectBoxOptions extends ValueWidgetOptions {
105
117
  dataSource: any[] | (() => any[]) | (() => Promise<any[]>) | AXDataSource<any>;
106
118
  valueField?: string;
107
119
  textField?: string;
108
- placeholder?: string;
120
+ placeholder?: AXPMultiLanguageString;
109
121
  multiple?: boolean;
110
122
  searchable?: boolean;
111
123
  clearButton?: boolean;
@@ -116,7 +128,7 @@ interface DateTimeBoxOptions extends ValueWidgetOptions {
116
128
  format?: string;
117
129
  min?: Date | string;
118
130
  max?: Date | string;
119
- placeholder?: string;
131
+ placeholder?: AXPMultiLanguageString;
120
132
  clearButton?: boolean;
121
133
  }
122
134
  interface ToggleSwitchOptions extends ValueWidgetOptions {
@@ -128,7 +140,7 @@ interface LargeTextBoxOptions extends ValueWidgetOptions {
128
140
  rows?: number;
129
141
  maxLength?: number;
130
142
  minLength?: number;
131
- placeholder?: string;
143
+ placeholder?: AXPMultiLanguageString;
132
144
  resizable?: boolean;
133
145
  }
134
146
  interface ColorBoxOptions extends ValueWidgetOptions {
@@ -227,12 +239,18 @@ interface AXPFieldsetContainerOptions extends LayoutWidgetOptions {
227
239
  isOpen?: boolean;
228
240
  look?: 'fieldset' | 'card' | 'group' | 'container';
229
241
  disabled?: boolean;
242
+ showTitle?: boolean;
230
243
  showHeader?: boolean;
231
244
  cols?: number;
232
245
  }
246
+ /** How optional `hint` text is rendered in `form-field` layout widgets. */
247
+ type AXPFormFieldHintDisplayMode = 'icon' | 'note';
233
248
  interface AXPFormFieldOptions extends LayoutWidgetOptions {
234
249
  label?: string;
235
250
  showLabel?: boolean;
251
+ /** Translated/helper copy; pairing with {@link hintDisplayMode}. */
252
+ hint?: AXPMultiLanguageString;
253
+ hintDisplayMode?: AXPFormFieldHintDisplayMode;
236
254
  }
237
255
  interface AXPDialogContainerOptions extends LayoutWidgetOptions {
238
256
  title?: string;
@@ -240,14 +258,35 @@ interface AXPDialogContainerOptions extends LayoutWidgetOptions {
240
258
  size?: AXPopupSizeType;
241
259
  closeButton?: boolean;
242
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>;
243
278
  }
244
279
  interface RichTextOptions extends ValueWidgetOptions {
245
- placeholder?: string;
280
+ placeholder?: AXPMultiLanguageString;
246
281
  toolbar?: string[];
247
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;
248
287
  }
249
288
  interface PasswordBoxOptions extends ValueWidgetOptions {
250
- placeholder?: string;
289
+ placeholder?: AXPMultiLanguageString;
251
290
  revealToggle?: boolean;
252
291
  maxLength?: number;
253
292
  }
@@ -269,7 +308,7 @@ interface SelectionListOptions extends ValueWidgetOptions {
269
308
  textField?: string;
270
309
  multiple?: boolean;
271
310
  searchable?: boolean;
272
- placeholder?: string;
311
+ placeholder?: AXPMultiLanguageString;
273
312
  }
274
313
  interface AXPListWidgetColumn {
275
314
  name: string;
@@ -408,7 +447,9 @@ type DialogBuilderState = AXPWidgetNode & {
408
447
  interface IActionBuilder {
409
448
  cancel(text?: string): IActionBuilder;
410
449
  submit(text?: string): IActionBuilder;
411
- custom(action: AXPActionMenuItem): IActionBuilder;
450
+ custom(action: AXPActionMenuItem & {
451
+ position?: 'prefix' | 'suffix';
452
+ }): IActionBuilder;
412
453
  }
413
454
  interface ILayoutBuilder {
414
455
  grid(delegate: (container: IGridContainerBuilder) => void): ILayoutBuilder;
@@ -508,6 +549,8 @@ interface IGridContainerBuilder extends IBaseContainerBuilder<IGridContainerBuil
508
549
  setBackgroundColor(color: string): IGridContainerBuilder;
509
550
  setPadding(padding: string): IGridContainerBuilder;
510
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;
511
554
  }
512
555
  interface IPanelContainerBuilder extends IBaseContainerBuilder<IPanelContainerBuilder>, ILayoutContainerBuilder<IPanelContainerBuilder>, IChildContainerBuilder<IPanelContainerBuilder>, IWidgetContainerBuilder<IPanelContainerBuilder> {
513
556
  setOptions(options: AXPPanelContainerOptions): IPanelContainerBuilder;
@@ -659,6 +702,11 @@ declare class AXPLayoutRendererComponent implements OnInit {
659
702
  */
660
703
  mode: _angular_core.InputSignal<AXPDynamicFormMode>;
661
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">;
662
710
  /**
663
711
  * Convert layout data to widget tree when inputs change
664
712
  */
@@ -685,7 +733,7 @@ declare class AXPLayoutRendererComponent implements OnInit {
685
733
  /**
686
734
  * Handle context change events from widget container (optimized with RxJS)
687
735
  */
688
- protected handleContextChanged(event: AXPWidgetCoreContextChangeEvent): void;
736
+ protected handleContextChanged(event: AXPContextChangeEvent): void;
689
737
  /**
690
738
  * Get the form component instance
691
739
  */
@@ -740,8 +788,40 @@ declare class LayoutBuilderModule {
740
788
  static ɵinj: _angular_core.ɵɵInjectorDeclaration<LayoutBuilderModule>;
741
789
  }
742
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
+
743
822
  declare class AXPLayoutBuilderService {
744
823
  private popupService;
824
+ private readonly hookService;
745
825
  /**
746
826
  * Create a new layout builder
747
827
  */
@@ -816,23 +896,7 @@ declare class AXPLayoutConversionService {
816
896
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPLayoutConversionService>;
817
897
  }
818
898
 
819
- interface DialogRendererConfig {
820
- title: string;
821
- message?: string;
822
- context: any;
823
- definition: AXPWidgetNode;
824
- actions?: {
825
- footer?: {
826
- prefix?: any[];
827
- suffix?: any[];
828
- };
829
- };
830
- /**
831
- * When present, handler is called on action click with AXPDialogRef.
832
- * Throw = stay open for retry. Return = close and resolve show() with return value.
833
- */
834
- onAction?: (dialogRef: AXPDialogRef) => any | Promise<any>;
835
- }
899
+ type DialogRendererConfig = AXPLayoutBuilderDialogConfig;
836
900
  interface DialogRendererResult {
837
901
  context: any;
838
902
  action?: string;
@@ -843,35 +907,93 @@ declare class AXPDialogRendererComponent extends AXBasePageComponent implements
843
907
  result: EventEmitter<DialogRendererResult>;
844
908
  private widgetCoreService;
845
909
  private expressionEvaluator;
910
+ private readonly commandService;
911
+ private readonly hookService;
846
912
  private dialogResult?;
847
913
  context: _angular_core.WritableSignal<any>;
848
- callBack: (dialogRef: AXPDialogRef) => void;
914
+ callBack: (result: unknown) => void;
849
915
  data: any;
850
916
  private isDialogLoading;
851
917
  footerPrefix: _angular_core.WritableSignal<AXPWidgetCoreElementAction[]>;
852
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;
853
923
  ngOnInit(): void;
854
924
  private layoutRenderer;
855
925
  private debounceTimer?;
856
926
  handleContextChanged(event: any): void;
857
927
  handleContextInitiated(event: any): void;
928
+ private invokeLayoutContextChangedHooks;
858
929
  footerPrefixActions(): AXPWidgetCoreElementAction[];
859
930
  footerSuffixActions(): AXPWidgetCoreElementAction[];
860
931
  isFormLoading(): boolean;
861
932
  isSubmitting(): boolean;
862
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;
863
942
  private parseWidgetCommand;
864
- private executeWidgetApi;
943
+ private invokeWidget;
865
944
  close(result?: DialogRendererResult): Promise<void>;
866
945
  private aggregateAndEvaluateActions;
867
946
  private collectWidgetActions;
868
947
  private collectDialogActionsFromConfig;
869
948
  private evaluatePredicates;
870
949
  private evalBool;
950
+ /** Resolves footer action title when it contains {{ ... }} (e.g. wizard labels from dialog context). */
951
+ private evalActionTitle;
871
952
  private resolveApi;
872
953
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDialogRendererComponent, never>;
873
954
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDialogRendererComponent, "axp-dialog-renderer", never, {}, { "result": "result"; }, never, never, true, never>;
874
955
  }
875
956
 
876
- export { AXPDialogRendererComponent, AXPLayoutBuilderService, AXPLayoutConversionService, AXPLayoutRendererComponent, LayoutBuilderModule };
877
- 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, 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 };
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>;
996
+ }
997
+
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 };